From 8cb5781770529999862220aae14a8b2a9410d0c3 Mon Sep 17 00:00:00 2001 From: Ainar Garipov Date: Mon, 30 Sep 2024 20:17:20 +0300 Subject: [PATCH] all: resync with master --- .github/workflows/build.yml | 2 +- .github/workflows/lint.yml | 2 +- CHANGELOG.md | 31 + Makefile | 48 +- README.md | 2 +- bamboo-specs/release.yaml | 16 +- bamboo-specs/test.yaml | 5 +- client/src/__locales/ar.json | 6 +- client/src/__locales/bg.json | 11 +- client/src/__locales/cs.json | 2 +- client/src/__locales/da.json | 2 +- client/src/__locales/de.json | 4 +- client/src/__locales/en.json | 2 +- client/src/__locales/es.json | 2 +- client/src/__locales/fi.json | 10 +- client/src/__locales/fr.json | 4 +- client/src/__locales/id.json | 16 +- client/src/__locales/it.json | 2 +- client/src/__locales/ja.json | 2 +- client/src/__locales/ko.json | 4 +- client/src/__locales/nl.json | 2 +- client/src/__locales/no.json | 1 + client/src/__locales/pl.json | 4 +- client/src/__locales/pt-br.json | 2 +- client/src/__locales/pt-pt.json | 2 +- client/src/__locales/ru.json | 2 +- client/src/__locales/sk.json | 4 +- client/src/__locales/th.json | 8 +- client/src/__locales/tr.json | 8 +- client/src/__locales/vi.json | 13 +- client/src/__locales/zh-cn.json | 2 +- client/src/__locales/zh-tw.json | 2 +- client/src/helpers/filters/filters.ts | 6 + .../src/helpers/renderFormattedClientCell.tsx | 2 +- client/src/helpers/trackers/trackers.json | 50529 ++++++++-------- go.mod | 29 +- go.sum | 48 +- internal/aghalg/ringbuffer.go | 94 - internal/aghalg/ringbuffer_test.go | 169 - internal/aghhttp/aghhttp.go | 30 + internal/aghnet/net_freebsd.go | 12 +- internal/aghnet/net_openbsd.go | 10 +- internal/aghos/syslog.go | 2 +- internal/aghos/syslog_others.go | 6 +- internal/aghos/syslog_windows.go | 21 +- internal/aghtls/aghtls.go | 15 +- internal/arpdb/arpdb.go | 50 +- internal/arpdb/arpdb_bsd.go | 31 +- internal/arpdb/arpdb_internal_test.go | 8 +- internal/arpdb/arpdb_linux.go | 82 +- internal/arpdb/arpdb_linux_internal_test.go | 15 +- internal/arpdb/arpdb_openbsd.go | 31 +- internal/arpdb/arpdb_windows.go | 28 +- internal/client/addrproc.go | 26 +- internal/client/addrproc_test.go | 3 + internal/client/client.go | 26 +- internal/client/persistent.go | 7 +- internal/client/persistent_internal_test.go | 69 - internal/client/runtimeindex.go | 55 +- internal/client/runtimeindex_test.go | 85 - internal/client/storage.go | 434 +- internal/client/storage_test.go | 693 +- internal/dhcpsvc/config.go | 10 +- internal/dhcpsvc/config_test.go | 9 + internal/dhcpsvc/db.go | 195 + internal/dhcpsvc/db_internal_test.go | 4 + internal/dhcpsvc/dhcpsvc.go | 2 +- internal/dhcpsvc/dhcpsvc_test.go | 66 + internal/dhcpsvc/interface.go | 68 +- internal/dhcpsvc/lease.go | 6 - internal/dhcpsvc/leaseindex.go | 17 +- internal/dhcpsvc/server.go | 144 +- internal/dhcpsvc/server_test.go | 389 +- .../TestDHCPServer_RemoveLease/leases.json | 19 + .../testdata/TestDHCPServer_Reset/leases.json | 33 + .../leases.json | 26 + .../testdata/TestDHCPServer_index/leases.json | 33 + .../testdata/TestServer_Leases/leases.json | 15 + internal/dhcpsvc/v4.go | 37 +- internal/dhcpsvc/v6.go | 40 +- internal/dnsforward/clientid_test.go | 4 +- internal/dnsforward/config.go | 22 +- internal/dnsforward/dialcontext.go | 3 +- internal/dnsforward/dnsforward.go | 27 +- internal/dnsforward/dnsforward_test.go | 29 +- internal/dnsforward/filter_test.go | 3 + internal/dnsforward/http_test.go | 2 +- internal/dnsforward/ipset.go | 87 +- internal/dnsforward/ipset_internal_test.go | 17 +- internal/dnsforward/msg.go | 96 +- internal/dnsforward/process.go | 2 +- internal/dnsforward/process_internal_test.go | 3 + internal/dnsforward/stats_test.go | 2 + internal/dnsforward/upstreams.go | 6 +- internal/filtering/hashprefix/cache.go | 5 - internal/filtering/hashprefix/hashprefix.go | 1 - internal/filtering/safesearch.go | 1 + internal/filtering/safesearch/rules.go | 4 + internal/filtering/safesearch/rules/bing.txt | 1 + .../filtering/safesearch/rules/ecosia.txt | 1 + .../filtering/safesearch/rules/google.txt | 3 + internal/filtering/safesearch/safesearch.go | 3 + .../safesearch/safesearch_internal_test.go | 1 + .../filtering/safesearch/safesearch_test.go | 1 + internal/filtering/servicelist.go | 19 + internal/home/authglinet.go | 1 + internal/home/clients.go | 390 +- internal/home/clients_internal_test.go | 327 +- internal/home/clientshttp.go | 22 +- internal/home/clientstags.go | 27 - internal/home/config.go | 1 + internal/home/controlinstall.go | 2 +- internal/home/dns.go | 37 +- internal/home/dns_internal_test.go | 5 +- internal/home/home.go | 47 +- internal/home/log.go | 21 +- internal/home/middlewares.go | 23 +- internal/home/middlewares_test.go | 10 +- internal/home/web.go | 16 +- internal/ipset/ipset.go | 35 +- internal/ipset/ipset_linux.go | 55 +- internal/ipset/ipset_linux_internal_test.go | 18 +- internal/ipset/ipset_others.go | 4 +- internal/next/websvc/websvc.go | 4 +- internal/querylog/qlog.go | 6 +- internal/querylog/querylog.go | 4 +- internal/rdns/rdns.go | 41 +- internal/rdns/rdns_test.go | 15 +- internal/stats/http.go | 46 +- internal/stats/http_test.go | 2 + internal/stats/stats.go | 106 +- internal/stats/stats_internal_test.go | 4 + internal/stats/stats_test.go | 8 +- internal/stats/unit.go | 13 +- internal/tools/doc.go | 5 - internal/tools/go.mod | 60 +- internal/tools/go.sum | 236 +- internal/tools/tools.go | 4 + internal/whois/whois.go | 62 +- internal/whois/whois_test.go | 2 + openapi/CHANGELOG.md | 8 + openapi/openapi.yaml | 2 + scripts/blocked-services/main.go | 11 +- scripts/hooks/pre-commit | 26 +- scripts/make/build-release.sh | 63 +- scripts/make/go-build.sh | 3 +- scripts/make/go-lint.sh | 26 +- scripts/make/go-tools.sh | 4 +- scripts/make/go-upd-tools.sh | 5 +- scripts/make/md-lint.sh | 23 + scripts/make/sh-lint.sh | 39 + scripts/translations/download.go | 44 +- scripts/translations/main.go | 19 +- 153 files changed, 28633 insertions(+), 27594 deletions(-) delete mode 100644 internal/aghalg/ringbuffer.go delete mode 100644 internal/aghalg/ringbuffer_test.go delete mode 100644 internal/client/runtimeindex_test.go create mode 100644 internal/dhcpsvc/db.go create mode 100644 internal/dhcpsvc/db_internal_test.go create mode 100644 internal/dhcpsvc/dhcpsvc_test.go create mode 100644 internal/dhcpsvc/testdata/TestDHCPServer_RemoveLease/leases.json create mode 100644 internal/dhcpsvc/testdata/TestDHCPServer_Reset/leases.json create mode 100644 internal/dhcpsvc/testdata/TestDHCPServer_UpdateStaticLease/leases.json create mode 100644 internal/dhcpsvc/testdata/TestDHCPServer_index/leases.json create mode 100644 internal/dhcpsvc/testdata/TestServer_Leases/leases.json create mode 100644 internal/filtering/safesearch/rules/ecosia.txt delete mode 100644 internal/home/clientstags.go delete mode 100644 internal/tools/doc.go create mode 100644 scripts/make/md-lint.sh create mode 100644 scripts/make/sh-lint.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5320febf..f36a61ec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,7 +1,7 @@ 'name': 'build' 'env': - 'GO_VERSION': '1.22.5' + 'GO_VERSION': '1.23.1' 'NODE_VERSION': '16' 'on': diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1426768a..f5e99131 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,7 +1,7 @@ 'name': 'lint' 'env': - 'GO_VERSION': '1.22.5' + 'GO_VERSION': '1.23.1' 'on': 'push': diff --git a/CHANGELOG.md b/CHANGELOG.md index c248ddd0..7a01a9b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,37 @@ See also the [v0.107.53 GitHub milestone][ms-v0.107.53]. NOTE: Add new changes BELOW THIS COMMENT. --> +### Security + +- Go version has been updated to prevent the possibility of exploiting the Go + vulnerabilities fixed in [1.23.1][go-1.23.1]. + +### Added + +- Support for 64-bit RISC-V architecture ([#5704]). +- Ecosia search engine is now supported in safe search ([#5009]). + +### Changed + +- Upstream server URL domain names requirements has been relaxed and now follow + the same rules as their domain specifications. + +### Fixed + +- Property `clients.runtime_sources.dhcp` in the configuration file not taking + effect. +- Update Google safe search domains list ([#7155]). +- Enforce Bing safe search from Edge sidebar ([#7154]). +- Text overflow on the query log page ([#7119]). + +[#5009]: https://github.com/AdguardTeam/AdGuardHome/issues/5009 +[#5704]: https://github.com/AdguardTeam/AdGuardHome/issues/5704 +[#7119]: https://github.com/AdguardTeam/AdGuardHome/issues/7119 +[#7154]: https://github.com/AdguardTeam/AdGuardHome/pull/7154 +[#7155]: https://github.com/AdguardTeam/AdGuardHome/pull/7155 + +[go-1.23.1]: https://groups.google.com/g/golang-announce/c/K-cEzDeCtpc + diff --git a/Makefile b/Makefile index 142ebe86..6501e375 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ # Makefile. Bump this number every time a significant change is made to # this Makefile. # -# AdGuard-Project-Version: 4 +# AdGuard-Project-Version: 6 # Don't name these macros "GO" etc., because GNU Make apparently makes # them exported environment variables with the literal value of @@ -23,11 +23,13 @@ VERBOSE.MACRO = $${VERBOSE:-0} CHANNEL = development CLIENT_DIR = client COMMIT = $$( git rev-parse --short HEAD ) +DEPLOY_SCRIPT_PATH = not/a/real/path DIST_DIR = dist GOAMD64 = v1 -GOPROXY = https://goproxy.cn|https://proxy.golang.org|direct +GOPROXY = https://proxy.golang.org|direct GOSUMDB = sum.golang.google.cn -GOTOOLCHAIN = go1.22.5 +GOTOOLCHAIN = go1.23.1 +GOTELEMETRY = off GPG_KEY = devteam@adguard.com GPG_KEY_PASSPHRASE = not-a-real-password NPM = npm @@ -36,6 +38,7 @@ NPM_INSTALL_FLAGS = $(NPM_FLAGS) --quiet --no-progress --ignore-engines\ --ignore-optional --ignore-platform --ignore-scripts RACE = 0 SIGN = 1 +SIGNER_API_KEY = not-a-real-key VERSION = v0.0.0 YARN = yarn @@ -59,20 +62,28 @@ BUILD_RELEASE_DEPS_1 = go-deps ENV = env\ CHANNEL='$(CHANNEL)'\ COMMIT='$(COMMIT)'\ + DEPLOY_SCRIPT_PATH='$(DEPLOY_SCRIPT_PATH)' \ DIST_DIR='$(DIST_DIR)'\ GO="$(GO.MACRO)"\ - GOAMD64="$(GOAMD64)"\ + GOAMD64='$(GOAMD64)'\ GOPROXY='$(GOPROXY)'\ GOSUMDB='$(GOSUMDB)'\ + GOTELEMETRY='$(GOTELEMETRY)'\ GOTOOLCHAIN='$(GOTOOLCHAIN)'\ GPG_KEY='$(GPG_KEY)'\ GPG_KEY_PASSPHRASE='$(GPG_KEY_PASSPHRASE)'\ PATH="$${PWD}/bin:$$( "$(GO.MACRO)" env GOPATH )/bin:$${PATH}"\ RACE='$(RACE)'\ SIGN='$(SIGN)'\ + SIGNER_API_KEY='$(SIGNER_API_KEY)' \ NEXTAPI='$(NEXTAPI)'\ VERBOSE="$(VERBOSE.MACRO)"\ - VERSION='$(VERSION)'\ + VERSION="$(VERSION)"\ + +# Keep the line above blank. + +ENV_MISC = env\ + VERBOSE="$(VERBOSE.MACRO)"\ # Keep the line above blank. @@ -101,23 +112,22 @@ js-deps: ; $(NPM) $(NPM_INSTALL_FLAGS) ci js-lint: ; $(NPM) $(NPM_FLAGS) run lint js-test: ; $(NPM) $(NPM_FLAGS) run test -go-bench: ; $(ENV) "$(SHELL)" ./scripts/make/go-bench.sh -go-build: ; $(ENV) "$(SHELL)" ./scripts/make/go-build.sh -go-deps: ; $(ENV) "$(SHELL)" ./scripts/make/go-deps.sh -go-fuzz: ; $(ENV) "$(SHELL)" ./scripts/make/go-fuzz.sh -go-lint: ; $(ENV) "$(SHELL)" ./scripts/make/go-lint.sh -go-tools: ; $(ENV) "$(SHELL)" ./scripts/make/go-tools.sh - +go-bench: ; $(ENV) "$(SHELL)" ./scripts/make/go-bench.sh +go-build: ; $(ENV) "$(SHELL)" ./scripts/make/go-build.sh +go-deps: ; $(ENV) "$(SHELL)" ./scripts/make/go-deps.sh +go-env: ; $(ENV) "$(GO.MACRO)" env +go-fuzz: ; $(ENV) "$(SHELL)" ./scripts/make/go-fuzz.sh +go-lint: ; $(ENV) "$(SHELL)" ./scripts/make/go-lint.sh # TODO(a.garipov): Think about making RACE='1' the default for all # targets. -go-test: ; $(ENV) RACE='1' "$(SHELL)" ./scripts/make/go-test.sh - -go-upd-tools: ; $(ENV) "$(SHELL)" ./scripts/make/go-upd-tools.sh +go-test: ; $(ENV) RACE='1' "$(SHELL)" ./scripts/make/go-test.sh +go-tools: ; $(ENV) "$(SHELL)" ./scripts/make/go-tools.sh +go-upd-tools: ; $(ENV) "$(SHELL)" ./scripts/make/go-upd-tools.sh go-check: go-tools go-lint go-test -# A quick check to make sure that all supported operating systems can be -# typechecked and built successfully. +# A quick check to make sure that all operating systems relevant to the +# development of the project can be typechecked and built successfully. go-os-check: env GOOS='darwin' "$(GO.MACRO)" vet ./internal/... env GOOS='freebsd' "$(GO.MACRO)" vet ./internal/... @@ -125,7 +135,11 @@ go-os-check: env GOOS='linux' "$(GO.MACRO)" vet ./internal/... env GOOS='windows' "$(GO.MACRO)" vet ./internal/... + openapi-lint: ; cd ./openapi/ && $(YARN) test openapi-show: ; cd ./openapi/ && $(YARN) start txt-lint: ; $(ENV) "$(SHELL)" ./scripts/make/txt-lint.sh + +md-lint: ; $(ENV_MISC) "$(SHELL)" ./scripts/make/md-lint.sh +sh-lint: ; $(ENV_MISC) "$(SHELL)" ./scripts/make/sh-lint.sh diff --git a/README.md b/README.md index ce200d1a..e8dd4c68 100644 --- a/README.md +++ b/README.md @@ -205,7 +205,7 @@ Run `make init` to prepare the development environment. You will need this to build AdGuard Home: -- [Go](https://golang.org/dl/) v1.22 or later; +- [Go](https://golang.org/dl/) v1.23 or later; - [Node.js](https://nodejs.org/en/download/) v18.18 or later; - [npm](https://www.npmjs.com/) v8 or later; diff --git a/bamboo-specs/release.yaml b/bamboo-specs/release.yaml index 086c1d2d..5ace2365 100644 --- a/bamboo-specs/release.yaml +++ b/bamboo-specs/release.yaml @@ -8,7 +8,7 @@ 'variables': 'channel': 'edge' 'dockerFrontend': 'adguard/home-js-builder:2.0' - 'dockerGo': 'adguard/go-builder:1.22.5--1' + 'dockerGo': 'adguard/go-builder:1.23.1--1' 'stages': - 'Build frontend': @@ -91,6 +91,11 @@ 'tasks': - 'checkout': 'force-clean-build': true + - 'checkout': + 'repository': 'bamboo-deploy-publisher' + # The paths are always relative to the working directory. + 'path': 'bamboo-deploy-publisher' + 'force-clean-build': true - 'script': 'interpreter': 'SHELL' 'scripts': @@ -99,6 +104,9 @@ set -e -f -u -x + # Explicitly checkout the revision that we need. + git checkout "${bamboo.repository.revision.number}" + # Run the build with the specified channel. echo "${bamboo.gpgSecretKeyPart1}${bamboo.gpgSecretKeyPart2}"\ | awk '{ gsub(/\\n/, "\n"); print; }'\ @@ -107,6 +115,8 @@ make\ CHANNEL=${bamboo.channel}\ GPG_KEY_PASSPHRASE=${bamboo.gpgPassword}\ + DEPLOY_SCRIPT_PATH="./bamboo-deploy-publisher/deploy.sh"\ + SIGNER_API_KEY="${bamboo.adguardHomeWinSignerSecretApiKey}"\ FRONTEND_PREBUILT=1\ PARALLELISM=1\ VERBOSE=2\ @@ -266,7 +276,7 @@ 'variables': 'channel': 'beta' 'dockerFrontend': 'adguard/home-js-builder:2.0' - 'dockerGo': 'adguard/go-builder:1.22.5--1' + 'dockerGo': 'adguard/go-builder:1.23.1--1' # release-vX.Y.Z branches are the branches from which the actual final # release is built. - '^release-v[0-9]+\.[0-9]+\.[0-9]+': @@ -282,4 +292,4 @@ 'variables': 'channel': 'release' 'dockerFrontend': 'adguard/home-js-builder:2.0' - 'dockerGo': 'adguard/go-builder:1.22.5--1' + 'dockerGo': 'adguard/go-builder:1.23.1--1' diff --git a/bamboo-specs/test.yaml b/bamboo-specs/test.yaml index d353ba55..29a8bae5 100644 --- a/bamboo-specs/test.yaml +++ b/bamboo-specs/test.yaml @@ -6,7 +6,7 @@ 'name': 'AdGuard Home - Build and run tests' 'variables': 'dockerFrontend': 'adguard/home-js-builder:2.0' - 'dockerGo': 'adguard/go-builder:1.22.5--1' + 'dockerGo': 'adguard/go-builder:1.23.1--1' 'channel': 'development' 'stages': @@ -54,6 +54,7 @@ 'requirements': - 'adg-docker': 'true' +# TODO(e.burkov): Add the linting stage for markdown docs and shell scripts. 'Test backend': 'docker': 'image': '${bamboo.dockerGo}' @@ -195,5 +196,5 @@ # may need to build a few of these. 'variables': 'dockerFrontend': 'adguard/home-js-builder:2.0' - 'dockerGo': 'adguard/go-builder:1.22.5--1' + 'dockerGo': 'adguard/go-builder:1.23.1--1' 'channel': 'candidate' diff --git a/client/src/__locales/ar.json b/client/src/__locales/ar.json index 9b89d89e..186fc5ce 100644 --- a/client/src/__locales/ar.json +++ b/client/src/__locales/ar.json @@ -291,7 +291,7 @@ "custom_ip": "عنوان IP مخصص", "blocking_ipv4": "حجب عنوان IPv4", "blocking_ipv6": "حجب عنوان IPv6", - "blocked_response_ttl": "زمن حظر الاستجابة", + "blocked_response_ttl": "حظر استجابة TTL", "blocked_response_ttl_desc": "تحديد عدد الثواني التي يجب على العملاء تخزين الاستجابة التي تمت تصفيتها مؤقتًا", "form_enter_blocked_response_ttl": "أدخل وقت الاستجابة المحظورة TTL (بالثواني)", "dnscrypt": "DNSCrypt", @@ -734,10 +734,10 @@ "thursday": "الخميس", "friday": "الجمعة", "saturday": "السبت", - "sunday_short": "الاحد", + "sunday_short": "الأحد", "monday_short": "الإثنين", "tuesday_short": "الثلاثاء", - "wednesday_short": "الاربعاء", + "wednesday_short": "الأربعاء", "thursday_short": "الخميس", "friday_short": "الجمعة", "saturday_short": "السبت", diff --git a/client/src/__locales/bg.json b/client/src/__locales/bg.json index 50bd1680..7855fc48 100644 --- a/client/src/__locales/bg.json +++ b/client/src/__locales/bg.json @@ -159,6 +159,8 @@ "dns_over_https": "DNS-пред-HTTPS", "dns_over_quic": "DNS-over-QUIC", "plain_dns": "Обикновен DNS", + "theme_light": "Светла тема", + "theme_dark": "Тъмна тема", "source_label": "Източник", "found_in_known_domain_db": "Намерен в списъците с домейни.", "category_label": "Категория", @@ -283,5 +285,12 @@ "filter_category_general": "General", "filter_category_security": "Сигурност", "port_53_faq_link": "Порт 53 често е зает от \"DNSStubListener\" или \"systemd-resolved\" услуги. Моля, прочетете <0>тази инструкция как да решите това.", - "parental_control": "Родителски контрол" + "parental_control": "Родителски контрол", + "sunday_short": "Нд", + "monday_short": "Пон", + "tuesday_short": "Вт", + "wednesday_short": "Ср", + "thursday_short": "Чт", + "friday_short": "Пт", + "saturday_short": "Съб" } diff --git a/client/src/__locales/cs.json b/client/src/__locales/cs.json index aae4dd9b..f446986f 100644 --- a/client/src/__locales/cs.json +++ b/client/src/__locales/cs.json @@ -154,7 +154,7 @@ "use_adguard_parental": "Použít službu AdGuard Rodičovská kontrola", "use_adguard_parental_hint": "AdGuard Home zkontroluje, zda doména obsahuje materiály pro dospělé. Používá stejné API přátelské k ochraně osobních údajů jako služba Bezpečnost prohlížení.", "enforce_safe_search": "Použít bezpečné vyhledávání", - "enforce_save_search_hint": "AdGuard Home vynutí bezpečné vyhledávání v následujících vyhledávačích: Google, YouTube, Bing, DuckDuckGo, Yandex, Pixabay.", + "enforce_save_search_hint": "AdGuard Home vynutí bezpečné vyhledávání v následujících vyhledávačích: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Nebyly specifikovány žádné servery", "general_settings": "Obecná nastavení", "dns_settings": "Nastavení DNS", diff --git a/client/src/__locales/da.json b/client/src/__locales/da.json index feb03ac1..aa1a94d7 100644 --- a/client/src/__locales/da.json +++ b/client/src/__locales/da.json @@ -154,7 +154,7 @@ "use_adguard_parental": "Brug AdGuards forældrekontrolwebtjeneste", "use_adguard_parental_hint": "AdGuard Home vil tjekke, om domænet indeholder voksenindhold vha. den samme fortrolighedsvenlige API som browsingsikkerhedswebtjenesten.", "enforce_safe_search": "Brug sikker søgning", - "enforce_save_search_hint": "AdGuard Home vil håndhæve sikker søgning i flg. søgemaskiner: Google, YouTube, Bing, DuckDuckGo, Yandex og Pixabay.", + "enforce_save_search_hint": "AdGuard Home vil håndhæve sikker søgning i flg. søgemaskiner: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Ingen servere angivet", "general_settings": "Generelle indstillinger", "dns_settings": "DNS-indstillinger", diff --git a/client/src/__locales/de.json b/client/src/__locales/de.json index f6979608..5c211270 100644 --- a/client/src/__locales/de.json +++ b/client/src/__locales/de.json @@ -154,7 +154,7 @@ "use_adguard_parental": "AdGuard Webservice für Kindersicherung verwenden", "use_adguard_parental_hint": "AdGuard Home wird prüfen, ob die Domain jugendgefährdende Inhalte enthält. Zum Schutz Ihrer Privatsphäre wird die selbe API wie für den Webservice für Internetsicherheit verwendet.", "enforce_safe_search": "Sichere Suche verwenden", - "enforce_save_search_hint": "AdGuard kann Sichere Suche für folgende Suchmaschinen erzwingen: Google, YouTube, Bing, DuckDuckGo, Yandex und Pixabay.", + "enforce_save_search_hint": "AdGuard kann Sichere Suche für folgende Suchmaschinen erzwingen: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex und Pixabay.", "no_servers_specified": "Keine Server festgelegt", "general_settings": "Allgemeine Einstellungen", "dns_settings": "DNS-Einstellungen", @@ -641,7 +641,7 @@ "show_processed_responses": "Verarbeitet", "blocked_safebrowsing": "Gesperrt durch Internetsicherheit", "blocked_adult_websites": "Gesperrt durch Kindersicherung", - "blocked_threats": "Gesperrte Bedrohungen", + "blocked_threats": "Bedrohungen blockiert", "allowed": "Zugelassen", "filtered": "Gefiltert", "rewritten": "Umgeschrieben", diff --git a/client/src/__locales/en.json b/client/src/__locales/en.json index 00c94a58..c7428cdc 100644 --- a/client/src/__locales/en.json +++ b/client/src/__locales/en.json @@ -154,7 +154,7 @@ "use_adguard_parental": "Use AdGuard parental control web service", "use_adguard_parental_hint": "AdGuard Home will check if domain contains adult materials. It uses the same privacy-friendly API as the browsing security web service.", "enforce_safe_search": "Use Safe Search", - "enforce_save_search_hint": "AdGuard Home will enforce safe search in the following search engines: Google, YouTube, Bing, DuckDuckGo, Yandex, Pixabay.", + "enforce_save_search_hint": "AdGuard Home will enforce safe search in the following search engines: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "No servers specified", "general_settings": "General settings", "dns_settings": "DNS settings", diff --git a/client/src/__locales/es.json b/client/src/__locales/es.json index 34fab934..35c8099f 100644 --- a/client/src/__locales/es.json +++ b/client/src/__locales/es.json @@ -154,7 +154,7 @@ "use_adguard_parental": "Usar el control parental de AdGuard", "use_adguard_parental_hint": "AdGuard Home comprobará si el dominio contiene materiales para adultos. Utiliza la misma API amigable con la privacidad del servicio web de seguridad de navegación.", "enforce_safe_search": "Usar búsqueda segura", - "enforce_save_search_hint": "AdGuard Home reforzará la búsqueda segura en los siguientes motores de búsqueda: Google, YouTube, Bing, DuckDuckGo, Yandex y Pixabay.", + "enforce_save_search_hint": "AdGuard Home reforzará la búsqueda segura en los siguientes motores de búsqueda: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex y Pixabay.", "no_servers_specified": "No hay servidores especificados", "general_settings": "Configuración general", "dns_settings": "Configuración del DNS", diff --git a/client/src/__locales/fi.json b/client/src/__locales/fi.json index fdf21417..1c058f64 100644 --- a/client/src/__locales/fi.json +++ b/client/src/__locales/fi.json @@ -6,7 +6,7 @@ "upstream_parallel": "Käytä rinnakkaisia pyyntöjä ja nopeuta selvitystä käyttämällä kaikkia ylävirtapalvelimia samanaikaisesti.", "parallel_requests": "Rinnakkaiset pyynnöt", "load_balancing": "Kuormantasaus", - "load_balancing_desc": "Lähetä pyyntö yhdelle ylävirtapalvelimelle kerrallaan. AdGuard Home pyrkii valitsemaan nopeimman palvelimen painotetun satunnaisalgoritminsa avulla.", + "load_balancing_desc": "Lähetä kysely kerrallaan yhdelle ylävirtapalvelimelle. AdGuard Home valitsee painotetun satunnaisalgoritmin avulla palvelimet, joilla on vähiten epäonnistuneita hakuja ja keskimääräisesti lyhin hakuaika.", "bootstrap_dns": "Bootstrap DNS-palvelimet", "bootstrap_dns_desc": "Ylävirroiksi määrittämiesi DoH/DoT-resolverien IP-osoitteiden selvitykseen käytettävien DNS-palvelimien IP-osoitteet. Kommentteja ei sallita.", "fallback_dns_title": "DNS-varapalvelimet", @@ -154,7 +154,7 @@ "use_adguard_parental": "Käytä AdGuardin lapsilukko-palvelua", "use_adguard_parental_hint": "AdGuard Home tarkistaa, sisältääkö verkkotunnus aikuisille tarkoitettua sisältöä. Se käyttää samaa tietosuojapainotteista rajapintaa, kuin turvallisen selauksen palvelu.", "enforce_safe_search": "Käytä turvallista hakua", - "enforce_save_search_hint": "AdGuard Home voi pakottaa turvallisen haun käyttöön seuraavissa hakukoneissa: Google, YouTube, Bing, DuckDuckGo, Yandex, Pixabay.", + "enforce_save_search_hint": "AdGuard Home pakottaa turvallisen haun käyttöön seuraavissa hakukoneissa: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex ja Pixabay.", "no_servers_specified": "Palvelimia ei ole määritetty", "general_settings": "Yleiset asetukset", "dns_settings": "DNS-asetukset", @@ -709,9 +709,9 @@ "log_and_stats_section_label": "Pyyntöhistoria ja tilastot", "ignore_query_log": "Älä huomioi tätä päätelaitetta pyyntöhistoriassa", "ignore_statistics": "Älä huomioi tätä päätettä tilastoissa", - "schedule_services": "Keskeytä palveluesto", - "schedule_services_desc": "Määritä palvelunestosuodattimen keskeytysajoitus.", - "schedule_services_desc_client": "Määritä palvelunestosuodattimen keskeytysajoitus tälle päätteelle.", + "schedule_services": "Pysäytä palveluesto", + "schedule_services_desc": "Määritä palvelunestosuodattimen pysäytysajoitus.", + "schedule_services_desc_client": "Määritä palvelunestosuodattimen pysäytysajoitus tälle päätteelle.", "schedule_desc": "Aseta estettujen palveluiden käyttämättömyysjaksot", "schedule_invalid_select": "Aloitusaika on oltava ennen lopetusaikaa", "schedule_select_days": "Valitse päivät", diff --git a/client/src/__locales/fr.json b/client/src/__locales/fr.json index 676314ff..070b2162 100644 --- a/client/src/__locales/fr.json +++ b/client/src/__locales/fr.json @@ -154,7 +154,7 @@ "use_adguard_parental": "Utiliser le contrôle parental d'AdGuard", "use_adguard_parental_hint": "AdGuard Home va vérifier s'il y a du contenu pour adultes sur le domaine. Ce sera fait par aide du même API discret que celui utilisé par le service de Sécurité de navigation.", "enforce_safe_search": "Utiliser la Recherche Sécurisée", - "enforce_save_search_hint": "AdGuard Home appliquera la recherche sécurisée dans les moteurs de recherche suivants : Google, YouTube, Bing, DuckDuckGo, Yandex, Pixabay.", + "enforce_save_search_hint": "AdGuard Home appliquera la recherche sécurisée dans les moteurs de recherche suivants : Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Pas de serveurs spécifiés", "general_settings": "Paramètres généraux", "dns_settings": "Paramètres DNS", @@ -676,7 +676,7 @@ "filter_allowlist": "ATTENTION : Cette action exclura également la règle « {{disallowed_rule}} » de la liste des clients autorisés.", "last_rule_in_allowlist": "Impossible d’interdire ce client, car l’exclusion de la règle « {{disallowed_rule}} » DÉSACTIVERA la liste des « clients autorisés ».", "use_saved_key": "Utiliser la clef précédemment enregistrée", - "parental_control": "Contrôle parental", + "parental_control": "Contrôle Parental", "safe_browsing": "Navigation sécurisée", "served_from_cache_label": "Servi depuis le cache", "form_error_password_length": "Le mot de passe doit comporter entre {{min}} et {{max}}  caractères", diff --git a/client/src/__locales/id.json b/client/src/__locales/id.json index 6a66959b..534bb55c 100644 --- a/client/src/__locales/id.json +++ b/client/src/__locales/id.json @@ -147,7 +147,7 @@ "average_upstream_response_time": "Rata-rata waktu respons hulu", "response_time": "Waktu respons", "average_processing_time_hint": "Rata-rata waktu dalam milidetik untuk pemrosesan sebuah permintaan DNS", - "block_domain_use_filters_and_hosts": "Blokir domain menggunakan filter dan file hosts", + "block_domain_use_filters_and_hosts": "Blokir domain menggunakan filter dan berkas host", "filters_block_toggle_hint": "Anda dapat menyiapkan aturan pemblokiran dalam pengaturan Filter.", "use_adguard_browsing_sec": "Gunakan layanan web Keamanan Penjelajahan AdGuard", "use_adguard_browsing_sec_hint": "AdGuard Home akan memeriksa apakah domain diblokir oleh layanan web keamanan penjelajahan. Ini akan menggunakan API pencarian yang ramah privasi untuk melakukan pemeriksaan: hanya awalan singkat dari hash nama domain SHA256 yang dikirim ke server.", @@ -191,7 +191,7 @@ "edit_table_action": "Ubah", "delete_table_action": "Hapus", "elapsed": "Berlalu", - "filters_and_hosts_hint": "AdGuard Home memahami aturan dasar adblock dan sintak file hosts.", + "filters_and_hosts_hint": "AdGuard Home memahami aturan dasar adblock dan sintak berkas host.", "no_blocklist_added": "Tidak ada daftar hitam yang ditambahkan", "no_whitelist_added": "Tidak ada daftar putih yang ditambahkan", "add_blocklist": "Tambahkan daftar hitam", @@ -211,8 +211,8 @@ "form_error_url_format": "Format URL tidak valid", "form_error_url_or_path_format": "URL atau jalur absolut dari daftar tidak valid", "custom_filter_rules": "Aturan penyaringan khusus", - "custom_filter_rules_hint": "Masukkan satu aturan dalam sebuah baris. Anda dapat menggunakan baik aturan adblock maupun sintaks file hosts.", - "system_host_files": "File host sistem", + "custom_filter_rules_hint": "Masukkan satu aturan pada satu baris. Anda dapat menggunakan aturan adblock atau sintaks berkas host.", + "system_host_files": "Berkas host sistem", "examples_title": "Contoh", "example_meaning_filter_block": "blokir akses ke example.org dan seluruh subdomainnya;", "example_meaning_filter_whitelist": "buka blokir akses ke domain example.orf dan seluruh subdomainnya;", @@ -476,7 +476,7 @@ "client_confirm_delete": "Apakah anda yakin ingin menghapus klien \"{{key}}\"?", "list_confirm_delete": "Anda yakin ingin menghapus daftar ini?", "auto_clients_title": "Klien (waktu berjalan)", - "auto_clients_desc": "Informasi tentang alamat IP perangkat yang menggunakan atau mungkin menggunakan AdGuard Home. Informasi ini dikumpulkan dari beberapa sumber, termasuk file host, reverse DNS, dll.", + "auto_clients_desc": "Informasi tentang alamat IP perangkat yang menggunakan atau mungkin menggunakan AdGuard Home. Informasi ini dikumpulkan dari beberapa sumber, termasuk berkas host, DNS terbalik, dll.", "access_title": "Pengaturan akses", "access_desc": "Disini anda dapat mengatur aturan akses untuk server AdGuard Home DNS", "access_allowed_title": "Klien yang diizinkan", @@ -494,7 +494,7 @@ "setup_dns_privacy_1": "<0>DNS melalui TLS: Gunakan <1>{{address}} string.", "setup_dns_privacy_2": "<0>DNS-over-TLS: Memakai <1>{{address}} string.", "setup_dns_privacy_3": "<0>Berikut daftar perangkat lunak yang dapat Anda gunakan.", - "setup_dns_privacy_4": "Di perangkat iOS 14 atau macOS Big Sur, Anda dapat mengunduh file '.mobileconfig' khusus yang menambahkan server DNS-over-HTTPS atau DNS-over-TLS ke pengaturan DNS.", + "setup_dns_privacy_4": "Pada perangkat iOS 14 atau macOS Big Sur, Anda dapat mengunduh berkas khusus '.mobileconfig' yang menambahkan server DNS melalui HTTPS atau DNS melalui TLS ke pengaturan DNS.", "setup_dns_privacy_android_1": "Android 9 mendukung DNS-over-TLS secara asli. Untuk mengkonfigurasinya, buka Pengaturan → Jaringan & internet → Tingkat Lanjut → DNS Pribadi dan masukkan nama domain Anda di sana.", "setup_dns_privacy_android_2": "<0>AdGuard untuk Android mendukung <1>DNS-over-HTTPS dan <1>DNS-over-TLS.", "setup_dns_privacy_android_3": "<0>Intra menambahkan dukungan <1>DNS-over-HTTPS untuk Android.", @@ -517,7 +517,7 @@ "rewrite_confirm_delete": "Apakah anda yakin ingin menghapus DNS rewrite untuk \"{{key}}\"?", "rewrite_desc": "Memungkinkan untuk dengan mudah mengkonfigurasi respons DNS kustom untuk nama domain tertentu.", "rewrite_applied": "Aturan Rewrite yang diterapkan", - "rewrite_hosts_applied": "Ditulis ulang oleh aturan file hosts", + "rewrite_hosts_applied": "Ditulis ulang oleh aturan berkas host", "dns_rewrites": "DNS rewrite", "form_domain": "Masukkan nama domain", "form_answer": "Masaukan alamat IP atau nama domain", @@ -676,7 +676,7 @@ "filter_allowlist": "PERINGATAN: Tindakan ini juga akan mengecualikan aturan \"{{disallowed_rule}}\" dari daftar klien yang diizinkan.", "last_rule_in_allowlist": "Tidak dapat melarang klien ini karena mengecualikan aturan \"{{disallowed_rule}}\" akan MENONAKTIFKAN daftar \"Klien yang diizinkan\".", "use_saved_key": "Gunakan kunci yang disimpan sebelumnya", - "parental_control": "Kontrol Orang Tua", + "parental_control": "Pengawasan Orang Tua", "safe_browsing": "Penjelajahan Aman", "served_from_cache": "{{value}} (disajikan dari cache)", "form_error_password_length": "Kata sandi harus terdiri dari {{min}} hingga {{max}}", diff --git a/client/src/__locales/it.json b/client/src/__locales/it.json index 49dfd47c..c53fcbc0 100644 --- a/client/src/__locales/it.json +++ b/client/src/__locales/it.json @@ -154,7 +154,7 @@ "use_adguard_parental": "Utilizza il Controllo Parentale di AdGuard", "use_adguard_parental_hint": "AdGuard Home verificherà se il dominio contiene materiale per adulti. Utilizza le stesse API privacy-friendly del servizio web 'sicurezza di navigazione'.", "enforce_safe_search": "Utilizza Ricerca Sicura", - "enforce_save_search_hint": "AdGuard Home forzerà la ricerca sicura sui seguenti motori di ricerca: Google, YouTube, Bing, DuckDuckGo, Yandex, Pixabay.", + "enforce_save_search_hint": "AdGuard Home applicherà la ricerca sicura nei seguenti motori di ricerca: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Nessun server specificato", "general_settings": "Impostazioni generali", "dns_settings": "Impostazioni DNS", diff --git a/client/src/__locales/ja.json b/client/src/__locales/ja.json index cbbfe9fa..e2da6558 100644 --- a/client/src/__locales/ja.json +++ b/client/src/__locales/ja.json @@ -154,7 +154,7 @@ "use_adguard_parental": "AdGuardペアレンタルコントロール・ウェブサービスを使用する", "use_adguard_parental_hint": "AdGuard Homeは、ドメインにアダルトコンテンツが含まれているかどうかを確認します。 ブラウジングセキュリティ・ウェブサービスと同じプライバシーに優しいAPIを使用します。", "enforce_safe_search": "セーフサーチを使用する", - "enforce_save_search_hint": "AdGuard Homeは、次の検索エンジンでセーフサーチを強制適用します: Google, YouTube, Bing, DuckDuckGo, Yandex, Pixabay", + "enforce_save_search_hint": "AdGuard Homeは、次の検索エンジンでセーフサーチを強制適用します: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay", "no_servers_specified": "サーバが指定されていません", "general_settings": "一般設定", "dns_settings": "DNS設定", diff --git a/client/src/__locales/ko.json b/client/src/__locales/ko.json index b1344ef9..e79995f5 100644 --- a/client/src/__locales/ko.json +++ b/client/src/__locales/ko.json @@ -108,7 +108,7 @@ "off": "OFF", "copyright": "Copyright", "homepage": "홈페이지", - "report_an_issue": "문제를 보고합니다", + "report_an_issue": "문제 신고", "privacy_policy": "개인정보취급방침", "enable_protection": "보호 활성화", "enabled_protection": "보호 활성화됨", @@ -154,7 +154,7 @@ "use_adguard_parental": "AdGuard 자녀 보호 웹 서비스 사용", "use_adguard_parental_hint": "AdGuard Home은 도메인에 성인 자료가 포함되어 있는지 확인합니다. 브라우징 보안 웹 서비스와 동일한 개인정보 보호 API를 사용함.", "enforce_safe_search": "세이프서치 사용", - "enforce_save_search_hint": "AdGuard Home은 Google, YouTube, Bing, DuckDuckGo, Yandex, Pixabay와 같은 검색 엔진에서 세이프서치를 시행합니다.", + "enforce_save_search_hint": "AdGuard Home은 Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay와 같은 검색 엔진에서 세이프서치를 시행합니다.", "no_servers_specified": "지정된 서버 없음", "general_settings": "일반 설정", "dns_settings": "DNS 설정", diff --git a/client/src/__locales/nl.json b/client/src/__locales/nl.json index 8616dfdf..a3f2857c 100644 --- a/client/src/__locales/nl.json +++ b/client/src/__locales/nl.json @@ -154,7 +154,7 @@ "use_adguard_parental": "Gebruik AdGuard Ouderlijk toezicht web service", "use_adguard_parental_hint": "AdGuard Home controleert of het domein 18+ content bevat. Dit gebeurt dmv dezelfde privacy vriendelijke API als de Browsing Security web service.", "enforce_safe_search": "Veilig zoeken gebruiken", - "enforce_save_search_hint": "AdGuard Home kan veilig zoeken forceren voor de volgende zoekmachines: Google, Youtube, Bing, en DuckDuckGo, Yandex, Pixabay.", + "enforce_save_search_hint": "AdGuard Home dwingt veilig zoeken af in de volgende zoekmachines: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Geen servers gespecificeerd", "general_settings": "Algemene instellingen", "dns_settings": "DNS instellingen", diff --git a/client/src/__locales/no.json b/client/src/__locales/no.json index 8708e4d8..bb08a3dc 100644 --- a/client/src/__locales/no.json +++ b/client/src/__locales/no.json @@ -128,6 +128,7 @@ "enforced_save_search": "Påtvungede barnevennlige søk", "number_of_dns_query_to_safe_search": "Antall DNS-forespørsler til søkemotorer der \"Safe Search\" ble fremtvunget", "average_processing_time": "Gjennomsnittlig behandlingstid", + "response_time": "Responstid", "average_processing_time_hint": "Gjennomsnittstid for behandling av DNS-forespørsler i millisekunder", "block_domain_use_filters_and_hosts": "Blokker domener ved hjelp av filtre, «hosts»-filer, og rå domener", "filters_block_toggle_hint": "Du kan sette opp blokkeringsoppføringer i Filtre-innstillingene.", diff --git a/client/src/__locales/pl.json b/client/src/__locales/pl.json index 8997d5f8..7ef4dd9a 100644 --- a/client/src/__locales/pl.json +++ b/client/src/__locales/pl.json @@ -6,7 +6,7 @@ "upstream_parallel": "Użyj zapytań równoległych, aby przyspieszyć rozwiązywanie przez jednoczesne wysyłanie zapytań do wszystkich serwerów nadrzędnych.", "parallel_requests": "Równoległe żądania", "load_balancing": "Równoważenie obciążenia", - "load_balancing_desc": "Wysyłaj zapytania do jednego serwera nadrzędnego na raz. AdGuard Home używa swojego losowego algorytmu ważonego, aby wybrać serwer, tak aby najszybszy serwer był używany częściej.", + "load_balancing_desc": "Zapytaj jeden serwer nadrzędny na raz. AdGuard Home używa ważonego, losowego algorytmu do wybierania serwerów z najmniejszą liczbą nieudanych wyszukiwań i najniższym uśrednionym czasem wyszukiwania.", "bootstrap_dns": "Serwery DNS Bootstrap", "bootstrap_dns_desc": "Adresy IP serwerów DNS używanych do rozpoznawania adresów IP programów rozpoznawania nazw DoH/DoT określonych jako nadrzędne. Komentarze są niedozwolone.", "fallback_dns_title": "Rezerwowe serwery DNS", @@ -154,7 +154,7 @@ "use_adguard_parental": "Użyj usługi Kontrola Rodzicielska AdGuard", "use_adguard_parental_hint": "AdGuard Home sprawdzi, czy domena zawiera materiały dla dorosłych. Używa tego samego interfejsu API przyjaznego prywatności, co usługa sieciowa Bezpieczne Przeglądanie. ", "enforce_safe_search": "Użyj bezpiecznego wyszukiwania", - "enforce_save_search_hint": "AdGuard Home wymusza bezpieczne wyszukiwanie w następujących wyszukiwarkach: Google, YouTube, Bing, DuckDuckGo, Yandex, Pixabay.", + "enforce_save_search_hint": "AdGuard Home wymusza bezpieczne wyszukiwanie w następujących wyszukiwarkach: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Nie określono serwerów", "general_settings": "Ustawienia główne", "dns_settings": "Ustawienia DNS", diff --git a/client/src/__locales/pt-br.json b/client/src/__locales/pt-br.json index 34ae2623..aaf3dc3c 100644 --- a/client/src/__locales/pt-br.json +++ b/client/src/__locales/pt-br.json @@ -154,7 +154,7 @@ "use_adguard_parental": "Usar o serviço de controle parental do AdGuard", "use_adguard_parental_hint": "O AdGuard Home irá verificar se o domínio contém conteúdo adulto. Ele usa a mesma API amigável de privacidade que o serviço de segurança da navegação.", "enforce_safe_search": "Usar pesquisa segura", - "enforce_save_search_hint": "O AdGuard Home forcará a pesquisa segura nos seguintes motores de busca: Google, YouTube, Bing, DuckDuckGo, Yandex, Pixabay.", + "enforce_save_search_hint": "O AdGuard Home forcará a pesquisa segura nos seguintes motores de busca: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Nenhum servidor especificado", "general_settings": "Configurações gerais", "dns_settings": "Configurações de DNS", diff --git a/client/src/__locales/pt-pt.json b/client/src/__locales/pt-pt.json index b064bb81..cd9f19eb 100644 --- a/client/src/__locales/pt-pt.json +++ b/client/src/__locales/pt-pt.json @@ -154,7 +154,7 @@ "use_adguard_parental": "Usar o serviço de controlo parental do AdGuard", "use_adguard_parental_hint": "O AdGuard Home irá verificar se o domínio contém conteúdo adulto. Usa a mesma API amigável de privacidade que o serviço de segurança da navegação.", "enforce_safe_search": "Usar pesquisa segura", - "enforce_save_search_hint": "O AdGuard Home forçará a pesquisa segura nos seguintes motores de busca: Google, Youtube, Bing, DuckDuckGo, Yandex, Pixabay.", + "enforce_save_search_hint": "O AdGuard Home aplicará pesquisa segura nos seguintes motores de busca: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Nenhum servidor especificado", "general_settings": "Definições gerais", "dns_settings": "Definições de DNS", diff --git a/client/src/__locales/ru.json b/client/src/__locales/ru.json index 44455f0f..db944a6d 100644 --- a/client/src/__locales/ru.json +++ b/client/src/__locales/ru.json @@ -154,7 +154,7 @@ "use_adguard_parental": "Включить модуль Родительского контроля AdGuard ", "use_adguard_parental_hint": "AdGuard Home проверит, содержит ли домен материалы 18+. Он использует тот же API для обеспечения конфиденциальности, что и веб-служба безопасности браузера.", "enforce_safe_search": "Включить безопасный поиск", - "enforce_save_search_hint": "AdGuard Home может обеспечить безопасный поиск в следующих поисковых системах: Google, YouTube, Bing, DuckDuckGo, Yandex и Pixabay.", + "enforce_save_search_hint": "AdGuard Home будет обеспечивать безопасный поиск в следующих поисковых системах: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Нет указанных серверов", "general_settings": "Основные настройки", "dns_settings": "Настройки DNS", diff --git a/client/src/__locales/sk.json b/client/src/__locales/sk.json index 0b784997..a431e578 100644 --- a/client/src/__locales/sk.json +++ b/client/src/__locales/sk.json @@ -154,7 +154,7 @@ "use_adguard_parental": "Použiť AdGuard službu Rodičovská kontrola", "use_adguard_parental_hint": "AdGuard Home skontroluje, či doména obsahuje materiály pre dospelých. Používa rovnaké API priateľské k ochrane osobných údajov ako služba Bezpečného prehliadania.", "enforce_safe_search": "Používať bezpečné vyhľadávanie", - "enforce_save_search_hint": "AdGuard Home vynucuje bezpečné vyhľadávanie v nasledujúcich vyhľadávačoch: Google, YouTube, Bing, DuckDuckGo, Yandex a Pixabay.", + "enforce_save_search_hint": "AdGuard Home vynúti bezpečné vyhľadávanie v nasledujúcich vyhľadávačoch: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Neboli špecifikované žiadne servery", "general_settings": "Všeobecné nastavenia", "dns_settings": "Nastavenia DNS", @@ -484,7 +484,7 @@ "access_disallowed_title": "Nepovolení klienti", "access_disallowed_desc": "Zoznam CIDR, IP adries alebo ClientID. Ak tento zoznam obsahuje položky, AdGuard Home zruší dopyty od týchto klientov. Toto pole sa ignoruje, ak sú v poli Povolení klienti položky.", "access_blocked_title": "Nepovolené domény", - "access_blocked_desc": "Nesmie byť zamieňaná s filtrami. AdGuard Home zruší DNS dopyty, ktoré sa zhodujú s týmito doménami, a tieto dopyty sa nezobrazia ani v denníku dopytov. Môžete určiť presné názvy domén, zástupné znaky alebo pravidlá filtrovania URL adries, napr. \"example.org\", \"*.example.org\" alebo ||example.org^\" zodpovedajúcim spôsobom.", + "access_blocked_desc": "Nesmie byť zamieňaná s filtrami. AdGuard Home zruší DNS dopyty, ktoré sa zhodujú s týmito doménami, a tieto dopyty sa nezobrazia ani v denníku dopytov. Môžete určiť presné názvy domén, zástupné znaky alebo pravidlá filtrácie URL adries, napr. \"example.org\", \"*.example.org\" alebo ||example.org^\" zodpovedajúcim spôsobom.", "access_settings_saved": "Nastavenia prístupu úspešne uložené", "updates_checked": "K dispozícii je nová verzia aplikácie AdGuard Home\n", "updates_version_equal": "AdGuard Home je aktuálny", diff --git a/client/src/__locales/th.json b/client/src/__locales/th.json index 84a393f1..97dd4ba6 100644 --- a/client/src/__locales/th.json +++ b/client/src/__locales/th.json @@ -46,6 +46,7 @@ "settings": "การตั้งค่า", "filters": "ตัวกรอง", "query_log": "บันทึกการสืบค้น", + "nothing_found": "ไม่พบอะไร", "faq": "คำถามที่พบบ่อย", "version": "รุ่น", "address": "ที่อยู่", @@ -349,7 +350,7 @@ "statistics_configuration": "การกำหนดค่าสถิติ", "statistics_retention": "การเก็บรักษาสถิติ", "statistics_retention_desc": "หากคุณลดค่าช่วงเวลาข้อมูลบางอย่างจะหายไป", - "statistics_clear": " ล้างค่าสถิติ", + "statistics_clear": "ล้างสถิติ", "statistics_clear_confirm": "คุณแน่ใจหรือไม่ว่าต้องการล้างสถิติ?", "statistics_retention_confirm": "คุณแน่ใจหรือไม่ว่าต้องการเปลี่ยนการเก็บรักษาสถิติ? หากคุณลดค่าช่วงเวลา ข้อมูลบางอย่างจะหายไป", "statistics_cleared": "สถิติได้ถูกล้างเรียบร้อยแล้ว", @@ -390,10 +391,13 @@ "check_title": "ตรวจสอบการกรอง", "check_desc": "ตรวจสอบว่าชื่อโฮสต์ถูกกรอง", "form_enter_host": "ป้อนชื่อโฮสต์", - "show_processed_responses": "การประมวลผล", + "show_blocked_responses": "ปิดกั้นแล้ว", + "show_whitelisted_responses": "รายการที่อนุญาต", + "show_processed_responses": "ประมวลผลแล้ว", "blocked_adult_websites": "ถูกปิดกั้นโดยการควบคุมของผู้ปกครอง", "safe_search": "ค้นหาอย่างปลอดภัย", "blocklist": "บัญชีดำ", + "allowed": "รายการที่อนุญาต", "filter_category_other": "อื่น ๆ", "parental_control": "ควบคุมโดยผู้ปกครอง", "sunday_short": "อาทิตย์", diff --git a/client/src/__locales/tr.json b/client/src/__locales/tr.json index e027d660..c447c34c 100644 --- a/client/src/__locales/tr.json +++ b/client/src/__locales/tr.json @@ -68,7 +68,7 @@ "ip": "IP", "dhcp_table_hostname": "Ana makine Adı", "dhcp_table_expires": "Bitiş tarihi", - "dhcp_warning": "DHCP sunucusunu yine de etkinleştirmek istiyorsanız, ağınızda başka aktif DHCP sunucusu olmadığından emin olun, aksi takdirde ağa bağlı cihazların İnternet bağlantısı kesilebilir!", + "dhcp_warning": "DHCP sunucusunu yine de etkinleştirmek istiyorsanız, ağınızda başka aktif DHCP sunucusu olmadığından emin olun, aksi takdirde ağa bağlı cihazların internet bağlantısı kesilebilir!", "dhcp_error": "AdGuard Home, ağda başka bir etkin DHCP sunucusu olup olmadığını belirleyemedi", "dhcp_static_ip_error": "DHCP sunucusunu kullanmak için sabit bir IP adresi ayarlanmalıdır. AdGuard Home, bu ağ arayüzünün sabit bir IP adresi kullanılarak yapılandırılıp yapılandırılmadığını belirleyemedi. Lütfen sabit IP adresini elle ayarlayın.", "dhcp_dynamic_ip_found": "Sisteminiz, <0>{{interfaceName}} arayüzü için dinamik IP adresi yapılandırması kullanıyor. DHCP sunucusunu kullanmak için sabit bir IP adresi ayarlanmalıdır. Geçerli olan IP adresiniz <0>{{ipAddress}}. \"DHCP sunucusunu etkinleştir\" düğmesine basarsanız, AdGuard Home bu IP adresini otomatik bir şekilde sabit olarak ayarlayacaktır.", @@ -154,7 +154,7 @@ "use_adguard_parental": "AdGuard ebeveyn denetimi web hizmetini kullan", "use_adguard_parental_hint": "AdGuard Home, alan adının yetişkin içerik bulundurup bulundurmadığını kontrol eder. Gezinti koruması web hizmeti ile kullandığımız aynı gizlilik dostu API'yi kullanır.", "enforce_safe_search": "Güvenli Aramayı kullan", - "enforce_save_search_hint": "AdGuard Home, şu arama motorlarında güvenli aramayı uygular: Google, YouTube, Bing, DuckDuckGo, Yandex ve Pixabay.", + "enforce_save_search_hint": "AdGuard Home, şu arama motorlarında güvenli aramayı uygular: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Sunucu belirtilmedi", "general_settings": "Genel ayarlar", "dns_settings": "DNS ayarları", @@ -476,7 +476,7 @@ "client_confirm_delete": "\"{{key}}\" istemcisini silmek istediğinizden emin misiniz?", "list_confirm_delete": "Bu listeyi silmek istediğinizden emin misiniz?", "auto_clients_title": "Çalışma zamanı istemcileri", - "auto_clients_desc": "AdGuard Home'u kullanan veya kullanabilecek cihazların IP adresleri hakkında bilgiler. Bu bilgiler, hosts dosyaları, ters DNS, vb. dahil olmak üzere çeşitli kaynaklardan toplanır.", + "auto_clients_desc": "AdGuard Home'u kullanan veya kullanabilecek cihazların IP adresleri hakkında bilgiler. Bu bilgiler, hosts dosyaları, ters DNS, vb. dâhil olmak üzere çeşitli kaynaklardan toplanır.", "access_title": "Erişim ayarları", "access_desc": "AdGuard Home DNS sunucusu için erişim kurallarını buradan yapılandırabilirsiniz", "access_allowed_title": "İzin verilen istemciler", @@ -603,7 +603,7 @@ "autofix_warning_list": "Bu görevleri gerçekleştirir: <0>Sistem DNSStubListener'ı devre dışı bırakın <0>DNS sunucusu adresini 127.0.0.1 olarak ayarlayın <0>/etc/resolv.conf'un sembolik bağlantı hedefini /run/systemd/resolve/resolv.conf ile değiştirin<0> <0>DNSStubListener'ı durdurun (systemd çözümlenmiş hizmeti yeniden yükleyin)", "autofix_warning_result": "Sonuç olarak, sisteminizden gelen tüm DNS istekleri varsayılan olarak AdGuard Home tarafından işlenecektir.", "tags_title": "Etiketler", - "tags_desc": "İstemciye karşılık gelen etiketleri seçebilirsiniz. Etiketleri daha kesin olarak uygulamak için filtreleme kurallarına dahil edin. <0>Daha fazla bilgi edinin.", + "tags_desc": "İstemciye karşılık gelen etiketleri seçebilirsiniz. Etiketleri daha kesin olarak uygulamak için filtreleme kurallarına dâhil edin. <0>Daha fazla bilgi edinin.", "form_select_tags": "İstemci etiketlerini seçin", "check_title": "Filtrelemeyi denetleyin", "check_desc": "Ana makine adının filtreleme durumunu kontrol edin.", diff --git a/client/src/__locales/vi.json b/client/src/__locales/vi.json index 4736281a..1c24a6cd 100644 --- a/client/src/__locales/vi.json +++ b/client/src/__locales/vi.json @@ -6,21 +6,21 @@ "upstream_parallel": "Sử dụng truy vấn song song để tăng tốc độ giải quyết bằng cách truy vấn đồng thời tất cả các máy chủ ngược tuyến", "parallel_requests": "Yêu cầu song song", "load_balancing": "Cân bằng tải", - "load_balancing_desc": "Chỉ truy xuất một máy chủ trong cùng thời điểm. AdGuard Home sẽ sử dụng thuật toán trọng số ngẫu nhiên để chọn một máy chủ nhanh nhất và sử dụng máy chủ đó thường xuyên hơn.", + "load_balancing_desc": "Truy vấn một máy chủ thượng nguồn tại một thời điểm. AdGuard Home sử dụng thuật toán ngẫu nhiên có trọng số để chọn máy chủ có số lần tìm kiếm không thành công thấp nhất và thời gian tìm kiếm trung bình thấp nhất.", "bootstrap_dns": "Máy chủ DNS Bootstrap", "bootstrap_dns_desc": "Địa chỉ IP của máy chủ DNS được sử dụng để phân giải địa chỉ IP của trình phân giải DoH/DoT mà bạn chỉ định làm thượng nguồn. Bình luận không được phép.", "fallback_dns_title": "Máy chủ DNS dự phòng", "fallback_dns_desc": "Danh sách máy chủ DNS dự phòng được sử dụng khi máy chủ DNS ngược tuyến không phản hồi. Cú pháp tương tự như trong trường ngược dòng chính ở trên.", "fallback_dns_placeholder": "Nhập một máy chủ DNS dự phòng trên mỗi dòng", "local_ptr_title": "Máy chủ DNS riêng tư", - "local_ptr_desc": "Máy chủ DNS hoặc các máy chủ mà AdGuard Home sẽ sử dụng cho các truy vấn về tài nguyên được phân phối cục bộ. Ví dụ: máy chủ này sẽ được sử dụng để phân giải tên máy khách của máy khách cho các máy khách có địa chỉ IP riêng. Nếu không được cài đặt, AdGuard Home sẽ tự động sử dụng trình phân giải DNS mặc định của bạn.", + "local_ptr_desc": "Máy chủ DNS được AdGuard Home sử dụng cho các yêu cầu PTR, SOA và NS riêng tư. Một yêu cầu được coi là riêng tư nếu nó yêu cầu một miền ARPA chứa một mạng con trong phạm vi IP riêng tư (chẳng hạn như \"192.168.12.34\") và đến từ một máy khách có địa chỉ IP riêng tư. Nếu không được thiết lập, các trình phân giải DNS mặc định của hệ điều hành của bạn sẽ được sử dụng, ngoại trừ các địa chỉ IP của AdGuard Home.", "local_ptr_default_resolver": "Theo mặc định, AdGuard Home sử dụng các hệ thống phân giải tên miền ngược sau: {{ip}}.", "local_ptr_no_default_resolver": "AdGuard Home không thể xác định hệ thống phân giải tên miền ngược riêng phù hợp cho hệ thống này.", "local_ptr_placeholder": "Nhập một địa chỉ IP trên mỗi dòng", "resolve_clients_title": "Kích hoạt cho phép phân giải ngược về địa chỉ IP của máy khách", "resolve_clients_desc": "Nếu được bật, AdGuard Home sẽ cố gắng phân giải ngược lại địa chỉ IP của khách hàng thành tên máy chủ của họ bằng cách gửi các truy vấn PTR tới trình phân giải tương ứng (máy chủ DNS riêng cho máy khách cục bộ, máy chủ ngược dòng cho máy khách có địa chỉ IP công cộng).", "use_private_ptr_resolvers_title": "Sử dụng trình rDNS riêng tư", - "use_private_ptr_resolvers_desc": "Thực hiện tra cứu ngược DNS cho các địa chỉ được phân phối cục bộ bằng cách sử dụng các máy chủ nguồn. Nếu bị vô hiệu hóa, AdGuard Home sẽ phản hồi với NXDOMAIN cho tất cả các yêu cầu PTR ngoại trừ các ứng dụng khách được biết đến bởi DHCP, / etc / hosts, v. v.", + "use_private_ptr_resolvers_desc": "Giải quyết các yêu cầu PTR, SOA và NS cho các miền ARPA chứa địa chỉ IP riêng thông qua máy chủ thượng nguồn riêng, DHCP, /etc/hosts, v. v. Nếu bị vô hiệu hóa, AdGuard Home sẽ phản hồi tất cả các yêu cầu đó bằng NXDOMAIN.", "check_dhcp_servers": "Kiểm tra máy chủ DHCP", "save_config": "Lưu thiết lập", "enabled_dhcp": "Máy chủ DHCP đã kích hoạt", @@ -154,7 +154,7 @@ "use_adguard_parental": "Sử dụng dịch vụ quản lý của phụ huynh AdGuard", "use_adguard_parental_hint": "AdGuard Home sẽ kiểm tra nếu tên miền chứa từ khoá người lớn. Tính năng sử dụng API thân thiện với quyền riêng tư tương tự với dịch vụ bảo vệ duyệt web", "enforce_safe_search": "Bắt buộc tìm kiếm an toàn", - "enforce_save_search_hint": "AdGuard Home có thể bắt buộc tìm kiếm an toàn với các dịch vụ tìm kiếm: Google, Youtube, Bing, Yandex.", + "enforce_save_search_hint": "AdGuard Home sẽ thực thi tìm kiếm an toàn trong các công cụ tìm kiếm sau: Google, YouTube, Bing, DuckDuckGo, Ecosia, Yandex, Pixabay.", "no_servers_specified": "Không có máy chủ nào được liệt kê", "general_settings": "Cài đặt chung", "dns_settings": "Cài đặt DNS", @@ -425,6 +425,9 @@ "encryption_hostnames": "Tên máy chủ", "encryption_reset": "Bạn có chắc chắn muốn đặt lại cài đặt mã hóa?", "encryption_warning": "Cảnh báo", + "encryption_plain_dns_enable": "Kích hoạt DNS đơn giản", + "encryption_plain_dns_desc": "DNS đơn giản được bật theo mặc định. Bạn có thể vô hiệu hóa nó để buộc tất cả các thiết bị sử dụng DNS được mã hóa. Để thực hiện việc này, bạn phải kích hoạt ít nhất một giao thức DNS được mã hóa", + "encryption_plain_dns_error": "Để tắt DNS đơn giản, hãy bật ít nhất một giao thức DNS được mã hóa", "topline_expiring_certificate": "Chứng chỉ SSL của bạn sắp hết hạn. Cập nhật <0>Cài đặt mã hóa.", "topline_expired_certificate": "Chứng chỉ SSL của bạn đã hết hạn. Cập nhật <0>Cài đặt mã hóa.", "form_error_port_range": "Nhập giá trị cổng trong phạm vi 80-65535", @@ -675,7 +678,7 @@ "use_saved_key": "Sử dụng khóa đã lưu trước đó", "parental_control": "Quản lý của phụ huynh", "safe_browsing": "Duyệt web an toàn", - "served_from_cache": "{{value}} (được phục vụ từ bộ nhớ cache)", + "served_from_cache_label": "Được phục vụ từ bộ nhớ đệm", "form_error_password_length": "Mật khẩu phải dài từ {{min}} đến {{max}} ký tự", "anonymizer_notification": "<0> Lưu ý: Tính năng ẩn danh IP được bật. Bạn có thể tắt nó trong <1> Cài đặt chung.", "confirm_dns_cache_clear": "Bạn có chắc chắn muốn xóa bộ đệm ẩn DNS không?", diff --git a/client/src/__locales/zh-cn.json b/client/src/__locales/zh-cn.json index 00160225..d9ff6cfd 100644 --- a/client/src/__locales/zh-cn.json +++ b/client/src/__locales/zh-cn.json @@ -154,7 +154,7 @@ "use_adguard_parental": "使用 AdGuard 【家长控制】服务", "use_adguard_parental_hint": "AdGuard Home 将使用与浏览安全服务相同的隐私性强的 API 来检查域名指向的网站是否包含成人内容。", "enforce_safe_search": "使用安全搜索", - "enforce_save_search_hint": "AdGuard Home 对以下搜索引擎可强制启用安全搜索:Google、YouTube、Bing、DuckDuckGo、Yandex、Pixabay。", + "enforce_save_search_hint": "AdGuard Home 将会在下列搜索引擎中强制启用安全搜索:Google、YouTube、Bing、DuckDuckGo、Ecosia、Yandex、Pixabay。", "no_servers_specified": "未找到指定的服务器", "general_settings": "常规设置", "dns_settings": "DNS 设置", diff --git a/client/src/__locales/zh-tw.json b/client/src/__locales/zh-tw.json index 24d38fab..837bca3b 100644 --- a/client/src/__locales/zh-tw.json +++ b/client/src/__locales/zh-tw.json @@ -154,7 +154,7 @@ "use_adguard_parental": "使用 AdGuard 家長控制之網路服務", "use_adguard_parental_hint": "AdGuard Home 將檢查網域是否包含成人資料。它使用如同瀏覽安全網路服務一樣之對隱私友好的應用程式介面(API)。", "enforce_safe_search": "使用安全搜尋", - "enforce_save_search_hint": "AdGuard Home 將在下列的搜尋引擎:Google、YouTube、Bing、DuckDuckGo、Yandex 和 Pixabay 中強制執行安全搜尋。", + "enforce_save_search_hint": "AdGuard Home 將在下列的搜尋引擎:Google、YouTube、Bing、DuckDuckGo、Ecosia、Yandex 和 Pixabay 中強制執行安全搜尋。", "no_servers_specified": "無已明確指定的伺服器", "general_settings": "一般設定", "dns_settings": "DNS 設定", diff --git a/client/src/helpers/filters/filters.ts b/client/src/helpers/filters/filters.ts index 6582b280..1b8fbe51 100644 --- a/client/src/helpers/filters/filters.ts +++ b/client/src/helpers/filters/filters.ts @@ -256,6 +256,12 @@ export default { "homepage": "https://github.com/hagezi/dns-blocklists", "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_49.txt" }, + "hagezi_xiaomi_tracking_blocklist": { + "name": "HaGeZi's Xiaomi Tracker Blocklist", + "categoryId": "other", + "homepage": "https://github.com/hagezi/dns-blocklists", + "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_60.txt" + }, "no_google": { "name": "No Google", "categoryId": "other", diff --git a/client/src/helpers/renderFormattedClientCell.tsx b/client/src/helpers/renderFormattedClientCell.tsx index 2478ea6b..8e52a89c 100644 --- a/client/src/helpers/renderFormattedClientCell.tsx +++ b/client/src/helpers/renderFormattedClientCell.tsx @@ -66,7 +66,7 @@ export const renderFormattedClientCell = (value: any, info: any, isDetailed = fa } return ( -
+
{nameContainer} {whoisContainer}
diff --git a/client/src/helpers/trackers/trackers.json b/client/src/helpers/trackers/trackers.json index 877fde81..0a570006 100644 --- a/client/src/helpers/trackers/trackers.json +++ b/client/src/helpers/trackers/trackers.json @@ -1,25266 +1,25267 @@ { - "timeUpdated": "2024-07-01T00:11:48.891Z", - "categories": { - "0": "audio_video_player", - "1": "comments", - "2": "customer_interaction", - "3": "pornvertising", - "4": "advertising", - "5": "essential", - "6": "site_analytics", - "7": "social_media", - "8": "misc", - "9": "cdn", - "10": "hosting", - "11": "unknown", - "12": "extensions", - "13": "email", - "14": "consent", - "15": "telemetry", - "101": "mobile_analytics" - }, - "trackers": { - "163": { - "name": "163", - "categoryId": 4, - "url": "http://www.163.com/", - "companyId": "163" - }, - "1000mercis": { - "name": "1000mercis", - "categoryId": 6, - "url": "http://www.1000mercis.com/", - "companyId": "1000mercis" - }, - "161media": { - "name": "Platform161", - "categoryId": 4, - "url": "https://platform161.com/", - "companyId": "platform161" - }, - "1822direkt.de": { - "name": "1822direkt.de", - "categoryId": 8, - "url": "https://www.1822direkt.de/", - "companyId": "1822direkt", - "source": "AdGuard" - }, - "1dmp.io": { - "name": "1DMP", - "categoryId": 4, - "url": "https://1dmp.io/", - "companyId": "1dmp" - }, - "1plusx": { - "name": "1plusX", - "categoryId": 6, - "url": "https://www.1plusx.com/", - "companyId": "1plusx" - }, - "1sponsor": { - "name": "1sponsor", - "categoryId": 4, - "url": "http://fr.1sponsor.com/", - "companyId": "1sponsor" - }, - "1tag": { - "name": "1tag", - "categoryId": 6, - "url": "http://www.dentsuaegisnetwork.com/", - "companyId": "dentsu_aegis_network" - }, - "1und1": { - "name": "1&1 IONOS", - "categoryId": 8, - "url": "http://www.ionos.com/", - "companyId": "1und1", - "source": "AdGuard" - }, - "24-ads.com": { - "name": "24-ADS", - "categoryId": 4, - "url": "http://www.24-ads.com/", - "companyId": "24-ads.com", - "source": "AdGuard" - }, - "24_7": { - "name": "[24]7", - "categoryId": 2, - "url": "http://www.247-inc.com/", - "companyId": "24_7" - }, - "24log": { - "name": "24log", - "categoryId": 6, - "url": "http://24log.ru/", - "companyId": "24log" - }, - "24smi": { - "name": "24SMI", - "categoryId": 8, - "url": "https://24smi.org/", - "companyId": "24smi", - "source": "AdGuard" - }, - "2leep": { - "name": "2leep", - "categoryId": 4, - "url": "http://2leep.com/", - "companyId": "2leep" - }, - "33across": { - "name": "33Across", - "categoryId": 4, - "url": "http://33across.com/", - "companyId": "33across" - }, - "3dstats": { - "name": "3DStats", - "categoryId": 6, - "url": "http://www.3dstats.com/", - "companyId": "3dstats" - }, - "3gpp": { - "name": "3GPP Network", - "categoryId": 5, - "url": "https://www.3gpp.org/", - "companyId": "3gpp", - "source": "AdGuard" - }, - "4chan": { - "name": "4Chan", - "categoryId": 8, - "url": "https://www.4chan.org/", - "companyId": "4chan", - "source": "AdGuard" - }, - "4finance_com": { - "name": "4finance", - "categoryId": 2, - "url": "https://4finance.com/", - "companyId": "4finance", - "source": "AdGuard" - }, - "4w_marketplace": { - "name": "4w Marketplace", - "categoryId": 4, - "url": "http://www.4wmarketplace.com/", - "companyId": "4w_marketplace" - }, - "500friends": { - "name": "500friends", - "categoryId": 2, - "url": "http://500friends.com/", - "companyId": "500friends" - }, - "51.la": { - "name": "51.La", - "categoryId": 6, - "url": "http://www.51.la/", - "companyId": "51.la" - }, - "5min_media": { - "name": "5min Media", - "categoryId": 0, - "url": "http://www.5min.com/", - "companyId": "verizon" - }, - "6sense": { - "name": "6Sense", - "categoryId": 6, - "url": "http://home.grepdata.com", - "companyId": "6sense" - }, - "77tracking": { - "name": "77Tracking", - "categoryId": 6, - "url": "http://www.77agency.com/", - "companyId": "77agency" - }, - "7plus": { - "name": "7plus", - "categoryId": 0, - "url": "https://7plus.com.au/", - "companyId": "seven_group_holdings", - "source": "AdGuard" - }, - "7tv.de": { - "name": "7tv.app", - "categoryId": 0, - "url": "https://www.7tv.app/", - "companyId": "7tv", - "source": "AdGuard" - }, - "888media": { - "name": "888media", - "categoryId": 4, - "url": "http://888media.net/", - "companyId": "888_media" - }, - "8digits": { - "name": "8digits", - "categoryId": 6, - "url": "http://8digits.com/", - "companyId": "8digits" - }, - "94j7afz2nr.xyz": { - "name": "94j7afz2nr.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "99stats": { - "name": "99stats", - "categoryId": 6, - "url": "http://www.99stats.com/", - "companyId": "99stats" - }, - "a3cloud_net": { - "name": "a3cloud.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "a8": { - "name": "A8", - "categoryId": 4, - "url": "http://www.a8.net/", - "companyId": "a8" - }, - "aaxads.com": { - "name": "Acceptable Ads Exchange", - "categoryId": 4, - "url": "https://aax.media/", - "companyId": null - }, - "ab_tasty": { - "name": "AB Tasty", - "categoryId": 6, - "url": "https://en.abtasty.com", - "companyId": "ab_tasty" - }, - "abc": { - "name": "Australian Broadcasting Corporation", - "categoryId": 8, - "url": "https://www.abc.net.au/", - "companyId": "australian_government", - "source": "AdGuard" - }, - "ablida": { - "name": "ablida", - "categoryId": 4, - "url": "https://www.ablida.de/", - "companyId": null - }, - "accelia": { - "name": "Accelia", - "categoryId": 4, - "url": "http://www.durasite.net/", - "companyId": "accelia" - }, - "accengage": { - "name": "Accengage", - "categoryId": 4, - "url": "https://www.accengage.com/", - "companyId": "accengage" - }, - "accessanalyzer": { - "name": "AccessAnalyzer", - "categoryId": 6, - "url": "http://ax.xrea.com/", - "companyId": "accessanalyzer" - }, - "accesstrade": { - "name": "AccessTrade", - "categoryId": 4, - "url": "http://accesstrade.net/", - "companyId": "accesstrade" - }, - "accord_group": { - "name": "Accord Group", - "categoryId": 4, - "url": "http://www.accordgroup.co.uk/", - "companyId": "accord_group" - }, - "accordant_media": { - "name": "Accordant Media", - "categoryId": 4, - "url": "http://www.accordantmedia.com/", - "companyId": "accordant_media" - }, - "accuen_media": { - "name": "Accuen Media", - "categoryId": 4, - "url": "http://www.accuenmedia.com/", - "companyId": "accuen_media" - }, - "acestream.net": { - "name": "ActStream", - "categoryId": 12, - "url": "http://www.acestream.org/", - "companyId": null - }, - "acint.net": { - "name": "Artificial Computation Intelligence", - "categoryId": 6, - "url": "https://www.acint.net/", - "companyId": "acint" - }, - "acloudimages": { - "name": "Acloudimages", - "categoryId": 4, - "url": "http://adsterra.com", - "companyId": "adsterra" - }, - "acpm.fr": { - "name": "ACPM", - "categoryId": 6, - "url": "http://www.acpm.fr/", - "companyId": null - }, - "acquia.com": { - "name": "Acquia", - "categoryId": 6, - "url": "https://www.acquia.com/", - "companyId": null - }, - "acrweb": { - "name": "ACRWEB", - "categoryId": 7, - "url": "http://www.ziyu.net/", - "companyId": "acrweb" - }, - "actionpay": { - "name": "actionpay", - "categoryId": 4, - "url": "http://actionpay.ru/", - "companyId": "actionpay" - }, - "active_agent": { - "name": "Active Agent", - "categoryId": 4, - "url": "http://www.active-agent.com/", - "companyId": "active_agent" - }, - "active_campaign": { - "name": "Active Campaign", - "categoryId": 6, - "url": "https://www.activecampaign.com", - "companyId": "active_campaign" - }, - "active_performance": { - "name": "Active Performance", - "categoryId": 4, - "url": "http://www.active-performance.de/", - "companyId": "active_performance" - }, - "activeconversion": { - "name": "ActiveConversion", - "categoryId": 4, - "url": "http://www.activeconversion.com/", - "companyId": "activeconversion" - }, - "activecore": { - "name": "activecore", - "categoryId": 6, - "url": "http://activecore.jp/", - "companyId": "activecore" - }, - "activemeter": { - "name": "ActiveMeter", - "categoryId": 4, - "url": "http://www.activemeter.com/", - "companyId": "activeconversion" - }, - "activengage": { - "name": "ActivEngage", - "categoryId": 2, - "url": "http://www.activengage.com", - "companyId": "activengage" - }, - "acton": { - "name": "Act-On Beacon", - "categoryId": 4, - "url": "http://www.actonsoftware.com/", - "companyId": "act-on" - }, - "acuity_ads": { - "name": "Acuity Ads", - "categoryId": 4, - "url": "http://www.acuityads.com/", - "companyId": "acuity_ads" - }, - "acxiom": { - "name": "Acxiom", - "categoryId": 4, - "url": "http://www.acxiom.com", - "companyId": "acxiom" - }, - "ad-blocker.org": { - "name": "ad-blocker.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ad-center": { - "name": "Ad-Center", - "categoryId": 6, - "url": "http://www.ad-center.com", - "companyId": "ad-center" - }, - "ad-delivery.net": { - "name": "ad-delivery.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ad-sys": { - "name": "Ad-Sys", - "categoryId": 4, - "url": "http://www.ad-sys.com/", - "companyId": "ad-sys" - }, - "ad.agio": { - "name": "Ad.agio", - "categoryId": 4, - "url": "http://neodatagroup.com/", - "companyId": "neodata" - }, - "ad2click": { - "name": "Ad2Click", - "categoryId": 4, - "url": "http://www.ad2click.com/", - "companyId": "ad2click_media" - }, - "ad2games": { - "name": "ad2games", - "categoryId": 4, - "url": "http://web.ad2games.com/", - "companyId": "ad2games" - }, - "ad360": { - "name": "Ad360", - "categoryId": 4, - "url": "http://ad360.vn", - "companyId": "ad360" - }, - "ad4game": { - "name": "ad4game", - "categoryId": 4, - "url": "http://www.ad4game.com/", - "companyId": "ad4game" - }, - "ad4mat": { - "name": "ad4mat", - "categoryId": 4, - "url": "http://ad4mat.info", - "companyId": "ad4mat" - }, - "ad6media": { - "name": "ad6media", - "categoryId": 4, - "url": "https://www.ad6media.fr/", - "companyId": "ad6media" - }, - "ad_decisive": { - "name": "Ad Decisive", - "categoryId": 4, - "url": "http://www.lagardere-global-advertising.com/", - "companyId": "lagardere_advertising" - }, - "ad_dynamo": { - "name": "Ad Dynamo", - "categoryId": 4, - "url": "http://www.addynamo.com/", - "companyId": "ad_dynamo" - }, - "ad_ebis": { - "name": "AD EBiS", - "categoryId": 4, - "url": "http://www.ebis.ne.jp/en/", - "companyId": "ad_ebis" - }, - "ad_lightning": { - "name": "Ad Lightning", - "categoryId": 4, - "url": "https://www.adlightning.com/", - "companyId": "ad_lightning" - }, - "ad_magnet": { - "name": "Ad Magnet", - "categoryId": 4, - "url": "http://www.admagnet.com/", - "companyId": "ad_magnet" - }, - "ad_spirit": { - "name": "Ad Spirit", - "categoryId": 4, - "url": "http://www.adspirit.de", - "companyId": "adspirit" - }, - "adac_de": { - "name": "adac.de", - "categoryId": 8, - "url": "http://adac.de/", - "companyId": null - }, - "adacado": { - "name": "Adacado", - "categoryId": 4, - "url": "http://www.adacado.com/", - "companyId": "adacado" - }, - "adadyn": { - "name": "Adadyn", - "categoryId": 4, - "url": "http://ozonemedia.com/index.html", - "companyId": "adadyn" - }, - "adality_gmbh": { - "name": "adality GmbH", - "categoryId": 4, - "url": "https://www.arvato.com/", - "companyId": "arvato" - }, - "adalliance.io": { - "name": "Ad Alliance", - "categoryId": 4, - "url": "https://www.ad-alliance.de/", - "companyId": null - }, - "adalyser.com": { - "name": "Adalyser", - "categoryId": 6, - "url": "https://www.adalyser.com/", - "companyId": "onesoon" - }, - "adaos": { - "name": "ADAOS", - "categoryId": 4, - "url": "http://www.24-interactive.com", - "companyId": "24_interactive" - }, - "adap.tv": { - "name": "Adap.tv", - "categoryId": 4, - "url": "http://www.adap.tv/", - "companyId": "verizon" - }, - "adaptiveblue_smartlinks": { - "name": "AdaptiveBlue SmartLinks", - "categoryId": 2, - "url": "http://www.adaptiveblue.com/smartlinks.html", - "companyId": "telfie" - }, - "adara_analytics": { - "name": "ADARA Analytics", - "categoryId": 4, - "url": "http://www.adaramedia.com/", - "companyId": "adara_analytics" - }, - "adasia_holdings": { - "name": "AdAsia Holdings", - "categoryId": 4, - "url": "https://adasiaholdings.com/", - "companyId": "adasia_holdings" - }, - "adbetclickin.pink": { - "name": "adbetnet", - "categoryId": 4, - "url": "http://adbetnet.com/", - "companyId": null - }, - "adbetnet.com": { - "name": "adbetnet", - "categoryId": 4, - "url": "https://adbetnet.com/", - "companyId": null - }, - "adblade.com": { - "name": "Adblade", - "categoryId": 4, - "url": "https://adblade.com/", - "companyId": "adblade" - }, - "adbooth": { - "name": "Adbooth", - "categoryId": 4, - "url": "http://www.adbooth.com/", - "companyId": "adbooth_media_group" - }, - "adbox": { - "name": "AdBox", - "categoryId": 4, - "url": "http://www.adbox.lv/", - "companyId": "adbox" - }, - "adbrain": { - "name": "Adbrain", - "categoryId": 6, - "url": "https://www.adbrain.com/", - "companyId": "adbrain" - }, - "adbrite": { - "name": "AdBrite", - "categoryId": 4, - "url": "http://www.adbrite.com/", - "companyId": "centro" - }, - "adbull": { - "name": "AdBull", - "categoryId": 4, - "url": "http://www.adbull.com/", - "companyId": "adbull" - }, - "adbutler": { - "name": "AdButler", - "categoryId": 4, - "url": "https://www.adbutler.com/d", - "companyId": "sparklit_networks" - }, - "adc_media": { - "name": "ad:C media", - "categoryId": 4, - "url": "http://www.adcmedia.de/en/", - "companyId": "ad:c_media" - }, - "adcash": { - "name": "Adcash", - "categoryId": 4, - "url": "http://www.adcash.com", - "companyId": "adcash" - }, - "adchakra": { - "name": "AdChakra", - "categoryId": 6, - "url": "http://adchakra.com/", - "companyId": "adchakra" - }, - "adchina": { - "name": "AdChina", - "categoryId": 4, - "url": "http://www.adchina.com/", - "companyId": null, - "source": "AdGuard" - }, - "adcito": { - "name": "Adcito", - "categoryId": 4, - "url": "http://adcito.com/", - "companyId": "adcito" - }, - "adclear": { - "name": "AdClear", - "categoryId": 4, - "url": "http://www.adclear.de/en/home.html", - "companyId": "adclear" - }, - "adclerks": { - "name": "Adclerks", - "categoryId": 4, - "url": "https://adclerks.com/", - "companyId": "adclerks" - }, - "adclickmedia": { - "name": "AdClickMedia", - "categoryId": 4, - "url": "http://www.adclickmedia.com/", - "companyId": "adclickmedia" - }, - "adclickzone": { - "name": "AdClickZone", - "categoryId": 4, - "url": "http://www.adclickzone.com/", - "companyId": "adclickzone" - }, - "adcloud": { - "name": "adcloud", - "categoryId": 4, - "url": "https://ad-cloud.jp", - "companyId": "adcloud" - }, - "adcolony": { - "name": "AdColony", - "categoryId": 4, - "url": "https://www.adcolony.com/history-of-adcolony/", - "companyId": "digital_turbine", - "source": "AdGuard" - }, - "adconion": { - "name": "Adconion", - "categoryId": 4, - "url": "http://www.adconion.com/", - "companyId": "singtel" - }, - "adcrowd": { - "name": "Adcrowd", - "categoryId": 4, - "url": "https://www.adcrowd.com", - "companyId": "adcrowd" - }, - "adcurve": { - "name": "AdCurve", - "categoryId": 4, - "url": "http://www.shop2market.com/", - "companyId": "adcurve" - }, - "add_to_calendar": { - "name": "Add To Calendar", - "categoryId": 2, - "url": "http://addtocalendar.com/", - "companyId": "addtocalendar" - }, - "addaptive": { - "name": "Addaptive", - "categoryId": 4, - "url": "http://www.datapointmedia.com/", - "companyId": "addaptive" - }, - "addefend": { - "name": "AdDefend", - "categoryId": 4, - "url": "https://www.addefend.com/", - "companyId": null - }, - "addfreestats": { - "name": "AddFreeStats", - "categoryId": 6, - "url": "http://www.addfreestats.com/", - "companyId": "3dstats" - }, - "addinto": { - "name": "AddInto", - "categoryId": 2, - "url": "http://www.addinto.com/", - "companyId": "addinto" - }, - "addshoppers": { - "name": "AddShoppers", - "categoryId": 7, - "url": "http://www.addshoppers.com/", - "companyId": "addshoppers" - }, - "addthis": { - "name": "AddThis", - "categoryId": 4, - "url": "http://www.addthis.com/", - "companyId": "oracle" - }, - "addvalue": { - "name": "Addvalue", - "categoryId": 6, - "url": "http://www.addvalue.de/en/", - "companyId": "addvalue.de" - }, - "addyon": { - "name": "AddyON", - "categoryId": 4, - "url": "http://www.addyon.com/homepage.php", - "companyId": "addyon" - }, - "adeasy": { - "name": "AdEasy", - "categoryId": 4, - "url": "http://www.adeasy.ru/", - "companyId": "adeasy" - }, - "adelphic": { - "name": "Adelphic", - "categoryId": 6, - "url": "http://www.adelphic.com/", - "companyId": "adelphic" - }, - "adengage": { - "name": "AdEngage", - "categoryId": 4, - "url": "http://www.adengage.com", - "companyId": "synacor" - }, - "adespresso": { - "name": "AdEspresso", - "categoryId": 4, - "url": "http://adespresso.com", - "companyId": "adespresso" - }, - "adexcite": { - "name": "AdExcite", - "categoryId": 4, - "url": "http://adexcite.com", - "companyId": "adexcite" - }, - "adextent": { - "name": "AdExtent", - "categoryId": 4, - "url": "http://www.adextent.com/", - "companyId": "adextent" - }, - "adf.ly": { - "name": "AdF.ly", - "categoryId": 4, - "url": "http://adf.ly/", - "companyId": "adf.ly" - }, - "adfalcon": { - "name": "AdFalcon", - "categoryId": 4, - "url": "http://www.adfalcon.com/", - "companyId": "adfalcon" - }, - "adfocus": { - "name": "AdFocus", - "categoryId": 4, - "url": "http://adfoc.us/", - "companyId": "adfoc.us" - }, - "adforgames": { - "name": "AdForGames", - "categoryId": 4, - "url": "http://www.adforgames.com/", - "companyId": "adforgames" - }, - "adform": { - "name": "Adform", - "categoryId": 4, - "url": "http://www.adform.com", - "companyId": "adform" - }, - "adfox": { - "name": "AdFox", - "categoryId": 4, - "url": "http://adfox.ru", - "companyId": "yandex" - }, - "adfreestyle": { - "name": "adFreestyle", - "categoryId": 4, - "url": "http://www.adfreestyle.pl/", - "companyId": "adfreestyle" - }, - "adfront": { - "name": "AdFront", - "categoryId": 4, - "url": "http://buysellads.com/", - "companyId": "buysellads.com" - }, - "adfrontiers": { - "name": "AdFrontiers", - "categoryId": 4, - "url": "http://www.adfrontiers.com/", - "companyId": "adfrontiers" - }, - "adgear": { - "name": "AdGear", - "categoryId": 4, - "url": "http://adgear.com/", - "companyId": "samsung" - }, - "adgebra": { - "name": "Adgebra", - "categoryId": 4, - "url": "https://adgebra.in/", - "companyId": "adgebra" - }, - "adgenie": { - "name": "adGENIE", - "categoryId": 4, - "url": "http://www.adgenie.co.uk/", - "companyId": "ve" - }, - "adgile": { - "name": "Adgile", - "categoryId": 4, - "url": "http://www.adgile.com/", - "companyId": "adgile_media" - }, - "adglare.net": { - "name": "Adglare", - "categoryId": 4, - "url": "https://www.adglare.com/", - "companyId": null - }, - "adglue": { - "name": "Adglue", - "categoryId": 4, - "url": "http://admans.de/de.html", - "companyId": "admans" - }, - "adgoal": { - "name": "adgoal", - "categoryId": 4, - "url": "http://www.adgoal.de/", - "companyId": "adgoal" - }, - "adgorithms": { - "name": "Adgorithms", - "categoryId": 4, - "url": "http://www.adgorithms.com/", - "companyId": "albert" - }, - "adgoto": { - "name": "ADGoto", - "categoryId": 4, - "url": "http://adgoto.com/", - "companyId": "adgoto" - }, - "adguard": { - "name": "AdGuard", - "categoryId": 8, - "url": "https://adguard.com/", - "companyId": "adguard", - "source": "AdGuard" - }, - "adguard_dns": { - "name": "AdGuard DNS", - "categoryId": 8, - "url": "https://adguard-dns.io/", - "companyId": "adguard", - "source": "AdGuard" - }, - "adguard_vpn": { - "name": "AdGuard VPN", - "categoryId": 8, - "url": "https://adguard-vpn.com/", - "companyId": "adguard", - "source": "AdGuard" - }, - "adhands": { - "name": "AdHands", - "categoryId": 4, - "url": "http://promo.adhands.ru/", - "companyId": "adhands" - }, - "adhese": { - "name": "Adhese", - "categoryId": 4, - "url": "http://adhese.com", - "companyId": "adhese" - }, - "adhitz": { - "name": "AdHitz", - "categoryId": 4, - "url": "http://www.adhitz.com/", - "companyId": "adhitz" - }, - "adhood": { - "name": "adhood", - "categoryId": 4, - "url": "http://www.adhood.com/", - "companyId": "adhood" - }, - "adify": { - "name": "Adify", - "categoryId": 4, - "url": "http://www.adify.com/", - "companyId": "cox_enterpries" - }, - "adikteev": { - "name": "Adikteev", - "categoryId": 4, - "url": "http://www.adikteev.com/", - "companyId": "adikteev" - }, - "adimpact": { - "name": "Adimpact", - "categoryId": 4, - "url": "http://www.adimpact.com/", - "companyId": "adimpact" - }, - "adinch": { - "name": "Adinch", - "categoryId": 4, - "url": "http://adinch.com/", - "companyId": "adinch" - }, - "adition": { - "name": "Adition", - "categoryId": 4, - "url": "http://en.adition.com/", - "companyId": "prosieben_sat1" - }, - "adjal": { - "name": "Adjal", - "categoryId": 4, - "url": "http://adjal.com/", - "companyId": "marketing_adjal" - }, - "adjs": { - "name": "ADJS", - "categoryId": 4, - "url": "https://github.com/widgital/adjs", - "companyId": "adjs" - }, - "adjug": { - "name": "AdJug", - "categoryId": 4, - "url": "http://www.adjug.com/", - "companyId": "adjug" - }, - "adjust": { - "name": "Adjust GmbH", - "categoryId": 101, - "url": "https://www.adjust.com/", - "companyId": "applovin", - "source": "AdGuard" - }, - "adk2": { - "name": "adk2", - "categoryId": 4, - "url": "http://www.adk2.com/", - "companyId": "adk2_plymedia" - }, - "adklip": { - "name": "adklip", - "categoryId": 4, - "url": "http://adklip.com", - "companyId": "adklip" - }, - "adknowledge": { - "name": "Adknowledge", - "categoryId": 4, - "url": "http://www.adknowledge.com/", - "companyId": "adknowledge" - }, - "adkontekst": { - "name": "Adkontekst", - "categoryId": 4, - "url": "http://www.en.adkontekst.pl/", - "companyId": "adkontekst" - }, - "adkontekst.pl": { - "name": "Adkontekst", - "categoryId": 4, - "url": "http://netsprint.eu/", - "companyId": "netsprint" - }, - "adlabs": { - "name": "AdLabs", - "categoryId": 4, - "url": "https://www.adlabs.ru/", - "companyId": "adlabs" - }, - "adlantic": { - "name": "AdLantic", - "categoryId": 4, - "url": "http://www.adlantic.nl/", - "companyId": "adlantic_online_advertising" - }, - "adlantis": { - "name": "AdLantis", - "categoryId": 4, - "url": "http://www.adlantis.jp/", - "companyId": "adlantis" - }, - "adless": { - "name": "Adless", - "categoryId": 4, - "url": "https://www.adless.io/", - "companyId": "adless" - }, - "adlive_header_bidding": { - "name": "Adlive Header Bidding", - "categoryId": 4, - "url": "http://adlive.io/", - "companyId": "adlive" - }, - "adloox": { - "name": "Adloox", - "categoryId": 4, - "url": "http://www.adloox.com", - "companyId": "adloox" - }, - "admachine": { - "name": "AdMachine", - "categoryId": 4, - "url": "https://admachine.co/", - "companyId": null - }, - "adman": { - "name": "ADMAN", - "categoryId": 4, - "url": "http://www.adman.gr/", - "companyId": "adman" - }, - "adman_media": { - "name": "ADman Media", - "categoryId": 4, - "url": "http://www.admanmedia.com/", - "companyId": "ad_man_media" - }, - "admantx.com": { - "name": "ADmantX", - "categoryId": 4, - "url": "http://www.admantx.com/", - "companyId": "expert_system_spa" - }, - "admaster": { - "name": "AdMaster", - "categoryId": 4, - "url": "http://admaster.net", - "companyId": "admaster" - }, - "admaster.cn": { - "name": "AdMaster.cn", - "categoryId": 4, - "url": "http://www.admaster.com.cn/", - "companyId": "admaster" - }, - "admatic": { - "name": "Admatic", - "categoryId": 4, - "url": "http://www.admatic.com.tr/#1page", - "companyId": "admatic" - }, - "admatrix": { - "name": "Admatrix", - "categoryId": 4, - "url": "https://admatrix.jp/login#block01", - "companyId": "admatrix" - }, - "admax": { - "name": "Admax", - "categoryId": 4, - "url": "http://www.admaxnetwork.com/index.php", - "companyId": "komli" - }, - "admaxim": { - "name": "AdMaxim", - "categoryId": 4, - "url": "http://admaxim.com/", - "companyId": "admaxim" - }, - "admaya": { - "name": "Admaya", - "categoryId": 4, - "url": "http://www.admaya.in/", - "companyId": "admaya" - }, - "admedia": { - "name": "AdMedia", - "categoryId": 4, - "url": "http://admedia.com/", - "companyId": "admedia" - }, - "admedo_com": { - "name": "Admedo", - "categoryId": 4, - "url": "http://admedo.com/", - "companyId": "admedo" - }, - "admeira.ch": { - "name": "AdMeira", - "categoryId": 4, - "url": "http://admeira.ch/", - "companyId": "admeira" - }, - "admeld": { - "name": "AdMeld", - "categoryId": 4, - "url": "http://www.admeld.com", - "companyId": "google" - }, - "admeo": { - "name": "Admeo", - "categoryId": 4, - "url": "http://admeo.ru/", - "companyId": "admeo.ru" - }, - "admeta": { - "name": "Admeta", - "categoryId": 4, - "url": "http://www.admeta.com/", - "companyId": "admeta" - }, - "admicro": { - "name": "AdMicro", - "categoryId": 4, - "url": "http://www.admicro.vn/", - "companyId": "admicro" - }, - "admitad.com": { - "name": "Admitad", - "categoryId": 4, - "url": "https://www.admitad.com/en/#", - "companyId": "admitad" - }, - "admixer": { - "name": "Admixer", - "categoryId": 4, - "url": "https://admixer.com/", - "companyId": "admixer", - "source": "AdGuard" - }, - "admixer.net": { - "name": "Admixer", - "categoryId": 4, - "url": "https://admixer.net/", - "companyId": "admixer" - }, - "admized": { - "name": "ADMIZED", - "categoryId": 8, - "url": null, - "companyId": null - }, - "admo.tv": { - "name": "Admo.tv", - "categoryId": 4, - "url": "https://admo.tv/", - "companyId": "admo.tv" - }, - "admob": { - "name": "AdMob", - "categoryId": 4, - "url": "http://www.admob.com/", - "companyId": "google" - }, - "admost": { - "name": "adMOST", - "categoryId": 4, - "url": "http://www.admost.com/", - "companyId": "admost" - }, - "admotion": { - "name": "Admotion", - "categoryId": 4, - "url": "http://www.admotionus.com/", - "companyId": "admotion" - }, - "admulti": { - "name": "ADmulti", - "categoryId": 4, - "url": "http://admulti.com", - "companyId": "admulti" - }, - "adnegah": { - "name": "Adnegah", - "categoryId": 4, - "url": "https://adnegah.net/", - "companyId": "adnegah" - }, - "adnet": { - "name": "Adnet", - "categoryId": 4, - "url": "http://www.adnet.vn/", - "companyId": "adnet" - }, - "adnet.de": { - "name": "adNET.de", - "categoryId": 4, - "url": "http://www.adnet.de", - "companyId": "adnet.de" - }, - "adnet_media": { - "name": "Adnet Media", - "categoryId": 4, - "url": "http://www.adnetmedia.lt/", - "companyId": "adnet_media" - }, - "adnetwork.net": { - "name": "AdNetwork.net", - "categoryId": 4, - "url": "http://www.adnetwork.net/", - "companyId": "adnetwork.net" - }, - "adnetworkperformance.com": { - "name": "adnetworkperformance.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "adnexio": { - "name": "AdNexio", - "categoryId": 4, - "url": "http://adnexio.com/", - "companyId": "adnexio" - }, - "adnium.com": { - "name": "Adnium", - "categoryId": 4, - "url": "https://adnium.com/", - "companyId": null - }, - "adnologies": { - "name": "Adnologies", - "categoryId": 4, - "url": "http://www.adnologies.com/", - "companyId": "adnologies_gmbh" - }, - "adnow": { - "name": "Adnow", - "categoryId": 4, - "url": "http://adnow.com/", - "companyId": "adnow" - }, - "adnymics": { - "name": "Adnymics", - "categoryId": 4, - "url": "http://adnymics.com/en/", - "companyId": "adnymics" - }, - "adobe_audience_manager": { - "name": "Adobe Audience Manager", - "categoryId": 4, - "url": "http://www.demdex.com/", - "companyId": "adobe" - }, - "adobe_developer": { - "name": "Adobe Developer", - "categoryId": 8, - "url": "https://developer.adobe.com/", - "companyId": "adobe", - "source": "AdGuard" - }, - "adobe_dynamic_media": { - "name": "Adobe Dynamic Media", - "categoryId": 4, - "url": "http://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_dynamic_tag_management": { - "name": "Adobe Dynamic Tag Management", - "categoryId": 5, - "url": "https://dtm.adobe.com/sign_in", - "companyId": "adobe" - }, - "adobe_experience_cloud": { - "name": "Adobe Experience Cloud", - "categoryId": 6, - "url": "https://business.adobe.com/", - "companyId": "adobe", - "source": "AdGuard" - }, - "adobe_experience_league": { - "name": "Adobe Experience League", - "categoryId": 6, - "url": "https://experienceleague.adobe.com/", - "companyId": "adobe", - "source": "AdGuard" - }, - "adobe_login": { - "name": "Adobe Login", - "categoryId": 2, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_tagmanager": { - "name": "Adobe TagManager", - "categoryId": 4, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_test_and_target": { - "name": "Adobe Target", - "categoryId": 4, - "url": "https://www.adobe.com/marketing/target.html", - "companyId": "adobe" - }, - "adobe_typekit": { - "name": "Adobe Typekit", - "categoryId": 5, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adocean": { - "name": "AdOcean", - "categoryId": 4, - "url": "http://adocean.cz/en", - "companyId": "adocean" - }, - "adometry": { - "name": "Adometry", - "categoryId": 4, - "url": "http://www.adometry.com/", - "companyId": "google" - }, - "adomik": { - "name": "Adomik", - "categoryId": 4, - "url": null, - "companyId": null - }, - "adon_network": { - "name": "AdOn Network", - "categoryId": 4, - "url": "http://www.adonnetwork.com/", - "companyId": "adon_network" - }, - "adonion": { - "name": "AdOnion", - "categoryId": 4, - "url": "http://www.adonion.com/", - "companyId": "adonion" - }, - "adonly": { - "name": "AdOnly", - "categoryId": 4, - "url": "https://gloadmarket.com/", - "companyId": "adonly" - }, - "adoperator": { - "name": "AdOperator", - "categoryId": 4, - "url": "http://www.adoperator.com/start/", - "companyId": "adoperator" - }, - "adoric": { - "name": "Adoric", - "categoryId": 6, - "url": "https://adoric.com/", - "companyId": "adoric" - }, - "adorika": { - "name": "Adorika", - "categoryId": 4, - "url": "http://www.adorika.com/", - "companyId": "adorika" - }, - "adosia": { - "name": "Adosia", - "categoryId": 4, - "url": "https://adosia.com", - "companyId": "adosia" - }, - "adotmob.com": { - "name": "Adotmob", - "categoryId": 4, - "url": "https://adotmob.com/", - "companyId": "adotmob" - }, - "adotube": { - "name": "AdoTube", - "categoryId": 4, - "url": "http://www.adotube.com", - "companyId": "exponential_interactive" - }, - "adparlor": { - "name": "AdParlor", - "categoryId": 4, - "url": "http://www.adparlor.com/", - "companyId": "fluent" - }, - "adpartner": { - "name": "adpartner", - "categoryId": 4, - "url": "http://adpartner.pro/", - "companyId": "adpartner" - }, - "adpeeps": { - "name": "Ad Peeps", - "categoryId": 4, - "url": "http://www.adpeeps.com/", - "companyId": "ad_peeps" - }, - "adperfect": { - "name": "AdPerfect", - "categoryId": 4, - "url": "http://www.adperfect.com/", - "companyId": "adperfect" - }, - "adperium": { - "name": "AdPerium", - "categoryId": 4, - "url": "http://www.adperium.com/", - "companyId": "adperium" - }, - "adpilot": { - "name": "AdPilot", - "categoryId": 4, - "url": "http://www.adpilotgroup.com/", - "companyId": "adpilot" - }, - "adplan": { - "name": "AdPlan", - "categoryId": 4, - "url": "http://www.adplan.ne.jp/", - "companyId": "adplan" - }, - "adplus": { - "name": "ADPLUS", - "categoryId": 4, - "url": "http://www.adplus.co.id/", - "companyId": "adplus" - }, - "adprofex": { - "name": "AdProfex", - "categoryId": 4, - "url": "https://adprofex.com/", - "companyId": "adprofex", - "source": "AdGuard" - }, - "adprofy": { - "name": "AdProfy", - "categoryId": 4, - "url": "http://adprofy.com/", - "companyId": "adprofy" - }, - "adpulse": { - "name": "AdPulse", - "categoryId": 4, - "url": "http://adpulse.ir/", - "companyId": "adpulse.ir" - }, - "adpv": { - "name": "Adpv", - "categoryId": 4, - "url": "http://www.adpv.com/", - "companyId": "adpv" - }, - "adreactor": { - "name": "AdReactor", - "categoryId": 4, - "url": "http://www.adreactor.com/", - "companyId": "adreactor" - }, - "adrecord": { - "name": "Adrecord", - "categoryId": 4, - "url": "http://www.adrecord.com/", - "companyId": "adrecord" - }, - "adrecover": { - "name": "AdRecover", - "categoryId": 4, - "url": "https://www.adrecover.com/", - "companyId": "adpushup" - }, - "adresult": { - "name": "ADResult", - "categoryId": 4, - "url": "http://www.adresult.jp/", - "companyId": "adresult" - }, - "adriver": { - "name": "AdRiver", - "categoryId": 4, - "url": "http://www.adriver.ru/", - "companyId": "ad_river" - }, - "adroll": { - "name": "AdRoll", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adroll_pixel": { - "name": "AdRoll Pixel", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adroll_roundtrip": { - "name": "AdRoll Roundtrip", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adrom": { - "name": "adRom", - "categoryId": 4, - "url": "http://www.adrom.net/", - "companyId": null - }, - "adru.net": { - "name": "adru.net", - "categoryId": 4, - "url": "http://adru.net/", - "companyId": "adru.net" - }, - "adrunnr": { - "name": "AdRunnr", - "categoryId": 4, - "url": "https://adrunnr.com/", - "companyId": "adrunnr" - }, - "adsame": { - "name": "Adsame", - "categoryId": 4, - "url": "http://adsame.com/", - "companyId": "adsame" - }, - "adsbookie": { - "name": "AdsBookie", - "categoryId": 4, - "url": "http://adsbookie.com/", - "companyId": null - }, - "adscale": { - "name": "AdScale", - "categoryId": 4, - "url": "http://www.adscale.de/", - "companyId": "stroer" - }, - "adscience": { - "name": "Adscience", - "categoryId": 4, - "url": "http://www.adscience.nl/", - "companyId": "adscience" - }, - "adsco.re": { - "name": "Adscore", - "categoryId": 4, - "url": "https://www.adscore.com/", - "companyId": null - }, - "adsensecamp": { - "name": "AdsenseCamp", - "categoryId": 4, - "url": "http://adsensecamp.com", - "companyId": "adsensecamp" - }, - "adserverpub": { - "name": "AdServerPub", - "categoryId": 4, - "url": "http://www.adserverpub.com/", - "companyId": "adserverpub" - }, - "adservice_media": { - "name": "Adservice Media", - "categoryId": 4, - "url": "http://www.adservicemedia.com/", - "companyId": "adservice_media" - }, - "adsfactor": { - "name": "Adsfactor", - "categoryId": 4, - "url": "http://www.adsfactor.com/", - "companyId": "pixels_asia" - }, - "adside": { - "name": "AdSide", - "categoryId": 4, - "url": "http://www.adside.com/", - "companyId": "adside" - }, - "adskeeper": { - "name": "AdsKeeper", - "categoryId": 4, - "url": "http://adskeeper.co.uk/", - "companyId": "adskeeper" - }, - "adskom": { - "name": "ADSKOM", - "categoryId": 4, - "url": "http://adskom.com/", - "companyId": "adskom" - }, - "adslot": { - "name": "Adslot", - "categoryId": 4, - "url": "http://www.adslot.com/", - "companyId": "adslot" - }, - "adsnative": { - "name": "adsnative", - "categoryId": 4, - "url": "http://www.adsnative.com/", - "companyId": "adsnative" - }, - "adsniper.ru": { - "name": "AdSniper", - "categoryId": 4, - "url": "http://ad-sniper.com/", - "companyId": "adsniper" - }, - "adspeed": { - "name": "AdSpeed", - "categoryId": 4, - "url": "http://www.adspeed.com/", - "companyId": "adspeed" - }, - "adspyglass": { - "name": "AdSpyglass", - "categoryId": 4, - "url": "https://www.adspyglass.com/", - "companyId": "adspyglass" - }, - "adstage": { - "name": "AdStage", - "categoryId": 4, - "url": "http://www.adstage.io/", - "companyId": "adstage" - }, - "adstanding": { - "name": "AdStanding", - "categoryId": 4, - "url": "http://www.adstanding.com/en/", - "companyId": "adstanding" - }, - "adstars": { - "name": "Adstars", - "categoryId": 4, - "url": "http://adstars.co.id", - "companyId": "adstars" - }, - "adstir": { - "name": "adstir", - "categoryId": 4, - "url": "https://en.ad-stir.com/", - "companyId": "united_inc" - }, - "adsupply": { - "name": "AdSupply", - "categoryId": 4, - "url": "http://www.adsupply.com/", - "companyId": "adsupply" - }, - "adswizz": { - "name": "AdsWizz", - "categoryId": 4, - "url": "http://www.adswizz.com/", - "companyId": "adswizz" - }, - "adtaily": { - "name": "AdTaily", - "categoryId": 4, - "url": "http://www.adtaily.pl/", - "companyId": "adtaily" - }, - "adtarget.me": { - "name": "Adtarget.me", - "categoryId": 4, - "url": "http://www.adtarget.me/", - "companyId": "adtarget.me" - }, - "adtech": { - "name": "ADTECH", - "categoryId": 6, - "url": "http://www.adtechus.com/", - "companyId": "verizon" - }, - "adtegrity": { - "name": "Adtegrity", - "categoryId": 4, - "url": "http://www.adtegrity.com/", - "companyId": "adtegrity" - }, - "adtelligence.de": { - "name": "Adtelligence", - "categoryId": 4, - "url": "https://adtelligence.com/", - "companyId": null - }, - "adtheorent": { - "name": "Adtheorent", - "categoryId": 4, - "url": "http://adtheorent.com/", - "companyId": "adtheorant" - }, - "adthink": { - "name": "Adthink", - "categoryId": 4, - "url": "https://adthink.com/", - "companyId": "adthink" - }, - "adtiger": { - "name": "AdTiger", - "categoryId": 4, - "url": "http://www.adtiger.de/", - "companyId": "adtiger" - }, - "adtima": { - "name": "Adtima", - "categoryId": 4, - "url": "http://adtima.vn/", - "companyId": "adtima" - }, - "adtng.com": { - "name": "adtng.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "adtoma": { - "name": "Adtoma", - "categoryId": 4, - "url": "http://www.adtoma.com/", - "companyId": "adtoma" - }, - "adtr02.com": { - "name": "adtr02.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "adtraction": { - "name": "Adtraction", - "categoryId": 4, - "url": "http://adtraction.com/", - "companyId": "adtraction" - }, - "adtraxx": { - "name": "AdTraxx", - "categoryId": 4, - "url": "https://www1.adtraxx.de/", - "companyId": "adtrax" - }, - "adtriba.com": { - "name": "AdTriba", - "categoryId": 6, - "url": "https://www.adtriba.com/", - "companyId": null - }, - "adtrue": { - "name": "Adtrue", - "categoryId": 4, - "url": "http://adtrue.com/", - "companyId": "adtrue" - }, - "adtrustmedia": { - "name": "AdTrustMedia", - "categoryId": 4, - "url": "https://adtrustmedia.com/", - "companyId": "adtrustmedia" - }, - "adtube": { - "name": "AdTube", - "categoryId": 4, - "url": "http://adtube.ir/", - "companyId": "adtube" - }, - "adult_webmaster_empire": { - "name": "Adult Webmaster Empire", - "categoryId": 3, - "url": "http://www.awempire.com/", - "companyId": "adult_webmaster_empire" - }, - "adultadworld": { - "name": "AdultAdWorld", - "categoryId": 3, - "url": "http://adultadworld.com/", - "companyId": "adult_adworld" - }, - "adup-tech.com": { - "name": "AdUp Technology", - "categoryId": 4, - "url": "https://www.adup-tech.com/", - "companyId": "adup_technology" - }, - "advaction": { - "name": "Advaction", - "categoryId": 4, - "url": "http://advaction.ru/", - "companyId": "advaction" - }, - "advalo": { - "name": "Advalo", - "categoryId": 4, - "url": "https://www.advalo.com", - "companyId": "advalo" - }, - "advanced_hosters": { - "name": "Advanced Hosters", - "categoryId": 9, - "url": "https://advancedhosters.com/", - "companyId": null - }, - "advark": { - "name": "Advark", - "categoryId": 4, - "url": "https://advarkads.com/", - "companyId": "advark" - }, - "adventori": { - "name": "ADventori", - "categoryId": 8, - "url": "https://www.adventori.com/", - "companyId": "adventori" - }, - "adverline": { - "name": "Adverline", - "categoryId": 4, - "url": "http://www.adverline.com/", - "companyId": "adverline" - }, - "adversal": { - "name": "Adversal", - "categoryId": 4, - "url": "https://www.adversal.com/", - "companyId": "adversal" - }, - "adverserve": { - "name": "adverServe", - "categoryId": 4, - "url": "http://www.adverserve.com/", - "companyId": "adverserve" - }, - "adverteerdirect": { - "name": "Adverteerdirect", - "categoryId": 4, - "url": "http://www.adverteerdirect.nl/", - "companyId": "adverteerdirect" - }, - "adverticum": { - "name": "Adverticum", - "categoryId": 4, - "url": "https://adverticum.net/english/", - "companyId": "adverticum" - }, - "advertise.com": { - "name": "Advertise.com", - "categoryId": 4, - "url": "http://advertise.com/", - "companyId": "advertise.com" - }, - "advertisespace": { - "name": "AdvertiseSpace", - "categoryId": 4, - "url": "http://www.advertisespace.com/", - "companyId": "advertisespace" - }, - "advertising.com": { - "name": "Verizon Media", - "categoryId": 4, - "url": "https://www.verizonmedia.com/", - "companyId": "verizon" - }, - "advertlets": { - "name": "Advertlets", - "categoryId": 4, - "url": "http://www.advertlets.com/", - "companyId": "advertlets" - }, - "advertserve": { - "name": "AdvertServe", - "categoryId": 4, - "url": "https://secure.advertserve.com/", - "companyId": "advertserve" - }, - "advidi": { - "name": "Advidi", - "categoryId": 4, - "url": "http://advidi.com/", - "companyId": "advidi" - }, - "advmaker.ru": { - "name": "advmaker.ru", - "categoryId": 4, - "url": "http://advmaker.ru/", - "companyId": "advmaker.ru" - }, - "advolution": { - "name": "Advolution", - "categoryId": 4, - "url": "http://www.advolution.de", - "companyId": "advolution" - }, - "adwebster": { - "name": "adwebster", - "categoryId": 4, - "url": "http://adwebster.com", - "companyId": "adwebster" - }, - "adwit": { - "name": "Adwit", - "categoryId": 4, - "url": "http://www.adwitserver.com", - "companyId": "adwit" - }, - "adworx.at": { - "name": "ADworx", - "categoryId": 4, - "url": "http://www.adworx.at/", - "companyId": "ors" - }, - "adworxs.net": { - "name": "adworxs.net", - "categoryId": 4, - "url": "http://www.adworxs.net/?lang=en", - "companyId": null - }, - "adxion": { - "name": "adXion", - "categoryId": 4, - "url": "http://www.adxion.com", - "companyId": "adxion" - }, - "adxpansion": { - "name": "AdXpansion", - "categoryId": 3, - "url": "http://www.adxpansion.com/", - "companyId": "adxpansion" - }, - "adxpose": { - "name": "AdXpose", - "categoryId": 4, - "url": "http://www.adxpose.com/home.page", - "companyId": "comscore" - }, - "adxprtz.com": { - "name": "adxprtz.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "adyoulike": { - "name": "Adyoulike", - "categoryId": 4, - "url": "http://www.adyoulike.com/", - "companyId": "adyoulike" - }, - "adzerk": { - "name": "Adzerk", - "categoryId": 4, - "url": "http://adzerk.com/", - "companyId": "adzerk" - }, - "adzly": { - "name": "adzly", - "categoryId": 4, - "url": "http://www.adzly.com/", - "companyId": "adzly" - }, - "aemediatraffic": { - "name": "Aemediatraffic", - "categoryId": 6, - "url": null, - "companyId": null - }, - "aerify_media": { - "name": "Aerify Media", - "categoryId": 4, - "url": "http://aerifymedia.com/", - "companyId": "aerify_media" - }, - "aeris_weather": { - "name": "Aeris Weather", - "categoryId": 2, - "url": "https://www.aerisweather.com/", - "companyId": "aerisweather" - }, - "affectv": { - "name": "Hybrid Theory", - "categoryId": 4, - "url": "https://hybridtheory.com/", - "companyId": "affectv" - }, - "affilbox": { - "name": "Affilbox", - "categoryId": 4, - "url": "https://affilbox.com/", - "companyId": "affilbox", - "source": "AdGuard" - }, - "affiliate-b": { - "name": "Affiliate-B", - "categoryId": 4, - "url": "https://www.affiliate-b.com/", - "companyId": "affiliate_b" - }, - "affiliate4you": { - "name": "Affiliate4You", - "categoryId": 4, - "url": "http://www.affiliate4you.nl/", - "companyId": "family_blend" - }, - "affiliatebuzz": { - "name": "AffiliateBuzz", - "categoryId": 4, - "url": "http://www.affiliatebuzz.com/", - "companyId": "affiliatebuzz" - }, - "affiliatefuture": { - "name": "AffiliateFuture", - "categoryId": 4, - "url": "http://www.affiliatefuture.com", - "companyId": "affiliatefuture" - }, - "affiliatelounge": { - "name": "AffiliateLounge", - "categoryId": 4, - "url": "http://www.affiliatelounge.com/", - "companyId": "betsson_group_affiliates" - }, - "affiliation_france": { - "name": "Affiliation France", - "categoryId": 4, - "url": "http://www.affiliation-france.com/", - "companyId": "affiliation-france" - }, - "affiliator": { - "name": "Affiliator", - "categoryId": 4, - "url": "http://www.affiliator.com/", - "companyId": "affiliator" - }, - "affiliaweb": { - "name": "Affiliaweb", - "categoryId": 4, - "url": "http://affiliaweb.fr/", - "companyId": "affiliaweb" - }, - "affilinet": { - "name": "affilinet", - "categoryId": 4, - "url": "https://www.affili.net/", - "companyId": "axel_springer" - }, - "affimax": { - "name": "AffiMax", - "categoryId": 4, - "url": "https://www.affimax.de", - "companyId": "affimax" - }, - "affinity": { - "name": "Affinity", - "categoryId": 4, - "url": "http://www.affinity.com/", - "companyId": "affinity" - }, - "affinity.by": { - "name": "Affinity.by", - "categoryId": 4, - "url": "http://affinity.by", - "companyId": "affinity_digital_agency" - }, - "affiz_cpm": { - "name": "Affiz CPM", - "categoryId": 4, - "url": "http://cpm.affiz.com/home", - "companyId": "affiz_cpm" - }, - "afftrack": { - "name": "Afftrack", - "categoryId": 6, - "url": "http://www.afftrack.com/", - "companyId": "afftrack" - }, - "afgr2.com": { - "name": "afgr2.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "afilio": { - "name": "Afilio", - "categoryId": 6, - "url": "http://afilio.com.br/", - "companyId": "afilio" - }, - "afs_analystics": { - "name": "AFS Analystics", - "categoryId": 6, - "url": "https://www.afsanalytics.com/", - "companyId": "afs_analytics" - }, - "aftonbladet_ads": { - "name": "Aftonbladet Ads", - "categoryId": 4, - "url": "http://annonswebb.aftonbladet.se/", - "companyId": "aftonbladet" - }, - "aftv-serving.bid": { - "name": "aftv-serving.bid", - "categoryId": 4, - "url": null, - "companyId": null - }, - "aggregate_knowledge": { - "name": "Aggregate Knowledge", - "categoryId": 4, - "url": "http://www.aggregateknowledge.com/", - "companyId": "neustar" - }, - "agilone": { - "name": "AgilOne", - "categoryId": 6, - "url": "http://www.agilone.com/", - "companyId": "agilone" - }, - "agora": { - "name": "Agora", - "categoryId": 4, - "url": "https://www.agora.pl/", - "companyId": "agora_sa" - }, - "ahalogy": { - "name": "Ahalogy", - "categoryId": 7, - "url": "http://www.ahalogy.com/", - "companyId": "ahalogy" - }, - "ai_media_group": { - "name": "Ai Media Group", - "categoryId": 4, - "url": "http://aimediagroup.com/", - "companyId": "ai_media_group" - }, - "aidata": { - "name": "Aidata", - "categoryId": 4, - "url": "http://aidata.me/", - "companyId": "aidata" - }, - "aim4media": { - "name": "Aim4Media", - "categoryId": 4, - "url": "http://aim4media.com", - "companyId": "aim4media" - }, - "airbnb": { - "name": "Airbnb", - "categoryId": 6, - "url": "https://affiliate.withairbnb.com/", - "companyId": null - }, - "airbrake": { - "name": "Airbrake", - "categoryId": 4, - "url": "https://airbrake.io/", - "companyId": "airbrake" - }, - "airpr.com": { - "name": "AirPR", - "categoryId": 6, - "url": "https://airpr.com/", - "companyId": "airpr" - }, - "airpush": { - "name": "Airpush", - "categoryId": 4, - "url": "http://www.airpush.com/", - "companyId": "airpush" - }, - "akamai_technologies": { - "name": "Akamai Technologies", - "categoryId": 9, - "url": "https://www.akamai.com/", - "companyId": "akamai", - "source": "AdGuard" - }, - "akamoihd.net": { - "name": "akamoihd.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "akane": { - "name": "AkaNe", - "categoryId": 4, - "url": "http://akane-ad.com/", - "companyId": "akane" - }, - "akanoo": { - "name": "Akanoo", - "categoryId": 6, - "url": "http://www.akanoo.com/", - "companyId": "akanoo" - }, - "akavita": { - "name": "Akavita", - "categoryId": 4, - "url": "http://www.akavita.by/en", - "companyId": "akavita" - }, - "al_bawaba_advertising": { - "name": "Al Bawaba Advertising", - "categoryId": 4, - "url": "http://www.albawaba.com/advertising", - "companyId": "al_bawaba" - }, - "albacross": { - "name": "Albacross", - "categoryId": 4, - "url": "https://albacross.com", - "companyId": "albacross" - }, - "aldi-international.com": { - "name": "aldi-international.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "alenty": { - "name": "Alenty", - "categoryId": 4, - "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", - "companyId": "microsoft", - "source": "AdGuard" - }, - "alephd.com": { - "name": "alephd", - "categoryId": 4, - "url": "https://www.alephd.com/", - "companyId": "verizon" - }, - "alexa_metrics": { - "name": "Alexa Metrics", - "categoryId": 6, - "url": "http://www.alexa.com/", - "companyId": "amazon_associates" - }, - "alexa_traffic_rank": { - "name": "Alexa Traffic Rank", - "categoryId": 4, - "url": "http://www.alexa.com/", - "companyId": "amazon_associates" - }, - "algolia.net": { - "name": "algolia", - "categoryId": 4, - "url": "https://www.algolia.com/", - "companyId": null - }, - "algovid.com": { - "name": "algovid.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "alibaba.com": { - "name": "Alibaba", - "categoryId": 8, - "url": "http://www.alibaba.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alibaba_cloud": { - "name": "Alibaba Cloud", - "categoryId": 10, - "url": "https://www.alibabacloud.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alibaba_ucbrowser": { - "name": "UC Browser", - "categoryId": 8, - "url": "https://ucweb.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alipay.com": { - "name": "Alipay", - "categoryId": 2, - "url": "https://global.alipay.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alivechat": { - "name": "AliveChat", - "categoryId": 2, - "url": "http://www.websitealive.com/", - "companyId": "websitealive" - }, - "allegro.pl": { - "name": "Allegro", - "categoryId": 8, - "url": "https://allegro.pl", - "companyId": "allegro.pl" - }, - "allin": { - "name": "Allin", - "categoryId": 6, - "url": "http://allin.com.br/", - "companyId": "allin" - }, - "allo-pages.fr": { - "name": "Allo-Pages", - "categoryId": 2, - "url": "http://www.allo-pages.fr/", - "companyId": "links_lab" - }, - "allotraffic": { - "name": "AlloTraffic", - "categoryId": 4, - "url": "http://www.allotraffic.com/", - "companyId": "allotraffic" - }, - "allure_media": { - "name": "Allure Media", - "categoryId": 4, - "url": "http://www.alluremedia.com.au", - "companyId": "allure_media" - }, - "allyes": { - "name": "Allyes", - "categoryId": 4, - "url": "http://www.allyes.com/", - "companyId": "allyes" - }, - "alooma": { - "name": "Alooma", - "categoryId": 4, - "url": "https://www.alooma.com/", - "companyId": "alooma" - }, - "altitude_digital": { - "name": "Altitude Digital", - "categoryId": 4, - "url": "http://www.altitudedigital.com/", - "companyId": "altitude_digital" - }, - "amadesa": { - "name": "Amadesa", - "categoryId": 4, - "url": "http://www.amadesa.com/", - "companyId": "amadesa" - }, - "amap": { - "name": "Amap", - "categoryId": 2, - "url": "https://www.amap.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "amazon": { - "name": "Amazon.com", - "categoryId": 8, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_adsystem": { - "name": "Amazon Advertising", - "categoryId": 4, - "url": "https://advertising.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_associates": { - "name": "Amazon Associates", - "categoryId": 4, - "url": "http://aws.amazon.com/associates/", - "companyId": "amazon_associates" - }, - "amazon_cdn": { - "name": "Amazon CDN", - "categoryId": 9, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_cloudfront": { - "name": "Amazon CloudFront", - "categoryId": 10, - "url": "https://aws.amazon.com/cloudfront/?nc1=h_ls", - "companyId": "amazon_associates" - }, - "amazon_mobile_ads": { - "name": "Amazon Mobile Ads", - "categoryId": 4, - "url": "http://www.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_payments": { - "name": "Amazon Payments", - "categoryId": 2, - "url": "https://pay.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_video": { - "name": "Amazon Instant Video", - "categoryId": 0, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_web_services": { - "name": "Amazon Web Services", - "categoryId": 10, - "url": "https://aws.amazon.com/", - "companyId": "amazon_associates" - }, - "ambient_digital": { - "name": "Ambient Digital", - "categoryId": 4, - "url": "http://www.adnetwork.vn/", - "companyId": "ambient_digital" - }, - "amgload.net": { - "name": "amgload.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "amoad": { - "name": "AMoAd", - "categoryId": 4, - "url": "http://www.amoad.com/", - "companyId": "amoad" - }, - "amobee": { - "name": "Amobee", - "categoryId": 4, - "url": "https://www.amobee.com/", - "companyId": "singtel" - }, - "amp_platform": { - "name": "AMP Platform", - "categoryId": 4, - "url": "http://www.collective.com/", - "companyId": "collective" - }, - "amplitude": { - "name": "Amplitude", - "categoryId": 6, - "url": "https://amplitude.com/", - "companyId": "amplitude" - }, - "ampproject.org": { - "name": "AMP Project", - "categoryId": 8, - "url": "https://www.ampproject.org/", - "companyId": "google" - }, - "anametrix": { - "name": "Anametrix", - "categoryId": 6, - "url": "http://anametrix.com/", - "companyId": "anametrix" - }, - "ancestry_cdn": { - "name": "Ancestry CDN", - "categoryId": 9, - "url": "https://www.ancestry.com/", - "companyId": "ancestry" - }, - "ancora": { - "name": "Ancora", - "categoryId": 6, - "url": "http://www.ancoramediasolutions.com/", - "companyId": "ancora" - }, - "anetwork": { - "name": "Anetwork", - "categoryId": 4, - "url": "http://anetwork.ir/", - "companyId": "anetwork" - }, - "aniview.com": { - "name": "AniView", - "categoryId": 4, - "url": "https://www.aniview.com/", - "companyId": null - }, - "anonymousads": { - "name": "AnonymousAds", - "categoryId": 4, - "url": "https://a-ads.com/", - "companyId": "anonymousads" - }, - "anormal_tracker": { - "name": "Anormal Tracker", - "categoryId": 6, - "url": "http://anormal-tracker.de/", - "companyId": "anormal-tracker" - }, - "answers_cloud_service": { - "name": "Answers Cloud Service", - "categoryId": 1, - "url": "http://www.answers.com/", - "companyId": "answers.com" - }, - "ants": { - "name": "Ants", - "categoryId": 7, - "url": "http://ants.vn/en/", - "companyId": "ants" - }, - "anvato": { - "name": "Anvato", - "categoryId": 0, - "url": "https://www.anvato.com/", - "companyId": "google" - }, - "anyclip": { - "name": "AnyClip", - "categoryId": 0, - "url": "https://anyclip.com", - "companyId": "anyclip" - }, - "aol_be_on": { - "name": "AOL Be On", - "categoryId": 4, - "url": "http://beon.aolnetworks.com/", - "companyId": "verizon" - }, - "aol_cdn": { - "name": "AOL CDN", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "aol_images_cdn": { - "name": "AOL Images CDN", - "categoryId": 5, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "apa.at": { - "name": "Apa", - "categoryId": 8, - "url": "http://www.apa.at/Site/index.de.html", - "companyId": "apa" - }, - "apester": { - "name": "Apester", - "categoryId": 4, - "url": "http://apester.com/", - "companyId": "apester" - }, - "apicit.net": { - "name": "apicit.net", - "categoryId": 4, - "url": null, - "companyId": null - }, - "aplus_analytics": { - "name": "Aplus Analytics", - "categoryId": 6, - "url": "https://ww.deluxe.com/", - "companyId": "deluxe" - }, - "appcenter": { - "name": "Microsoft App Center", - "categoryId": 5, - "url": "https://appcenter.ms/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "appcues": { - "name": "Appcues", - "categoryId": 2, - "url": "https://www.appcues.com/", - "companyId": null - }, - "appdynamics": { - "name": "AppDynamics", - "categoryId": 6, - "url": "http://www.appdynamics.com", - "companyId": "appdynamics" - }, - "appier": { - "name": "Appier", - "categoryId": 4, - "url": "http://www.appier.com/en/index.html", - "companyId": "appier" - }, - "apple": { - "name": "Apple", - "categoryId": 8, - "url": "https://www.apple.com/", - "companyId": "apple", - "source": "AdGuard" - }, - "apple_ads": { - "name": "Apple Search Ads", - "categoryId": 4, - "url": "https://searchads.apple.com/", - "companyId": "apple", - "source": "AdGuard" - }, - "applifier": { - "name": "Applifier", - "categoryId": 4, - "url": "http://www.applifier.com/", - "companyId": "applifier" - }, - "applovin": { - "name": "AppLovin", - "categoryId": 4, - "url": "https://www.applovin.com", - "companyId": "applovin" - }, - "appmetrx": { - "name": "AppMetrx", - "categoryId": 4, - "url": "http://www.engago.com", - "companyId": "engago_technologies" - }, - "appnexus": { - "name": "AppNexus", - "categoryId": 4, - "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", - "companyId": "microsoft", - "source": "AdGuard" - }, - "appsflyer": { - "name": "AppsFlyer", - "categoryId": 101, - "url": "https://www.appsflyer.com/", - "companyId": "appsflyer", - "source": "AdGuard" - }, - "apptv": { - "name": "appTV", - "categoryId": 4, - "url": "http://www.apptv.com/", - "companyId": "apptv" - }, - "apture": { - "name": "Apture", - "categoryId": 2, - "url": "http://www.apture.com/", - "companyId": "google" - }, - "arcpublishing": { - "name": "Arc Publishing", - "categoryId": 6, - "url": "https://www.arcpublishing.com/", - "companyId": "arc_publishing" - }, - "ard.de": { - "name": "ard.de", - "categoryId": 0, - "url": null, - "companyId": null - }, - "are_you_a_human": { - "name": "Are You a Human", - "categoryId": 6, - "url": "https://areyouahuman.com/", - "companyId": "distil_networks" - }, - "arkoselabs.com": { - "name": "Arkose Labs", - "categoryId": 6, - "url": "https://www.arkoselabs.com/", - "companyId": null - }, - "art19": { - "name": "Art19", - "categoryId": 4, - "url": "https://art19.com/", - "companyId": "art19" - }, - "artimedia": { - "name": "Artimedia", - "categoryId": 4, - "url": "http://arti-media.net/en/", - "companyId": "artimedia" - }, - "artlebedev.ru": { - "name": "Art.Lebedev", - "categoryId": 8, - "url": "https://www.artlebedev.ru/", - "companyId": "art.lebedev_studio" - }, - "aruba_media_marketing": { - "name": "Aruba Media Marketing", - "categoryId": 4, - "url": "http://www.arubamediamarketing.it/", - "companyId": "aruba_media_marketing" - }, - "arvato_canvas_fp": { - "name": "Arvato Canvas FP", - "categoryId": 6, - "url": "https://www.arvato.com/", - "companyId": "arvato" - }, - "asambeauty.com": { - "name": "asambeauty.com", - "categoryId": 8, - "url": "https://www.asambeauty.com/", - "companyId": null - }, - "ask.com": { - "name": "Ask.com", - "categoryId": 7, - "url": null, - "companyId": null - }, - "aspnetcdn": { - "name": "Microsoft Ajax CDN", - "categoryId": 9, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "assemblyexchange": { - "name": "Assembly Exchange", - "categoryId": 4, - "url": "https://www.medialab.la/", - "companyId": "medialab", - "source": "AdGuard" - }, - "astronomer": { - "name": "Astronomer", - "categoryId": 6, - "url": "https://www.astronomer.io", - "companyId": "astronomer" - }, - "at_internet": { - "name": "AT Internet", - "categoryId": 6, - "url": "http://www.xiti.com/", - "companyId": "at_internet" - }, - "atedra": { - "name": "Atedra", - "categoryId": 4, - "url": "http://www.atedra.com/", - "companyId": "atedra" - }, - "atg_group": { - "name": "ATG Ad Tech Group", - "categoryId": 4, - "url": "https://ad-tech-group.com/", - "companyId": null - }, - "atg_optimization": { - "name": "ATG Optimization", - "categoryId": 4, - "url": "http://www.atg.com/en/products-services/optimization/", - "companyId": "oracle" - }, - "atg_recommendations": { - "name": "ATG Recommendations", - "categoryId": 4, - "url": "http://www.atg.com/en/products-services/optimization/recommendations/", - "companyId": "oracle" - }, - "atlas": { - "name": "Atlas", - "categoryId": 4, - "url": "https://atlassolutions.com", - "companyId": "facebook" - }, - "atlas_profitbuilder": { - "name": "Atlas ProfitBuilder", - "categoryId": 4, - "url": "http://www.atlassolutions.com/", - "companyId": "atlas" - }, - "atlassian.net": { - "name": "Atlassian", - "categoryId": 2, - "url": "https://www.atlassian.com/", - "companyId": "atlassian" - }, - "atlassian_marketplace": { - "name": "Atlassian Marketplace", - "categoryId": 9, - "url": "https://marketplace.atlassian.com/", - "companyId": "atlassian" - }, - "atomz_search": { - "name": "Atomz Search", - "categoryId": 2, - "url": "http://atomz.com/", - "companyId": "atomz" - }, - "atsfi_de": { - "name": "atsfi.de", - "categoryId": 11, - "url": "http://www.axelspringer.de/en/index.html", - "companyId": "axel_springer" - }, - "attracta": { - "name": "Attracta", - "categoryId": 4, - "url": "http://www.attracta.com/", - "companyId": "attracta" - }, - "attraqt": { - "name": "Attraqt", - "categoryId": 6, - "url": "http://www.locayta.com/", - "companyId": "attraqt" - }, - "audience2media": { - "name": "Audience2Media", - "categoryId": 4, - "url": "http://www.audience2media.com/", - "companyId": "audience2media" - }, - "audience_ad_network": { - "name": "Audience Ad Network", - "categoryId": 4, - "url": "http://www.audienceadnetwork.com", - "companyId": "bridgeline_digital" - }, - "audience_science": { - "name": "Audience Science", - "categoryId": 4, - "url": "http://www.audiencescience.com/", - "companyId": "audiencescience" - }, - "audiencerate": { - "name": "AudienceRate", - "categoryId": 4, - "url": "http://www.audiencerate.com/", - "companyId": "audiencerate" - }, - "audiencesquare.com": { - "name": "Audience Square", - "categoryId": 4, - "url": "http://www.audiencesquare.fr/", - "companyId": "audience_square" - }, - "auditude": { - "name": "Auditude", - "categoryId": 0, - "url": "http://www.auditude.com/", - "companyId": "adobe" - }, - "audtd.com": { - "name": "Auditorius", - "categoryId": 4, - "url": "http://www.auditorius.ru/", - "companyId": "auditorius" - }, - "augur": { - "name": "Augur", - "categoryId": 6, - "url": "https://www.augur.io/", - "companyId": "augur" - }, - "aumago": { - "name": "Aumago", - "categoryId": 4, - "url": "http://www.aumago.com/", - "companyId": "aumago" - }, - "aurea_clicktracks": { - "name": "Aurea ClickTracks", - "categoryId": 4, - "url": "http://www.clicktracks.com/", - "companyId": "aurea" - }, - "ausgezeichnet_org": { - "name": "ausgezeichnet.org", - "categoryId": 2, - "url": "http://ausgezeichnet.org/", - "companyId": null - }, - "australia.gov": { - "name": "Australia.gov", - "categoryId": 4, - "url": "http://www.australia.gov.au/", - "companyId": "australian_government" - }, - "auth0": { - "name": "Auth0 Inc.", - "categoryId": 6, - "url": "https://auth0.com/", - "companyId": "auth0" - }, - "autoid": { - "name": "AutoID", - "categoryId": 6, - "url": "http://www.autoid.com/", - "companyId": "autoid" - }, - "autonomy": { - "name": "Autonomy", - "categoryId": 4, - "url": "http://www.optimost.com/", - "companyId": "hp" - }, - "autonomy_campaign": { - "name": "Autonomy Campaign", - "categoryId": 4, - "url": "http://www.autonomy.com/", - "companyId": "hp" - }, - "autopilothq": { - "name": "Auto Pilot", - "categoryId": 4, - "url": "https://www.autopilothq.com/", - "companyId": "autopilothq" - }, - "autoscout24.com": { - "name": "Autoscout24", - "categoryId": 8, - "url": "http://www.scout24.com/", - "companyId": "scout24" - }, - "avail": { - "name": "Avail", - "categoryId": 4, - "url": "http://avail.com", - "companyId": "richrelevance" - }, - "avanser": { - "name": "AVANSER", - "categoryId": 2, - "url": "http://www.avanser.com.au/", - "companyId": "avanser" - }, - "avant_metrics": { - "name": "Avant Metrics", - "categoryId": 6, - "url": "http://www.avantlink.com/", - "companyId": "avantlink" - }, - "avantlink": { - "name": "AvantLink", - "categoryId": 4, - "url": "http://www.avantlink.com/", - "companyId": "avantlink" - }, - "avazu_network": { - "name": "Avazu Network", - "categoryId": 4, - "url": "http://www.avazudsp.net/", - "companyId": "avazu_network" - }, - "avenseo": { - "name": "Avenseo", - "categoryId": 4, - "url": "http://avenseo.com", - "companyId": "avenseo" - }, - "avid_media": { - "name": "Avid Media", - "categoryId": 0, - "url": "http://www.avidglobalmedia.com/", - "companyId": "avid_media" - }, - "avocet": { - "name": "Avocet", - "categoryId": 8, - "url": "https://avocet.io/", - "companyId": "avocet" - }, - "aweber": { - "name": "AWeber", - "categoryId": 4, - "url": "http://www.aweber.com/", - "companyId": "aweber_communications" - }, - "awin": { - "name": "AWIN", - "categoryId": 4, - "url": "https://www.awin.com", - "companyId": "axel_springer" - }, - "axill": { - "name": "Axill", - "categoryId": 4, - "url": "http://www.axill.com/", - "companyId": "axill" - }, - "azadify": { - "name": "Azadify", - "categoryId": 4, - "url": "http://azadify.com/engage/index.php", - "companyId": "azadify" - }, - "azure": { - "name": "Microsoft Azure", - "categoryId": 10, - "url": "https://azure.microsoft.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "azure_blob_storage": { - "name": "Azure Blob Storage", - "categoryId": 8, - "url": "https://azure.microsoft.com/en-us/products/storage/blobs", - "companyId": "microsoft", - "source": "AdGuard" - }, - "azureedge.net": { - "name": "Azure CDN", - "categoryId": 9, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "b2bcontext": { - "name": "B2BContext", - "categoryId": 4, - "url": "http://b2bcontext.ru/", - "companyId": "b2bcontext" - }, - "b2bvideo": { - "name": "B2Bvideo", - "categoryId": 4, - "url": "http://b2bvideo.ru/", - "companyId": "b2bvideo" - }, - "babator.com": { - "name": "Babator", - "categoryId": 6, - "url": "https://www.babator.com/", - "companyId": null - }, - "back_beat_media": { - "name": "Back Beat Media", - "categoryId": 4, - "url": "http://www.backbeatmedia.com", - "companyId": "backbeat_media" - }, - "backtype_widgets": { - "name": "BackType Widgets", - "categoryId": 4, - "url": "http://www.backtype.com/widgets", - "companyId": "backtype" - }, - "bahn_de": { - "name": "Deutsche Bahn", - "categoryId": 8, - "url": null, - "companyId": null - }, - "baidu_ads": { - "name": "Baidu Ads", - "categoryId": 4, - "url": "http://www.baidu.com/", - "companyId": "baidu" - }, - "baidu_static": { - "name": "Baidu Static", - "categoryId": 8, - "url": "https://www.baidu.com/", - "companyId": "baidu" - }, - "baletingo.com": { - "name": "baletingo.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bangdom.com": { - "name": "BangBros", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bankrate": { - "name": "Bankrate", - "categoryId": 4, - "url": "https://www.bankrate.com/", - "companyId": "bankrate" - }, - "banner_connect": { - "name": "Banner Connect", - "categoryId": 4, - "url": "http://www.bannerconnect.net/", - "companyId": "bannerconnect" - }, - "bannerflow.com": { - "name": "Bannerflow", - "categoryId": 4, - "url": "https://www.bannerflow.com/", - "companyId": "bannerflow" - }, - "bannerplay": { - "name": "BannerPlay", - "categoryId": 4, - "url": "http://www.bannerplay.com/", - "companyId": "bannerplay" - }, - "bannersnack": { - "name": "Bannersnack", - "categoryId": 4, - "url": "http://www.bannersnack.com/", - "companyId": "bannersnack" - }, - "barilliance": { - "name": "Barilliance", - "categoryId": 4, - "url": "http://www.barilliance.com/", - "companyId": "barilliance" - }, - "barometer": { - "name": "Barometer", - "categoryId": 2, - "url": "http://getbarometer.com/", - "companyId": "barometer" - }, - "basilic.io": { - "name": "basilic.io", - "categoryId": 6, - "url": "https://basilic.io/", - "companyId": null - }, - "batanga_network": { - "name": "Batanga Network", - "categoryId": 4, - "url": "http://www.batanganetwork.com/", - "companyId": "batanga_network" - }, - "batch_media": { - "name": "Batch Media", - "categoryId": 4, - "url": "http://batch.ba/", - "companyId": "prosieben_sat1" - }, - "bauer_media": { - "name": "Bauer Media", - "categoryId": 4, - "url": "http://www.bauermedia.com", - "companyId": "bauer_media" - }, - "baur.de": { - "name": "baur.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "baynote_observer": { - "name": "Baynote Observer", - "categoryId": 4, - "url": "http://www.baynote.com/", - "companyId": "baynote" - }, - "bazaarvoice": { - "name": "Bazaarvoice", - "categoryId": 2, - "url": "http://www.bazaarvoice.com/", - "companyId": "bazaarvoice" - }, - "bbci": { - "name": "BBC", - "categoryId": 10, - "url": "https://bbc.co.uk", - "companyId": null - }, - "bd4travel": { - "name": "bd4travel", - "categoryId": 4, - "url": "https://bd4travel.com/", - "companyId": "bd4travel" - }, - "be_opinion": { - "name": "Be Opinion", - "categoryId": 2, - "url": "http://beopinion.com/", - "companyId": "be_opinion" - }, - "beachfront": { - "name": "Beachfront Media", - "categoryId": 4, - "url": "http://beachfrontmedia.com/", - "companyId": null - }, - "beacon_ad_network": { - "name": "Beacon Ad Network", - "categoryId": 4, - "url": "http://beaconads.com/", - "companyId": "beacon_ad_network" - }, - "beampulse.com": { - "name": "BeamPulse", - "categoryId": 4, - "url": "https://en.beampulse.com/", - "companyId": null - }, - "beanstalk_data": { - "name": "Beanstalk Data", - "categoryId": 4, - "url": "http://www.beanstalkdata.com/", - "companyId": "beanstalk_data" - }, - "bebi": { - "name": "Bebi Media", - "categoryId": 4, - "url": "https://www.bebi.com/", - "companyId": "bebi_media" - }, - "beeketing.com": { - "name": "Beeketing", - "categoryId": 4, - "url": "https://beeketing.com/", - "companyId": "beeketing" - }, - "beeline.ru": { - "name": "Beeline", - "categoryId": 4, - "url": "https://moskva.beeline.ru/", - "companyId": null - }, - "beeswax": { - "name": "Beeswax", - "categoryId": 4, - "url": "http://beeswax.com/", - "companyId": "beeswax" - }, - "beezup": { - "name": "BeezUP", - "categoryId": 4, - "url": "http://www.beezup.co.uk/", - "companyId": "beezup" - }, - "begun": { - "name": "Begun", - "categoryId": 4, - "url": "http://begun.ru/", - "companyId": "begun" - }, - "behavioralengine": { - "name": "BehavioralEngine", - "categoryId": 4, - "url": "http://www.behavioralengine.com/", - "companyId": "behavioralengine" - }, - "belboon_gmbh": { - "name": "belboon GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "belco": { - "name": "Belco", - "categoryId": 2, - "url": "https://www.belco.io/", - "companyId": "belco" - }, - "belstat": { - "name": "BelStat", - "categoryId": 6, - "url": "http://www.belstat.com/", - "companyId": "belstat" - }, - "bemobile.ua": { - "name": "Bemobile", - "categoryId": 10, - "url": "http://bemobile.ua/en/", - "companyId": "bemobile" - }, - "bench_platform": { - "name": "Bench Platform", - "categoryId": 4, - "url": "https://benchplatform.com", - "companyId": "bench_platform" - }, - "betterttv": { - "name": "BetterTTV", - "categoryId": 7, - "url": "https://nightdev.com/betterttv/", - "companyId": "nightdev" - }, - "betweendigital.com": { - "name": "Between Digital", - "categoryId": 4, - "url": "http://betweendigital.ru/ssp", - "companyId": "between_digital" - }, - "bid.run": { - "name": "Bid Run", - "categoryId": 4, - "url": "http://bid.run/", - "companyId": "bid.run" - }, - "bidgear": { - "name": "BidGear", - "categoryId": 6, - "url": "https://bidgear.com/", - "companyId": "bidgear" - }, - "bidswitch": { - "name": "Bidswitch", - "categoryId": 4, - "url": "http://www.iponweb.com/", - "companyId": "iponweb" - }, - "bidtellect": { - "name": "Bidtellect", - "categoryId": 4, - "url": "https://www.bidtellect.com/", - "companyId": "bidtellect" - }, - "bidtheatre": { - "name": "BidTheatre", - "categoryId": 4, - "url": "http://www.bidtheatre.com/", - "companyId": "bidtheatre" - }, - "bidvertiser": { - "name": "BidVertiser", - "categoryId": 4, - "url": "http://www.bidvertiser.com/", - "companyId": "bidvertiser" - }, - "big_mobile": { - "name": "Big Mobile", - "categoryId": 4, - "url": "http://www.bigmobile.com/", - "companyId": "big_mobile" - }, - "bigcommerce.com": { - "name": "BigCommerce", - "categoryId": 6, - "url": "https://www.bigcommerce.com/", - "companyId": "bigcommerce" - }, - "bigmir.net": { - "name": "bigmir", - "categoryId": 6, - "url": "https://www.bigmir.net/", - "companyId": "bigmir-internet" - }, - "bigpoint": { - "name": "Bigpoint", - "categoryId": 8, - "url": null, - "companyId": null - }, - "bild": { - "name": "Bild.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "bilgin_pro": { - "name": "Bilgin Pro", - "categoryId": 4, - "url": "http://bilgin.pro/", - "companyId": "bilginpro" - }, - "bilin": { - "name": "Bilin", - "categoryId": 4, - "url": "http://www.bilintechnology.com/", - "companyId": "bilin" - }, - "bing_ads": { - "name": "Bing Ads", - "categoryId": 4, - "url": "https://bingads.microsoft.com/", - "companyId": "microsoft" - }, - "bing_maps": { - "name": "Bing Maps", - "categoryId": 2, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "binge": { - "name": "Binge", - "categoryId": 0, - "url": "https://binge.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "binlayer": { - "name": "BinLayer", - "categoryId": 4, - "url": "http://binlayer.com/", - "companyId": "binlayer" - }, - "binotel": { - "name": "Binotel", - "categoryId": 4, - "url": "http://www.binotel.ua/", - "companyId": "binotel" - }, - "bisnode": { - "name": "Bisnode", - "categoryId": 4, - "url": "http://www.esendra.fi/", - "companyId": "bisnode" - }, - "bitcoin_miner": { - "name": "Bitcoin Miner", - "categoryId": 2, - "url": "http://www.bitcoinplus.com/", - "companyId": "bitcoin_plus" - }, - "bitly": { - "name": "Bitly", - "categoryId": 6, - "url": "https://bitly.com/", - "companyId": null - }, - "bitrix": { - "name": "Bitrix24", - "categoryId": 4, - "url": "https://www.bitrix24.com/", - "companyId": "bitrix24" - }, - "bitwarden": { - "name": "Bitwarden", - "categoryId": 8, - "url": "https://bitwarden.com/", - "companyId": "bitwarden", - "source": "AdGuard" - }, - "bizcn": { - "name": "Bizcn", - "categoryId": 4, - "url": "http://www.bizcn.com/", - "companyId": "bizcn" - }, - "blackdragon": { - "name": "BlackDragon", - "categoryId": 4, - "url": "http://www.jd.com/", - "companyId": "jing_dong" - }, - "blau.de": { - "name": "Blau", - "categoryId": 8, - "url": "https://www.blau.de/", - "companyId": null - }, - "blink_new_media": { - "name": "Blink New Media", - "categoryId": 4, - "url": "http://engagebdr.com/", - "companyId": "engage_bdr" - }, - "blis": { - "name": "Blis", - "categoryId": 6, - "url": "http://www.blis.com/index.php", - "companyId": "blis" - }, - "blogad": { - "name": "BlogAD", - "categoryId": 4, - "url": "http://www.blogad.com.tw/", - "companyId": "blogad" - }, - "blogbang": { - "name": "BlogBang", - "categoryId": 4, - "url": "http://www.blogbang.com/", - "companyId": "blogbang" - }, - "blogcatalog": { - "name": "BlogCatalog", - "categoryId": 2, - "url": "http://www.blogcatalog.com/", - "companyId": "blogcatalog" - }, - "blogcounter": { - "name": "BlogCounter", - "categoryId": 6, - "url": "http://blogcounter.com/", - "companyId": "adfire_gmbh" - }, - "blogfoster.com": { - "name": "Blogfoster", - "categoryId": 8, - "url": "http://www.blogfoster.com/", - "companyId": "blogfoster" - }, - "bloggerads": { - "name": "BloggerAds", - "categoryId": 4, - "url": "http://www.bloggerads.net/", - "companyId": "bloggerads" - }, - "blogher": { - "name": "BlogHer Ads", - "categoryId": 4, - "url": "https://www.blogher.com/", - "companyId": "penske_media_corp" - }, - "blogimg.jp": { - "name": "blogimg.jp", - "categoryId": 9, - "url": "https://line.me/", - "companyId": "line" - }, - "blogsmithmedia.com": { - "name": "blogsmithmedia.com", - "categoryId": 8, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "blogspot_com": { - "name": "blogspot.com", - "categoryId": 8, - "url": "http://www.google.com", - "companyId": "google" - }, - "bloomreach": { - "name": "BloomReach", - "categoryId": 4, - "url": "https://www.bloomreach.com/en", - "companyId": "bloomreach" - }, - "blue_cherry_group": { - "name": "Blue Cherry Group", - "categoryId": 4, - "url": "http://www.bluecherrygroup.com", - "companyId": "blue_cherry_group" - }, - "blue_seed": { - "name": "Blue Seed", - "categoryId": 4, - "url": "http://blueseed.tv/#/en/platform", - "companyId": "blue_seed" - }, - "blueconic.net": { - "name": "BlueConic Plugin", - "categoryId": 6, - "url": "https://www.blueconic.com/", - "companyId": "blueconic" - }, - "bluecore": { - "name": "Bluecore", - "categoryId": 4, - "url": "https://www.bluecore.com/", - "companyId": "triggermail" - }, - "bluekai": { - "name": "BlueKai", - "categoryId": 4, - "url": "http://www.bluekai.com/", - "companyId": "oracle" - }, - "bluelithium": { - "name": "Bluelithium", - "categoryId": 4, - "url": "http://www.bluelithium.com/", - "companyId": "verizon" - }, - "bluemetrix": { - "name": "Bluemetrix", - "categoryId": 4, - "url": "http://www.bluemetrix.ie/", - "companyId": "bluemetrix" - }, - "bluenewsupdate.info": { - "name": "bluenewsupdate.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bluestreak": { - "name": "BlueStreak", - "categoryId": 4, - "url": "http://www.bluestreak.com/", - "companyId": "dentsu_aegis_network" - }, - "bluetriangle": { - "name": "Blue Triangle", - "categoryId": 6, - "url": "https://www.bluetriangle.com/", - "companyId": "blue_triangle" - }, - "bodelen.com": { - "name": "bodelen.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "bol_affiliate_program": { - "name": "BOL Affiliate Program", - "categoryId": 4, - "url": "http://www.bol.com", - "companyId": "bol.com" - }, - "bold": { - "name": "Bold", - "categoryId": 4, - "url": "https://boldcommerce.com/", - "companyId": "bold" - }, - "boldchat": { - "name": "Boldchat", - "categoryId": 2, - "url": "http://www.boldchat.com/", - "companyId": "boldchat" - }, - "boltdns.net": { - "name": "boltdns.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bom": { - "name": "Bureau of Meteorology", - "categoryId": 9, - "url": "http://bom.gov.au/", - "companyId": "australian_government", - "source": "AdGuard" - }, - "bombora": { - "name": "Bombora", - "categoryId": 6, - "url": "http://bombora.com/", - "companyId": "bombora" - }, - "bongacams.com": { - "name": "bongacams.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bonial": { - "name": "Bonial Connect", - "categoryId": 2, - "url": "http://www.bonial.com/", - "companyId": null - }, - "boo-box": { - "name": "boo-box", - "categoryId": 4, - "url": "http://boo-box.com/", - "companyId": "boo-box" - }, - "booking.com": { - "name": "Booking.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "boost_box": { - "name": "Boost Box", - "categoryId": 6, - "url": "http://www.boostbox.com.br/", - "companyId": "boost_box" - }, - "booster_video": { - "name": "Booster Video", - "categoryId": 0, - "url": "https://boostervideo.ru/", - "companyId": "booster_video" - }, - "bootstrap": { - "name": "Bootstrap CDN", - "categoryId": 9, - "url": "http://getbootstrap.com/", - "companyId": "bootstrap_cdn" - }, - "borrango.com": { - "name": "borrango.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "botscanner": { - "name": "BotScanner", - "categoryId": 6, - "url": "http://botscanner.com", - "companyId": "botscanner" - }, - "boudja.com": { - "name": "boudja.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bounce_exchange": { - "name": "Bounce Exchange", - "categoryId": 4, - "url": "http://bounceexchange.com", - "companyId": "bounce_exchange" - }, - "bouncex": { - "name": "BounceX", - "categoryId": 4, - "url": "https://www.bouncex.com/", - "companyId": null - }, - "box_uk": { - "name": "Box UK", - "categoryId": 6, - "url": "http://www.clickdensity.com", - "companyId": "box_uk" - }, - "boxever": { - "name": "Boxever", - "categoryId": 4, - "url": "https://www.boxever.com/", - "companyId": "boxever" - }, - "brainient": { - "name": "Brainient", - "categoryId": 4, - "url": "http://www.brainient.com/", - "companyId": "brainient" - }, - "brainsins": { - "name": "BrainSINS", - "categoryId": 4, - "url": "http://www.brainsins.com/", - "companyId": "brainsins" - }, - "branch": { - "name": "Branch.io", - "categoryId": 101, - "url": "https://branch.io/", - "companyId": "branch_metrics_inc", - "source": "AdGuard" - }, - "branch_metrics": { - "name": "Branch", - "categoryId": 4, - "url": "https://branch.io/", - "companyId": "branch_metrics_inc" - }, - "brand_affinity": { - "name": "Brand Affinity", - "categoryId": 4, - "url": "http://brandaffinity.net/about", - "companyId": "yoonla" - }, - "brand_networks": { - "name": "Brand Networks", - "categoryId": 4, - "url": "http://www.xa.net/", - "companyId": "brand_networks" - }, - "brandmetrics.com": { - "name": "Brandmetrics.com", - "categoryId": 4, - "url": "https://www.brandmetrics.com/", - "companyId": null - }, - "brandreach": { - "name": "BrandReach", - "categoryId": 4, - "url": "http://www.brandreach.com/", - "companyId": "brandreach" - }, - "brandscreen": { - "name": "Brandscreen", - "categoryId": 4, - "url": "http://www.brandscreen.com/", - "companyId": "zenovia" - }, - "brandwire.tv": { - "name": "BrandWire", - "categoryId": 4, - "url": "https://brandwire.tv/", - "companyId": null - }, - "branica": { - "name": "Branica", - "categoryId": 4, - "url": "http://www.branica.com/", - "companyId": "branica" - }, - "braze": { - "name": "Braze, Inc.", - "categoryId": 6, - "url": "https://www.braze.com/", - "companyId": "braze", - "source": "AdGuard" - }, - "brealtime": { - "name": "EMX Digital", - "categoryId": 4, - "url": "https://emxdigital.com/", - "companyId": null - }, - "bridgetrack": { - "name": "BridgeTrack", - "categoryId": 4, - "url": "http://www.bridgetrack.com/", - "companyId": "bridgetrack" - }, - "brightcove": { - "name": "Brightcove", - "categoryId": 0, - "url": "http://www.brightcove.com/en/", - "companyId": "brightcove" - }, - "brightcove_player": { - "name": "Brightcove Player", - "categoryId": 0, - "url": "http://www.brightcove.com/en/", - "companyId": "brightcove" - }, - "brightedge": { - "name": "BrightEdge", - "categoryId": 4, - "url": "http://www.brightedge.com/", - "companyId": "brightedge" - }, - "brightfunnel": { - "name": "BrightFunnel", - "categoryId": 6, - "url": "http://www.brightfunnel.com/", - "companyId": "brightfunnel" - }, - "brightonclick.com": { - "name": "brightonclick.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "brightroll": { - "name": "BrightRoll", - "categoryId": 4, - "url": "http://www.brightroll.com/", - "companyId": "verizon" - }, - "brilig": { - "name": "Brilig", - "categoryId": 4, - "url": "http://www.brilig.com/", - "companyId": "dentsu_aegis_network" - }, - "brillen.de": { - "name": "brillen.de", - "categoryId": 8, - "url": "https://www.brillen.de/", - "companyId": null - }, - "broadstreet": { - "name": "Broadstreet", - "categoryId": 4, - "url": "http://broadstreetads.com/", - "companyId": "broadstreet" - }, - "bronto": { - "name": "Bronto", - "categoryId": 4, - "url": "http://bronto.com/", - "companyId": "bronto" - }, - "brow.si": { - "name": "Brow.si", - "categoryId": 4, - "url": "https://brow.si/", - "companyId": "brow.si" - }, - "browser-statistik": { - "name": "Browser-Statistik", - "categoryId": 6, - "url": "http://www.browser-statistik.de/", - "companyId": "browser-statistik" - }, - "browser_update": { - "name": "Browser Update", - "categoryId": 2, - "url": "http://www.browser-update.org/", - "companyId": "browser-update" - }, - "btncdn.com": { - "name": "btncdn.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "bubblestat": { - "name": "Bubblestat", - "categoryId": 4, - "url": "http://www.bubblestat.com/", - "companyId": "bubblestat" - }, - "buddy_media": { - "name": "Buddy Media", - "categoryId": 7, - "url": "http://www.salesforce.com/", - "companyId": "salesforce" - }, - "buffer_button": { - "name": "Buffer Button", - "categoryId": 7, - "url": "http://www.bufferapp.com/", - "companyId": "buffer" - }, - "bugherd.com": { - "name": "BugHerd", - "categoryId": 2, - "url": "https://bugherd.com", - "companyId": "bugherd" - }, - "bugsnag": { - "name": "Bugsnag", - "categoryId": 6, - "url": "https://bugsnag.com", - "companyId": "bugsnag" - }, - "bulkhentai.com": { - "name": "bulkhentai.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bumlam.com": { - "name": "bumlam.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bunchbox": { - "name": "Bunchbox", - "categoryId": 6, - "url": "https://app.bunchbox.co/login", - "companyId": "bunchbox" - }, - "burda": { - "name": "BurdaForward", - "categoryId": 4, - "url": "http://www.hubert-burda-media.com/", - "companyId": "hubert_burda_media" - }, - "burda_digital_systems": { - "name": "Burda Digital Systems", - "categoryId": 4, - "url": "http://www.hubert-burda-media.com/", - "companyId": "hubert_burda_media" - }, - "burst_media": { - "name": "Burst Media", - "categoryId": 4, - "url": "http://www.burstmedia.com/", - "companyId": "rhythmone" - }, - "burt": { - "name": "Burt", - "categoryId": 4, - "url": "http://www.burtcorp.com/", - "companyId": "burt" - }, - "businessonline_analytics": { - "name": "BusinessOnLine Analytics", - "categoryId": 6, - "url": "http://www.businessol.com/", - "companyId": "businessonline" - }, - "button": { - "name": "Button", - "categoryId": 4, - "url": "https://www.usebutton.com/", - "companyId": "button", - "source": "AdGuard" - }, - "buysellads": { - "name": "BuySellAds", - "categoryId": 4, - "url": "http://buysellads.com/", - "companyId": "buysellads.com" - }, - "buzzadexchange.com": { - "name": "buzzadexchange.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "buzzador": { - "name": "Buzzador", - "categoryId": 7, - "url": "http://www.buzzador.com", - "companyId": "buzzador" - }, - "buzzfeed": { - "name": "BuzzFeed", - "categoryId": 2, - "url": "http://www.buzzfeed.com", - "companyId": "buzzfeed" - }, - "bwbx.io": { - "name": "Bloomberg CDN", - "categoryId": 9, - "url": "https://www.bloomberg.com/", - "companyId": null - }, - "bypass": { - "name": "Bypass", - "categoryId": 4, - "url": "http://bypass.jp/", - "companyId": "united_inc" - }, - "c1_exchange": { - "name": "C1 Exchange", - "categoryId": 4, - "url": "http://c1exchange.com/", - "companyId": "c1_exchange" - }, - "c3_metrics": { - "name": "C3 Metrics", - "categoryId": 6, - "url": "http://c3metrics.com/", - "companyId": "c3_metrics" - }, - "c8_network": { - "name": "C8 Network", - "categoryId": 4, - "url": "http://c8.net.ua/", - "companyId": "c8_network" - }, - "cackle.me": { - "name": "Cackle", - "categoryId": 3, - "url": "https://cackle.me/", - "companyId": null - }, - "cadreon": { - "name": "Cadreon", - "categoryId": 4, - "url": "http://www.cadreon.com/", - "companyId": "cadreon" - }, - "call_page": { - "name": "Call Page", - "categoryId": 2, - "url": "https://www.callpage.io/", - "companyId": "call_page" - }, - "callbackhunter": { - "name": "CallbackHunter", - "categoryId": 2, - "url": "http://callbackhunter.com/main", - "companyId": "callbackhunter" - }, - "callbox": { - "name": "CallBox", - "categoryId": 2, - "url": "http://www.centuryinteractive.com", - "companyId": "callbox" - }, - "callibri": { - "name": "Callibri", - "categoryId": 4, - "url": "https://callibri.ru/", - "companyId": "callibri" - }, - "callrail": { - "name": "CallRail", - "categoryId": 2, - "url": "http://www.callrail.com/", - "companyId": "callrail" - }, - "calltracking": { - "name": "Calltracking", - "categoryId": 2, - "url": "https://calltracking.ru", - "companyId": "calltracking" - }, - "caltat.com": { - "name": "Caltat", - "categoryId": 2, - "url": "https://caltat.com/", - "companyId": null - }, - "cam-content.com": { - "name": "Cam-Content.com", - "categoryId": 3, - "url": "https://www.cam-content.com/", - "companyId": null - }, - "camakaroda.com": { - "name": "camakaroda.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "campus_explorer": { - "name": "Campus Explorer", - "categoryId": 6, - "url": "http://www.campusexplorer.com/", - "companyId": "campus_explorer" - }, - "canddi": { - "name": "CANDDI", - "categoryId": 6, - "url": "https://www.canddi.com/", - "companyId": "canddi" - }, - "canonical": { - "name": "Canonical", - "categoryId": 8, - "url": "https://canonical.com/", - "companyId": "canonical", - "source": "AdGuard" - }, - "canvas": { - "name": "Canvas", - "categoryId": 2, - "url": "https://www.canvas.net/", - "companyId": null - }, - "capitaldata": { - "name": "CapitalData", - "categoryId": 6, - "url": "https://www.capitaldata.fr/", - "companyId": "highco" - }, - "captora": { - "name": "Captora", - "categoryId": 4, - "url": "http://www.captora.com/", - "companyId": "captora" - }, - "capture_media": { - "name": "Capture Media", - "categoryId": 4, - "url": "http://capturemedia.ch/", - "companyId": "capture_media" - }, - "capturly": { - "name": "Capturly", - "categoryId": 6, - "url": "http://capturly.com/", - "companyId": "capturly" - }, - "carambola": { - "name": "Carambola", - "categoryId": 4, - "url": "http://carambo.la/", - "companyId": "carambola" - }, - "carbonads": { - "name": "Carbon Ads", - "categoryId": 4, - "url": "https://www.carbonads.net/", - "companyId": "buysellads.com" - }, - "cardinal": { - "name": "Cardinal", - "categoryId": 6, - "url": "https://www.cardinalcommerce.com/", - "companyId": "visa" - }, - "cardlytics": { - "name": "Cardlytics", - "categoryId": 6, - "url": "http://www.cardlytics.com/", - "companyId": null - }, - "carrot_quest": { - "name": "Carrot Quest", - "categoryId": 6, - "url": "http://www.carrotquest.io/", - "companyId": "carrot_quest" - }, - "cartstack": { - "name": "CartStack", - "categoryId": 2, - "url": "http://cartstack.com/", - "companyId": "cartstack" - }, - "caspion": { - "name": "Caspion", - "categoryId": 6, - "url": "http://caspion.com/", - "companyId": "caspion" - }, - "castle": { - "name": "Castle", - "categoryId": 2, - "url": "https://castle.io", - "companyId": "castle" - }, - "catchpoint": { - "name": "Catchpoint", - "categoryId": 6, - "url": "http://www.catchpoint.com/", - "companyId": "catchpoint_systems" - }, - "cbox": { - "name": "Cbox", - "categoryId": 2, - "url": "http://cbox.ws", - "companyId": "cbox" - }, - "cbs_interactive": { - "name": "CBS Interactive", - "categoryId": 0, - "url": "http://www.cbsinteractive.com/", - "companyId": "cbs_interactive" - }, - "ccm_benchmark": { - "name": "CCM Benchmark", - "categoryId": 4, - "url": "http://www.ccmbenchmark.com/", - "companyId": null - }, - "cdk_digital_marketing": { - "name": "CDK Digital Marketing", - "categoryId": 4, - "url": "http://www.cobaltgroup.com", - "companyId": "cdk_digital_marketing" - }, - "cdn-net.com": { - "name": "cdn-net.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdn13.com": { - "name": "cdn13.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "cdn77": { - "name": "CDN77", - "categoryId": 9, - "url": "https://www.cdn77.com/", - "companyId": null - }, - "cdnetworks.net": { - "name": "cdnetworks.net", - "categoryId": 9, - "url": "https://www.cdnetworks.com/", - "companyId": null - }, - "cdnnetwok_xyz": { - "name": "cdnnetwok.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "cdnondemand.org": { - "name": "cdnondemand.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdnsure.com": { - "name": "cdnsure.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdnvideo.com": { - "name": "CDNvideo", - "categoryId": 9, - "url": "https://www.cdnvideo.com/", - "companyId": "cdnvideo" - }, - "cdnwidget.com": { - "name": "cdnwidget.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "cedexis_radar": { - "name": "Cedexis Radar", - "categoryId": 6, - "url": "http://www.cedexis.com/products_radar.html", - "companyId": "cedexis" - }, - "celebrus": { - "name": "Celebrus", - "categoryId": 6, - "url": "https://www.celebrus.com/", - "companyId": "celebrus" - }, - "celtra": { - "name": "Celtra", - "categoryId": 0, - "url": "http://www.celtra.com/", - "companyId": "celtra" - }, - "cendyn": { - "name": "Cendyn", - "categoryId": 4, - "url": "http://www.cendyn.com/", - "companyId": "cendyn" - }, - "centraltag": { - "name": "CentralTag", - "categoryId": 4, - "url": "http://www.centraltag.com/", - "companyId": "centraltag" - }, - "centro": { - "name": "Centro", - "categoryId": 4, - "url": "http://centro.net/", - "companyId": "centro" - }, - "cerberus_speed-trap": { - "name": "Cerberus Speed-Trap", - "categoryId": 6, - "url": "http://cerberusip.com/", - "companyId": "cerberus" - }, - "certainsource": { - "name": "CertainSource", - "categoryId": 4, - "url": "http://www.ewaydirect.com", - "companyId": "certainsource" - }, - "certifica_metric": { - "name": "Certifica Metric", - "categoryId": 4, - "url": "http://www.comscore.com/Products_Services/Product_Index/Certifica_Metric", - "companyId": "comscore" - }, - "certona": { - "name": "Certona", - "categoryId": 4, - "url": "http://www.certona.com/products/recommendation.php", - "companyId": "certona" - }, - "chameleon": { - "name": "Chameleon", - "categoryId": 4, - "url": "http://chameleon.ad/", - "companyId": "chamaleon" - }, - "chango": { - "name": "Chango", - "categoryId": 4, - "url": "http://www.chango.com/", - "companyId": "rubicon_project" - }, - "channel_intelligence": { - "name": "Channel Intelligence", - "categoryId": 4, - "url": "http://www.channelintelligence.com/", - "companyId": "google" - }, - "channel_pilot_solutions": { - "name": "ChannelPilot Solutions", - "categoryId": 6, - "url": "https://www.channelpilot.de/", - "companyId": null - }, - "channeladvisor": { - "name": "ChannelAdvisor", - "categoryId": 4, - "url": "http://www.channeladvisor.com/", - "companyId": "channeladvisor" - }, - "channelfinder": { - "name": "ChannelFinder", - "categoryId": 4, - "url": "http://www.kpicentral.com/", - "companyId": "kaleidoscope_promotions" - }, - "chaordic": { - "name": "Chaordic", - "categoryId": 4, - "url": "https://www.chaordic.com.br/", - "companyId": "chaordic" - }, - "chartbeat": { - "name": "ChartBeat", - "categoryId": 6, - "url": "http://chartbeat.com/", - "companyId": "chartbeat" - }, - "chartboost": { - "name": "Chartboost", - "categoryId": 4, - "url": "http://chartboost.com/", - "companyId": "take-two", - "source": "AdGuard" - }, - "chaser": { - "name": "Chaser", - "categoryId": 2, - "url": "http://chaser.ru/", - "companyId": "chaser" - }, - "chat_beacon": { - "name": "Chat Beacon", - "categoryId": 2, - "url": "https://www.chatbeacon.io/", - "companyId": "chat_beacon" - }, - "chatango": { - "name": "Chatango", - "categoryId": 2, - "url": "http://www.chatango.com/", - "companyId": "chatango" - }, - "chatra": { - "name": "Chatra", - "categoryId": 2, - "url": "https://chatra.io", - "companyId": "chatra" - }, - "chaturbate.com": { - "name": "chaturbate.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "chatwing": { - "name": "ChatWing", - "categoryId": 2, - "url": "http://chatwing.com/", - "companyId": "chatwing" - }, - "checkmystats": { - "name": "CheckMyStats", - "categoryId": 4, - "url": "http://checkmystats.com.au", - "companyId": "checkmystats" - }, - "chefkoch_de": { - "name": "chefkoch.de", - "categoryId": 8, - "url": "http://chefkoch.de/", - "companyId": null - }, - "chin_media": { - "name": "Chin Media", - "categoryId": 4, - "url": "http://www.chinmedia.vn/#", - "companyId": "chin_media" - }, - "chinesean": { - "name": "ChineseAN", - "categoryId": 4, - "url": "http://www.chinesean.com/", - "companyId": "chinesean" - }, - "chitika": { - "name": "Chitika", - "categoryId": 4, - "url": "http://chitika.com/", - "companyId": "chitika" - }, - "choicestream": { - "name": "ChoiceStream", - "categoryId": 4, - "url": "http://www.choicestream.com/", - "companyId": "choicestream" - }, - "chute": { - "name": "Chute", - "categoryId": 5, - "url": "https://www.getchute.com/", - "companyId": "esw_capital" - }, - "circit": { - "name": "circIT", - "categoryId": 6, - "url": "http://www.circit.de/", - "companyId": null - }, - "circulate": { - "name": "Circulate", - "categoryId": 6, - "url": "http://circulate.com/", - "companyId": "circulate" - }, - "city_spark": { - "name": "City Spark", - "categoryId": 4, - "url": "http://www.cityspark.com/", - "companyId": "city_spark" - }, - "cityads": { - "name": "CityAds", - "categoryId": 4, - "url": "http://cityads.ru/", - "companyId": "cityads" - }, - "ciuvo.com": { - "name": "ciuvo.com", - "categoryId": 12, - "url": "https://www.ciuvo.com/", - "companyId": null - }, - "civey_widgets": { - "name": "Civey Widgets", - "categoryId": 2, - "url": "https://civey.com/", - "companyId": "civey" - }, - "civicscience.com": { - "name": "CivicScience", - "categoryId": 6, - "url": "https://civicscience.com/", - "companyId": "civicscience" - }, - "ciwebgroup": { - "name": "CIWebGroup", - "categoryId": 4, - "url": "http://www.ciwebgroup.com/", - "companyId": "ciwebgroup" - }, - "clcknads.pro": { - "name": "clcknads.pro", - "categoryId": 3, - "url": null, - "companyId": null - }, - "clear_pier": { - "name": "ClearPier", - "categoryId": 4, - "url": "http://clearpier.com/", - "companyId": "clear_pier" - }, - "clearbit.com": { - "name": "Clearbit", - "categoryId": 6, - "url": "https://clearbit.com/", - "companyId": "clearbit" - }, - "clearsale": { - "name": "clearsale", - "categoryId": 4, - "url": "https://www.clear.sale/", - "companyId": null - }, - "clearstream.tv": { - "name": "Clearstream.TV", - "categoryId": 4, - "url": "http://clearstream.tv/", - "companyId": "clearstream.tv" - }, - "clerk.io": { - "name": "Clerk.io", - "categoryId": 4, - "url": "https://clerk.io/", - "companyId": "clerk.io" - }, - "clever_push": { - "name": "Clever Push", - "categoryId": 6, - "url": "https://clevertap.com/", - "companyId": "clever_push" - }, - "clever_tap": { - "name": "CleverTap", - "categoryId": 6, - "url": "https://clevertap.com/", - "companyId": "clever_tap" - }, - "cleversite": { - "name": "Cleversite", - "categoryId": 2, - "url": "http://cleversite.ru/", - "companyId": "cleversite" - }, - "click360": { - "name": "Click360", - "categoryId": 6, - "url": "https://www.click360.io/", - "companyId": "click360" - }, - "click_and_chat": { - "name": "Click and Chat", - "categoryId": 2, - "url": "http://www.clickandchat.com/", - "companyId": "clickandchat" - }, - "click_back": { - "name": "Click Back", - "categoryId": 4, - "url": "http://www.clickback.com/", - "companyId": "clickback" - }, - "clickaider": { - "name": "ClickAider", - "categoryId": 4, - "url": "http://clickaider.com/", - "companyId": "clickaider" - }, - "clickaine": { - "name": "Clickaine", - "categoryId": 4, - "url": "https://clickaine.com/", - "companyId": "clickaine", - "source": "AdGuard" - }, - "clickbank": { - "name": "ClickBank", - "categoryId": 4, - "url": "http://www.clickbank.com/", - "companyId": "clickbank" - }, - "clickbank_proads": { - "name": "ClickBank ProAds", - "categoryId": 4, - "url": "http://www.cbproads.com/", - "companyId": "clickbank_proads" - }, - "clickbooth": { - "name": "Clickbooth", - "categoryId": 4, - "url": "http://www.clickbooth.com/", - "companyId": "clickbooth" - }, - "clickcease": { - "name": "ClickCease", - "categoryId": 2, - "url": "https://www.clickcease.com/", - "companyId": "click_cease" - }, - "clickcertain": { - "name": "ClickCertain", - "categoryId": 4, - "url": "http://www.clickcertain.com", - "companyId": "clickcertain" - }, - "clickdesk": { - "name": "ClickDesk", - "categoryId": 2, - "url": "https://www.clickdesk.com/", - "companyId": "clickdesk" - }, - "clickdimensions": { - "name": "ClickDimensions", - "categoryId": 4, - "url": "http://www.clickdimensions.com/", - "companyId": "clickdimensions" - }, - "clickequations": { - "name": "ClickEquations", - "categoryId": 4, - "url": "http://www.clickequations.com/", - "companyId": "acquisio" - }, - "clickexperts": { - "name": "ClickExperts", - "categoryId": 4, - "url": "http://clickexperts.com/corp/index.php?lang=en", - "companyId": "clickexperts" - }, - "clickforce": { - "name": "ClickForce", - "categoryId": 4, - "url": "http://www.clickforce.com.tw/", - "companyId": "clickforce" - }, - "clickinc": { - "name": "ClickInc", - "categoryId": 4, - "url": "http://www.clickinc.com", - "companyId": "clickinc" - }, - "clickintext": { - "name": "ClickInText", - "categoryId": 4, - "url": "http://www.clickintext.com/", - "companyId": "clickintext" - }, - "clickky": { - "name": "Clickky", - "categoryId": 4, - "url": "http://www.clickky.biz/", - "companyId": "clickky" - }, - "clickmeter": { - "name": "ClickMeter", - "categoryId": 4, - "url": "http://www.clickmeter.com", - "companyId": "clickmeter" - }, - "clickonometrics": { - "name": "Clickonometrics", - "categoryId": 4, - "url": "http://clickonometrics.pl/", - "companyId": "clickonometrics" - }, - "clickpoint": { - "name": "Clickpoint", - "categoryId": 4, - "url": "http://clickpoint.com/", - "companyId": "clickpoint" - }, - "clickprotector": { - "name": "ClickProtector", - "categoryId": 6, - "url": "http://www.clickprotector.com/", - "companyId": "clickprotector" - }, - "clickreport": { - "name": "ClickReport", - "categoryId": 6, - "url": "http://clickreport.com/", - "companyId": "clickreport" - }, - "clicks_thru_networks": { - "name": "Clicks Thru Networks", - "categoryId": 4, - "url": "http://www.clicksthrunetwork.com/", - "companyId": "clicksthrunetwork" - }, - "clicksor": { - "name": "Clicksor", - "categoryId": 4, - "url": "http://clicksor.com/", - "companyId": "clicksor" - }, - "clicktale": { - "name": "ClickTale", - "categoryId": 6, - "url": "http://www.clicktale.com/", - "companyId": "clicktale" - }, - "clicktripz": { - "name": "ClickTripz", - "categoryId": 4, - "url": "https://www.clicktripz.com", - "companyId": "clicktripz" - }, - "clickwinks": { - "name": "Clickwinks", - "categoryId": 4, - "url": "http://www.clickwinks.com/", - "companyId": "clickwinks" - }, - "clicky": { - "name": "Clicky", - "categoryId": 6, - "url": "http://getclicky.com/", - "companyId": "clicky" - }, - "clickyab": { - "name": "Clickyab", - "categoryId": 4, - "url": "https://www.clickyab.com/", - "companyId": "clickyab" - }, - "clicmanager": { - "name": "ClicManager", - "categoryId": 4, - "url": "http://www.clicmanager.fr/", - "companyId": "clicmanager" - }, - "clip_syndicate": { - "name": "Clip Syndicate", - "categoryId": 4, - "url": "http://www.clipsyndicate.com/", - "companyId": "clip_syndicate" - }, - "clixgalore": { - "name": "clixGalore", - "categoryId": 4, - "url": "http://www.clixgalore.com/", - "companyId": "clixgalore" - }, - "clixmetrix": { - "name": "ClixMetrix", - "categoryId": 4, - "url": "http://www.clixmetrix.com/", - "companyId": "clixmedia" - }, - "clixsense": { - "name": "ClixSense", - "categoryId": 4, - "url": "http://www.clixsense.com/", - "companyId": "clixsense" - }, - "cloud-media.fr": { - "name": "CloudMedia", - "categoryId": 4, - "url": "https://cloudmedia.fr/", - "companyId": null - }, - "cloudflare": { - "name": "CloudFlare", - "categoryId": 9, - "url": "https://www.cloudflare.com/", - "companyId": "cloudflare" - }, - "cloudimage.io": { - "name": "Cloudimage.io", - "categoryId": 9, - "url": "https://www.cloudimage.io/en/home", - "companyId": "scaleflex_sas" - }, - "cloudinary": { - "name": "Cloudinary", - "categoryId": 9, - "url": "https://cloudinary.com/", - "companyId": null - }, - "clove_network": { - "name": "Clove Network", - "categoryId": 4, - "url": "http://www.clovenetwork.com/", - "companyId": "clove_network" - }, - "clustrmaps": { - "name": "ClustrMaps", - "categoryId": 4, - "url": "http://www.clustrmaps.com/", - "companyId": "clustrmaps" - }, - "cnbc": { - "name": "CNBC", - "categoryId": 8, - "url": "https://www.cnbc.com/", - "companyId": "nbcuniversal" - }, - "cnetcontent.com": { - "name": "Cnetcontent", - "categoryId": 8, - "url": "http://cnetcontent.com/", - "companyId": "cbs_interactive" - }, - "cnstats": { - "name": "CNStats", - "categoryId": 6, - "url": "http://cnstats.ru/", - "companyId": "cnstats" - }, - "cnzz.com": { - "name": "Umeng", - "categoryId": 6, - "url": "http://www.umeng.com/", - "companyId": "umeng" - }, - "coadvertise": { - "name": "COADVERTISE", - "categoryId": 4, - "url": "http://www.coadvertise.com/", - "companyId": "coadvertise" - }, - "cobrowser": { - "name": "CoBrowser", - "categoryId": 2, - "url": "https://www.cobrowser.net/", - "companyId": "cobrowser.net" - }, - "codeonclick.com": { - "name": "codeonclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cogocast": { - "name": "CogoCast", - "categoryId": 4, - "url": "http://www.cogocast.com", - "companyId": "cogocast" - }, - "coin_have": { - "name": "Coin Have", - "categoryId": 4, - "url": "https://coin-have.com/", - "companyId": "coin_have" - }, - "coin_traffic": { - "name": "Coin Traffic", - "categoryId": 2, - "url": "https://cointraffic.io/", - "companyId": "coin_traffic" - }, - "coinhive": { - "name": "Coinhive", - "categoryId": 8, - "url": "https://coinhive.com/", - "companyId": "coinhive" - }, - "coinurl": { - "name": "CoinURL", - "categoryId": 4, - "url": "https://coinurl.com/", - "companyId": "coinurl" - }, - "coll1onf.com": { - "name": "coll1onf.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "coll2onf.com": { - "name": "coll2onf.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "collarity": { - "name": "Collarity", - "categoryId": 4, - "url": "http://www.collarity.com/", - "companyId": "collarity" - }, - "columbia_online": { - "name": "Columbia Online", - "categoryId": 4, - "url": "https://www.colombiaonline.com/", - "companyId": "columbia_online" - }, - "combotag": { - "name": "ComboTag", - "categoryId": 4, - "url": "https://www.combotag.com/", - "companyId": null - }, - "comcast_technology_solutions": { - "name": "Comcast Technology Solutions", - "categoryId": 0, - "url": "https://www.comcasttechnologysolutions.com/", - "companyId": "comcast_technology_solutions" - }, - "comm100": { - "name": "Comm100", - "categoryId": 2, - "url": "http://www.comm100.com/", - "companyId": "comm100" - }, - "commerce_sciences": { - "name": "Commerce Sciences", - "categoryId": 4, - "url": "http://commercesciences.com/", - "companyId": "commerce_sciences" - }, - "commercehub": { - "name": "CommerceHub", - "categoryId": 4, - "url": "http://www.mercent.com/", - "companyId": "commercehub" - }, - "commercialvalue.org": { - "name": "commercialvalue.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "commission_junction": { - "name": "CJ Affiliate", - "categoryId": 4, - "url": "http://www.cj.com/", - "companyId": "conversant" - }, - "communicator_corp": { - "name": "Communicator Corp", - "categoryId": 4, - "url": "http://www.communicatorcorp.com/", - "companyId": "communicator_corp" - }, - "communigator": { - "name": "CommuniGator", - "categoryId": 6, - "url": "http://www.wowanalytics.co.uk/", - "companyId": "communigator" - }, - "competexl": { - "name": "CompeteXL", - "categoryId": 6, - "url": "http://www.compete.com/help/s12", - "companyId": "wpp" - }, - "complex_media_network": { - "name": "Complex Media", - "categoryId": 4, - "url": "https://www.complex.com/", - "companyId": "verizon" - }, - "comprigo": { - "name": "comprigo", - "categoryId": 12, - "url": "https://www.comprigo.com/", - "companyId": null - }, - "comscore": { - "name": "ComScore, Inc.", - "categoryId": 6, - "url": "https://www.comscore.com/", - "companyId": "comscore" - }, - "conative.de": { - "name": "CoNative", - "categoryId": 4, - "url": "http://www.conative.de/", - "companyId": null - }, - "condenastdigital.com": { - "name": "Condé Nast Digital", - "categoryId": 8, - "url": "http://www.condenast.com/", - "companyId": "conde_nast" - }, - "conduit": { - "name": "Conduit", - "categoryId": 4, - "url": "http://www.conduit.com/", - "companyId": "conduit" - }, - "confirmit": { - "name": "Confirmit", - "categoryId": 4, - "url": "http://confirmit.com/", - "companyId": "confirmit" - }, - "congstar.de": { - "name": "congstar.de", - "categoryId": 4, - "url": null, - "companyId": null - }, - "connatix.com": { - "name": "Connatix", - "categoryId": 4, - "url": "https://connatix.com/", - "companyId": "connatix" - }, - "connectad": { - "name": "ConnectAd", - "categoryId": 4, - "url": "https://connectad.io/", - "companyId": "connectad" - }, - "connecto": { - "name": "Connecto", - "categoryId": 6, - "url": "http://www.connecto.io/", - "companyId": "connecto" - }, - "connexity": { - "name": "Connexity", - "categoryId": 4, - "url": "http://www.connexity.com", - "companyId": "shopzilla" - }, - "connextra": { - "name": "Connextra", - "categoryId": 4, - "url": "http://connextra.com/", - "companyId": "connextra" - }, - "constant_contact": { - "name": "Constant Contact", - "categoryId": 4, - "url": "http://www.constantcontact.com/index.jsp", - "companyId": "constant_contact" - }, - "consumable": { - "name": "Consumable", - "categoryId": 4, - "url": "http://consumable.com/index.html", - "companyId": "giftconnect" - }, - "contact_at_once": { - "name": "Contact At Once!", - "categoryId": 2, - "url": "http://www.contactatonce.com/", - "companyId": "contact_at_once!" - }, - "contact_impact": { - "name": "Contact Impact", - "categoryId": 4, - "url": "https://www.contactimpact.de/", - "companyId": "axel_springer" - }, - "contactme": { - "name": "ContactMe", - "categoryId": 4, - "url": "http://www.contactme.com", - "companyId": "contactme" - }, - "contaxe": { - "name": "Contaxe", - "categoryId": 5, - "url": "http://www.contaxe.com/", - "companyId": "contaxe" - }, - "content.ad": { - "name": "Content.ad", - "categoryId": 4, - "url": "https://www.content.ad/", - "companyId": "content.ad" - }, - "content_insights": { - "name": "Content Insights", - "categoryId": 6, - "url": "https://contentinsights.com/", - "companyId": "content_insights" - }, - "contentexchange.me": { - "name": "Content Exchange", - "categoryId": 6, - "url": "https://www.contentexchange.me/", - "companyId": "i.r.v." - }, - "contentful_gmbh": { - "name": "Contentful GmbH", - "categoryId": 9, - "url": "https://www.contentful.com/", - "companyId": "contentful_gmbh" - }, - "contentpass": { - "name": "ContentPass", - "categoryId": 6, - "url": "https://www.contentpass.de/", - "companyId": "contentpass" - }, - "contentsquare.net": { - "name": "ContentSquare", - "categoryId": 4, - "url": "https://www.contentsquare.com/", - "companyId": "content_square" - }, - "contentwrx": { - "name": "Contentwrx", - "categoryId": 6, - "url": "http://contentwrx.com/", - "companyId": "contentwrx" - }, - "context": { - "name": "C|ON|TEXT", - "categoryId": 4, - "url": "http://c-on-text.com", - "companyId": "c_on_text" - }, - "context.ad": { - "name": "Context.ad", - "categoryId": 4, - "url": "http://contextad.pl/", - "companyId": "context.ad" - }, - "continum_net": { - "name": "continum.net", - "categoryId": 10, - "url": "http://continum.net/", - "companyId": null - }, - "contribusource": { - "name": "Contribusource", - "categoryId": 4, - "url": "https://www.contribusource.com/", - "companyId": "contribusource" - }, - "convergetrack": { - "name": "ConvergeTrack", - "categoryId": 6, - "url": "http://www.convergedirect.com/technology/convergetrack.shtml", - "companyId": "convergedirect" - }, - "conversant": { - "name": "Conversant", - "categoryId": 4, - "url": "https://www.conversantmedia.eu/", - "companyId": "conversant" - }, - "conversio": { - "name": "CM Commerce", - "categoryId": 6, - "url": "https://cm-commerce.com/", - "companyId": "conversio" - }, - "conversion_logic": { - "name": "Conversion Logic", - "categoryId": 6, - "url": "http://www.conversionlogic.com/", - "companyId": "conversion_logic" - }, - "conversionruler": { - "name": "ConversionRuler", - "categoryId": 4, - "url": "http://www.conversionruler.com/", - "companyId": "market_ruler" - }, - "conversions_box": { - "name": "Conversions Box", - "categoryId": 7, - "url": "http://www.conversionsbox.com/", - "companyId": "conversions_box" - }, - "conversions_on_demand": { - "name": "Conversions On Demand", - "categoryId": 5, - "url": "https://www.conversionsondemand.com/", - "companyId": "conversions_on_demand" - }, - "conversive": { - "name": "Conversive", - "categoryId": 4, - "url": "http://www.conversive.nl/", - "companyId": "conversive" - }, - "convert": { - "name": "Convert", - "categoryId": 6, - "url": "https://www.convert.com/", - "companyId": "convert" - }, - "convertfox": { - "name": "ConvertFox", - "categoryId": 2, - "url": "https://convertfox.com/", - "companyId": "convertfox" - }, - "convertro": { - "name": "Convertro", - "categoryId": 4, - "url": "http://www.convertro.com/", - "companyId": "verizon" - }, - "conviva": { - "name": "Conviva", - "categoryId": 6, - "url": "http://www.conviva.com/", - "companyId": "conviva" - }, - "cookie_consent": { - "name": "Cookie Consent", - "categoryId": 5, - "url": "https://silktide.com/", - "companyId": "silktide" - }, - "cookie_script": { - "name": "Cookie Script", - "categoryId": 5, - "url": "https://cookie-script.com/", - "companyId": "cookie_script" - }, - "cookiebot": { - "name": "Cookiebot", - "categoryId": 5, - "url": "https://www.cookiebot.com/en/", - "companyId": "cybot" - }, - "cookieq": { - "name": "CookieQ", - "categoryId": 5, - "url": "http://cookieq.com/CookieQ", - "companyId": "baycloud" - }, - "cooliris": { - "name": "Cooliris", - "categoryId": 2, - "url": "http://www.cooliris.com", - "companyId": "cooliris" - }, - "copacet": { - "name": "Copacet", - "categoryId": 4, - "url": "http://copacet.com/", - "companyId": "copacet" - }, - "coreaudience": { - "name": "CoreAudience", - "categoryId": 4, - "url": "http://www.redaril.com/", - "companyId": "hearst" - }, - "coremotives": { - "name": "CoreMotives", - "categoryId": 4, - "url": "http://coremotives.com/", - "companyId": "coremotives" - }, - "coull": { - "name": "Coull", - "categoryId": 4, - "url": "http://coull.com/", - "companyId": "coull" - }, - "cpm_rocket": { - "name": "CPM Rocket", - "categoryId": 4, - "url": "http://www.cpmrocket.com/", - "companyId": "cpm_rocket" - }, - "cpmprofit": { - "name": "CPMProfit", - "categoryId": 4, - "url": "http://www.cpmprofit.com/", - "companyId": "cpmprofit" - }, - "cpmstar": { - "name": "CPMStar", - "categoryId": 4, - "url": "http://www.cpmstar.com", - "companyId": "cpmstar" - }, - "cpx.to": { - "name": "Captify", - "categoryId": 4, - "url": "https://www.captify.co.uk/", - "companyId": "captify" - }, - "cq_counter": { - "name": "CQ Counter", - "categoryId": 6, - "url": "http://www.cqcounter.com/", - "companyId": "cq_counter" - }, - "cqq5id8n.com": { - "name": "cqq5id8n.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cquotient.com": { - "name": "CQuotient", - "categoryId": 6, - "url": "https://www.demandware.com/#cquotient", - "companyId": "salesforce" - }, - "craftkeys": { - "name": "CraftKeys", - "categoryId": 4, - "url": "http://craftkeys.com/", - "companyId": "craftkeys" - }, - "crakmedia_network": { - "name": "Crakmedia Network", - "categoryId": 4, - "url": "http://crakmedia.com/", - "companyId": "crakmedia_network" - }, - "crankyads": { - "name": "CrankyAds", - "categoryId": 4, - "url": "http://www.crankyads.com", - "companyId": "crankyads" - }, - "crashlytics": { - "name": "Crashlytics", - "categoryId": 101, - "url": "https://crashlytics.com/", - "companyId": "google", - "source": "AdGuard" - }, - "crazy_egg": { - "name": "Crazy Egg", - "categoryId": 6, - "url": "http://crazyegg.com/", - "companyId": "crazy_egg" - }, - "creafi": { - "name": "Creafi", - "categoryId": 4, - "url": "http://www.creafi.com/en/home/", - "companyId": "crazy4media" - }, - "createjs": { - "name": "CreateJS", - "categoryId": 9, - "url": "https://createjs.com/", - "companyId": null - }, - "creative_commons": { - "name": "Creative Commons", - "categoryId": 8, - "url": "https://creativecommons.org/", - "companyId": "creative_commons_corp" - }, - "crimsonhexagon_com": { - "name": "Brandwatch", - "categoryId": 6, - "url": "https://www.brandwatch.com/", - "companyId": "brandwatch" - }, - "crimtan": { - "name": "Crimtan", - "categoryId": 4, - "url": "http://www.crimtan.com/", - "companyId": "crimtan" - }, - "crisp": { - "name": "Crisp", - "categoryId": 2, - "url": "https://crisp.chat/", - "companyId": "crisp" - }, - "criteo": { - "name": "Criteo", - "categoryId": 4, - "url": "http://www.criteo.com/", - "companyId": "criteo" - }, - "crm4d": { - "name": "CRM4D", - "categoryId": 6, - "url": "https://crm4d.com/", - "companyId": "crm4d" - }, - "crossengage": { - "name": "CrossEngage", - "categoryId": 6, - "url": "https://www.crossengage.io/", - "companyId": "crossengage" - }, - "crosspixel": { - "name": "Cross Pixel", - "categoryId": 4, - "url": "http://crosspixel.net/", - "companyId": "cross_pixel" - }, - "crosssell.info": { - "name": "econda Cross Sell", - "categoryId": 4, - "url": "https://www.econda.de/en/solutions/personalization/cross-sell/", - "companyId": "econda" - }, - "crossss": { - "name": "Crossss", - "categoryId": 4, - "url": "http://crossss.ru/", - "companyId": "crossss" - }, - "crowd_ignite": { - "name": "Crowd Ignite", - "categoryId": 4, - "url": "http://get.crowdignite.com/", - "companyId": "gorilla_nation_media" - }, - "crowd_science": { - "name": "Crowd Science", - "categoryId": 4, - "url": "http://www.crowdscience.com/", - "companyId": "crowd_science" - }, - "crowdprocess": { - "name": "CrowdProcess", - "categoryId": 2, - "url": "https://crowdprocess.com", - "companyId": "crowdprocess" - }, - "crowdynews": { - "name": "Crowdynews", - "categoryId": 7, - "url": "http://www.crowdynews.com/", - "companyId": "crowdynews" - }, - "crownpeak": { - "name": "Crownpeak", - "categoryId": 5, - "url": "https://www.crownpeak.com/", - "companyId": "crownpeak" - }, - "cryptoloot_miner": { - "name": "CryptoLoot Miner", - "categoryId": 4, - "url": "https://crypto-loot.com/", - "companyId": "cryptoloot" - }, - "ctnetwork": { - "name": "CTnetwork", - "categoryId": 4, - "url": "http://ctnetwork.hu/", - "companyId": "ctnetwork" - }, - "ctrlshift": { - "name": "CtrlShift", - "categoryId": 4, - "url": "http://www.adzcentral.com/", - "companyId": "ctrlshift" - }, - "cubed": { - "name": "Cubed", - "categoryId": 6, - "url": "http://withcubed.com/", - "companyId": "cubed_attribution" - }, - "cuelinks": { - "name": "CueLinks", - "categoryId": 4, - "url": "http://www.cuelinks.com/", - "companyId": "cuelinks" - }, - "cup_interactive": { - "name": "Cup Interactive", - "categoryId": 4, - "url": "http://www.cupinteractive.com/", - "companyId": "cup_interactive" - }, - "curse.com": { - "name": "Curse", - "categoryId": 8, - "url": "https://www.curse.com/", - "companyId": "amazon_associates" - }, - "cursecdn.com": { - "name": "Curse CDN", - "categoryId": 9, - "url": "https://www.curse.com/", - "companyId": "amazon_associates" - }, - "customer.io": { - "name": "Customer.io", - "categoryId": 2, - "url": "http://www.customer.io/", - "companyId": "customer.io" - }, - "customerly": { - "name": "Customerly", - "categoryId": 2, - "url": "https://www.customerly.io/", - "companyId": "customerly" - }, - "cxense": { - "name": "cXense", - "categoryId": 4, - "url": "http://www.cxense.com/", - "companyId": "cxense" - }, - "cxo.name": { - "name": "Chip Analytics", - "categoryId": 6, - "url": "http://www.chip.de/", - "companyId": null - }, - "cyber_wing": { - "name": "Cyber Wing", - "categoryId": 4, - "url": "http://www.cyberwing.co.jp/", - "companyId": "cyberwing" - }, - "cybersource": { - "name": "CyberSource", - "categoryId": 6, - "url": "https://www.cybersource.com/en-gb.html", - "companyId": "visa" - }, - "cygnus": { - "name": "Cygnus", - "categoryId": 4, - "url": "http://www.cygnus.com/", - "companyId": "cygnus" - }, - "da-ads.com": { - "name": "da-ads.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "dailymail.co.uk": { - "name": "Daily Mail", - "categoryId": 8, - "url": "http://www.dailymail.co.uk/home/index.html", - "companyId": "dmg_media" - }, - "dailymotion": { - "name": "Dailymotion", - "categoryId": 8, - "url": "https://vivendi.com/", - "companyId": "vivendi" - }, - "dailymotion_advertising": { - "name": "Dailymotion Advertising", - "categoryId": 4, - "url": "http://advertising.dailymotion.com/", - "companyId": "vivendi" - }, - "daisycon": { - "name": "Daisycon", - "categoryId": 4, - "url": "http://www.daisycon.com", - "companyId": "daisycon" - }, - "dantrack.net": { - "name": "DANtrack", - "categoryId": 4, - "url": "http://media.dantrack.net/privacy/", - "companyId": "dentsu_aegis_network" - }, - "darwin_marketing": { - "name": "Darwin Marketing", - "categoryId": 4, - "url": "http://www.darwinmarketing.com/", - "companyId": "darwin_marketing" - }, - "dashboard_ad": { - "name": "Dashboard Ad", - "categoryId": 4, - "url": "http://www.dashboardad.com/", - "companyId": "premium_access" - }, - "datacaciques.com": { - "name": "DataCaciques", - "categoryId": 6, - "url": "http://www.datacaciques.com/", - "companyId": null - }, - "datacoral": { - "name": "Datacoral", - "categoryId": 4, - "url": "https://datacoral.com/", - "companyId": "datacoral" - }, - "datacrushers": { - "name": "Datacrushers", - "categoryId": 6, - "url": "https://www.datacrushers.com/", - "companyId": "datacrushers" - }, - "datadome": { - "name": "DataDome", - "categoryId": 6, - "url": "https://datadome.co/", - "companyId": "datadome" - }, - "datalicious_datacollector": { - "name": "Datalicious DataCollector", - "categoryId": 6, - "url": "http://www.datalicious.com/", - "companyId": "datalicious" - }, - "datalicious_supertag": { - "name": "Datalicious SuperTag", - "categoryId": 5, - "url": "http://www.datalicious.com/", - "companyId": "datalicious" - }, - "datalogix": { - "name": "Datalogix", - "categoryId": 4, - "url": "https://www.oracle.com/corporate/acquisitions/datalogix/", - "companyId": "oracle" - }, - "datamind.ru": { - "name": "DataMind", - "categoryId": 4, - "url": "http://datamind.ru/", - "companyId": "datamind" - }, - "datatables": { - "name": "DataTables", - "categoryId": 2, - "url": "https://datatables.net/", - "companyId": null - }, - "datawrkz": { - "name": "Datawrkz", - "categoryId": 4, - "url": "http://datawrkz.com/", - "companyId": "datawrkz" - }, - "dataxpand": { - "name": "Dataxpand", - "categoryId": 4, - "url": "http://dataxpand.com/", - "companyId": "dataxpand" - }, - "dataxu": { - "name": "DataXu", - "categoryId": 4, - "url": "http://www.dataxu.com/", - "companyId": "dataxu" - }, - "datds.net": { - "name": "datds.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "datonics": { - "name": "Datonics", - "categoryId": 4, - "url": "http://datonics.com/", - "companyId": "almondnet" - }, - "datran": { - "name": "Pulsepoint", - "categoryId": 4, - "url": "https://www.pulsepoint.com/", - "companyId": "pulsepoint_ad_exchange" - }, - "davebestdeals.com": { - "name": "davebestdeals.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "dawandastatic.com": { - "name": "Dawanda CDN", - "categoryId": 8, - "url": "https://dawanda.com/", - "companyId": null - }, - "dc_stormiq": { - "name": "DC StormIQ", - "categoryId": 4, - "url": "http://www.dc-storm.com/", - "companyId": "dc_storm" - }, - "dcbap.com": { - "name": "dcbap.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "dcmn.com": { - "name": "DCMN", - "categoryId": 4, - "url": "https://www.dcmn.com/", - "companyId": null - }, - "de_persgroep": { - "name": "De Persgroep", - "categoryId": 4, - "url": "https://www.persgroep.nl", - "companyId": "de_persgroep" - }, - "deadline_funnel": { - "name": "Deadline Funnel", - "categoryId": 6, - "url": "https://deadlinefunnel.com/", - "companyId": "deadline_funnel" - }, - "dealer.com": { - "name": "Dealer.com", - "categoryId": 6, - "url": "http://www.dealer.com/", - "companyId": "dealer.com" - }, - "decibel_insight": { - "name": "Decibel Insight", - "categoryId": 6, - "url": "https://www.decibelinsight.com/", - "companyId": "decibel_insight" - }, - "dedicated_media": { - "name": "Dedicated Media", - "categoryId": 4, - "url": "http://www.dedicatedmedia.com/", - "companyId": "dedicated_media" - }, - "deep.bi": { - "name": "Deep.BI", - "categoryId": 6, - "url": "http://www.deep.bi/#", - "companyId": "deep.bi" - }, - "deepintent.com": { - "name": "DeepIntent", - "categoryId": 4, - "url": "https://www.deepintent.com/", - "companyId": "deep_intent" - }, - "defpush.com": { - "name": "defpush.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "deichmann.com": { - "name": "deichmann.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "delacon": { - "name": "Delacon", - "categoryId": 6, - "url": "http://www.delacon.com.au/", - "companyId": "delacon" - }, - "delivr": { - "name": "Delivr", - "categoryId": 6, - "url": "http://www.percentmobile.com/", - "companyId": "delivr" - }, - "delta_projects": { - "name": "Delta Projects", - "categoryId": 4, - "url": "http://www.adaction.se/", - "companyId": "delta_projects" - }, - "deluxe": { - "name": "Deluxe", - "categoryId": 6, - "url": "https://ww.deluxe.com/", - "companyId": "deluxe" - }, - "delve_networks": { - "name": "Delve Networks", - "categoryId": 7, - "url": "http://www.delvenetworks.com/", - "companyId": "limelight_networks" - }, - "demandbase": { - "name": "Demandbase", - "categoryId": 4, - "url": "http://www.demandbase.com/", - "companyId": "demandbase" - }, - "demandmedia": { - "name": "DemandMedia", - "categoryId": 4, - "url": "http://www.demandmedia.com", - "companyId": "leaf_group" - }, - "deqwas": { - "name": "Deqwas", - "categoryId": 6, - "url": "http://www.deqwas.com/", - "companyId": "deqwas" - }, - "devatics": { - "name": "Devatics", - "categoryId": 2, - "url": "http://www.devatics.co.uk/", - "companyId": "devatics" - }, - "developer_media": { - "name": "Developer Media", - "categoryId": 4, - "url": "http://www.developermedia.com/", - "companyId": "developer_media" - }, - "deviantart.net": { - "name": "deviantart.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dex_platform": { - "name": "DEX Platform", - "categoryId": 4, - "url": "http://blueadvertise.com/", - "companyId": "dex_platform" - }, - "dgm": { - "name": "dgm", - "categoryId": 4, - "url": "http://www.dgm-au.com/", - "companyId": "apd" - }, - "dialogtech": { - "name": "Dialogtech", - "categoryId": 6, - "url": "https://www.dialogtech.com/", - "companyId": "dialogtech" - }, - "dianomi": { - "name": "Dianomi", - "categoryId": 4, - "url": "http://www.dianomi.com/cms/", - "companyId": "dianomi" - }, - "didit_blizzard": { - "name": "Didit Blizzard", - "categoryId": 4, - "url": "http://www.didit.com/blizzard", - "companyId": "didit" - }, - "didit_maestro": { - "name": "Didit Maestro", - "categoryId": 4, - "url": "http://www.didit.com/maestro", - "companyId": "didit" - }, - "didomi": { - "name": "Didomi", - "categoryId": 5, - "url": "https://www.didomi.io/en/", - "companyId": "didomi" - }, - "digg_widget": { - "name": "Digg Widget", - "categoryId": 2, - "url": "http://digg.com/apple/Digg_Widget", - "companyId": "buysellads.com" - }, - "digicert_trust_seal": { - "name": "Digicert Trust Seal", - "categoryId": 5, - "url": "http://www.digicert.com/", - "companyId": "digicert" - }, - "digidip": { - "name": "Digidip", - "categoryId": 4, - "url": "http://www.digidip.net/", - "companyId": "digidip" - }, - "digiglitz": { - "name": "Digiglitz", - "categoryId": 6, - "url": "http://www.digiglitz.com/", - "companyId": "digiglitz" - }, - "digilant": { - "name": "Digilant", - "categoryId": 4, - "url": "https://www.digilant.com/", - "companyId": "digilant" - }, - "digioh": { - "name": "Digioh", - "categoryId": 4, - "url": "https://digioh.com/", - "companyId": null - }, - "digital.gov": { - "name": "Digital.gov", - "categoryId": 6, - "url": "https://digital.gov/", - "companyId": "us_government" - }, - "digital_control_room": { - "name": "Digital Control Room", - "categoryId": 5, - "url": "http://www.cookiereports.com/", - "companyId": "digital_control_room" - }, - "digital_nomads": { - "name": "Digital Nomads", - "categoryId": 4, - "url": "http://dnomads.net/", - "companyId": null - }, - "digital_remedy": { - "name": "Digital Remedy", - "categoryId": 4, - "url": "https://www.digitalremedy.com/", - "companyId": "digital_remedy" - }, - "digital_river": { - "name": "Digital River", - "categoryId": 4, - "url": "http://corporate.digitalriver.com", - "companyId": "digital_river" - }, - "digital_window": { - "name": "Digital Window", - "categoryId": 4, - "url": "http://www.digitalwindow.com/", - "companyId": "axel_springer" - }, - "digiteka": { - "name": "Digiteka", - "categoryId": 4, - "url": "http://digiteka.com/", - "companyId": "digiteka" - }, - "digitrust": { - "name": "DigiTrust", - "categoryId": 4, - "url": "http://www.digitru.st/", - "companyId": "iab" - }, - "dihitt_badge": { - "name": "diHITT Badge", - "categoryId": 7, - "url": "http://www.dihitt.com.br/", - "companyId": "dihitt" - }, - "dimml": { - "name": "DimML", - "categoryId": 8, - "url": null, - "companyId": null - }, - "direct_keyword_link": { - "name": "Direct Keyword Link", - "categoryId": 4, - "url": "http://www.keywordsconnect.com/", - "companyId": "direct_keyword_link" - }, - "directadvert": { - "name": "Direct/ADVERT", - "categoryId": 4, - "url": "http://www.directadvert.ru/", - "companyId": "directadvert" - }, - "directrev": { - "name": "DirectREV", - "categoryId": 4, - "url": "http://www.directrev.com/", - "companyId": "directrev" - }, - "discord": { - "name": "Discord", - "categoryId": 2, - "url": "https://discordapp.com/", - "companyId": null - }, - "disneyplus": { - "name": "Disney+", - "categoryId": 0, - "url": "https://www.disneyplus.com/", - "companyId": "disney", - "source": "AdGuard" - }, - "disneystreaming": { - "name": "Disney Streaming", - "categoryId": 0, - "url": "https://press.disneyplus.com", - "companyId": "disney", - "source": "AdGuard" - }, - "display_block": { - "name": "display block", - "categoryId": 4, - "url": "https://www.displayblock.com/", - "companyId": "display_block" - }, - "disqus": { - "name": "Disqus", - "categoryId": 1, - "url": "https://disqus.com/", - "companyId": "zeta" - }, - "disqus_ads": { - "name": "Disqus Ads", - "categoryId": 4, - "url": "https://disqusads.com/", - "companyId": "zeta" - }, - "distil_tag": { - "name": "Distil Networks", - "categoryId": 5, - "url": "https://www.distilnetworks.com/", - "companyId": "distil_networks" - }, - "districtm.io": { - "name": "district m", - "categoryId": 4, - "url": "https://districtm.net/", - "companyId": "district_m" - }, - "distroscale": { - "name": "Distroscale", - "categoryId": 6, - "url": "http://www.distroscale.com/", - "companyId": "distroscale" - }, - "div.show": { - "name": "div.show", - "categoryId": 12, - "url": null, - "companyId": null - }, - "diva": { - "name": "DiVa", - "categoryId": 6, - "url": "http://www.vertriebsassistent.de/", - "companyId": "diva" - }, - "divvit": { - "name": "Divvit", - "categoryId": 6, - "url": "https://www.divvit.com/", - "companyId": "divvit" - }, - "dm2": { - "name": "DM2", - "categoryId": 4, - "url": "http://digitalmediamanagement.com/", - "companyId": "digital_media_management" - }, - "dmg_media": { - "name": "DMG Media", - "categoryId": 8, - "url": "https://www.dmgmedia.co.uk/", - "companyId": "dmgt" - }, - "dmm": { - "name": "DMM", - "categoryId": 3, - "url": "http://www.dmm.co.jp", - "companyId": "dmm.r18" - }, - "dmwd": { - "name": "DMWD", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dockvine": { - "name": "dockvine", - "categoryId": 2, - "url": "https://www.dockvine.com", - "companyId": "dockvine" - }, - "docler": { - "name": "Docler", - "categoryId": 0, - "url": "https://www.doclerholding.com/en/about/companies/33/", - "companyId": "docler_ip" - }, - "dogannet": { - "name": "Dogannet", - "categoryId": 4, - "url": "http://s.dogannet.tv/", - "companyId": "dogannet" - }, - "domainglass": { - "name": "Domain Glass", - "categoryId": 8, - "url": "https://domain.glass/", - "companyId": "domainglass", - "source": "AdGuard" - }, - "domodomain": { - "name": "DomoDomain", - "categoryId": 6, - "url": "http://www.domodomain.com/", - "companyId": "intelligencefocus" - }, - "donationtools": { - "name": "iRobinHood", - "categoryId": 12, - "url": "http://www.irobinhood.org", - "companyId": null - }, - "doofinder.com": { - "name": "doofinder", - "categoryId": 2, - "url": "https://www.doofinder.com/", - "companyId": null - }, - "doorbell.io": { - "name": "Doorbell.io", - "categoryId": 5, - "url": "https://doorbell.io/", - "companyId": "doorbell.io" - }, - "dotandmedia": { - "name": "DotAndMedia", - "categoryId": 4, - "url": "http://www.dotandmedia.com", - "companyId": "dotandmedia" - }, - "dotmailer": { - "name": "dotMailer", - "categoryId": 2, - "url": "http://www.dotdigitalgroup.com/", - "companyId": "dotdigital_group" - }, - "dotmetrics.net": { - "name": "Dotmetrics", - "categoryId": 6, - "url": "https://dotmetrics.net/", - "companyId": null - }, - "dotomi": { - "name": "Dotomi", - "categoryId": 4, - "url": "http://www.dotomi.com/", - "companyId": "conversant" - }, - "double.net": { - "name": "Double.net", - "categoryId": 4, - "url": "http://double.net/en/", - "companyId": "double.net" - }, - "doubleclick": { - "name": "DoubleClick", - "categoryId": 4, - "url": "http://www.doubleclick.com", - "companyId": "google" - }, - "doubleclick_ad_buyer": { - "name": "DoubleClick Ad Exchange-Buyer", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "doubleclick_bid_manager": { - "name": "DoubleClick Bid Manager", - "categoryId": 4, - "url": "http://www.invitemedia.com", - "companyId": "google" - }, - "doubleclick_floodlight": { - "name": "DoubleClick Floodlight", - "categoryId": 4, - "url": "http://www.google.com/support/dfa/partner/bin/topic.py?topic=23943", - "companyId": "google" - }, - "doubleclick_spotlight": { - "name": "DoubleClick Spotlight", - "categoryId": 4, - "url": "http://www.doubleclick.com/products/richmedia", - "companyId": "google" - }, - "doubleclick_video_stats": { - "name": "Doubleclick Video Stats", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "doublepimp": { - "name": "DoublePimp", - "categoryId": 3, - "url": "http://www.doublepimp.com/", - "companyId": "doublepimp" - }, - "doubleverify": { - "name": "DoubleVerify", - "categoryId": 4, - "url": "http://www.doubleverify.com/", - "companyId": "doubleverify" - }, - "dratio": { - "name": "Dratio", - "categoryId": 6, - "url": "http://www.dratio.com/", - "companyId": "dratio" - }, - "drawbridge": { - "name": "Drawbridge", - "categoryId": 4, - "url": "http://www.drawbrid.ge/", - "companyId": "drawbridge" - }, - "dreame_tech": { - "name": "Dreame Technology", - "categoryId": 8, - "url": "https://www.dreame.tech/", - "companyId": "xiaomi", - "source": "AdGuard" - }, - "dreamlab.pl": { - "name": "DreamLab.pl", - "categoryId": 4, - "url": "https://www.dreamlab.pl/", - "companyId": "onet.pl" - }, - "drift": { - "name": "Drift", - "categoryId": 2, - "url": "https://www.drift.com/", - "companyId": "drift" - }, - "drip": { - "name": "Drip", - "categoryId": 2, - "url": "https://www.getdrip.com", - "companyId": "drip" - }, - "dropbox.com": { - "name": "Dropbox", - "categoryId": 2, - "url": "https://www.dropbox.com/", - "companyId": null - }, - "dsnr_media_group": { - "name": "DSNR Media Group", - "categoryId": 4, - "url": "http://www.dsnrmg.com/", - "companyId": "dsnr_media_group" - }, - "dsp_rambler": { - "name": "Rambler DSP", - "categoryId": 4, - "url": "http://dsp.rambler.ru/", - "companyId": "rambler" - }, - "dstillery": { - "name": "Dstillery", - "categoryId": 4, - "url": "https://dstillery.com/", - "companyId": "dstillery" - }, - "dtscout.com": { - "name": "DTScout", - "categoryId": 4, - "url": "http://www.dtscout.com/", - "companyId": "dtscout" - }, - "dudamobile": { - "name": "DudaMobile", - "categoryId": 4, - "url": "https://www.dudamobile.com/", - "companyId": "dudamobile" - }, - "dun_and_bradstreet": { - "name": "Dun and Bradstreet", - "categoryId": 6, - "url": "http://www.dnb.com/#", - "companyId": "dun_&_bradstreet" - }, - "dwstat.cn": { - "name": "dwstat.cn", - "categoryId": 6, - "url": "http://www.dwstat.cn/", - "companyId": "dwstat" - }, - "dynad": { - "name": "DynAd", - "categoryId": 4, - "url": "http://dynad.net/", - "companyId": "dynad" - }, - "dynadmic": { - "name": "DynAdmic", - "categoryId": 4, - "url": null, - "companyId": null - }, - "dynamic_1001_gmbh": { - "name": "Dynamic 1001 GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dynamic_logic": { - "name": "Dynamic Logic", - "categoryId": 4, - "url": "http://www.dynamiclogic.com/", - "companyId": "millward_brown" - }, - "dynamic_yield": { - "name": "Dynamic Yield", - "categoryId": 5, - "url": "https://www.dynamicyield.com/", - "companyId": "dynamic_yield" - }, - "dynamic_yield_analytics": { - "name": "Dynamic Yield Analytics", - "categoryId": 6, - "url": "http://www.dynamicyield.com/", - "companyId": "dynamic_yield" - }, - "dynata": { - "name": "Dynata", - "categoryId": 4, - "url": "http://hottraffic.nl/en", - "companyId": "dynata" - }, - "dynatrace.com": { - "name": "Dynatrace", - "categoryId": 6, - "url": "https://www.dynatrace.com/", - "companyId": "thoma_bravo" - }, - "dyncdn.me": { - "name": "dyncdn.me", - "categoryId": 11, - "url": null, - "companyId": null - }, - "e-planning": { - "name": "e-planning", - "categoryId": 4, - "url": "http://www.e-planning.net/", - "companyId": "e-planning" - }, - "eadv": { - "name": "eADV", - "categoryId": 4, - "url": "http://eadv.it/", - "companyId": "eadv" - }, - "eanalyzer.de": { - "name": "eanalyzer.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "early_birds": { - "name": "Early Birds", - "categoryId": 4, - "url": "http://www.early-birds.fr/", - "companyId": "early_birds" - }, - "earnify": { - "name": "Earnify", - "categoryId": 4, - "url": "https://www.earnify.com/", - "companyId": "earnify" - }, - "earnify_tracker": { - "name": "Earnify Tracker", - "categoryId": 6, - "url": "https://www.earnify.com/", - "companyId": "earnify" - }, - "easyads": { - "name": "EasyAds", - "categoryId": 4, - "url": "https://easyads.bg/", - "companyId": "easyads" - }, - "easylist_club": { - "name": "easylist.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ebay": { - "name": "eBay Stats", - "categoryId": 4, - "url": "https://partnernetwork.ebay.com/", - "companyId": "ebay_partner_network" - }, - "ebay_korea": { - "name": "eBay Korea", - "categoryId": 4, - "url": "http://www.ebay.com/", - "companyId": "ebay" - }, - "ebay_partner_network": { - "name": "eBay Partner Network", - "categoryId": 4, - "url": "https://www.ebaypartnernetwork.com/files/hub/en-US/index.html", - "companyId": "ebay_partner_network" - }, - "ebuzzing": { - "name": "eBuzzing", - "categoryId": 4, - "url": "http://www.ebuzzing.com/", - "companyId": "ebuzzing" - }, - "echo": { - "name": "Echo", - "categoryId": 4, - "url": "http://js-kit.com/", - "companyId": "echo" - }, - "eclick": { - "name": "eClick", - "categoryId": 4, - "url": "http://eclick.vn", - "companyId": "eclick" - }, - "econda": { - "name": "Econda", - "categoryId": 6, - "url": "http://www.econda.de/", - "companyId": "econda" - }, - "ecotag": { - "name": "ecotag", - "categoryId": 4, - "url": "http://www.eco-tag.jp/", - "companyId": "ecotag" - }, - "edgio": { - "name": "Edgio", - "categoryId": 9, - "url": "https://edg.io/", - "companyId": "edgio", - "source": "AdGuard" - }, - "edigitalresearch": { - "name": "eDigitalResearch", - "categoryId": 4, - "url": "http://www.edigitalresearch.com/", - "companyId": "edigitalresearch" - }, - "effective_measure": { - "name": "Effective Measure", - "categoryId": 4, - "url": "http://www.effectivemeasure.com/", - "companyId": "effective_measure" - }, - "effiliation": { - "name": "Effiliation", - "categoryId": 4, - "url": "http://www.effiliation.com/", - "companyId": "effiliation" - }, - "egain": { - "name": "eGain", - "categoryId": 2, - "url": "http://www.egain.com/", - "companyId": "egain" - }, - "egain_analytics": { - "name": "eGain Analytics", - "categoryId": 6, - "url": "http://www.egain.com/", - "companyId": "egain" - }, - "ehi-siegel_de": { - "name": "ehi-siegel.de", - "categoryId": 2, - "url": "http://ehi-siegel.de/", - "companyId": null - }, - "ekmpinpoint": { - "name": "ekmPinPoint", - "categoryId": 6, - "url": "http://ekmpinpoint.com/", - "companyId": "ekmpinpoint" - }, - "ekomi": { - "name": "eKomi", - "categoryId": 1, - "url": "http://www.ekomi.co.uk", - "companyId": "ekomi" - }, - "elastic_ad": { - "name": "Elastic Ad", - "categoryId": 4, - "url": "http://www.elasticad.com", - "companyId": "elastic_ad" - }, - "elastic_beanstalk": { - "name": "Elastic Beanstalk", - "categoryId": 6, - "url": "http://www.amazon.com/", - "companyId": "amazon_associates" - }, - "electronic_arts": { - "name": "Electronic Arts", - "categoryId": 2, - "url": "https://www.ea.com/", - "companyId": "electronic_arts", - "source": "AdGuard" - }, - "element": { - "name": "Element", - "categoryId": 7, - "url": "https://element.io/", - "companyId": "element", - "source": "AdGuard" - }, - "elicit": { - "name": "elicit", - "categoryId": 4, - "url": "http://www.elicitsearch.com/", - "companyId": "elicit" - }, - "eloqua": { - "name": "Eloqua", - "categoryId": 4, - "url": "http://www.eloqua.com/", - "companyId": "oracle" - }, - "eluxer_net": { - "name": "eluxer.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "email_aptitude": { - "name": "Email Aptitude", - "categoryId": 4, - "url": "http://www.emailaptitude.com/", - "companyId": "email_aptitude" - }, - "email_attitude": { - "name": "Email Attitude", - "categoryId": 4, - "url": "http://us.email-attitude.com/Default.aspx", - "companyId": "1000mercis" - }, - "emarketeer": { - "name": "emarketeer", - "categoryId": 4, - "url": "http://www.emarketeer.com/", - "companyId": "emarketeer" - }, - "embed.ly": { - "name": "Embedly", - "categoryId": 6, - "url": "http://embed.ly/", - "companyId": "medium" - }, - "emediate": { - "name": "Emediate", - "categoryId": 4, - "url": "http://www.emediate.biz/", - "companyId": "cxense" - }, - "emetriq": { - "name": "emetriq", - "categoryId": 4, - "url": "http://www.emetriq.com", - "companyId": "emetriq" - }, - "emma": { - "name": "Emma", - "categoryId": 4, - "url": "http://myemma.com/", - "companyId": "emma" - }, - "emnet": { - "name": "eMnet", - "categoryId": 4, - "url": "http://www.emnet.co.kr", - "companyId": "emnet" - }, - "empathy": { - "name": "Empathy", - "categoryId": 4, - "url": "http://www.colbenson.com", - "companyId": "empathy" - }, - "emsmobile.de": { - "name": "EMS Mobile", - "categoryId": 8, - "url": "http://www.emsmobile.com/", - "companyId": null - }, - "encore_metrics": { - "name": "Encore Metrics", - "categoryId": 4, - "url": "http://sitecompass.com", - "companyId": "flashtalking" - }, - "enecto_analytics": { - "name": "Enecto Analytics", - "categoryId": 6, - "url": "http://www.enecto.com/en/", - "companyId": "enecto" - }, - "engage_sciences": { - "name": "Engage Sciences", - "categoryId": 6, - "url": "http://www.engagesciences.com/", - "companyId": "engagesciences" - }, - "engageya_widget": { - "name": "Engageya Widget", - "categoryId": 4, - "url": "http://www.engageya.com/home/", - "companyId": "engageya" - }, - "engagio": { - "name": "Engagio", - "categoryId": 6, - "url": "https://www.engagio.com/", - "companyId": "engagio" - }, - "engineseeker": { - "name": "EngineSeeker", - "categoryId": 4, - "url": "http://www.engineseeker.com/", - "companyId": "engineseeker" - }, - "enquisite": { - "name": "Enquisite", - "categoryId": 4, - "url": "http://www.enquisite.com/", - "companyId": "inboundwriter" - }, - "enreach": { - "name": "Enreach", - "categoryId": 4, - "url": "https://enreach.me/", - "companyId": "enreach" - }, - "ensemble": { - "name": "Ensemble", - "categoryId": 4, - "url": "http://www.tumri.com", - "companyId": "ensemble" - }, - "ensighten": { - "name": "Ensighten", - "categoryId": 5, - "url": "http://www.ensighten.com", - "companyId": "ensighten" - }, - "envolve": { - "name": "Envolve", - "categoryId": 2, - "url": "https://www.envolve.com/", - "companyId": "envolve" - }, - "envybox": { - "name": "Envybox", - "categoryId": 2, - "url": "https://envybox.io/", - "companyId": "envybox" - }, - "eperflex": { - "name": "Eperflex", - "categoryId": 4, - "url": "https://eperflex.com/", - "companyId": "ividence" - }, - "epic_game_ads": { - "name": "Epic Game Ads", - "categoryId": 4, - "url": "http://www.epicgameads.com/", - "companyId": "epic_game_ads" - }, - "epic_marketplace": { - "name": "Epic Marketplace", - "categoryId": 4, - "url": "http://www.trafficmarketplace.com/", - "companyId": "epic_advertising" - }, - "epom": { - "name": "Epom", - "categoryId": 4, - "url": "http://epom.com/", - "companyId": "epom" - }, - "epoq": { - "name": "epoq", - "categoryId": 2, - "url": "http://www.epoq.de/", - "companyId": "epoq" - }, - "eprice": { - "name": "ePrice", - "categoryId": 4, - "url": "http://banzaiadv.it/", - "companyId": "eprice" - }, - "eproof": { - "name": "eProof", - "categoryId": 6, - "url": "http://www.eproof.com/", - "companyId": "eproof" - }, - "eqs_group": { - "name": "EQS Group", - "categoryId": 6, - "url": "https://www.eqs.com/", - "companyId": "eqs_group" - }, - "eqworks": { - "name": "EQWorks", - "categoryId": 4, - "url": "http://eqads.com", - "companyId": "eq_works" - }, - "eroadvertising": { - "name": "EroAdvertising", - "categoryId": 3, - "url": "http://www.ero-advertising.com/", - "companyId": "ero_advertising" - }, - "errorception": { - "name": "Errorception", - "categoryId": 6, - "url": "http://errorception.com/", - "companyId": "errorception" - }, - "eshopcomp.com": { - "name": "eshopcomp.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "espn_cdn": { - "name": "ESPN CDN", - "categoryId": 9, - "url": "http://www.espn.com/", - "companyId": "disney" - }, - "esprit.de": { - "name": "esprit.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "estat": { - "name": "eStat", - "categoryId": 6, - "url": "http://www.mediametrie-estat.com/", - "companyId": "mediametrie" - }, - "etag": { - "name": "etag", - "categoryId": 4, - "url": "http://etagdigital.com.br/", - "companyId": "etag" - }, - "etahub.com": { - "name": "etahub.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "etarget": { - "name": "Etarget", - "categoryId": 4, - "url": "http://etargetnet.com/", - "companyId": "etarget" - }, - "ethnio": { - "name": "Ethnio", - "categoryId": 4, - "url": "http://ethn.io/", - "companyId": "ethnio" - }, - "etology": { - "name": "Etology", - "categoryId": 4, - "url": "http://www.etology.com", - "companyId": "etology" - }, - "etp": { - "name": "ETP", - "categoryId": 6, - "url": "https://www.etpgroup.com", - "companyId": "etp" - }, - "etracker": { - "name": "etracker", - "categoryId": 6, - "url": "http://www.etracker.com/en/", - "companyId": "etracker_gmbh" - }, - "etrigue": { - "name": "eTrigue", - "categoryId": 4, - "url": "http://www.etrigue.com/", - "companyId": "etrigue" - }, - "etsystatic": { - "name": "Etsy CDN", - "categoryId": 9, - "url": "https://www.etsy.com/", - "companyId": "etsy" - }, - "eulerian": { - "name": "Eulerian", - "categoryId": 6, - "url": "https://www.eulerian.com/", - "companyId": "eulerian" - }, - "euroads": { - "name": "Euroads", - "categoryId": 4, - "url": "http://euroads.com/en/", - "companyId": "euroads" - }, - "europecash": { - "name": "Europecash", - "categoryId": 4, - "url": "https://www.europacash.com/", - "companyId": "europacash" - }, - "euroweb_counter": { - "name": "Euroweb Counter", - "categoryId": 4, - "url": "http://www.euroweb.de/", - "companyId": "euroweb" - }, - "evergage.com": { - "name": "Evergage", - "categoryId": 2, - "url": "https://www.evergage.com", - "companyId": "evergage" - }, - "everstring": { - "name": "Everstring", - "categoryId": 6, - "url": "http://www.everstring.com/", - "companyId": "everstring" - }, - "everyday_health": { - "name": "Everyday Health", - "categoryId": 7, - "url": "http://www.everydayhealth.com/", - "companyId": "everyday_health" - }, - "evidon": { - "name": "Evidon", - "categoryId": 5, - "url": "https://www.evidon.com/", - "companyId": "crownpeak" - }, - "evisit_analyst": { - "name": "eVisit Analyst", - "categoryId": 4, - "url": "http://www.evisitanalyst.com", - "companyId": "evisit_analyst" - }, - "exact_drive": { - "name": "Exact Drive", - "categoryId": 4, - "url": "http://www.exactdrive.com/", - "companyId": "exact_drive" - }, - "exactag": { - "name": "Exactag", - "categoryId": 6, - "url": "http://www.exactag.com", - "companyId": "exactag" - }, - "exelate": { - "name": "eXelate", - "categoryId": 4, - "url": "http://www.exelate.com/", - "companyId": "nielsen" - }, - "exitjunction": { - "name": "ExitJunction", - "categoryId": 4, - "url": "https://secure.exitjunction.com", - "companyId": "exitjunction" - }, - "exoclick": { - "name": "ExoClick", - "categoryId": 3, - "url": "http://exoclick.com/", - "companyId": "exoclick" - }, - "exoticads.com": { - "name": "exoticads", - "categoryId": 3, - "url": "https://exoticads.com/welcome/", - "companyId": null - }, - "expedia": { - "name": "Expedia", - "categoryId": 8, - "url": "https://www.trvl-px.com/", - "companyId": "iac_apps" - }, - "experian": { - "name": "Experian", - "categoryId": 8, - "url": "https://www.experian.com/", - "companyId": "experian_inc" - }, - "experian_marketing_services": { - "name": "Experian Marketing Services", - "categoryId": 4, - "url": "http://www.experian.com/", - "companyId": "experian_inc" - }, - "expo-max": { - "name": "expo-MAX", - "categoryId": 4, - "url": "http://expo-max.com/", - "companyId": "expo-max" - }, - "expose_box": { - "name": "Expose Box", - "categoryId": 4, - "url": "http://www.exposebox.com/", - "companyId": "expose_box" - }, - "expose_box_widgets": { - "name": "Expose Box Widgets", - "categoryId": 2, - "url": "http://www.exposebox.com/", - "companyId": "expose_box" - }, - "express.co.uk": { - "name": "express.co.uk", - "categoryId": 8, - "url": "https://www.express.co.uk/", - "companyId": null - }, - "expressvpn": { - "name": "ExpressVPN", - "categoryId": 2, - "url": "https://www.expressvpn.com/", - "companyId": "expressvpn" - }, - "extreme_tracker": { - "name": "eXTReMe Tracker", - "categoryId": 6, - "url": "http://www.extremetracking.com/", - "companyId": "extreme_digital" - }, - "eye_newton": { - "name": "Eye Newton", - "categoryId": 2, - "url": "http://eyenewton.ru/", - "companyId": "eyenewton" - }, - "eyeota": { - "name": "Eyeota", - "categoryId": 4, - "url": "http://www.eyeota.com/", - "companyId": "eyeota" - }, - "eyereturnmarketing": { - "name": "Eyereturn Marketing", - "categoryId": 4, - "url": "https://eyereturnmarketing.com/", - "companyId": "torstar_corp" - }, - "eyeview": { - "name": "Eyeview", - "categoryId": 4, - "url": "http://www.eyeviewdigital.com/", - "companyId": "eyeview" - }, - "ezakus": { - "name": "Ezakus", - "categoryId": 4, - "url": "http://www.ezakus.com/", - "companyId": "np6" - }, - "f11-ads.com": { - "name": "Factor Eleven", - "categoryId": 4, - "url": null, - "companyId": null - }, - "facebook": { - "name": "Facebook", - "categoryId": 4, - "url": "https://www.facebook.com", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_audience": { - "name": "Facebook Audience Network", - "categoryId": 4, - "url": "https://www.facebook.com/business/products/audience-network", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_beacon": { - "name": "Facebook Beacon", - "categoryId": 7, - "url": "http://www.facebook.com/beacon/faq.php", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_cdn": { - "name": "Facebook CDN", - "categoryId": 9, - "url": "https://www.facebook.com", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_connect": { - "name": "Facebook Connect", - "categoryId": 6, - "url": "https://developers.facebook.com/connect.php", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_conversion_tracking": { - "name": "Facebook Conversion Tracking", - "categoryId": 4, - "url": "http://www.facebook.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_custom_audience": { - "name": "Facebook Custom Audience", - "categoryId": 4, - "url": "https://www.facebook.com", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_graph": { - "name": "Facebook Social Graph", - "categoryId": 7, - "url": "https://developers.facebook.com/docs/reference/api/", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_impressions": { - "name": "Facebook Impressions", - "categoryId": 4, - "url": "https://www.facebook.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_social_plugins": { - "name": "Facebook Social Plugins", - "categoryId": 7, - "url": "https://developers.facebook.com/plugins", - "companyId": "meta", - "source": "AdGuard" - }, - "facetz.dca": { - "name": "Facetz.DCA", - "categoryId": 4, - "url": "http://facetz.net", - "companyId": "dca" - }, - "facilitate_digital": { - "name": "Facilitate Digital", - "categoryId": 4, - "url": "http://www.facilitatedigital.com/", - "companyId": "adslot" - }, - "faktor.io": { - "name": "faktor.io", - "categoryId": 6, - "url": "https://faktor.io/", - "companyId": "faktor.io" - }, - "fancy_widget": { - "name": "Fancy Widget", - "categoryId": 7, - "url": "http://www.thefancy.com/", - "companyId": "fancy" - }, - "fanplayr": { - "name": "Fanplayr", - "categoryId": 4, - "url": "http://www.fanplayr.com/", - "companyId": "fanplayr" - }, - "fap.to": { - "name": "Imagefap", - "categoryId": 8, - "url": null, - "companyId": null - }, - "farlight_pte_ltd": { - "name": "Farlight Pte Ltd.", - "categoryId": 8, - "url": "https://farlightgames.com/", - "companyId": "farlight", - "source": "AdGuard" - }, - "fastly_insights": { - "name": "Fastly Insights", - "categoryId": 6, - "url": "https://insights.fastlylabs.com/", - "companyId": "fastly" - }, - "fastlylb.net": { - "name": "Fastly", - "categoryId": 9, - "url": "https://www.fastly.com/", - "companyId": "fastly" - }, - "fastpic.ru": { - "name": "FastPic", - "categoryId": 10, - "url": "http://fastpic.ru/", - "companyId": "fastpic" - }, - "federated_media": { - "name": "Federated Media", - "categoryId": 4, - "url": "http://www.federatedmedia.net/", - "companyId": "hyfn" - }, - "feedbackify": { - "name": "Feedbackify", - "categoryId": 2, - "url": "http://www.feedbackify.com/", - "companyId": "feedbackify" - }, - "feedburner.com": { - "name": "FeedBurner", - "categoryId": 4, - "url": "https://feedburner.com", - "companyId": "google" - }, - "feedify": { - "name": "Feedify", - "categoryId": 7, - "url": "http://feedify.de/", - "companyId": "feedify" - }, - "feedjit": { - "name": "Feedjit", - "categoryId": 4, - "url": "http://feedjit.com/", - "companyId": "feedjit" - }, - "feedperfect": { - "name": "FeedPerfect", - "categoryId": 4, - "url": "http://www.feedperfect.com/", - "companyId": "feedperfect" - }, - "feedsportal": { - "name": "Feedsportal", - "categoryId": 4, - "url": "http://www.mediafed.com/", - "companyId": "mediafed" - }, - "feefo": { - "name": "Feefo", - "categoryId": 2, - "url": "http://www.feefo.com/web/en/us/", - "companyId": "feefo" - }, - "fidelity_media": { - "name": "Fidelity Media", - "categoryId": 4, - "url": "http://fidelity-media.com/", - "companyId": "fidelity_media" - }, - "fiksu": { - "name": "Fiksu", - "categoryId": 4, - "url": "https://fiksu.com/", - "companyId": "noosphere" - }, - "filament.io": { - "name": "Filament.io", - "categoryId": 4, - "url": "http://sharethis.com/", - "companyId": "sharethis" - }, - "fileserve": { - "name": "FileServe", - "categoryId": 10, - "url": "http://fileserve.com/", - "companyId": "fileserve" - }, - "financeads": { - "name": "FinanceADs", - "categoryId": 4, - "url": "https://www.financeads.net/", - "companyId": "financeads_gmbh_&_co._kg" - }, - "financial_content": { - "name": "Financial Content", - "categoryId": 4, - "url": "http://www.financialcontent.com", - "companyId": "financial_content" - }, - "findizer.fr": { - "name": "Findizer", - "categoryId": 8, - "url": "http://www.findizer.fr/", - "companyId": null - }, - "findologic.com": { - "name": "Findologic", - "categoryId": 2, - "url": "https://www.findologic.com/", - "companyId": "findologic" - }, - "firebase": { - "name": "Firebase", - "categoryId": 101, - "url": "https://firebase.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "firebaseio.com": { - "name": "Firebase", - "categoryId": 8, - "url": "https://firebase.google.com/", - "companyId": "google" - }, - "first_impression": { - "name": "First Impression", - "categoryId": 4, - "url": "http://www.firstimpression.io", - "companyId": "first_impression" - }, - "fit_analytics": { - "name": "Fit Analytics", - "categoryId": 6, - "url": "http://www.fitanalytics.com/", - "companyId": "fit_analytics" - }, - "fivetran": { - "name": "Fivetran", - "categoryId": 6, - "url": "https://fivetran.com/", - "companyId": "fivetran" - }, - "flag_ads": { - "name": "Flag Ads", - "categoryId": 4, - "url": "http://www.flagads.net/", - "companyId": "flag_ads" - }, - "flag_counter": { - "name": "Flag Counter", - "categoryId": 4, - "url": "http://flagcounter.com/", - "companyId": "flag_counter" - }, - "flash": { - "name": "Flash", - "categoryId": 0, - "url": "https://flashnews.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "flashtalking": { - "name": "Flashtalking", - "categoryId": 4, - "url": "http://www.flashtalking.com/", - "companyId": "flashtalking" - }, - "flattr_button": { - "name": "Flattr Button", - "categoryId": 7, - "url": "http://flattr.com/", - "companyId": "flattr" - }, - "flexoffers": { - "name": "FlexOffers", - "categoryId": 4, - "url": "http://www.flexoffers.com/", - "companyId": "flexoffers.com" - }, - "flickr_badge": { - "name": "Flickr Badge", - "categoryId": 7, - "url": "http://www.flickr.com/", - "companyId": "smugmug" - }, - "flipboard": { - "name": "Flipboard", - "categoryId": 6, - "url": "http://www.flipboard.com/", - "companyId": "flipboard" - }, - "flite": { - "name": "Flite", - "categoryId": 4, - "url": "http://www.flite.com/", - "companyId": "flite" - }, - "flixcdn.com": { - "name": "flixcdn.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "flixmedia": { - "name": "Flixmedia", - "categoryId": 8, - "url": "https://flixmedia.eu", - "companyId": "flixmedia" - }, - "flocktory.com": { - "name": "Flocktory", - "categoryId": 6, - "url": "https://www.flocktory.com/", - "companyId": "flocktory" - }, - "flowplayer": { - "name": "Flowplayer", - "categoryId": 4, - "url": "https://flowplayer.org/", - "companyId": "flowplayer" - }, - "fluct": { - "name": "Fluct", - "categoryId": 4, - "url": "https://corp.fluct.jp/", - "companyId": "fluct" - }, - "fluent": { - "name": "Fluent", - "categoryId": 4, - "url": "http://www.fluentco.com/", - "companyId": "fluent" - }, - "fluid": { - "name": "Fluid", - "categoryId": 4, - "url": "http://www.8thbridge.com/", - "companyId": "fluid" - }, - "fluidads": { - "name": "FluidAds", - "categoryId": 4, - "url": "http://www.fluidads.co/", - "companyId": "fluidads" - }, - "fluidsurveys": { - "name": "FluidSurveys", - "categoryId": 2, - "url": "http://fluidsurveys.com/", - "companyId": "fluidware" - }, - "flurry": { - "name": "Flurry", - "categoryId": 101, - "url": "http://www.flurry.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "flxone": { - "name": "FLXONE", - "categoryId": 4, - "url": "http://www.flxone.com/", - "companyId": "flxone" - }, - "flyertown": { - "name": "Flyertown", - "categoryId": 6, - "url": "http://www.flyertown.ca/", - "companyId": "flyertown" - }, - "fmadserving": { - "name": "FMAdserving", - "categoryId": 4, - "url": "http://www.fmadserving.dk/", - "companyId": "fm_adserving" - }, - "fonbet": { - "name": "Fonbet", - "categoryId": 6, - "url": "https://www.fonbet.ru", - "companyId": "fonbet" - }, - "fonecta": { - "name": "Fonecta", - "categoryId": 2, - "url": "http://www.fonecta.com/", - "companyId": "fonecta" - }, - "fontawesome_com": { - "name": "fontawesome.com", - "categoryId": 9, - "url": "http://fontawesome.com/", - "companyId": null - }, - "foodie_blogroll": { - "name": "Foodie Blogroll", - "categoryId": 7, - "url": "http://www.foodieblogroll.com", - "companyId": "foodie_blogroll" - }, - "footprint": { - "name": "Footprint", - "categoryId": 4, - "url": "http://www.footprintlive.com/", - "companyId": "opentracker" - }, - "footprintdns.com": { - "name": "Footprint DNS", - "categoryId": 11, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "forcetrac": { - "name": "ForceTrac", - "categoryId": 2, - "url": "http://www.forcetrac.com/", - "companyId": "force_marketing" - }, - "forensiq": { - "name": "Forensiq", - "categoryId": 4, - "url": "http://www.cpadetective.com/", - "companyId": "impact" - }, - "foresee": { - "name": "ForeSee", - "categoryId": 5, - "url": "https://www.foresee.com/", - "companyId": "foresee_results" - }, - "formisimo": { - "name": "Formisimo", - "categoryId": 4, - "url": "https://www.formisimo.com/", - "companyId": "formisimo" - }, - "forter": { - "name": "Forter", - "categoryId": 4, - "url": "https://www.forter.com/", - "companyId": "forter" - }, - "fortlachanhecksof.info": { - "name": "fortlachanhecksof.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "foursquare_widget": { - "name": "Foursquare Widget", - "categoryId": 4, - "url": "https://foursquare.com/", - "companyId": "foursquare" - }, - "fout.jp": { - "name": "FreakOut", - "categoryId": 4, - "url": "https://www.fout.co.jp/", - "companyId": "freakout" - }, - "fox_audience_network": { - "name": "Fox Audience Network", - "categoryId": 4, - "url": "https://publishers.foxaudiencenetwork.com/", - "companyId": "fox_audience_network" - }, - "fox_sports": { - "name": "Fox Sports", - "categoryId": 0, - "url": "https://foxsports.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "foxnews_static": { - "name": "Fox News CDN", - "categoryId": 9, - "url": "http://www.foxnews.com/", - "companyId": "fox_news" - }, - "foxpush": { - "name": "FoxPush", - "categoryId": 4, - "url": "https://www.foxpush.com/", - "companyId": "foxpush" - }, - "foxtel": { - "name": "Foxtel", - "categoryId": 0, - "url": "https://foxtel.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "foxydeal_com": { - "name": "foxydeal.com", - "categoryId": 12, - "url": "https://www.foxydeal.de", - "companyId": null - }, - "fraudlogix": { - "name": "FraudLogix", - "categoryId": 4, - "url": "https://www.fraudlogix.com/", - "companyId": null - }, - "free_counter": { - "name": "Free Counter", - "categoryId": 6, - "url": "http://www.statcounterfree.com/", - "companyId": "free_counter" - }, - "free_online_users": { - "name": "Free Online Users", - "categoryId": 6, - "url": "http://www.freeonlineusers.com", - "companyId": "free_online_users" - }, - "free_pagerank": { - "name": "Free PageRank", - "categoryId": 6, - "url": "http://www.free-pagerank.com/", - "companyId": "free_pagerank" - }, - "freedom_mortgage": { - "name": "Freedom Mortgage", - "categoryId": 6, - "url": "https://www.freedommortgage.com/", - "companyId": "freedom_mortgage" - }, - "freegeoip_net": { - "name": "freegeoip.net", - "categoryId": 6, - "url": "http://freegeoip.net/", - "companyId": null - }, - "freenet_de": { - "name": "freenet.de", - "categoryId": 4, - "url": "http://freenet.de/", - "companyId": "debitel" - }, - "freeview": { - "name": "Freeview", - "categoryId": 0, - "url": "https://freeview.com.au/", - "companyId": "freeview", - "source": "AdGuard" - }, - "freewheel": { - "name": "FreeWheel", - "categoryId": 4, - "url": "http://www.freewheel.tv/", - "companyId": "comcast" - }, - "fresh8": { - "name": "Fresh8", - "categoryId": 6, - "url": "http://fresh8gaming.com/", - "companyId": "fresh_8_gaming" - }, - "freshdesk": { - "name": "Freshdesk", - "categoryId": 2, - "url": "http://www.freshdesk.com", - "companyId": "freshdesk" - }, - "freshplum": { - "name": "Freshplum", - "categoryId": 4, - "url": "https://freshplum.com/", - "companyId": "freshplum" - }, - "friendbuy": { - "name": "FriendBuy", - "categoryId": 6, - "url": "https://www.friendbuy.com", - "companyId": "friendbuy" - }, - "friendfeed": { - "name": "FriendFeed", - "categoryId": 7, - "url": "http://friendfeed.com/", - "companyId": "facebook" - }, - "friendfinder_network": { - "name": "FriendFinder Network", - "categoryId": 3, - "url": "http://www.ffn.com/", - "companyId": "friendfinder_networks" - }, - "frosmo_optimizer": { - "name": "Frosmo Optimizer", - "categoryId": 4, - "url": "http://frosmo.com/", - "companyId": "frosmo" - }, - "fruitflan": { - "name": "FruitFlan", - "categoryId": 4, - "url": "http://flan-tech.com/", - "companyId": "keytiles" - }, - "fstrk.net": { - "name": "24metrics Fraudshield", - "categoryId": 6, - "url": "https://24metrics.com/", - "companyId": "24metrics" - }, - "fuelx": { - "name": "FuelX", - "categoryId": 4, - "url": "http://fuelx.com/", - "companyId": "fuelx" - }, - "fullstory": { - "name": "FullStory", - "categoryId": 6, - "url": "http://fullstory.com", - "companyId": "fullstory" - }, - "funnelytics": { - "name": "Funnelytics", - "categoryId": 6, - "url": "https://funnelytics.io/", - "companyId": "funnelytics" - }, - "fyber": { - "name": "Fyber", - "categoryId": 4, - "url": "https://www.fyber.com/", - "companyId": "fyber" - }, - "ga_audiences": { - "name": "GA Audiences", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "game_advertising_online": { - "name": "Game Advertising Online", - "categoryId": 4, - "url": "http://www.game-advertising-online.com/", - "companyId": "game_advertising_online" - }, - "gameanalytics": { - "name": "GameAnalytics", - "categoryId": 101, - "url": "https://gameanalytics.com/", - "companyId": "mobvista", - "source": "AdGuard" - }, - "gamedistribution.com": { - "name": "Gamedistribution.com", - "categoryId": 8, - "url": "http://gamedistribution.com/", - "companyId": null - }, - "gamerdna": { - "name": "gamerDNA", - "categoryId": 7, - "url": "http://www.gamerdnamedia.com/", - "companyId": "gamerdna_media" - }, - "gannett": { - "name": "Gannett Media", - "categoryId": 0, - "url": "https://www.gannett.com/", - "companyId": "gannett_digital_media_network" - }, - "gaug.es": { - "name": "Gaug.es", - "categoryId": 6, - "url": "http://get.gaug.es/", - "companyId": "euroweb" - }, - "gazprom-media_digital": { - "name": "Gazprom-Media Digital", - "categoryId": 0, - "url": "http://www.gpm-digital.com/", - "companyId": "gazprom-media_digital" - }, - "gb-world": { - "name": "GB-World", - "categoryId": 7, - "url": "http://www.gb-world.net/", - "companyId": "gb-world" - }, - "gdeslon": { - "name": "GdeSlon", - "categoryId": 4, - "url": "http://www.gdeslon.ru/", - "companyId": "gdeslon" - }, - "gdm_digital": { - "name": "GDM Digital", - "categoryId": 4, - "url": "http://www.gdmdigital.com/", - "companyId": "ve_interactive" - }, - "geeen": { - "name": "Geeen", - "categoryId": 6, - "url": "https://www.geeen.co.jp/", - "companyId": "geeen" - }, - "gemius": { - "name": "Gemius", - "categoryId": 4, - "url": "http://www.gemius.com", - "companyId": "gemius_sa" - }, - "generaltracking_de": { - "name": "generaltracking.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "genesis": { - "name": "Genesis", - "categoryId": 4, - "url": "http://genesismedia.com/", - "companyId": "genesis_media" - }, - "geniee": { - "name": "GENIEE", - "categoryId": 4, - "url": "http://geniee.co.jp/", - "companyId": null - }, - "genius": { - "name": "Genius", - "categoryId": 6, - "url": "http://www.genius.com/", - "companyId": "genius" - }, - "genoo": { - "name": "Genoo", - "categoryId": 4, - "url": "http://www.genoo.com/", - "companyId": "genoo" - }, - "geoads": { - "name": "GeoAds", - "categoryId": 4, - "url": "http://www.geoads.com", - "companyId": "geoads" - }, - "geolify": { - "name": "Geolify", - "categoryId": 4, - "url": "http://geolify.com/", - "companyId": "geolify" - }, - "geoplugin": { - "name": "geoPlugin", - "categoryId": 6, - "url": "http://www.geoplugin.com/", - "companyId": "geoplugin" - }, - "geotrust": { - "name": "GeoTrust", - "categoryId": 5, - "url": "http://www.geotrust.com/", - "companyId": "symantec" - }, - "geovisite": { - "name": "Geovisite", - "categoryId": 6, - "url": "http://www.geovisite.com/", - "companyId": "geovisite" - }, - "gestionpub": { - "name": "GestionPub", - "categoryId": 4, - "url": "http://www.gestionpub.com/", - "companyId": "gestionpub" - }, - "get_response": { - "name": "Get Response", - "categoryId": 2, - "url": "https://www.getresponse.com/?marketing_gv=v2", - "companyId": "getresponse" - }, - "get_site_control": { - "name": "Get Site Control", - "categoryId": 4, - "url": "https://getsitecontrol.com/", - "companyId": "getsitecontrol" - }, - "getconversion": { - "name": "GetConversion", - "categoryId": 2, - "url": "http://www.getconversion.net/", - "companyId": "getconversion" - }, - "getglue": { - "name": "GetGlue", - "categoryId": 0, - "url": "http://getglue.com", - "companyId": "telfie" - }, - "getintent": { - "name": "GetIntent", - "categoryId": 4, - "url": "http://www.getintent.com/", - "companyId": "getintent" - }, - "getkudos": { - "name": "GetKudos", - "categoryId": 1, - "url": "https://www.getkudos.me/", - "companyId": "zendesk" - }, - "getmyad": { - "name": "GetMyAd", - "categoryId": 4, - "url": "http://yottos.com", - "companyId": "yottos" - }, - "getsatisfaction": { - "name": "GetSatisfaction", - "categoryId": 1, - "url": "http://getsatisfaction.com/", - "companyId": "get_satisfaction" - }, - "gettyimages": { - "name": "Getty Images", - "categoryId": 8, - "url": "https://www.gettyimages.com/", - "companyId": null - }, - "gfk": { - "name": "GfK", - "categoryId": 4, - "url": "http://nurago.com/", - "companyId": "gfk_nurago" - }, - "gfycat.com": { - "name": "gfycat", - "categoryId": 7, - "url": "https://gfycat.com/", - "companyId": null - }, - "giant_realm": { - "name": "Giant Realm", - "categoryId": 4, - "url": "http://corp.giantrealm.com/", - "companyId": "giant_realm" - }, - "giantmedia": { - "name": "GiantMedia", - "categoryId": 4, - "url": "http://giantmedia.com/", - "companyId": "adknowledge" - }, - "giga": { - "name": "Giga", - "categoryId": 4, - "url": "https://gigaonclick.com", - "companyId": "giga" - }, - "gigya": { - "name": "Gigya", - "categoryId": 6, - "url": "https://www.sap.com/index.html", - "companyId": "sap" - }, - "gigya_beacon": { - "name": "Gigya Beacon", - "categoryId": 2, - "url": "http://www.gigya.com", - "companyId": "sap" - }, - "gigya_socialize": { - "name": "Gigya Socialize", - "categoryId": 2, - "url": "http://www.gigya.com", - "companyId": "sap" - }, - "gigya_toolbar": { - "name": "Gigya Toolbar", - "categoryId": 2, - "url": "http://www.gigya.com/", - "companyId": "sap" - }, - "giosg": { - "name": "Giosg", - "categoryId": 6, - "url": "https://www.giosg.com/", - "companyId": "giosg" - }, - "giphy.com": { - "name": "Giphy", - "categoryId": 7, - "url": "https://giphy.com/", - "companyId": null - }, - "giraff.io": { - "name": "Giraff.io", - "categoryId": 4, - "url": "https://www.giraff.io/", - "companyId": null - }, - "github": { - "name": "GitHub, Inc.", - "categoryId": 2, - "url": "https://github.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "github_apps": { - "name": "GitHub Apps", - "categoryId": 2, - "url": "https://github.com/", - "companyId": "github" - }, - "github_pages": { - "name": "Github Pages", - "categoryId": 10, - "url": "https://pages.github.com/", - "companyId": "github" - }, - "gittigidiyor_affiliate_program": { - "name": "GittiGidiyor Affiliate Program", - "categoryId": 4, - "url": "http://www.ebay.com/", - "companyId": "ebay" - }, - "gittip": { - "name": "Gittip", - "categoryId": 2, - "url": "https://www.gittip.com/", - "companyId": "gittip" - }, - "glad_cube": { - "name": "Glad Cube", - "categoryId": 6, - "url": "http://www.glad-cube.com/", - "companyId": "glad_cube_inc." - }, - "glganltcs.space": { - "name": "glganltcs.space", - "categoryId": 12, - "url": null, - "companyId": null - }, - "global_web_index": { - "name": "GlobalWebIndex", - "categoryId": 6, - "url": "https://www.globalwebindex.com/", - "companyId": "global_web_index" - }, - "globalnotifier.com": { - "name": "globalnotifier.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "globalsign": { - "name": "GlobalSign", - "categoryId": 8, - "url": null, - "companyId": null - }, - "globaltakeoff": { - "name": "GlobalTakeoff", - "categoryId": 4, - "url": "http://www.globaltakeoff.net/", - "companyId": "globaltakeoff" - }, - "glomex.com": { - "name": "Glomex", - "categoryId": 0, - "url": "https://www.glomex.com/", - "companyId": "glomex" - }, - "glotgrx.com": { - "name": "glotgrx.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "gm_delivery": { - "name": "GM Delivery", - "categoryId": 4, - "url": "http://a.gmdelivery.com/", - "companyId": "gm_delivery" - }, - "gmail": { - "name": "Gmail", - "categoryId": 13, - "url": "https://mail.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "gmo": { - "name": "GMO", - "categoryId": 4, - "url": "https://www.gmo.media/", - "companyId": "gmo_media" - }, - "gmx_net": { - "name": "gmx.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "go.com": { - "name": "go.com", - "categoryId": 8, - "url": "go.com", - "companyId": "disney" - }, - "godaddy_affiliate_program": { - "name": "GoDaddy Affiliate Program", - "categoryId": 4, - "url": "http://www.godaddy.com/", - "companyId": "godaddy" - }, - "godaddy_site_analytics": { - "name": "GoDaddy Site Analytics", - "categoryId": 6, - "url": "https://www.godaddy.com/gdshop/hosting/stats_", - "companyId": "godaddy" - }, - "godaddy_site_seal": { - "name": "GoDaddy Site Seal", - "categoryId": 5, - "url": "http://www.godaddy.com/", - "companyId": "godaddy" - }, - "godatafeed": { - "name": "GoDataFeed", - "categoryId": 6, - "url": "http://www.godatafeed.com", - "companyId": "godatafeed" - }, - "goingup": { - "name": "GoingUp", - "categoryId": 6, - "url": "http://www.goingup.com/", - "companyId": "goingup" - }, - "gomez": { - "name": "Gomez", - "categoryId": 6, - "url": "http://www.gomez.com/", - "companyId": "dynatrace" - }, - "goodadvert": { - "name": "GoodADVERT", - "categoryId": 4, - "url": "http://goodadvert.ru/", - "companyId": "goodadvert" - }, - "google": { - "name": "Google", - "categoryId": 4, - "url": "https://www.google.com/", - "companyId": "google" - }, - "google_ads_measurement": { - "name": "Google Ads Measurement", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_adsense": { - "name": "Google Adsense", - "categoryId": 4, - "url": "https://www.google.com/adsense/", - "companyId": "google" - }, - "google_adservices": { - "name": "Google AdServices", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_adwords_conversion": { - "name": "Google AdWords Conversion", - "categoryId": 4, - "url": "https://adwords.google.com/", - "companyId": "google" - }, - "google_adwords_user_lists": { - "name": "Google Adwords User Lists", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_analytics": { - "name": "Google Analytics", - "categoryId": 6, - "url": "http://www.google.com/analytics/", - "companyId": "google" - }, - "google_appspot": { - "name": "Google Appspot", - "categoryId": 10, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_auth": { - "name": "Google Auth", - "categoryId": 2, - "url": "https://myaccount.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_beacons": { - "name": "Google Beacons", - "categoryId": 6, - "url": "https://google.xyz", - "companyId": "google" - }, - "google_chat": { - "name": "Google Chat", - "categoryId": 7, - "url": "https://mail.google.com/chat/", - "companyId": "google", - "source": "AdGuard" - }, - "google_cloud_platform": { - "name": "Google Cloud Platform", - "categoryId": 10, - "url": "https://cloud.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_cloud_storage": { - "name": "Google Cloud Storage", - "categoryId": 10, - "url": "https://cloud.google.com/storage/", - "companyId": "google", - "source": "AdGuard" - }, - "google_custom_search": { - "name": "Google Custom Search Ads", - "categoryId": 4, - "url": "https://developers.google.com/custom-search-ads/", - "companyId": "google" - }, - "google_custom_search_engine": { - "name": "Google Programmable Search Engine", - "categoryId": 5, - "url": "https://programmablesearchengine.google.com/about/", - "companyId": "google" - }, - "google_dns": { - "name": "Google DNS", - "categoryId": 10, - "url": "hhttps://dns.google/", - "companyId": "google", - "source": "AdGuard" - }, - "google_domains": { - "name": "Google Domains", - "categoryId": 10, - "url": "https://domains.google/", - "companyId": "google", - "source": "AdGuard" - }, - "google_edge": { - "name": "Google Edge CDN", - "categoryId": 9, - "url": "https://peering.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_email": { - "name": "Google Email", - "categoryId": 13, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_fonts": { - "name": "Google Fonts", - "categoryId": 9, - "url": "https://fonts.google.com/", - "companyId": "google" - }, - "google_hosted": { - "name": "Google Hosted", - "categoryId": 10, - "url": "https://workspace.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_ima": { - "name": "Google IMA", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_location": { - "name": "Google Location", - "categoryId": 8, - "url": "https://patents.google.com/patent/WO2007025143A1/", - "companyId": "google", - "source": "AdGuard" - }, - "google_maps": { - "name": "Google Maps", - "categoryId": 2, - "url": "https://www.google.com/maps/", - "companyId": "google", - "source": "AdGuard" - }, - "google_marketing": { - "name": "Google Marketing", - "categoryId": 6, - "url": "https://marketingplatform.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_meet": { - "name": "Google Meet", - "categoryId": 2, - "url": "https://meet.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_photos": { - "name": "Google Photos", - "categoryId": 9, - "url": "https://photos.google.com/", - "companyId": "google" - }, - "google_pingback": { - "name": "Google Pingback", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_play": { - "name": "Google Play", - "categoryId": 8, - "url": "https://play.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_plus": { - "name": "Google+ Platform", - "categoryId": 7, - "url": "http://www.google.com/+1/button/", - "companyId": "google" - }, - "google_publisher_tags": { - "name": "Google Publisher Tags", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_remarketing": { - "name": "Google Dynamic Remarketing", - "categoryId": 4, - "url": "http://adwords.google.com/", - "companyId": "google" - }, - "google_safeframe": { - "name": "Google Safeframe", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_servers": { - "name": "Google Servers", - "categoryId": 8, - "url": "https://support.google.com/faqs/answer/174717?hl=en", - "companyId": "google" - }, - "google_shopping_reviews": { - "name": "Google Shopping Reviews", - "categoryId": 2, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_syndication": { - "name": "Google Syndication", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_tag_manager": { - "name": "Google Tag Manager", - "categoryId": 5, - "url": "https://marketingplatform.google.com/about/tag-manager/", - "companyId": "google" - }, - "google_translate": { - "name": "Google Translate", - "categoryId": 2, - "url": "https://translate.google.com/manager", - "companyId": "google" - }, - "google_travel_adds": { - "name": "Google Travel Adds", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_trust_services": { - "name": "Google Trust Services", - "categoryId": 5, - "url": "https://pki.goog/", - "companyId": "google", - "source": "AdGuard" - }, - "google_trusted_stores": { - "name": "Google Trusted Stores", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_users": { - "name": "Google User Content", - "categoryId": 9, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_voice": { - "name": "Google Voice", - "categoryId": 2, - "url": "https://voice.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_website_optimizer": { - "name": "Google Website Optimizer", - "categoryId": 6, - "url": "https://www.google.com/analytics/siteopt/prev", - "companyId": "google" - }, - "google_widgets": { - "name": "Google Widgets", - "categoryId": 2, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_workspace": { - "name": "Google Workspace", - "categoryId": 2, - "url": "https://workspace.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "googleapis.com": { - "name": "Google APIs", - "categoryId": 9, - "url": "https://www.googleapis.com/", - "companyId": "google" - }, - "goooal": { - "name": "Goooal", - "categoryId": 6, - "url": "http://mailchimp.com/", - "companyId": "mailchimp" - }, - "gorilla_nation": { - "name": "Gorilla Nation", - "categoryId": 4, - "url": "http://www.gorillanationmedia.com", - "companyId": "gorilla_nation_media" - }, - "gosquared": { - "name": "GoSquared", - "categoryId": 6, - "url": "http://www.gosquared.com/livestats/", - "companyId": "gosquared" - }, - "gostats": { - "name": "GoStats", - "categoryId": 6, - "url": "http://gostats.com/", - "companyId": "gostats" - }, - "govmetric": { - "name": "GovMetric", - "categoryId": 6, - "url": "http://www.govmetric.com/", - "companyId": "govmetric" - }, - "grabo_affiliate": { - "name": "Grabo Affiliate", - "categoryId": 4, - "url": "http://grabo.bg/", - "companyId": "grabo_media" - }, - "grandslammedia": { - "name": "GrandSlamMedia", - "categoryId": 4, - "url": "http://www.grandslammedia.com/", - "companyId": "grand_slam_media" - }, - "granify": { - "name": "Granify", - "categoryId": 6, - "url": "http://granify.com/", - "companyId": "granify" - }, - "grapeshot": { - "name": "Grapeshot", - "categoryId": 4, - "url": "https://www.grapeshot.com/", - "companyId": "oracle" - }, - "graph_comment": { - "name": "Graph Comment", - "categoryId": 5, - "url": "https://graphcomment.com/en/", - "companyId": "graph_comment" - }, - "gravatar": { - "name": "Gravatar", - "categoryId": 7, - "url": "http://en.gravatar.com/", - "companyId": "automattic" - }, - "gravitec": { - "name": "Gravitec", - "categoryId": 6, - "url": "https://gravitec.net/", - "companyId": "gravitec" - }, - "gravity_insights": { - "name": "Gravity Insights", - "categoryId": 6, - "url": "http://www.gravity.com/", - "companyId": "verizon" - }, - "greatviews.de": { - "name": "GreatViews", - "categoryId": 4, - "url": "http://greatviews.de/", - "companyId": "parship" - }, - "green_and_red": { - "name": "Green and Red", - "categoryId": 4, - "url": "http://www.green-red.com/", - "companyId": "green_&_red_technologies" - }, - "green_certified_site": { - "name": "Green Certified Site", - "categoryId": 2, - "url": "http://www.advenity.com/", - "companyId": "advenity" - }, - "green_story": { - "name": "Green Story", - "categoryId": 6, - "url": "https://greenstory.ca/", - "companyId": "green_story" - }, - "greentube.com": { - "name": "Greentube Internet Entertainment Solutions", - "categoryId": 7, - "url": "https://www.greentube.com/", - "companyId": null - }, - "greystripe": { - "name": "Greystripe", - "categoryId": 4, - "url": "http://www.greystripe.com/", - "companyId": "conversant" - }, - "groove": { - "name": "Groove", - "categoryId": 2, - "url": "http://www.groovehq.com/", - "companyId": "groove_networks" - }, - "groovinads": { - "name": "GroovinAds", - "categoryId": 4, - "url": "http://www.groovinads.com/en", - "companyId": "groovinads" - }, - "groundtruth": { - "name": "GroundTruth", - "categoryId": 4, - "url": "http://www.groundtruth.com/", - "companyId": "groundtruth" - }, - "groupm_server": { - "name": "GroupM Server", - "categoryId": 4, - "url": "http://www.groupm.com/", - "companyId": "wpp" - }, - "gsi_media": { - "name": "GSI Media", - "categoryId": 4, - "url": "http://gsimedia.net", - "companyId": "gsi_media_network" - }, - "gstatic": { - "name": "Google Static", - "categoryId": 9, - "url": "http://www.google.com", - "companyId": "google" - }, - "gtop": { - "name": "GTop", - "categoryId": 6, - "url": "http://www.gtopstats.com", - "companyId": "gtopstats" - }, - "gugaboo": { - "name": "Gugaboo", - "categoryId": 4, - "url": "https://www.gubagoo.com/", - "companyId": "gubagoo" - }, - "guj.de": { - "name": "Gruner + Jahr", - "categoryId": 4, - "url": "https://www.guj.de/", - "companyId": "gruner_jahr_ag" - }, - "gujems": { - "name": "G+J e|MS", - "categoryId": 4, - "url": "http://www.gujmedia.de/", - "companyId": "gruner_jahr_ag" - }, - "gumgum": { - "name": "gumgum", - "categoryId": 4, - "url": "http://gumgum.com/", - "companyId": "gumgum" - }, - "gumroad": { - "name": "Gumroad", - "categoryId": 7, - "url": "https://gumroad.com/", - "companyId": "gumroad" - }, - "gunggo": { - "name": "Gunggo", - "categoryId": 4, - "url": "http://www.gunggo.com/", - "companyId": "gunggo" - }, - "h12_ads": { - "name": "H12 Ads", - "categoryId": 4, - "url": "http://www.h12-media.com/", - "companyId": "h12_media_ads" - }, - "hacker_news_button": { - "name": "Hacker News Button", - "categoryId": 7, - "url": "http://news.ycombinator.com/", - "companyId": "hacker_news" - }, - "haendlerbund.de": { - "name": "Händlerbund", - "categoryId": 2, - "url": "https://www.haendlerbund.de/en", - "companyId": null - }, - "halogen_network": { - "name": "Halogen Network", - "categoryId": 7, - "url": "http://www.halogennetwork.com/", - "companyId": "social_chorus" - }, - "happy_fox_chat": { - "name": "Happy Fox Chat", - "categoryId": 2, - "url": "https://happyfoxchat.com/", - "companyId": "happy_fox_chat" - }, - "harren_media": { - "name": "Harren Media", - "categoryId": 4, - "url": "http://www.harrenmedia.com/index.html", - "companyId": "harren_media" - }, - "hatchbuck": { - "name": "Hatchbuck", - "categoryId": 6, - "url": "http://www.hatchbuck.com/", - "companyId": "hatchbuck" - }, - "head_hunter": { - "name": "Head Hunter", - "categoryId": 6, - "url": "https://hh.ru/", - "companyId": "head_hunter" - }, - "healte.de": { - "name": "healte.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "heap": { - "name": "Heap", - "categoryId": 6, - "url": "https://heapanalytics.com/", - "companyId": "heap" - }, - "heatmap": { - "name": "Heatmap", - "categoryId": 6, - "url": "https://heatmap.me/", - "companyId": "heatmap" - }, - "heimspiel": { - "name": "HEIM:SPIEL Medien GmbH", - "categoryId": 8, - "url": "http://www.heimspiel.de", - "companyId": null - }, - "hello_bar": { - "name": "Hello Bar", - "categoryId": 7, - "url": "https://www.hellobar.com/", - "companyId": "crazy_egg" - }, - "hellosociety": { - "name": "HelloSociety", - "categoryId": 6, - "url": "http://hellosociety.com", - "companyId": "hellosociety" - }, - "here": { - "name": "HERE", - "categoryId": 8, - "url": "https://www.here.com/", - "companyId": null - }, - "heroku": { - "name": "Heroku", - "categoryId": 10, - "url": null, - "companyId": null - }, - "heureka-widget": { - "name": "Heureka-Widget", - "categoryId": 4, - "url": "https://www.heurekashopping.cz/", - "companyId": "heureka" - }, - "heybubble": { - "name": "HeyBubble", - "categoryId": 2, - "url": "https://www.heybubble.com/", - "companyId": "heybubble" - }, - "heyos": { - "name": "Heyos", - "categoryId": 4, - "url": "http://www.heyos.com/", - "companyId": "heyos" - }, - "hi-media_performance": { - "name": "Hi-Media Performance", - "categoryId": 4, - "url": "http://www.hi-mediaperformance.co.uk/", - "companyId": "hi-media_performance" - }, - "hiconversion": { - "name": "HiConversion", - "categoryId": 4, - "url": "http://www.hiconversion.com", - "companyId": "hiconversion" - }, - "highwebmedia.com": { - "name": "highwebmedia.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "highwinds": { - "name": "Highwinds", - "categoryId": 6, - "url": "https://www.highwinds.com/", - "companyId": "highwinds" - }, - "hiiir": { - "name": "Hiiir", - "categoryId": 4, - "url": "http://adpower.hiiir.com/", - "companyId": "hiiir" - }, - "hiro": { - "name": "HIRO", - "categoryId": 4, - "url": "http://www.hiro-media.com/", - "companyId": "hiro_media" - }, - "histats": { - "name": "Histats", - "categoryId": 4, - "url": "http://www.histats.com/", - "companyId": "histats" - }, - "hit-parade": { - "name": "Hit-Parade", - "categoryId": 4, - "url": "http://www.hit-parade.com/", - "companyId": "hit-parade" - }, - "hit.ua": { - "name": "HIT.UA", - "categoryId": 4, - "url": "http://hit.ua/", - "companyId": "hit.ua" - }, - "hitslink": { - "name": "HitsLink", - "categoryId": 4, - "url": "http://www.hitslink.com/", - "companyId": "net_applications" - }, - "hitsniffer": { - "name": "HitSniffer", - "categoryId": 4, - "url": "http://hitsniffer.com/", - "companyId": "hit_sniffer" - }, - "hittail": { - "name": "HitTail", - "categoryId": 4, - "url": "http://www.hittail.com/", - "companyId": "hittail" - }, - "hivedx.com": { - "name": "hiveDX", - "categoryId": 4, - "url": "https://www.hivedx.com/", - "companyId": null - }, - "hiveworks": { - "name": "Hive Networks", - "categoryId": 4, - "url": "https://hiveworkscomics.com/", - "companyId": "hive_works" - }, - "hockeyapp": { - "name": "HockeyApp", - "categoryId": 101, - "url": "https://hockeyapp.net/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "hoholikik.club": { - "name": "hoholikik.club", - "categoryId": 12, - "url": null, - "companyId": null - }, - "hola_player": { - "name": "Hola Player", - "categoryId": 0, - "url": "https://holacdn.com/", - "companyId": "hola_cdn" - }, - "homeaway": { - "name": "HomeAway", - "categoryId": 8, - "url": null, - "companyId": null - }, - "honeybadger": { - "name": "Honeybadger", - "categoryId": 6, - "url": "https://www.honeybadger.io/", - "companyId": "honeybadger" - }, - "hooklogic": { - "name": "HookLogic", - "categoryId": 4, - "url": "http://hooklogic.com/", - "companyId": "criteo" - }, - "hop-cube": { - "name": "Hop-Cube", - "categoryId": 4, - "url": "http://www.hop-cube.com/", - "companyId": "hop-cube" - }, - "hotdogsandads.com": { - "name": "hotdogsandads.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "hotjar": { - "name": "Hotjar", - "categoryId": 6, - "url": "http://www.hotjar.com/", - "companyId": "hotjar" - }, - "hotkeys": { - "name": "HotKeys", - "categoryId": 4, - "url": "http://www.demandmedia.com/", - "companyId": "leaf_group" - }, - "hotlog.ru": { - "name": "HotLog", - "categoryId": 4, - "url": "https://hotlog.ru/", - "companyId": "hotlog" - }, - "hotwords": { - "name": "HOTWords", - "categoryId": 4, - "url": "http://hotwords.com/", - "companyId": "hotwords" - }, - "howtank.com": { - "name": "howtank", - "categoryId": 7, - "url": "https://www.howtank.com/", - "companyId": null - }, - "hqentertainmentnetwork.com": { - "name": "HQ Entertainment Network", - "categoryId": 4, - "url": "https://hqentertainmentnetwork.com/", - "companyId": null - }, - "hsoub": { - "name": "Hsoub", - "categoryId": 4, - "url": "http://www.hsoub.com/", - "companyId": "hsoub" - }, - "hstrck.com": { - "name": "HEIM:SPIEL Medien GmbH", - "categoryId": 8, - "url": "https://www.heimspiel.de/", - "companyId": null - }, - "httpool": { - "name": "HTTPool", - "categoryId": 4, - "url": "http://www.httpool.com/", - "companyId": "httpool" - }, - "hubrus": { - "name": "HUBRUS", - "categoryId": 4, - "url": "http://www.hubrus.com/", - "companyId": "hubrus" - }, - "hubspot": { - "name": "HubSpot", - "categoryId": 6, - "url": "http://www.hubspot.com/", - "companyId": "hubspot" - }, - "hubspot_forms": { - "name": "HubSpot Forms", - "categoryId": 2, - "url": "http://www.hubspot.com", - "companyId": "hubspot" - }, - "hubvisor.io": { - "name": "Hubvisor", - "categoryId": 4, - "url": "https://hubvisor.io/", - "companyId": null - }, - "hucksterbot": { - "name": "HucksterBot", - "categoryId": 4, - "url": "http://hucksterbot.ru/", - "companyId": "hucksterbot" - }, - "hupso": { - "name": "Hupso", - "categoryId": 7, - "url": "http://www.hupso.com/", - "companyId": "hupso" - }, - "hurra_tracker": { - "name": "Hurra Tracker", - "categoryId": 4, - "url": "http://www.hurra.com/en/", - "companyId": "hurra_communications" - }, - "hybrid.ai": { - "name": "Hybrid.ai", - "categoryId": 4, - "url": "https://hybrid.ai/", - "companyId": "hybrid_adtech" - }, - "hype_exchange": { - "name": "Hype Exchange", - "categoryId": 4, - "url": "http://www.hypeexchange.com/", - "companyId": "hype_exchange" - }, - "hypercomments": { - "name": "HyperComments", - "categoryId": 1, - "url": "http://www.hypercomments.com/", - "companyId": "hypercomments" - }, - "hyves_widgets": { - "name": "Hyves Widgets", - "categoryId": 4, - "url": "http://www.hyves.nl/", - "companyId": "hyves" - }, - "hyvyd": { - "name": "Hyvyd GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "i-behavior": { - "name": "i-Behavior", - "categoryId": 4, - "url": "http://www.i-behavior.com/", - "companyId": "kbm_group" - }, - "i-mobile": { - "name": "i-mobile", - "categoryId": 4, - "url": "https://www2.i-mobile.co.jp/en/index.aspx", - "companyId": "i-mobile" - }, - "i.ua": { - "name": "i.ua", - "categoryId": 4, - "url": "http://www.i.ua/", - "companyId": "i.ua" - }, - "i10c.net": { - "name": "i10c.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "i2i.jp": { - "name": "i2i.jp", - "categoryId": 6, - "url": "http://www.i2i.jp/", - "companyId": "i2i.jp" - }, - "iab_consent": { - "name": "IAB Consent", - "categoryId": 5, - "url": "https://iabtechlab.com/standards/gdpr-transparency-and-consent-framework/", - "companyId": "iab" - }, - "iadvize": { - "name": "iAdvize", - "categoryId": 2, - "url": "http://www.iadvize.com/", - "companyId": "iadvize" - }, - "ibm_customer_experience": { - "name": "IBM Digital Analytics", - "categoryId": 6, - "url": "http://www.coremetrics.com/", - "companyId": "ibm" - }, - "icerocket_tracker": { - "name": "IceRocket Tracker", - "categoryId": 7, - "url": "http://tracker.icerocket.com/", - "companyId": "meltwater_icerocket" - }, - "icf_technology": { - "name": "ICF Technology", - "categoryId": 2, - "url": "http://www.icftechnology.com/", - "companyId": null - }, - "iclick": { - "name": "iClick", - "categoryId": 4, - "url": "http://optimix.asia/", - "companyId": "iclick_interactive" - }, - "icrossing": { - "name": "iCrossing", - "categoryId": 4, - "url": "http://www.icrossing.com/", - "companyId": "hearst" - }, - "icstats": { - "name": "ICStats", - "categoryId": 6, - "url": "http://www.icstats.nl/", - "companyId": "icstats" - }, - "icuazeczpeoohx.com": { - "name": "icuazeczpeoohx.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "id-news.net": { - "name": "Ippen Digital", - "categoryId": 4, - "url": "https://www.ippen-digital.de/", - "companyId": null - }, - "id_services": { - "name": "ID Services", - "categoryId": 6, - "url": "https://id.services/", - "companyId": "id_services" - }, - "ideal_media": { - "name": "Ideal Media", - "categoryId": 4, - "url": "http://idealmedia.com/", - "companyId": "ideal_media" - }, - "idealo_com": { - "name": "idealo.com", - "categoryId": 4, - "url": "http://idealo.com/", - "companyId": null - }, - "identrust": { - "name": "IdenTrust, Inc.", - "categoryId": 5, - "url": "https://identrust.com/", - "companyId": "identrust", - "source": "AdGuard" - }, - "ideoclick": { - "name": "IdeoClick", - "categoryId": 4, - "url": "http://ideoclick.com", - "companyId": "ideoclick" - }, - "idio": { - "name": "Idio", - "categoryId": 4, - "url": "https://www.idio.ai/", - "companyId": "idio" - }, - "ie8eamus.com": { - "name": "ie8eamus.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ientry": { - "name": "iEntry", - "categoryId": 4, - "url": "http://www.ientry.com/", - "companyId": "ientry" - }, - "iflychat": { - "name": "iFlyChat", - "categoryId": 2, - "url": "https://iflychat.com/", - "companyId": "iflychat" - }, - "ignitionone": { - "name": "IgnitionOne", - "categoryId": 6, - "url": "https://www.ignitionone.com/", - "companyId": "zeta" - }, - "igodigital": { - "name": "iGoDigital", - "categoryId": 2, - "url": "http://igodigital.com/", - "companyId": "salesforce" - }, - "ihs_markit": { - "name": "IHS Markit", - "categoryId": 6, - "url": "https://ihsmarkit.com/index.html", - "companyId": "ihs" - }, - "ihs_markit_online_shopper_insigh": { - "name": "IHS Markit Online Shopper Insigh", - "categoryId": 6, - "url": "http://www.visicogn.com/vcu.htm", - "companyId": "ihs" - }, - "ihvmcqojoj.com": { - "name": "ihvmcqojoj.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "iias.eu": { - "name": "Insight Image", - "categoryId": 3, - "url": "http://insightimage.com/", - "companyId": null - }, - "ijento": { - "name": "iJento", - "categoryId": 6, - "url": "http://www.ijento.com/", - "companyId": "ijento" - }, - "imad": { - "name": "imad", - "categoryId": 4, - "url": "http://www.imad.co.kr/", - "companyId": "i'mad_republic" - }, - "image_advantage": { - "name": "Image Advantage", - "categoryId": 4, - "url": "http://www.worthathousandwords.com/", - "companyId": "image_advantage" - }, - "image_space_media": { - "name": "Image Space Media", - "categoryId": 4, - "url": "http://www.imagespacemedia.com/", - "companyId": "image_space_media" - }, - "imgix.net": { - "name": "ImgIX", - "categoryId": 9, - "url": "https://www.imgix.com/", - "companyId": null - }, - "imgur": { - "name": "Imgur", - "categoryId": 8, - "url": "https://imgur.com/", - "companyId": "medialab", - "source": "AdGuard" - }, - "imho_vi": { - "name": "imho vi", - "categoryId": 4, - "url": "http://www.imho.ru", - "companyId": "imho" - }, - "immanalytics": { - "name": "Immanalytics", - "categoryId": 2, - "url": "https://www.roku.com/", - "companyId": "roku" - }, - "immobilienscout24_de": { - "name": "immobilienscout24.de", - "categoryId": 8, - "url": "http://www.scout24.com/", - "companyId": "scout24" - }, - "imonomy": { - "name": "imonomy", - "categoryId": 6, - "url": "http://imonomy.com/", - "companyId": "imonomy" - }, - "impact_radius": { - "name": "Impact Radius", - "categoryId": 5, - "url": "http://www.impactradius.com/", - "companyId": "impact_radius" - }, - "impresiones_web": { - "name": "Impresiones Web", - "categoryId": 4, - "url": "http://www.iw-advertising.com/", - "companyId": "impresiones_web" - }, - "improve_digital": { - "name": "Improve Digital", - "categoryId": 4, - "url": "http://www.improvedigital.com/", - "companyId": "improve_digital" - }, - "improvely": { - "name": "Improvely", - "categoryId": 6, - "url": "https://www.improvely.com/", - "companyId": "awio_web_services" - }, - "inbenta": { - "name": "Inbenta", - "categoryId": 6, - "url": "https://www.inbenta.com/en/", - "companyId": "inbenta" - }, - "inboxsdk.com": { - "name": "Inbox SDK", - "categoryId": 8, - "url": "https://www.inboxsdk.com/", - "companyId": null - }, - "indeed": { - "name": "Indeed", - "categoryId": 4, - "url": "http://www.indeed.com/", - "companyId": "indeed" - }, - "index_exchange": { - "name": "Index Exchange", - "categoryId": 4, - "url": "http://www.casalemedia.com/", - "companyId": "index_exchange" - }, - "indieclick": { - "name": "IndieClick", - "categoryId": 4, - "url": "http://www.indieclick.com/", - "companyId": "leaf_group" - }, - "industry_brains": { - "name": "Industry Brains", - "categoryId": 4, - "url": "http://www.industrybrains.com/", - "companyId": "industrybrains" - }, - "infectious_media": { - "name": "Impression Desk", - "categoryId": 4, - "url": "https://impressiondesk.com/", - "companyId": "infectious_media" - }, - "infinite_analytics": { - "name": "Infinite Analytics", - "categoryId": 6, - "url": "http://infiniteanalytics.com/products/", - "companyId": "infinite_analytics" - }, - "infinity_tracking": { - "name": "Infinity Tracking", - "categoryId": 6, - "url": "http://www.infinity-tracking.com", - "companyId": "infinity_tracking" - }, - "influads": { - "name": "InfluAds", - "categoryId": 4, - "url": "http://www.influads.com/", - "companyId": "influads" - }, - "infolinks": { - "name": "InfoLinks", - "categoryId": 4, - "url": "http://www.infolinks.com/", - "companyId": "infolinks" - }, - "infonline": { - "name": "INFOnline", - "categoryId": 6, - "url": "http://www.infonline.de/", - "companyId": "infonline" - }, - "informer_technologies": { - "name": "Informer Technologies", - "categoryId": 6, - "url": "http://www.informer.com/", - "companyId": "informer_technologies" - }, - "infusionsoft": { - "name": "Infusionsoft by Keap", - "categoryId": 4, - "url": "https://keap.com/", - "companyId": "infusionsoft" - }, - "innity": { - "name": "Innity", - "categoryId": 4, - "url": "http://www.innity.com/", - "companyId": "innity" - }, - "innogames.de": { - "name": "InnoGames", - "categoryId": 8, - "url": "https://www.innogames.com/", - "companyId": null - }, - "innovid": { - "name": "Innovid", - "categoryId": 4, - "url": "https://www.innovid.com/", - "companyId": "innovid" - }, - "inside": { - "name": "inside", - "categoryId": 7, - "url": "http://www.inside.tm/", - "companyId": "powerfront" - }, - "insider": { - "name": "Insider", - "categoryId": 6, - "url": "http://useinsider.com/", - "companyId": "insider" - }, - "insightexpress": { - "name": "InsightExpress", - "categoryId": 6, - "url": "https://www.millwardbrowndigital.com/", - "companyId": "millward_brown" - }, - "inskin_media": { - "name": "InSkin Media", - "categoryId": 4, - "url": "http://www.inskinmedia.com/", - "companyId": "inskin_media" - }, - "inspectlet": { - "name": "Inspectlet", - "categoryId": 6, - "url": "https://www.inspectlet.com/", - "companyId": "inspectlet" - }, - "inspsearchapi.com": { - "name": "Infospace Search", - "categoryId": 4, - "url": "http://infospace.com/", - "companyId": "system1" - }, - "instagram_com": { - "name": "Instagram", - "categoryId": 8, - "url": "https://www.facebook.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "instant_check_mate": { - "name": "Instant Check Mate", - "categoryId": 2, - "url": "https://www.instantcheckmate.com/", - "companyId": "instant_check_mate" - }, - "instart_logic": { - "name": "Instart Logic", - "categoryId": 4, - "url": "https://www.instartlogic.com/", - "companyId": "instart_logic_inc" - }, - "insticator": { - "name": "Insticator", - "categoryId": 4, - "url": "https://www.insticator.com/landingpage", - "companyId": "insticator" - }, - "instinctive": { - "name": "Instinctive", - "categoryId": 4, - "url": "https://instinctive.io/", - "companyId": "instinctive" - }, - "intango": { - "name": "Intango", - "categoryId": 4, - "url": "https://intango.com/", - "companyId": "intango" - }, - "integral_ad_science": { - "name": "Integral Ad Science", - "categoryId": 4, - "url": "https://integralads.com/", - "companyId": "integral_ad_science" - }, - "integral_marketing": { - "name": "Integral Marketing", - "categoryId": 4, - "url": "http://integral-marketing.com/", - "companyId": "integral_marketing" - }, - "intelliad": { - "name": "intelliAd", - "categoryId": 6, - "url": "http://www.intelliad.de/", - "companyId": "intelliad" - }, - "intelligencefocus": { - "name": "IntelligenceFocus", - "categoryId": 6, - "url": "http://www.intelligencefocus.com", - "companyId": "intelligencefocus" - }, - "intelligent_reach": { - "name": "Intelligent Reach", - "categoryId": 4, - "url": "http://www.intelligentreach.com/", - "companyId": "intelligent_reach" - }, - "intense_debate": { - "name": "Intense Debate", - "categoryId": 2, - "url": "http://intensedebate.com/", - "companyId": "automattic" - }, - "intent_iq": { - "name": "Intent IQ", - "categoryId": 4, - "url": "http://datonics.com/", - "companyId": "almondnet" - }, - "intent_media": { - "name": "Intent", - "categoryId": 4, - "url": "https://intent.com/", - "companyId": "intent_media" - }, - "intercom": { - "name": "Intercom", - "categoryId": 2, - "url": "http://intercom.io/", - "companyId": "intercom" - }, - "interedy.info": { - "name": "interedy.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "intergi": { - "name": "Intergi", - "categoryId": 4, - "url": "http://www.intergi.com/", - "companyId": "intergi_entertainment" - }, - "intermarkets.net": { - "name": "Intermarkets", - "categoryId": 4, - "url": "http://intermarkets.net/", - "companyId": "intermarkets" - }, - "intermundo_media": { - "name": "InterMundo Media", - "categoryId": 4, - "url": "http://intermundomedia.com/", - "companyId": "intermundo_media" - }, - "internet_billboard": { - "name": "Internet BillBoard", - "categoryId": 4, - "url": "http://www.ibillboard.com/en/", - "companyId": "internet_billboard" - }, - "internetaudioads": { - "name": "InternetAudioAds", - "categoryId": 0, - "url": "http://www.internetaudioads.com/", - "companyId": "internetaudioads" - }, - "internetbrands": { - "name": "InternetBrands", - "categoryId": 7, - "url": "http://www.internetbrands.com/", - "companyId": "internet_brands" - }, - "interpolls": { - "name": "Interpolls", - "categoryId": 4, - "url": "http://www.interpolls.com/", - "companyId": "interpolls" - }, - "interyield": { - "name": "Interyield", - "categoryId": 4, - "url": "http://www.advertise.com/publisher-solutions/", - "companyId": "advertise.com" - }, - "intilery": { - "name": "Intilery", - "categoryId": 6, - "url": "http://www.intilery.com", - "companyId": "intilery" - }, - "intimate_merger": { - "name": "Intimate Merger", - "categoryId": 6, - "url": "https://corp.intimatemerger.com/", - "companyId": "intimate_merger" - }, - "investingchannel": { - "name": "Investing Channel", - "categoryId": 8, - "url": "http://www.investingchannel.com/", - "companyId": "investingchannel" - }, - "inviziads": { - "name": "InviziAds", - "categoryId": 4, - "url": "http://www.inviziads.com", - "companyId": "inviziads" - }, - "invoca": { - "name": "Invoca", - "categoryId": 4, - "url": "http://www.invoca.com/", - "companyId": "invoca" - }, - "invodo": { - "name": "Invodo", - "categoryId": 6, - "url": "http://www.invodo.com/", - "companyId": "invodo" - }, - "ionicframework.com": { - "name": "Ionic", - "categoryId": 8, - "url": "https://ionicframework.com/", - "companyId": null - }, - "iotec": { - "name": "iotec", - "categoryId": 4, - "url": "https://www.iotecglobal.com/", - "companyId": "iotec" - }, - "iovation": { - "name": "iovation", - "categoryId": 5, - "url": "http://www.iovation.com/", - "companyId": "iovation" - }, - "ip-label": { - "name": "ip-label", - "categoryId": 6, - "url": "http://www.ip-label.co.uk/", - "companyId": "ip-label" - }, - "ip_targeting": { - "name": "IP Targeting", - "categoryId": 6, - "url": "https://www.iptargeting.com/", - "companyId": "el_toro" - }, - "ip_tracker": { - "name": "IP Tracker", - "categoryId": 6, - "url": "http://www.ip-tracker.org/", - "companyId": "ip_tracker" - }, - "iperceptions": { - "name": "iPerceptions", - "categoryId": 2, - "url": "http://www.iperceptions.com/", - "companyId": "iperceptions" - }, - "ipfingerprint": { - "name": "IPFingerprint", - "categoryId": 6, - "url": "http://www.ipfingerprint.com/", - "companyId": "ipfingerprint" - }, - "ipg_mediabrands": { - "name": "IPG Mediabrands", - "categoryId": 4, - "url": "https://www.ipgmediabrands.com/", - "companyId": "ipg_mediabrands" - }, - "ipify": { - "name": "ipify", - "categoryId": 8, - "url": "https://www.ipify.org/", - "companyId": null - }, - "ipinfo": { - "name": "Ipinfo", - "categoryId": 2, - "url": "https://ipinfo.io/", - "companyId": "ipinfo.io" - }, - "iplogger": { - "name": "IPLogger", - "categoryId": 6, - "url": "http://iplogger.ru/", - "companyId": "iplogger" - }, - "iprom": { - "name": "iprom", - "categoryId": 4, - "url": "http://www.iprom.si/", - "companyId": "iprom" - }, - "ipromote": { - "name": "iPromote", - "categoryId": 4, - "url": "http://www.ipromote.com/", - "companyId": "ipromote" - }, - "iprospect": { - "name": "iProspect", - "categoryId": 4, - "url": "http://www.iprospect.com/", - "companyId": "dentsu_aegis_network" - }, - "iqiyi": { - "name": "iQiyi", - "categoryId": 0, - "url": "https://www.iqiyi.com/", - "companyId": "iqiyi", - "source": "AdGuard" - }, - "ironsource": { - "name": "ironSource Ltd.", - "categoryId": 4, - "url": "https://www.is.com", - "companyId": "unity", - "source": "AdGuard" - }, - "isocket": { - "name": "isocket", - "categoryId": 4, - "url": "http://www.isocket.com/", - "companyId": "rubicon_project" - }, - "isolarcloud": { - "name": "iSolarCloud", - "categoryId": 6, - "url": "https://isolarcloud.com/", - "companyId": "sungrow", - "source": "AdGuard" - }, - "ispot.tv": { - "name": "iSpot.tv", - "categoryId": 4, - "url": "https://www.ispot.tv/", - "companyId": null - }, - "itineraire.info": { - "name": "itineraire.info", - "categoryId": 2, - "url": "https://www.itineraire.info/", - "companyId": null - }, - "itunes_link_maker": { - "name": "iTunes Link Maker", - "categoryId": 4, - "url": "https://www.apple.com/", - "companyId": "apple" - }, - "ity.im": { - "name": "ity.im", - "categoryId": 4, - "url": "http://ity.im/", - "companyId": "ity.im" - }, - "iubenda.com": { - "name": "iubenda", - "categoryId": 5, - "url": "https://www.iubenda.com/", - "companyId": "iubenda" - }, - "ivcbrasil.org.br": { - "name": "IVC Brasil", - "categoryId": 6, - "url": "https://ivcbrasil.org.br/#/home", - "companyId": null - }, - "ividence": { - "name": "Ividence", - "categoryId": 4, - "url": "https://www.ividence.com/home/", - "companyId": "sien" - }, - "iwiw_widgets": { - "name": "iWiW Widgets", - "categoryId": 2, - "url": "http://iwiw.hu", - "companyId": "iwiw" - }, - "ixi_digital": { - "name": "IXI Digital", - "categoryId": 4, - "url": "http://www.equifax.com/home/en_us", - "companyId": "equifax" - }, - "ixquick.com": { - "name": "ixquick", - "categoryId": 8, - "url": "https://www.ixquick.com/", - "companyId": "startpage" - }, - "izooto": { - "name": "iZooto", - "categoryId": 6, - "url": "https://www.izooto.com/", - "companyId": "izooto" - }, - "j-list_affiliate_program": { - "name": "J-List Affiliate Program", - "categoryId": 4, - "url": "http://www.jlist.com/page/affiliates.html", - "companyId": "j-list" - }, - "jaco": { - "name": "Jaco", - "categoryId": 6, - "url": "https://www.walkme.com/", - "companyId": "walkme" - }, - "janrain": { - "name": "Janrain", - "categoryId": 6, - "url": "http://www.janrain.com/", - "companyId": "akamai" - }, - "jeeng": { - "name": "Jeeng", - "categoryId": 4, - "url": "https://jeeng.com/", - "companyId": "jeeng" - }, - "jeeng_widgets": { - "name": "Jeeng Widgets", - "categoryId": 4, - "url": "https://jeeng.com/", - "companyId": "jeeng" - }, - "jet_interactive": { - "name": "Jet Interactive", - "categoryId": 6, - "url": "http://www.jetinteractive.com.au/", - "companyId": "jet_interactive" - }, - "jetlore": { - "name": "Jetlore", - "categoryId": 6, - "url": "http://www.jetlore.com/", - "companyId": "jetlore" - }, - "jetpack": { - "name": "Jetpack", - "categoryId": 6, - "url": "https://jetpack.com/", - "companyId": "automattic" - }, - "jetpack_digital": { - "name": "Jetpack Digital", - "categoryId": 6, - "url": "http://www.jetpack.com/", - "companyId": "jetpack_digital" - }, - "jimdo.com": { - "name": "jimdo.com", - "categoryId": 10, - "url": null, - "companyId": null - }, - "jink": { - "name": "Jink", - "categoryId": 4, - "url": "http://www.jink.de/", - "companyId": "jink" - }, - "jirafe": { - "name": "Jirafe", - "categoryId": 6, - "url": "http://jirafe.com/", - "companyId": "jirafe" - }, - "jivochat": { - "name": "JivoSite", - "categoryId": 2, - "url": "https://www.jivochat.com/", - "companyId": "jivochat" - }, - "jivox": { - "name": "Jivox", - "categoryId": 4, - "url": "http://www.jivox.com/", - "companyId": "jivox" - }, - "jobs_2_careers": { - "name": "Jobs 2 Careers", - "categoryId": 4, - "url": "http://www.jobs2careers.com/", - "companyId": "jobs_2_careers" - }, - "joinhoney": { - "name": "Honey", - "categoryId": 8, - "url": "https://www.joinhoney.com/", - "companyId": null - }, - "jornaya": { - "name": "Jornaya", - "categoryId": 6, - "url": "http://leadid.com/", - "companyId": "jornaya" - }, - "jquery": { - "name": "jQuery", - "categoryId": 9, - "url": "https://jquery.org/", - "companyId": "js_foundation" - }, - "js_communications": { - "name": "JS Communications", - "categoryId": 4, - "url": "http://www.jssearch.net/", - "companyId": "js_communications" - }, - "jsdelivr": { - "name": "jsDelivr", - "categoryId": 9, - "url": "https://www.jsdelivr.com/", - "companyId": null - }, - "jse_coin": { - "name": "JSE Coin", - "categoryId": 4, - "url": "https://jsecoin.com/", - "companyId": "jse_coin" - }, - "jsuol.com.br": { - "name": "jsuol.com.br", - "categoryId": 4, - "url": null, - "companyId": null - }, - "juggcash": { - "name": "JuggCash", - "categoryId": 3, - "url": "http://www.juggcash.com", - "companyId": "juggcash" - }, - "juiceadv": { - "name": "JuiceADV", - "categoryId": 4, - "url": "http://juiceadv.com/", - "companyId": "juiceadv" - }, - "juicyads": { - "name": "JuicyAds", - "categoryId": 3, - "url": "http://www.juicyads.com/", - "companyId": "juicyads" - }, - "jumplead": { - "name": "Jumplead", - "categoryId": 6, - "url": "https://jumplead.com/", - "companyId": "jumplead" - }, - "jumpstart_tagging_solutions": { - "name": "Jumpstart Tagging Solutions", - "categoryId": 6, - "url": "http://www.hearst.com/", - "companyId": "hearst" - }, - "jumptap": { - "name": "Jumptap", - "categoryId": 4, - "url": "http://www.jumptap.com/", - "companyId": "verizon" - }, - "jumptime": { - "name": "JumpTime", - "categoryId": 6, - "url": "http://www.jumptime.com/", - "companyId": "openx" - }, - "just_answer": { - "name": "Just Answer", - "categoryId": 2, - "url": "https://www.justanswer.com/", - "companyId": "just_answer" - }, - "just_premium": { - "name": "Just Premium", - "categoryId": 4, - "url": "http://justpremium.com/", - "companyId": "just_premium" - }, - "just_relevant": { - "name": "Just Relevant", - "categoryId": 4, - "url": "http://www.justrelevant.com/", - "companyId": "just_relevant" - }, - "jvc.gg": { - "name": "Jeuxvideo CDN", - "categoryId": 9, - "url": "http://www.jeuxvideo.com/", - "companyId": null - }, - "jw_player": { - "name": "JW Player", - "categoryId": 0, - "url": "https://www.jwplayer.com/", - "companyId": "jw_player" - }, - "jw_player_ad_solutions": { - "name": "JW Player Ad Solutions", - "categoryId": 4, - "url": "http://www.longtailvideo.com/adsolution/", - "companyId": "jw_player" - }, - "kaeufersiegel.de": { - "name": "Käufersiegel", - "categoryId": 2, - "url": "https://www.kaeufersiegel.de/", - "companyId": null - }, - "kairion.de": { - "name": "kairion", - "categoryId": 4, - "url": "https://kairion.de/", - "companyId": "prosieben_sat1" - }, - "kaloo.ga": { - "name": "Kalooga", - "categoryId": 4, - "url": "https://www.kalooga.com/", - "companyId": "kalooga" - }, - "kalooga_widget": { - "name": "Kalooga Widget", - "categoryId": 4, - "url": "http://kalooga.com/", - "companyId": "kalooga" - }, - "kaltura": { - "name": "Kaltura", - "categoryId": 0, - "url": "http://corp.kaltura.com/", - "companyId": "kaltura" - }, - "kameleoon": { - "name": "Kameleoon", - "categoryId": 6, - "url": "http://www.kameleoon.com/", - "companyId": "kameleoon" - }, - "kampyle": { - "name": "Medallia", - "categoryId": 2, - "url": "http://www.kampyle.com/", - "companyId": "medallia" - }, - "kanoodle": { - "name": "Kanoodle", - "categoryId": 4, - "url": "http://www.kanoodle.com/", - "companyId": "kanoodle" - }, - "kantar_media": { - "name": "Kantar Media", - "categoryId": 4, - "url": "https://www.kantarmedia.com/", - "companyId": "wpp" - }, - "karambasecurity": { - "name": "Karamba Security", - "categoryId": 8, - "url": "https://karambasecurity.com/", - "companyId": "karambasecurity", - "source": "AdGuard" - }, - "kargo": { - "name": "Kargo", - "categoryId": 4, - "url": "http://www.kargo.com/", - "companyId": "kargo" - }, - "kaspersky-labs.com": { - "name": "Kaspersky Labs", - "categoryId": 12, - "url": "https://www.kaspersky.com/", - "companyId": "AO Kaspersky Lab" - }, - "kataweb.it": { - "name": "KataWeb", - "categoryId": 4, - "url": "http://www.kataweb.it/", - "companyId": null - }, - "katchup": { - "name": "Katchup", - "categoryId": 4, - "url": "http://www.katchup.fr/", - "companyId": "katchup" - }, - "kauli": { - "name": "Kauli", - "categoryId": 4, - "url": "http://kau.li/", - "companyId": "kauli" - }, - "kavanga": { - "name": "Kavanga", - "categoryId": 4, - "url": "http://kavanga.ru/", - "companyId": "kavanga" - }, - "kayo_sports": { - "name": "Kayo Sports", - "categoryId": 0, - "url": "https://kayosports.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "keen_io": { - "name": "Keen IO", - "categoryId": 6, - "url": "https://keen.io", - "companyId": "keen_io" - }, - "kelkoo": { - "name": "Kelkoo", - "categoryId": 4, - "url": "http://www.kelkoo.com/", - "companyId": "kelkoo" - }, - "kenshoo": { - "name": "Kenshoo", - "categoryId": 6, - "url": "http://www.kenshoo.com/", - "companyId": "kenshoo" - }, - "keymetric": { - "name": "KeyMetric", - "categoryId": 6, - "url": "http://keymetric.net/", - "companyId": "keymetric" - }, - "keytiles": { - "name": "Keytiles", - "categoryId": 6, - "url": "http://keytiles.com/", - "companyId": "keytiles" - }, - "keywee": { - "name": "Keywee", - "categoryId": 6, - "url": "https://keywee.co/", - "companyId": "keywee" - }, - "keywordmax": { - "name": "KeywordMax", - "categoryId": 4, - "url": "http://www.keywordmax.com/", - "companyId": "digital_river" - }, - "khoros": { - "name": "Khoros", - "categoryId": 7, - "url": "http://www.massrelevance.com/", - "companyId": "khoros" - }, - "khzbeucrltin.com": { - "name": "khzbeucrltin.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "kickfactory": { - "name": "Kickfactory", - "categoryId": 4, - "url": "https://kickfactory.com/", - "companyId": "kickfactory" - }, - "kickfire": { - "name": "Kickfire", - "categoryId": 4, - "url": "http://www.visistat.com/", - "companyId": "kickfire" - }, - "kik": { - "name": "Kik", - "categoryId": 7, - "url": "https://kik.com/", - "companyId": "medialab", - "source": "AdGuard" - }, - "king.com": { - "name": "King.com", - "categoryId": 4, - "url": "http://www.king.com/", - "companyId": "king.com" - }, - "king_com": { - "name": "King.com", - "categoryId": 8, - "url": "https://king.com/", - "companyId": "activision_blizzard" - }, - "kinja.com": { - "name": "Kinja", - "categoryId": 6, - "url": "https://kinja.com/", - "companyId": "gizmodo" - }, - "kiosked": { - "name": "Kiosked", - "categoryId": 4, - "url": "http://www.kiosked.com/", - "companyId": "kiosked" - }, - "kissmetrics.com": { - "name": "Kissmetrics", - "categoryId": 6, - "url": "https://www.kissmetrics.com/", - "companyId": "kissmetrics" - }, - "kitara_media": { - "name": "Kitara Media", - "categoryId": 4, - "url": "http://www.kitaramedia.com/", - "companyId": "kitara_media" - }, - "kixer": { - "name": "Kixer", - "categoryId": 4, - "url": "http://www.kixer.com", - "companyId": "kixer" - }, - "klarna.com": { - "name": "Klarna", - "categoryId": 2, - "url": "https://www.klarna.com/", - "companyId": null - }, - "klaviyo": { - "name": "Klaviyo", - "categoryId": 6, - "url": "https://www.klaviyo.com/", - "companyId": "klaviyo" - }, - "klikki": { - "name": "Klikki", - "categoryId": 4, - "url": "http://www.klikki.com/", - "companyId": "klikki" - }, - "kliksaya": { - "name": "KlikSaya", - "categoryId": 4, - "url": "http://www.kliksaya.com", - "companyId": "kliksaya" - }, - "kmeleo": { - "name": "Kméléo", - "categoryId": 4, - "url": "http://www.6peo.com/", - "companyId": "6peo" - }, - "knoopstat": { - "name": "Knoopstat", - "categoryId": 6, - "url": "http://www.knoopstat.nl", - "companyId": "knoopstat" - }, - "knotch": { - "name": "Knotch", - "categoryId": 2, - "url": "http://knotch.it", - "companyId": "knotch" - }, - "komoona": { - "name": "Komoona", - "categoryId": 4, - "url": "http://www.komoona.com/", - "companyId": "komoona" - }, - "kontera_contentlink": { - "name": "Kontera ContentLink", - "categoryId": 4, - "url": "http://www.kontera.com/", - "companyId": "singtel" - }, - "kontextr": { - "name": "Kontextr", - "categoryId": 4, - "url": "https://www.kontextr.com/", - "companyId": "kontext" - }, - "kontextua": { - "name": "Kontextua", - "categoryId": 4, - "url": "http://www.kontextua.com/", - "companyId": "kontextua" - }, - "korrelate": { - "name": "Korrelate", - "categoryId": 4, - "url": "http://korrelate.com/", - "companyId": "korrelate" - }, - "kortx": { - "name": "Kortx", - "categoryId": 6, - "url": "http://www.kortx.io/", - "companyId": "kortx" - }, - "kount": { - "name": "Kount", - "categoryId": 6, - "url": "https://kount.com/", - "companyId": null - }, - "krux_digital": { - "name": "Salesforce DMP", - "categoryId": 4, - "url": "https://www.salesforce.com/products/marketing-cloud/data-management/?mc=DMP", - "companyId": "salesforce" - }, - "kupona": { - "name": "Kupona", - "categoryId": 4, - "url": "http://www.kupona-media.de/en/retargeting-and-performance-media-width-kupona", - "companyId": "kupona" - }, - "kxcdn.com": { - "name": "Keycdn", - "categoryId": 9, - "url": "https://www.keycdn.com/", - "companyId": null - }, - "kyto": { - "name": "Kyto", - "categoryId": 6, - "url": "https://www.kyto.com/", - "companyId": "kyto" - }, - "ladsp.com": { - "name": "Logicad", - "categoryId": 4, - "url": "https://www.logicad.com/", - "companyId": "logicad" - }, - "lanista_concepts": { - "name": "Lanista Concepts", - "categoryId": 4, - "url": "http://lanistaconcepts.com/", - "companyId": "lanista_concepts" - }, - "latimes": { - "name": "Los Angeles Times", - "categoryId": 8, - "url": "http://www.latimes.com/", - "companyId": "latimes" - }, - "launch_darkly": { - "name": "Launch Darkly", - "categoryId": 5, - "url": "https://launchdarkly.com/index.html", - "companyId": "launch_darkly" - }, - "launchbit": { - "name": "LaunchBit", - "categoryId": 4, - "url": "https://www.launchbit.com/", - "companyId": "launchbit" - }, - "launchpad": { - "name": "Launchpad", - "categoryId": 8, - "url": "https://launchpad.net/", - "companyId": "canonical", - "source": "AdGuard" - }, - "layer-ad.org": { - "name": "Layer-ADS.net", - "categoryId": 4, - "url": "http://layer-ads.net/", - "companyId": null - }, - "lazada": { - "name": "Lazada", - "categoryId": 4, - "url": "https://www.lazada.com/", - "companyId": "lazada" - }, - "lcx_digital": { - "name": "LCX Digital", - "categoryId": 4, - "url": "http://www.lcx.com/", - "companyId": "lcx_digital" - }, - "le_monde.fr": { - "name": "Le Monde.fr", - "categoryId": 8, - "url": "http://www.lemonde.fr/", - "companyId": "le_monde.fr" - }, - "lead_liaison": { - "name": "Lead Liaison", - "categoryId": 6, - "url": "https://www.leadliaison.com", - "companyId": "lead_liaison" - }, - "leadback": { - "name": "Leadback", - "categoryId": 6, - "url": "http://leadback.ru/?utm_source=leadback_widget&utm_medium=eas-balt.ru&utm_campaign=self_ad", - "companyId": "leadback" - }, - "leaddyno": { - "name": "LeadDyno", - "categoryId": 4, - "url": "http://www.leaddyno.com", - "companyId": "leaddyno" - }, - "leadforensics": { - "name": "LeadForensics", - "categoryId": 4, - "url": "http://www.leadforensics.com/", - "companyId": "lead_forensics" - }, - "leadgenic": { - "name": "LeadGENIC", - "categoryId": 4, - "url": "https://leadgenic.com/", - "companyId": "leadgenic" - }, - "leadhit": { - "name": "LeadHit", - "categoryId": 2, - "url": "http://leadhit.ru/", - "companyId": "leadhit" - }, - "leadin": { - "name": "Leadin", - "categoryId": 6, - "url": "https://www.hubspot.com/", - "companyId": "hubspot" - }, - "leading_reports": { - "name": "Leading Reports", - "categoryId": 4, - "url": "https://www.leadingreports.de/", - "companyId": "leading_reports" - }, - "leadinspector": { - "name": "LeadInspector", - "categoryId": 6, - "url": "https://www.leadinspector.de/", - "companyId": "leadinspector" - }, - "leadlander": { - "name": "LeadLander", - "categoryId": 6, - "url": "http://www.leadlander.com/", - "companyId": "leadlander" - }, - "leadlife": { - "name": "LeadLife", - "categoryId": 2, - "url": "http://leadlife.com/", - "companyId": "leadlife" - }, - "leadpages": { - "name": "Leadpages", - "categoryId": 6, - "url": "https://www.leadpages.net/", - "companyId": "leadpages" - }, - "leadplace": { - "name": "LeadPlace", - "categoryId": 6, - "url": "https://temelio.com", - "companyId": "leadplace" - }, - "leads_by_web.com": { - "name": "Leads by Web.com", - "categoryId": 4, - "url": "http://www.leadsbyweb.com", - "companyId": "web.com_group" - }, - "leadscoreapp": { - "name": "LeadScoreApp", - "categoryId": 2, - "url": "http://leadscoreapp.com", - "companyId": "leadscoreapp" - }, - "leadsius": { - "name": "Leadsius", - "categoryId": 4, - "url": "http://www.leadsius.com/", - "companyId": "leadsius" - }, - "leady": { - "name": "Leady", - "categoryId": 4, - "url": "http://www.leady.cz/", - "companyId": "leady" - }, - "leiki": { - "name": "Leiki", - "categoryId": 4, - "url": "http://www.leiki.com", - "companyId": "leiki" - }, - "lengow": { - "name": "Lengow", - "categoryId": 4, - "url": "http://www.lengow.com/", - "companyId": "lengow" - }, - "lenmit.com": { - "name": "lenmit.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lentainform.com": { - "name": "lentainform.com", - "categoryId": 8, - "url": "https://www.lentainform.com/", - "companyId": null - }, - "lenua.de": { - "name": "Lenua System", - "categoryId": 4, - "url": "http://lenua.de/", - "companyId": "synatix" - }, - "let_reach": { - "name": "Let Reach", - "categoryId": 2, - "url": "https://letreach.com/", - "companyId": "let_reach" - }, - "lets_encrypt": { - "name": "Let's Encrypt", - "categoryId": 5, - "url": "https://letsencrypt.org/", - "companyId": "isrg", - "source": "AdGuard" - }, - "letv": { - "name": "LeTV", - "categoryId": 6, - "url": "http://www.le.com/", - "companyId": "letv" - }, - "level3_communications": { - "name": "Level 3 Communications, Inc.", - "categoryId": 8, - "url": "http://www.level3.com/en/", - "companyId": "level3_communications" - }, - "lgads": { - "name": "LG Ad Solutions", - "categoryId": 4, - "url": "https://lgads.tv/", - "companyId": "lgcorp", - "source": "AdGuard" - }, - "lgtv": { - "name": "LG TV", - "categoryId": 8, - "url": "https://www.lg.com/", - "companyId": "lgcorp", - "source": "AdGuard" - }, - "licensebuttons.net": { - "name": "licensebuttons.net", - "categoryId": 9, - "url": "https://licensebuttons.net/", - "companyId": null - }, - "lifestreet_media": { - "name": "LifeStreet Media", - "categoryId": 4, - "url": "http://lifestreetmedia.com/", - "companyId": "lifestreet_media" - }, - "ligatus": { - "name": "Ligatus", - "categoryId": 4, - "url": "http://www.ligatus.com/", - "companyId": "outbrain" - }, - "limk": { - "name": "Limk", - "categoryId": 4, - "url": "https://limk.com/", - "companyId": "limk" - }, - "line_apps": { - "name": "Line", - "categoryId": 6, - "url": "https://line.me/en-US/", - "companyId": "line" - }, - "linezing": { - "name": "LineZing", - "categoryId": 4, - "url": "http://www.linezing.com/", - "companyId": "linezing" - }, - "linkbucks": { - "name": "Linkbucks", - "categoryId": 4, - "url": "http://www.linkbucks.com/", - "companyId": "linkbucks" - }, - "linkconnector": { - "name": "LinkConnector", - "categoryId": 4, - "url": "http://www.linkconnector.com", - "companyId": "linkconnector" - }, - "linkedin": { - "name": "LinkedIn", - "categoryId": 8, - "url": "https://www.linkedin.com/", - "companyId": "microsoft" - }, - "linkedin_ads": { - "name": "LinkedIn Ads", - "categoryId": 4, - "url": "http://www.linkedin.com/", - "companyId": "microsoft" - }, - "linkedin_analytics": { - "name": "LinkedIn Analytics", - "categoryId": 6, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "linkedin_marketing_solutions": { - "name": "LinkedIn Marketing Solutions", - "categoryId": 4, - "url": "https://business.linkedin.com/marketing-solutions", - "companyId": "microsoft" - }, - "linkedin_widgets": { - "name": "LinkedIn Widgets", - "categoryId": 7, - "url": "https://www.linkedin.com", - "companyId": "microsoft" - }, - "linker": { - "name": "Linker", - "categoryId": 4, - "url": "https://linker.hr/", - "companyId": "linker" - }, - "linkprice": { - "name": "LinkPrice", - "categoryId": 4, - "url": "http://www.linkprice.com/", - "companyId": "linkprice" - }, - "linkpulse": { - "name": "Linkpulse", - "categoryId": 6, - "url": "http://www.linkpulse.com/", - "companyId": "linkpulse" - }, - "linksalpha": { - "name": "LinksAlpha", - "categoryId": 7, - "url": "http://www.linksalpha.com", - "companyId": "linksalpha" - }, - "linksmart": { - "name": "LinkSmart", - "categoryId": 4, - "url": "http://www.linksmart.com/", - "companyId": "sovrn" - }, - "linkstorm": { - "name": "Linkstorm", - "categoryId": 2, - "url": "http://www.linkstorms.com/", - "companyId": "linkstorm" - }, - "linksynergy.com": { - "name": "Rakuten LinkShare", - "categoryId": 4, - "url": "https://rakutenmarketing.com/affiliate", - "companyId": "rakuten" - }, - "linkup": { - "name": "LinkUp", - "categoryId": 6, - "url": "http://www.linkup.com/", - "companyId": "linkup" - }, - "linkwise": { - "name": "Linkwise", - "categoryId": 4, - "url": "http://linkwi.se/global-en/", - "companyId": "linkwise" - }, - "linkwithin": { - "name": "LinkWithin", - "categoryId": 7, - "url": "http://www.linkwithin.com/", - "companyId": "linkwithin" - }, - "liquidm_technology_gmbh": { - "name": "LiquidM Technology GmbH", - "categoryId": 4, - "url": "https://liquidm.com/", - "companyId": "liquidm" - }, - "liqwid": { - "name": "Liqwid", - "categoryId": 4, - "url": "https://liqwid.com/", - "companyId": "liqwid" - }, - "list.ru": { - "name": "Rating@Mail.Ru", - "categoryId": 7, - "url": "http://list.ru/", - "companyId": "megafon" - }, - "listrak": { - "name": "Listrak", - "categoryId": 2, - "url": "http://www.listrak.com/", - "companyId": "listrak" - }, - "live2support": { - "name": "Live2Support", - "categoryId": 2, - "url": "http://www.live2support.com/", - "companyId": "live2support" - }, - "live800": { - "name": "Live800", - "categoryId": 2, - "url": "http://live800.com", - "companyId": "live800" - }, - "live_agent": { - "name": "Live Agent", - "categoryId": 2, - "url": "https://www.ladesk.com/", - "companyId": "liveagent" - }, - "live_help_now": { - "name": "Live Help Now", - "categoryId": 2, - "url": "http://www.livehelpnow.net/", - "companyId": "live_help_now" - }, - "live_intent": { - "name": "Live Intent", - "categoryId": 6, - "url": "http://www.liveintent.com/", - "companyId": "liveintent" - }, - "live_journal": { - "name": "Live Journal", - "categoryId": 6, - "url": "http://www.livejournal.com/", - "companyId": "livejournal" - }, - "liveadexchanger.com": { - "name": "liveadexchanger.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "livechat": { - "name": "LiveChat", - "categoryId": 2, - "url": "http://www.livechatinc.com", - "companyId": "livechat" - }, - "livechatnow": { - "name": "LiveChatNow", - "categoryId": 2, - "url": "http://www.livechatnow.com/", - "companyId": "livechatnow!" - }, - "liveclicker": { - "name": "Liveclicker", - "categoryId": 2, - "url": "http://www.liveclicker.com", - "companyId": "liveclicker" - }, - "livecounter": { - "name": "Livecounter", - "categoryId": 6, - "url": "http://www.livecounter.dk/", - "companyId": "livecounter" - }, - "livefyre": { - "name": "Livefyre", - "categoryId": 1, - "url": "http://www.livefyre.com/", - "companyId": "adobe" - }, - "liveinternet": { - "name": "LiveInternet", - "categoryId": 1, - "url": "http://www.liveinternet.ru/", - "companyId": "liveinternet" - }, - "liveperson": { - "name": "LivePerson", - "categoryId": 2, - "url": "http://www.liveperson.com/", - "companyId": "liveperson" - }, - "liveramp": { - "name": "LiveRamp", - "categoryId": 4, - "url": "https://liveramp.com/", - "companyId": "acxiom" - }, - "livere": { - "name": "LiveRe", - "categoryId": 7, - "url": "http://www.livere.com/", - "companyId": "livere" - }, - "livesportmedia.eu": { - "name": "Livesport Media", - "categoryId": 8, - "url": "http://www.livesportmedia.eu/", - "companyId": null - }, - "livestream": { - "name": "Livestream", - "categoryId": 0, - "url": "http://vimeo.com/", - "companyId": "vimeo" - }, - "livetex.ru": { - "name": "LiveTex", - "categoryId": 2, - "url": "https://livetex.ru/", - "companyId": "livetex" - }, - "lkqd": { - "name": "LKQD", - "categoryId": 4, - "url": "http://www.lkqd.com/", - "companyId": "nexstar" - }, - "loadbee.com": { - "name": "Loadbee", - "categoryId": 4, - "url": "https://company.loadbee.com/de/loadbee-home", - "companyId": null - }, - "loadercdn.com": { - "name": "loadercdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "loadsource.org": { - "name": "loadsource.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "localytics": { - "name": "Localytics", - "categoryId": 101, - "url": "https://uplandsoftware.com/localytics/", - "companyId": "upland", - "source": "AdGuard" - }, - "lockerdome": { - "name": "LockerDome", - "categoryId": 7, - "url": "https://lockerdome.com", - "companyId": "lockerdome" - }, - "lockerz_share": { - "name": "AddToAny", - "categoryId": 7, - "url": "http://www.addtoany.com/", - "companyId": "addtoany" - }, - "logan_media": { - "name": "Logan Media", - "categoryId": 6, - "url": "http://loganmedia.mobi/", - "companyId": "logan_media" - }, - "logdna": { - "name": "LogDNA", - "categoryId": 4, - "url": "http://www.answerbook.com/", - "companyId": "logdna" - }, - "loggly": { - "name": "Loggly", - "categoryId": 6, - "url": "http://loggly.com/", - "companyId": "loggly" - }, - "logly": { - "name": "logly", - "categoryId": 6, - "url": "http://logly.co.jp/", - "companyId": "logly" - }, - "logsss.com": { - "name": "logsss.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lomadee": { - "name": "Lomadee", - "categoryId": 4, - "url": "http://lomadee.com", - "companyId": "lomadee" - }, - "longtail_video_analytics": { - "name": "JW Player Analytics", - "categoryId": 4, - "url": "http://www.longtailvideo.com/", - "companyId": "jw_player" - }, - "loomia": { - "name": "Loomia", - "categoryId": 4, - "url": "http://www.loomia.com/", - "companyId": "loomia" - }, - "loop11": { - "name": "Loop11", - "categoryId": 6, - "url": "https://360i.com/", - "companyId": "360i" - }, - "loopfuse_oneview": { - "name": "LoopFuse OneView", - "categoryId": 4, - "url": "http://www.loopfuse.com/", - "companyId": "loopfuse" - }, - "lotame": { - "name": "Lotame", - "categoryId": 4, - "url": "http://www.lotame.com/", - "companyId": "lotame" - }, - "lottex_inc": { - "name": "vidcpm.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lucid": { - "name": "Lucid", - "categoryId": 4, - "url": "https://luc.id/", - "companyId": "luc.id" - }, - "lucid_media": { - "name": "Lucid Media", - "categoryId": 4, - "url": "http://www.lucidmedia.com/", - "companyId": "singtel" - }, - "lucini": { - "name": "Lucini", - "categoryId": 4, - "url": "http://www.lucinilucini.com/", - "companyId": "lucini_&_lucini_communications" - }, - "lucky_orange": { - "name": "Lucky Orange", - "categoryId": 6, - "url": "http://www.luckyorange.com/", - "companyId": "lucky_orange" - }, - "luckypushh.com": { - "name": "luckypushh.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lxr100": { - "name": "LXR100", - "categoryId": 4, - "url": "http://www.netelixir.com/lxr100_PPC_management_tool.html", - "companyId": "netelixir" - }, - "lynchpin_analytics": { - "name": "Lynchpin Analytics", - "categoryId": 4, - "url": "http://www.lynchpin.com/", - "companyId": "lynchpin_analytics" - }, - "lytics": { - "name": "Lytics", - "categoryId": 6, - "url": "https://www.lytics.com/", - "companyId": "lytics" - }, - "lyuoaxruaqdo.com": { - "name": "lyuoaxruaqdo.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "m-pathy": { - "name": "m-pathy", - "categoryId": 4, - "url": "http://www.m-pathy.com/", - "companyId": "m-pathy" - }, - "m._p._newmedia": { - "name": "M. P. NEWMEDIA", - "categoryId": 4, - "url": "http://www.mp-newmedia.com/", - "companyId": "sticky" - }, - "m4n": { - "name": "M4N", - "categoryId": 4, - "url": "http://www.zanox.com/us/", - "companyId": "axel_springer" - }, - "mad_ads_media": { - "name": "Mad Ads Media", - "categoryId": 4, - "url": "http://www.madadsmedia.com/", - "companyId": "mad_ads_media" - }, - "madeleine.de": { - "name": "madeleine.de", - "categoryId": 4, - "url": null, - "companyId": null - }, - "madison_logic": { - "name": "Madison Logic", - "categoryId": 4, - "url": "http://www.madisonlogic.com/", - "companyId": "madison_logic" - }, - "madnet": { - "name": "MADNET", - "categoryId": 4, - "url": "http://madnet.ru/en", - "companyId": "madnet" - }, - "mads": { - "name": "MADS", - "categoryId": 4, - "url": "http://www.mads.com/", - "companyId": "mads" - }, - "magna_advertise": { - "name": "Magna Advertise", - "categoryId": 4, - "url": "http://magna.ru/", - "companyId": "magna_advertise" - }, - "magnetic": { - "name": "Magnetic", - "categoryId": 4, - "url": "http://www.magnetic.is", - "companyId": "magnetic" - }, - "magnetise_group": { - "name": "Magnetise Group", - "categoryId": 4, - "url": "http://magnetisegroup.com/", - "companyId": "magnetise_group" - }, - "magnify360": { - "name": "Magnify360", - "categoryId": 6, - "url": "http://www.magnify360.com/", - "companyId": "magnify360" - }, - "magnuum.com": { - "name": "magnuum.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mail.ru_banner": { - "name": "Mail.Ru Banner Network", - "categoryId": 4, - "url": "http://mail.ru/", - "companyId": "vk", - "source": "AdGuard" - }, - "mail.ru_counter": { - "name": "Mail.Ru Counter", - "categoryId": 2, - "url": "http://mail.ru/", - "companyId": "vk", - "source": "AdGuard" - }, - "mail.ru_group": { - "name": "Mail.Ru Group", - "categoryId": 7, - "url": "http://mail.ru/", - "companyId": "vk", - "source": "AdGuard" - }, - "mailchimp_tracking": { - "name": "MailChimp Tracking", - "categoryId": 4, - "url": "http://mailchimp.com/", - "companyId": "mailchimp" - }, - "mailerlite.com": { - "name": "Mailerlite", - "categoryId": 10, - "url": "https://www.mailerlite.com/", - "companyId": "mailerlite" - }, - "mailtrack.io": { - "name": "MailTrack.io", - "categoryId": 4, - "url": "https://mailtrack.io", - "companyId": "mailtrack" - }, - "mainadv": { - "name": "mainADV", - "categoryId": 4, - "url": "http://www.mainadv.com/", - "companyId": "mainadv" - }, - "makazi": { - "name": "Makazi", - "categoryId": 4, - "url": "http://www.makazi.com/en/", - "companyId": "makazi_group" - }, - "makeappdev.xyz": { - "name": "makeappdev.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "makesource.cool": { - "name": "makesource.cool", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mango": { - "name": "Mango", - "categoryId": 4, - "url": "https://www.mango-office.ru/", - "companyId": "mango_office" - }, - "manycontacts": { - "name": "ManyContacts", - "categoryId": 4, - "url": "https://www.manycontacts.com/", - "companyId": "manycontacts" - }, - "mapandroute.de": { - "name": "Map and Route", - "categoryId": 2, - "url": "http://www.mapandroute.de/", - "companyId": null - }, - "mapbox": { - "name": "Mapbox", - "categoryId": 2, - "url": "https://www.mapbox.com/", - "companyId": null - }, - "maploco": { - "name": "MapLoco", - "categoryId": 4, - "url": "http://www.maploco.com/", - "companyId": "maploco" - }, - "marchex": { - "name": "Marchex", - "categoryId": 4, - "url": "http://www.industrybrains.com/", - "companyId": "marchex" - }, - "marimedia": { - "name": "Marimedia", - "categoryId": 4, - "url": "http://www.marimedia.net/", - "companyId": "tremor_video" - }, - "marin_search_marketer": { - "name": "Marin Search Marketer", - "categoryId": 4, - "url": "http://www.marinsoftware.com/", - "companyId": "marin_software" - }, - "mark_+_mini": { - "name": "Mark & Mini", - "categoryId": 4, - "url": "http://www.markandmini.com/index.cfm", - "companyId": "edm_group" - }, - "market_thunder": { - "name": "Market Thunder", - "categoryId": 4, - "url": "https://www.makethunder.com/", - "companyId": "market_thunder" - }, - "marketgid": { - "name": "MarketGid", - "categoryId": 4, - "url": "http://www.mgid.com/", - "companyId": "marketgid_usa" - }, - "marketing_automation": { - "name": "Marketing Automation", - "categoryId": 4, - "url": "https://en.frodx.com", - "companyId": "frodx" - }, - "marketo": { - "name": "Marketo", - "categoryId": 4, - "url": "http://www.marketo.com/", - "companyId": "marketo" - }, - "markmonitor": { - "name": "MarkMonitor", - "categoryId": 4, - "url": "https://www.markmonitor.com/", - "companyId": "markmonitor", - "source": "AdGuard" - }, - "marktest": { - "name": "Marktest", - "categoryId": 4, - "url": "http://www.marktest.com/", - "companyId": "marktest_group" - }, - "marshadow.io": { - "name": "marshadow.io", - "categoryId": 4, - "url": null, - "companyId": null - }, - "martini_media": { - "name": "Martini Media", - "categoryId": 4, - "url": "http://martinimediainc.com/", - "companyId": "martini_media" - }, - "maru-edu": { - "name": "Maru-EDU", - "categoryId": 2, - "url": "https://www.maruedr.com", - "companyId": "maruedr" - }, - "marvellous_machine": { - "name": "Marvellous Machine", - "categoryId": 6, - "url": "https://www.marvellousmachine.net/", - "companyId": "marvellous_machine" - }, - "master_banner_network": { - "name": "Master Banner Network", - "categoryId": 4, - "url": "http://www.mbn.com.ua/", - "companyId": "master_banner_network" - }, - "mastertarget": { - "name": "MasterTarget", - "categoryId": 4, - "url": "http://mastertarget.ru/", - "companyId": "mastertarget" - }, - "matelso": { - "name": "Matelso", - "categoryId": 6, - "url": "https://www.matelso.de", - "companyId": "matelso" - }, - "mather_analytics": { - "name": "Mather Analytics", - "categoryId": 6, - "url": "https://www.mathereconomics.com/", - "companyId": "mather_economics" - }, - "mathjax.org": { - "name": "MathJax", - "categoryId": 9, - "url": "https://www.mathjax.org/", - "companyId": null - }, - "matiro": { - "name": "Matiro", - "categoryId": 6, - "url": "http://matiro.com/", - "companyId": "matiro" - }, - "matomo": { - "name": "Matomo", - "categoryId": 6, - "url": "https://matomo.org/s", - "companyId": "matomo" - }, - "matomy_market": { - "name": "Matomy Market", - "categoryId": 4, - "url": "http://www.matomymarket.com/", - "companyId": "matomy_media" - }, - "matrix": { - "name": "Matrix", - "categoryId": 5, - "url": "https://matrix.org/", - "companyId": "matrix", - "source": "AdGuard" - }, - "maxbounty": { - "name": "MaxBounty", - "categoryId": 5, - "url": "http://www.maxbounty.com/", - "companyId": "maxbounty" - }, - "maxcdn": { - "name": "MaxCDN", - "categoryId": 9, - "url": "https://www.maxcdn.com/", - "companyId": null - }, - "maxlab": { - "name": "Maxlab", - "categoryId": 4, - "url": "http://maxlab.ru", - "companyId": "maxlab" - }, - "maxmind": { - "name": "MaxMind", - "categoryId": 4, - "url": "http://www.maxmind.com/", - "companyId": "maxmind" - }, - "maxonclick_com": { - "name": "maxonclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "maxpoint_interactive": { - "name": "MaxPoint Interactive", - "categoryId": 4, - "url": "http://www.maxpointinteractive.com/", - "companyId": "maxpoint_interactive" - }, - "maxymiser": { - "name": "Oracle Maxymiser", - "categoryId": 4, - "url": "https://www.oracle.com/marketingcloud/products/testing-and-optimization/index.html", - "companyId": "oracle" - }, - "mbr_targeting": { - "name": "mbr targeting", - "categoryId": 4, - "url": "https://mbr-targeting.com/", - "companyId": "stroer" - }, - "mbuy": { - "name": "MBuy", - "categoryId": 4, - "url": "http://www.adbuyer.com/", - "companyId": "mbuy" - }, - "mcabi": { - "name": "mCabi", - "categoryId": 4, - "url": "https://mcabi.mcloudglobal.com/#", - "companyId": "mcabi" - }, - "mcafee_secure": { - "name": "McAfee Secure", - "categoryId": 5, - "url": "http://www.mcafeesecure.com/us/", - "companyId": "mcafee" - }, - "mconet": { - "name": "MCOnet", - "categoryId": 4, - "url": "http://mconet.biz/", - "companyId": "mconet" - }, - "mdotlabs": { - "name": "MdotLabs", - "categoryId": 4, - "url": "http://www.mdotlabs.com/", - "companyId": "comscore" - }, - "media-clic": { - "name": "Media-clic", - "categoryId": 4, - "url": "http://www.media-clic.com/", - "companyId": "media-click" - }, - "media-imdb.com": { - "name": "IMDB CDN", - "categoryId": 9, - "url": "https://www.imdb.com/", - "companyId": "amazon_associates" - }, - "media.net": { - "name": "Media.net", - "categoryId": 4, - "url": "http://www.media.net/", - "companyId": "media.net" - }, - "media_impact": { - "name": "Media Impact", - "categoryId": 4, - "url": "https://mediaimpact.de/index.html", - "companyId": "media_impact" - }, - "media_innovation_group": { - "name": "Xaxis", - "categoryId": 4, - "url": "https://www.xaxis.com/", - "companyId": "media_innovation_group" - }, - "media_today": { - "name": "Media Today", - "categoryId": 4, - "url": "http://mediatoday.ru/", - "companyId": "media_today" - }, - "mediaad": { - "name": "MediaAd", - "categoryId": 4, - "url": "https://mediaad.org", - "companyId": "mediaad" - }, - "mediaglu": { - "name": "MediaGlu", - "categoryId": 4, - "url": "https://www.mediaglu.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "mediahub": { - "name": "MediaHub", - "categoryId": 4, - "url": "http://www.mediahub.com/", - "companyId": "mediahub" - }, - "medialab": { - "name": "MediaLab.AI Inc.", - "categoryId": 8, - "url": "https://medialab.la/", - "companyId": "medialab", - "source": "AdGuard" - }, - "medialand": { - "name": "Medialand", - "categoryId": 4, - "url": "http://medialand.ru", - "companyId": "medialand" - }, - "medialead": { - "name": "Medialead", - "categoryId": 4, - "url": "https://www.medialead.de/", - "companyId": "the_reach_group" - }, - "mediamath": { - "name": "MediaMath", - "categoryId": 4, - "url": "http://www.mediamath.com/", - "companyId": "mediamath" - }, - "mediametrics": { - "name": "Mediametrics", - "categoryId": 7, - "url": "http://mediametrics.ru", - "companyId": "mediametrics" - }, - "median": { - "name": "Median", - "categoryId": 4, - "url": "http://median.hu", - "companyId": "median" - }, - "mediapass": { - "name": "MediaPass", - "categoryId": 4, - "url": "http://www.mediapass.com/", - "companyId": "mediapass" - }, - "mediapost_communications": { - "name": "Mediapost Communications", - "categoryId": 6, - "url": "https://vrm.mediapostcommunication.net/", - "companyId": "mediapost_communications" - }, - "mediarithmics.com": { - "name": "Mediarithmics", - "categoryId": 4, - "url": "http://www.mediarithmics.com/en/", - "companyId": "mediarithmics" - }, - "mediascope": { - "name": "Mediascope", - "categoryId": 6, - "url": "http://mediascope.net/", - "companyId": "mediascope" - }, - "mediashakers": { - "name": "MediaShakers", - "categoryId": 4, - "url": "http://www.mediashakers.com/", - "companyId": "mediashakers" - }, - "mediashift": { - "name": "MediaShift", - "categoryId": 4, - "url": "http://www.mediashift.com/", - "companyId": "mediashift" - }, - "mediator.media": { - "name": "Mediator", - "categoryId": 6, - "url": "https://mediator.media/", - "companyId": "mycom_bv" - }, - "mediav": { - "name": "MediaV", - "categoryId": 4, - "url": "https://www.mediav.com/", - "companyId": "mediav" - }, - "mediawhiz": { - "name": "Mediawhiz", - "categoryId": 4, - "url": "http://www.mediawhiz.com/", - "companyId": "matomy_media" - }, - "medigo": { - "name": "Medigo", - "categoryId": 4, - "url": "https://www.mediego.com/en/", - "companyId": "mediego" - }, - "medley": { - "name": "Medley", - "categoryId": 4, - "url": "http://medley.com/", - "companyId": "friendfinder_networks" - }, - "medyanet": { - "name": "MedyaNet", - "categoryId": 4, - "url": "http://www.medyanet.com.tr/", - "companyId": "medyanet" - }, - "meebo_bar": { - "name": "Meebo Bar", - "categoryId": 7, - "url": "http://bar.meebo.com/", - "companyId": "google" - }, - "meetrics": { - "name": "Meetrics", - "categoryId": 4, - "url": "http://www.meetrics.de/", - "companyId": "meetrics" - }, - "megaindex": { - "name": "MegaIndex", - "categoryId": 4, - "url": "http://www.megaindex.ru", - "companyId": "megaindex" - }, - "meganz": { - "name": "Mega Ltd.", - "categoryId": 8, - "url": "https://mega.io/", - "companyId": "meganz", - "source": "AdGuard" - }, - "mein-bmi.com": { - "name": "mein-bmi.com", - "categoryId": 12, - "url": "https://www.mein-bmi.com/", - "companyId": null - }, - "melissa": { - "name": "Melissa", - "categoryId": 6, - "url": "https://www.melissa.com/", - "companyId": "melissa_global_intelligence" - }, - "melt": { - "name": "Melt", - "categoryId": 4, - "url": "http://meltdsp.com/", - "companyId": "melt" - }, - "menlo": { - "name": "Menlo", - "categoryId": 4, - "url": "http://www.menlotechnologies.cn/", - "companyId": "menlotechnologies" - }, - "mentad": { - "name": "MentAd", - "categoryId": 4, - "url": "http://www.mentad.com/", - "companyId": "mentad" - }, - "mercado": { - "name": "Mercado", - "categoryId": 4, - "url": "https://www.mercadolivre.com.br/", - "companyId": "mercado_livre" - }, - "merchantadvantage": { - "name": "MerchantAdvantage", - "categoryId": 4, - "url": "http://www.merchantadvantage.com/channelmanagement.cfm", - "companyId": "merchantadvantage" - }, - "merchenta": { - "name": "Merchenta", - "categoryId": 4, - "url": "http://www.merchenta.com/", - "companyId": "merchenta" - }, - "mercury_media": { - "name": "Mercury Media", - "categoryId": 4, - "url": "http://trackingsoft.com/", - "companyId": "mercury_media" - }, - "merkle_research": { - "name": "Merkle Research", - "categoryId": 6, - "url": "http://www.dentsuaegisnetwork.com/", - "companyId": "dentsu_aegis_network" - }, - "merkle_rkg": { - "name": "Merkle RKG", - "categoryId": 6, - "url": "https://www.merkleinc.com/what-we-do/digital-agency-services/rkg-now-fully-integrated-merkle", - "companyId": "dentsu_aegis_network" - }, - "messenger.com": { - "name": "Facebook Messenger", - "categoryId": 7, - "url": "https://messenger.com", - "companyId": "facebook" - }, - "meta_network": { - "name": "Meta Network", - "categoryId": 7, - "url": "http://www.metanetwork.com/", - "companyId": "meta_network" - }, - "metaffiliation.com": { - "name": "Netaffiliation", - "categoryId": 4, - "url": "http://netaffiliation.com/", - "companyId": "kwanko" - }, - "metapeople": { - "name": "Metapeople", - "categoryId": 4, - "url": "http://www.metapeople.com/us/", - "companyId": "metapeople" - }, - "metrigo": { - "name": "Metrigo", - "categoryId": 4, - "url": "http://metrigo.com/", - "companyId": "metrigo" - }, - "metriweb": { - "name": "MetriWeb", - "categoryId": 4, - "url": "http://www.metriware.be/", - "companyId": "metriware" - }, - "miaozhen": { - "name": "Miaozhen", - "categoryId": 4, - "url": "http://miaozhen.com/en/index.html", - "companyId": "miaozhen" - }, - "microad": { - "name": "MicroAd", - "categoryId": 4, - "url": "https://www.microad.co.jp/", - "companyId": "microad" - }, - "microsoft": { - "name": "Microsoft Services", - "categoryId": 8, - "url": "http://www.microsoft.com/", - "companyId": "microsoft" - }, - "microsoft_adcenter_conversion": { - "name": "Microsoft adCenter Conversion", - "categoryId": 4, - "url": "https://adcenter.microsoft.com/", - "companyId": "microsoft" - }, - "microsoft_analytics": { - "name": "Microsoft Analytics", - "categoryId": 4, - "url": "https://adcenter.microsoft.com", - "companyId": "microsoft" - }, - "microsoft_clarity": { - "name": "Microsoft Clarity", - "categoryId": 6, - "url": "https://clarity.microsoft.com/", - "companyId": "microsoft" - }, - "mindset_media": { - "name": "Mindset Media", - "categoryId": 4, - "url": "http://www.mindset-media.com/", - "companyId": "google" - }, - "mindspark": { - "name": "Mindspark", - "categoryId": 6, - "url": "http://www.mindspark.com/", - "companyId": "iac_apps" - }, - "mindviz_tracker": { - "name": "MindViz Tracker", - "categoryId": 4, - "url": "http://mvtracker.com/", - "companyId": "mindviz" - }, - "minewhat": { - "name": "MineWhat", - "categoryId": 4, - "url": "http://www.minewhat.com", - "companyId": "minewhat" - }, - "mints_app": { - "name": "Mints App", - "categoryId": 2, - "url": "https://mintsapp.io/", - "companyId": "mints_app" - }, - "minute.ly": { - "name": "minute.ly", - "categoryId": 0, - "url": "http://minute.ly/", - "companyId": "minute.ly" - }, - "minute.ly_video": { - "name": "minute.ly video", - "categoryId": 0, - "url": "http://minute.ly/", - "companyId": "minute.ly" - }, - "mirando": { - "name": "Mirando", - "categoryId": 4, - "url": "http://mirando.de", - "companyId": "mirando" - }, - "mirtesen.ru": { - "name": "mirtesen.ru", - "categoryId": 7, - "url": "https://mirtesen.ru/", - "companyId": null - }, - "mister_bell": { - "name": "Mister Bell", - "categoryId": 4, - "url": "http://misterbell.fr/", - "companyId": "mister_bell" - }, - "mixi": { - "name": "mixi", - "categoryId": 7, - "url": "http://mixi.jp/", - "companyId": "mixi" - }, - "mixpanel": { - "name": "Mixpanel", - "categoryId": 6, - "url": "http://mixpanel.com/", - "companyId": "mixpanel" - }, - "mixpo": { - "name": "Mixpo", - "categoryId": 4, - "url": "http://dynamicvideoad.mixpo.com/", - "companyId": "mixpo" - }, - "mluvii": { - "name": "Mluvii", - "categoryId": 2, - "url": "https://www.mluvii.com", - "companyId": "mluvii" - }, - "mncdn.com": { - "name": "MediaNova CDN", - "categoryId": 9, - "url": "https://www.medianova.com/", - "companyId": null - }, - "moat": { - "name": "Moat", - "categoryId": 4, - "url": "http://www.moat.com/", - "companyId": "oracle" - }, - "mobicow": { - "name": "Mobicow", - "categoryId": 4, - "url": "http://www.mobicow.com/", - "companyId": "mobicow" - }, - "mobify": { - "name": "Mobify", - "categoryId": 4, - "url": "http://www.mobify.com/", - "companyId": "mobify" - }, - "mobtrks.com": { - "name": "mobtrks.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mocean_mobile": { - "name": "mOcean Mobile", - "categoryId": 4, - "url": "http://www.moceanmobile.com/", - "companyId": "pubmatic" - }, - "mochapp": { - "name": "MoChapp", - "categoryId": 2, - "url": "http://www.mochapp.com/", - "companyId": "mochapp" - }, - "modern_impact": { - "name": "Modern Impact", - "categoryId": 4, - "url": "http://www.modernimpact.com/", - "companyId": "modern_impact" - }, - "modernus": { - "name": "Modernus", - "categoryId": 6, - "url": "http://www.modernus.is", - "companyId": "modernus" - }, - "modulepush.com": { - "name": "modulepush.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "mogo_interactive": { - "name": "Mogo Interactive", - "categoryId": 4, - "url": "http://www.mogomarketing.com/", - "companyId": "mogo_interactive" - }, - "mokono_analytics": { - "name": "Mokono Analytics", - "categoryId": 4, - "url": "http://www.populis.com", - "companyId": "populis" - }, - "monero_miner": { - "name": "Monero Miner", - "categoryId": 8, - "url": "http://devappgrant.space/", - "companyId": null - }, - "monetate": { - "name": "Monetate", - "categoryId": 6, - "url": "http://monetate.com", - "companyId": "monetate" - }, - "monetize_me": { - "name": "Monetize Me", - "categoryId": 4, - "url": "http://www.monetize-me.com/", - "companyId": "monetize_me" - }, - "moneytizer": { - "name": "Moneytizer", - "categoryId": 4, - "url": "https://www.themoneytizer.com/", - "companyId": "the_moneytizer" - }, - "mongoose_metrics": { - "name": "Mongoose Metrics", - "categoryId": 4, - "url": "http://www.mongoosemetrics.com/", - "companyId": "mongoose_metrics" - }, - "monitis": { - "name": "Monitis", - "categoryId": 6, - "url": "http://www.monitis.com/", - "companyId": "monitis" - }, - "monitus": { - "name": "Monitus", - "categoryId": 6, - "url": "http://www.monitus.net/", - "companyId": "monitus" - }, - "monotype_gmbh": { - "name": "Monotype GmbH", - "categoryId": 9, - "url": "http://www.monotype.com/", - "companyId": "monotype" - }, - "monotype_imaging": { - "name": "Fonts.com Store", - "categoryId": 2, - "url": "https://www.fonts.com/", - "companyId": "monotype" - }, - "monsido": { - "name": "Monsido", - "categoryId": 6, - "url": "https://monsido.com/", - "companyId": "monsido" - }, - "monster_advertising": { - "name": "Monster Advertising", - "categoryId": 4, - "url": "http://www.monster.com/", - "companyId": "monster_worldwide" - }, - "mooxar": { - "name": "Mooxar", - "categoryId": 4, - "url": "http://mooxar.com/", - "companyId": "mooxar" - }, - "mopinion.com": { - "name": "Mopinion", - "categoryId": 2, - "url": "https://mopinion.com/", - "companyId": "mopinion" - }, - "mopub": { - "name": "MoPub", - "categoryId": 4, - "url": "https://www.mopub.com/", - "companyId": "twitter" - }, - "more_communication": { - "name": "More Communication", - "categoryId": 4, - "url": "http://www.more-com.co.jp/", - "companyId": "more_communication" - }, - "moreads": { - "name": "moreAds", - "categoryId": 4, - "url": "https://www.moras.jp", - "companyId": "moreads" - }, - "motigo_webstats": { - "name": "Motigo Webstats", - "categoryId": 7, - "url": "http://webstats.motigo.com/", - "companyId": "motigo" - }, - "motionpoint": { - "name": "MotionPoint", - "categoryId": 6, - "url": "http://www.motionpoint.com/", - "companyId": "motionpoint_corporation" - }, - "mouseflow": { - "name": "Mouseflow", - "categoryId": 6, - "url": "http://mouseflow.com/", - "companyId": "mouseflow" - }, - "mousestats": { - "name": "MouseStats", - "categoryId": 4, - "url": "http://www.mousestats.com/", - "companyId": "mousestats" - }, - "mousetrace": { - "name": "MouseTrace", - "categoryId": 6, - "url": "http://www.mousetrace.com/", - "companyId": "mousetrace" - }, - "mov.ad": { - "name": "Mov.ad ", - "categoryId": 8, - "url": null, - "companyId": null - }, - "movable_ink": { - "name": "Movable Ink", - "categoryId": 2, - "url": "https://movableink.com/", - "companyId": "movable_ink" - }, - "movable_media": { - "name": "Movable Media", - "categoryId": 4, - "url": "http://www.movablemedia.com/", - "companyId": "movable_media" - }, - "moz": { - "name": "Moz", - "categoryId": 8, - "url": "https://moz.com/", - "companyId": null - }, - "mozilla": { - "name": "Mozilla Foundation", - "categoryId": 8, - "url": "https://www.mozilla.org/", - "companyId": "mozilla", - "source": "AdGuard" - }, - "mozoo": { - "name": "MoZoo", - "categoryId": 4, - "url": "http://mozoo.com/", - "companyId": "mozoo" - }, - "mrp": { - "name": "MRP", - "categoryId": 4, - "url": "https://www.mrpfd.com/", - "companyId": "mrp" - }, - "mrpdata": { - "name": "MRP", - "categoryId": 6, - "url": "http://mrpdata.com/Account/Login?ReturnUrl=%2F", - "companyId": "fifth_story" - }, - "mrskincash": { - "name": "MrSkinCash", - "categoryId": 3, - "url": "http://mrskincash.com/", - "companyId": "mrskincash.com" - }, - "msedge": { - "name": "Microsoft Edge", - "categoryId": 8, - "url": "https://www.microsoft.com/en-us/edge", - "companyId": "microsoft", - "source": "AdGuard" - }, - "msn": { - "name": "Microsoft Network", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "muscula": { - "name": "Muscula", - "categoryId": 4, - "url": "https://www.universe-surf.de/", - "companyId": "universe_surf" - }, - "mux_inc": { - "name": "Mux", - "categoryId": 0, - "url": "https://mux.com/", - "companyId": "mux_inc" - }, - "mybloglog": { - "name": "MyBlogLog", - "categoryId": 7, - "url": "http://www.mybloglog.com/", - "companyId": "verizon" - }, - "mybuys": { - "name": "MyBuys", - "categoryId": 4, - "url": "http://www.mybuys.com/", - "companyId": "magnetic" - }, - "mycdn.me": { - "name": "Mail.Ru CDN", - "categoryId": 9, - "url": "https://corp.megafon.com/", - "companyId": "megafon" - }, - "mycliplister.com": { - "name": "Cliplister", - "categoryId": 2, - "url": "https://www.cliplister.com/", - "companyId": null - }, - "mycounter.ua": { - "name": "MyCounter.ua", - "categoryId": 6, - "url": "http://mycounter.ua", - "companyId": "mycounter.ua" - }, - "myfonts": { - "name": "MyFonts", - "categoryId": 6, - "url": "http://www.myfonts.com/", - "companyId": "myfonts" - }, - "myfonts_counter": { - "name": "MyFonts", - "categoryId": 6, - "url": "http://www.myfonts.com/", - "companyId": "myfonts" - }, - "mypagerank": { - "name": "MyPagerank", - "categoryId": 6, - "url": "http://www.mypagerank.net/", - "companyId": "mypagerank" - }, - "mystat": { - "name": "MyStat", - "categoryId": 7, - "url": "http://mystat.hu/", - "companyId": "myst_statistics" - }, - "mythings": { - "name": "myThings", - "categoryId": 4, - "url": "http://www.mythings.com/", - "companyId": "mythings" - }, - "mytop_counter": { - "name": "Mytop Counter", - "categoryId": 7, - "url": "http://mytop-in.net/", - "companyId": "mytop-in" - }, - "nab": { - "name": "National Australia Bank", - "categoryId": 8, - "url": "https://www.nab.com.au/", - "companyId": "nab", - "source": "AdGuard" - }, - "nakanohito.jp": { - "name": "Nakanohito", - "categoryId": 4, - "url": "http://nakanohito.jp/", - "companyId": "userinsight" - }, - "namogoo": { - "name": "Namoogoo", - "categoryId": 4, - "url": "https://www.namogoo.com/", - "companyId": null - }, - "nanigans": { - "name": "Nanigans", - "categoryId": 4, - "url": "http://www.nanigans.com/", - "companyId": "nanigans" - }, - "nano_interactive": { - "name": "Nano Interactive", - "categoryId": 4, - "url": "http://www.nanointeractive.com/home/de", - "companyId": "nano_interactive" - }, - "nanorep": { - "name": "nanoRep", - "categoryId": 2, - "url": "http://www.nanorep.com/", - "companyId": "logmein" - }, - "narando": { - "name": "Narando", - "categoryId": 0, - "url": "https://narando.com/", - "companyId": "narando" - }, - "narrativ": { - "name": "Narrativ", - "categoryId": 4, - "url": "https://narrativ.com/", - "companyId": "narrativ" - }, - "narrative_io": { - "name": "Narrative", - "categoryId": 6, - "url": "http://www.narrative.io/", - "companyId": "narrative.io" - }, - "natimatica": { - "name": "Natimatica", - "categoryId": 4, - "url": "http://natimatica.com/", - "companyId": "natimatica" - }, - "nativeads.com": { - "name": "native ads", - "categoryId": 4, - "url": "https://nativeads.com/", - "companyId": null - }, - "nativeroll": { - "name": "Nativeroll", - "categoryId": 0, - "url": "http://nativeroll.tv/", - "companyId": "native_roll" - }, - "nativo": { - "name": "Nativo", - "categoryId": 4, - "url": "http://www.nativo.net/", - "companyId": "nativo" - }, - "navegg_dmp": { - "name": "Navegg", - "categoryId": 6, - "url": "https://www.navegg.com/en/", - "companyId": "navegg" - }, - "naver.com": { - "name": "Naver", - "categoryId": 4, - "url": "https://www.naver.com/", - "companyId": "naver" - }, - "naver_search": { - "name": "Naver Search", - "categoryId": 2, - "url": "http://www.naver.com/", - "companyId": "naver" - }, - "nbc_news": { - "name": "NBC News", - "categoryId": 8, - "url": "https://www.nbcnews.com/", - "companyId": null - }, - "ncol": { - "name": "NCOL", - "categoryId": 4, - "url": "http://www.ncol.com/", - "companyId": "ncol" - }, - "needle": { - "name": "Needle", - "categoryId": 2, - "url": "http://www.needle.com", - "companyId": "needle" - }, - "nekudo.com": { - "name": "Nekudo", - "categoryId": 2, - "url": "https://nekudo.com/", - "companyId": "nekudo" - }, - "neodata": { - "name": "Neodata", - "categoryId": 4, - "url": "http://neodatagroup.com/", - "companyId": "neodata" - }, - "neory": { - "name": "NEORY ", - "categoryId": 4, - "url": "https://www.neory.com/", - "companyId": "neory" - }, - "nerfherdersolo_com": { - "name": "nerfherdersolo.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "net-metrix": { - "name": "NET-Metrix", - "categoryId": 6, - "url": "http://www.net-metrix.ch/", - "companyId": "net-metrix" - }, - "net-results": { - "name": "Net-Results", - "categoryId": 4, - "url": "http://www.net-results.com/", - "companyId": "net-results" - }, - "net_avenir": { - "name": "Net Avenir", - "categoryId": 4, - "url": "http://www.netavenir.com/", - "companyId": "net_avenir" - }, - "net_communities": { - "name": "Net Communities", - "categoryId": 4, - "url": "http://www.netcommunities.com/", - "companyId": "net_communities" - }, - "net_visibility": { - "name": "NET Visibility", - "categoryId": 4, - "url": "http://www.netvisibility.co.uk", - "companyId": "net_visibility" - }, - "netbiscuits": { - "name": "Netbiscuits", - "categoryId": 6, - "url": "http://www.netbiscuits.net/", - "companyId": "netbiscuits" - }, - "netbooster_group": { - "name": "NetBooster Group", - "categoryId": 4, - "url": "http://www.netbooster.com/", - "companyId": "netbooster_group" - }, - "netflix": { - "name": "Netflix", - "categoryId": 0, - "url": "https://www.netflix.com/", - "companyId": "netflix", - "source": "AdGuard" - }, - "netify": { - "name": "Netify", - "categoryId": 8, - "url": "https://www.netify.ai/", - "companyId": "netify", - "source": "AdGuard" - }, - "netletix": { - "name": "Netletix", - "categoryId": 4, - "url": "http://www.netletix.com//", - "companyId": "ip_de" - }, - "netminers": { - "name": "Netminers", - "categoryId": 6, - "url": "http://netminers.dk/", - "companyId": "netminers" - }, - "netmining": { - "name": "Netmining", - "categoryId": 4, - "url": "http://www.netmining.com/", - "companyId": "zeta" - }, - "netmonitor": { - "name": "NetMonitor", - "categoryId": 6, - "url": "http://www.netmanager.net/en/", - "companyId": "netmonitor" - }, - "netratings_sitecensus": { - "name": "NetRatings SiteCensus", - "categoryId": 4, - "url": "http://www.nielsen-online.com/intlpage.html", - "companyId": "nielsen" - }, - "netrk.net": { - "name": "nfxTrack", - "categoryId": 6, - "url": "https://netrk.net/", - "companyId": "netzeffekt" - }, - "netseer": { - "name": "NetSeer", - "categoryId": 4, - "url": "http://www.netseer.com/", - "companyId": "netseer" - }, - "netshelter": { - "name": "NetShelter", - "categoryId": 4, - "url": "http://www.netshelter.net/", - "companyId": "netshelter" - }, - "netsprint_audience": { - "name": "Netsprint Audience", - "categoryId": 6, - "url": "http://audience.netsprint.eu/", - "companyId": "netsprint" - }, - "networkedblogs": { - "name": "NetworkedBlogs", - "categoryId": 7, - "url": "http://w.networkedblogs.com/", - "companyId": "networkedblogs" - }, - "neustar_adadvisor": { - "name": "Neustar AdAdvisor", - "categoryId": 4, - "url": "http://www.targusinfo.com/", - "companyId": "neustar" - }, - "new_relic": { - "name": "New Relic", - "categoryId": 6, - "url": "http://newrelic.com/", - "companyId": "new_relic" - }, - "newscgp.com": { - "name": "News Connect", - "categoryId": 4, - "url": "https://newscorp.com/", - "companyId": "news_corp" - }, - "newsmax": { - "name": "Newsmax", - "categoryId": 4, - "url": "http://www.newsmax.com/", - "companyId": "newsmax" - }, - "newstogram": { - "name": "Newstogram", - "categoryId": 4, - "url": "http://www.newstogram.com/", - "companyId": "dailyme" - }, - "newsupdatedir.info": { - "name": "newsupdatedir.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "newsupdatewe.info": { - "name": "newsupdatewe.info", - "categoryId": 12, - "url": null, - "companyId": null - }, - "newtention": { - "name": "Newtention", - "categoryId": 4, - "url": "http://www.newtention.de/", - "companyId": "next_audience" - }, - "nexage": { - "name": "Nexage", - "categoryId": 4, - "url": "http://www.nexage.com/", - "companyId": "verizon" - }, - "nexeps.com": { - "name": "neXeps", - "categoryId": 4, - "url": "http://nexeps.com/", - "companyId": null - }, - "next_performance": { - "name": "Next Performance", - "categoryId": 4, - "url": "http://www.nextperformance.com/", - "companyId": "nextperf" - }, - "next_user": { - "name": "Next User", - "categoryId": 4, - "url": "https://www.nextuser.com/", - "companyId": "next_user" - }, - "nextag_roi_optimizer": { - "name": "Nextag ROI Optimizer", - "categoryId": 4, - "url": "http://www.nextag.com/", - "companyId": "nextag" - }, - "nextclick": { - "name": "Nextclick", - "categoryId": 4, - "url": "http://nextclick.pl/", - "companyId": "leadbullet" - }, - "nextstat": { - "name": "NextSTAT", - "categoryId": 6, - "url": "http://www.nextstat.com/", - "companyId": "nextstat" - }, - "neytiv": { - "name": "Neytiv", - "categoryId": 6, - "url": "http://neytiv.com/", - "companyId": "neytiv" - }, - "ngage_inc.": { - "name": "NGage INC.", - "categoryId": 6, - "url": "https://www.nginx.com/", - "companyId": "nginx" - }, - "nice264.com": { - "name": "Nice264", - "categoryId": 0, - "url": "http://nice264.com/", - "companyId": null - }, - "nimblecommerce": { - "name": "NimbleCommerce", - "categoryId": 4, - "url": "http://www.nimblecommerce.com/", - "companyId": "nimblecommerce" - }, - "nine_direct_digital": { - "name": "Nine Digital Direct", - "categoryId": 4, - "url": "https://ninedigitaldirect.com.au/", - "companyId": "nine_entertainment", - "source": "AdGuard" - }, - "ninja_access_analysis": { - "name": "Ninja Access Analysis", - "categoryId": 6, - "url": "http://www.ninja.co.jp/analysis/", - "companyId": "samurai_factory" - }, - "nirror": { - "name": "Nirror", - "categoryId": 6, - "url": "https://www.nirror.com/", - "companyId": "nirror" - }, - "nitropay": { - "name": "NitroPay", - "categoryId": 4, - "url": "https://nitropay.com/", - "companyId": "gg_software" - }, - "nk.pl_widgets": { - "name": "NK.pl Widgets", - "categoryId": 4, - "url": "http://nk.pl", - "companyId": "nk.pl" - }, - "noaa.gov": { - "name": "National Oceanic and Atmospheric Administration", - "categoryId": 8, - "url": "https://noaa.gov/", - "companyId": null - }, - "noddus": { - "name": "Noddus", - "categoryId": 4, - "url": "https://www.enterprise.noddus.com/", - "companyId": "noddus" - }, - "nolix": { - "name": "Nolix", - "categoryId": 4, - "url": "http://nolix.ru/", - "companyId": "nolix" - }, - "nonli": { - "name": "Nonli", - "categoryId": 4, - "url": "https://www.nonli.com/", - "companyId": "nonli", - "source": "AdGuard" - }, - "nonstop_consulting": { - "name": "Resolution Media", - "categoryId": 4, - "url": "https://resolutionmedia.com/", - "companyId": "resolution_media" - }, - "noop.style": { - "name": "noop.style", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nosto.com": { - "name": "nosto", - "categoryId": 6, - "url": "http://www.nosto.com/", - "companyId": null - }, - "notify": { - "name": "Notify", - "categoryId": 4, - "url": "http://notify.ag/en/", - "companyId": null - }, - "notifyfox": { - "name": "Notifyfox", - "categoryId": 6, - "url": "https://notifyfox.com/", - "companyId": "notifyfox" - }, - "notion": { - "name": "Notion", - "categoryId": 8, - "url": "https://www.notion.so/", - "companyId": "notion", - "source": "AdGuard" - }, - "now_interact": { - "name": "Now Interact", - "categoryId": 6, - "url": "http://nowinteract.com/", - "companyId": "now_interact" - }, - "npario": { - "name": "nPario", - "categoryId": 6, - "url": "http://npario.com/", - "companyId": "npario" - }, - "nplexmedia": { - "name": "nPlexMedia", - "categoryId": 4, - "url": "http://www.nplexmedia.com/", - "companyId": "nplexmedia" - }, - "nrelate": { - "name": "nRelate", - "categoryId": 2, - "url": "http://nrelate.com/", - "companyId": "iac_apps" - }, - "ns8": { - "name": "NS8", - "categoryId": 4, - "url": "https://www.ns8.com/", - "companyId": null - }, - "nt.vc": { - "name": "Next Tuesday GmbH", - "categoryId": 8, - "url": "http://www.nexttuesday.de/", - "companyId": null - }, - "ntent": { - "name": "NTENT", - "categoryId": 4, - "url": "http://www.verticalsearchworks.com", - "companyId": "ntent" - }, - "ntppool": { - "name": "Network Time Protocol", - "categoryId": 5, - "url": "https://ntp.org/", - "companyId": "network_time_foundation", - "source": "AdGuard" - }, - "nttcom_online_marketing_solutions": { - "name": "NTTCom Online Marketing Solutions", - "categoryId": 6, - "url": "http://www.digitalforest.co.jp/", - "companyId": "nttcom_online_marketing_solutions" - }, - "nuffnang": { - "name": "Nuffnang", - "categoryId": 4, - "url": "http://nuffnang.com/", - "companyId": "nuffnang" - }, - "nugg.ad": { - "name": "Nugg.Ad", - "categoryId": 4, - "url": "http://www.nugg.ad/", - "companyId": "nugg.ad" - }, - "nui_media": { - "name": "NUI Media", - "categoryId": 4, - "url": "http://adjuggler.com/", - "companyId": "nui_media" - }, - "numbers.md": { - "name": "Numbers.md", - "categoryId": 6, - "url": "https://numbers.md/", - "companyId": "numbers.md" - }, - "numerator": { - "name": "Numerator", - "categoryId": 5, - "url": "http://www.channeliq.com/", - "companyId": "numerator" - }, - "ny_times_tagx": { - "name": "NY Times TagX", - "categoryId": 6, - "url": "https://www.nytimes.com/", - "companyId": "the_new_york_times" - }, - "nyacampwk.com": { - "name": "nyacampwk.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nyetm2mkch.com": { - "name": "nyetm2mkch.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nyt.com": { - "name": "The New York Times", - "categoryId": 8, - "url": "https://www.nytimes.com/", - "companyId": "the_new_york_times" - }, - "o12zs3u2n.com": { - "name": "o12zs3u2n.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "o2.pl": { - "name": "o2.pl", - "categoryId": 8, - "url": "https://www.o2.pl/", - "companyId": "o2.pl" - }, - "o2online.de": { - "name": "o2online.de", - "categoryId": 8, - "url": "https://www.o2online.de/", - "companyId": null - }, - "oath_inc": { - "name": "Oath", - "categoryId": 8, - "url": "https://www.oath.com/", - "companyId": "verizon" - }, - "observer": { - "name": "Observer", - "categoryId": 4, - "url": "http://www.observerapp.com", - "companyId": "observer" - }, - "ocioso": { - "name": "Ocioso", - "categoryId": 7, - "url": "http://ocioso.com.br/", - "companyId": "ocioso" - }, - "oclasrv.com": { - "name": "oclasrv.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "octapi.net": { - "name": "octapi.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "octavius": { - "name": "Octavius", - "categoryId": 4, - "url": "http://octavius.rocks/", - "companyId": "octavius" - }, - "office.com": { - "name": "office.com", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "office.net": { - "name": "office.net", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "office365.com": { - "name": "office365.com", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "oghub.io": { - "name": "OG Hub", - "categoryId": 11, - "url": null, - "companyId": null - }, - "oh_my_stats": { - "name": "Oh My Stats", - "categoryId": 6, - "url": "https://ohmystats.com/", - "companyId": "oh_my_stats" - }, - "ohana_advertising_network": { - "name": "Ohana Advertising Network", - "categoryId": 4, - "url": "http://adohana.com/", - "companyId": "ohana_advertising_network" - }, - "olapic": { - "name": "Olapic", - "categoryId": 4, - "url": "https://www.olapic.com/", - "companyId": "olapic" - }, - "olark": { - "name": "Olark", - "categoryId": 2, - "url": "http://www.olark.com/", - "companyId": "olark" - }, - "olx-st.com": { - "name": "OLX", - "categoryId": 8, - "url": "http://www.olx.com/", - "companyId": null - }, - "omarsys.com": { - "name": "Omarsys", - "categoryId": 4, - "url": "http://omarsys.com/", - "companyId": "xcaliber" - }, - "ometria": { - "name": "Ometria", - "categoryId": 4, - "url": "http://www.ometria.com/", - "companyId": "ometria" - }, - "omg": { - "name": "OMG", - "categoryId": 7, - "url": "http://uk.omgpm.com/", - "companyId": "optimise_media" - }, - "omniconvert.com": { - "name": "Omniconvert", - "categoryId": 4, - "url": "https://www.omniconvert.com/", - "companyId": "omniconvert" - }, - "omniscienta": { - "name": "Omniscienta", - "categoryId": 4, - "url": "http://www.omniscienta.com/", - "companyId": null - }, - "oms": { - "name": "OMS", - "categoryId": 4, - "url": "http://oms.eu/", - "companyId": null - }, - "onaudience": { - "name": "OnAudience", - "categoryId": 4, - "url": "http://www.onaudience.com/", - "companyId": "cloud_technologies" - }, - "oneall": { - "name": "Oneall", - "categoryId": 7, - "url": "http://www.oneall.com/", - "companyId": "oneall" - }, - "onefeed": { - "name": "Onefeed", - "categoryId": 6, - "url": "http://www.onefeed.co.uk", - "companyId": "onefeed" - }, - "onesignal": { - "name": "OneSignal", - "categoryId": 5, - "url": "https://onesignal.com/", - "companyId": "onesignal" - }, - "onestat": { - "name": "OneStat", - "categoryId": 6, - "url": "http://www.onestat.com/", - "companyId": "onestat_international_b.v." - }, - "onet.pl": { - "name": "onet", - "categoryId": 8, - "url": "https://www.onet.pl/", - "companyId": null - }, - "onetag": { - "name": "OneTag", - "categoryId": 4, - "url": "https://www.onetag.com/", - "companyId": "onetag" - }, - "onetrust": { - "name": "OneTrust", - "categoryId": 5, - "url": "https://www.onetrust.com/", - "companyId": "onetrust" - }, - "onfocus.io": { - "name": "OnFocus", - "categoryId": 4, - "url": "http://onfocus.io/", - "companyId": "onfocus" - }, - "onlinewebstat": { - "name": "Onlinewebstat", - "categoryId": 6, - "url": "http://www.onlinewebstats.com/index.php?lang=en", - "companyId": "onlinewebstat" - }, - "onswipe": { - "name": "Onswipe", - "categoryId": 4, - "url": "http://www.onswipe.com/", - "companyId": "onswipe" - }, - "onthe.io": { - "name": "OnThe.io", - "categoryId": 6, - "url": "https://t.onthe.io/media", - "companyId": "onthe.io" - }, - "ontraport_autopilot": { - "name": "Ontraport Autopilot", - "categoryId": 4, - "url": "http://www.moon-ray.com/", - "companyId": "ontraport" - }, - "ooyala.com": { - "name": "Ooyala Player", - "categoryId": 0, - "url": "https://www.ooyala.com/", - "companyId": "telstra" - }, - "ooyala_analytics": { - "name": "Ooyala Analytics", - "categoryId": 6, - "url": "https://www.telstraglobal.com/", - "companyId": "telstra" - }, - "open_adexchange": { - "name": "Open AdExchange", - "categoryId": 4, - "url": "http://openadex.dk/", - "companyId": "open_adexchange" - }, - "open_adstream": { - "name": "Open Adstream", - "categoryId": 4, - "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", - "companyId": "microsoft", - "source": "AdGuard" - }, - "open_share_count": { - "name": "Open Share Count", - "categoryId": 4, - "url": "http://opensharecount.com/", - "companyId": "open_share_count" - }, - "openai": { - "name": "OpenAI", - "categoryId": 8, - "url": "https://openai.com/", - "companyId": "openai", - "source": "AdGuard" - }, - "openload": { - "name": "Openload", - "categoryId": 9, - "url": "https://openload.co/", - "companyId": null - }, - "openstat": { - "name": "OpenStat", - "categoryId": 6, - "url": "https://www.openstat.ru/", - "companyId": "openstat" - }, - "opentracker": { - "name": "Opentracker", - "categoryId": 6, - "url": "http://www.opentracker.net/", - "companyId": "opentracker" - }, - "openwebanalytics": { - "name": "Open Web Analytics", - "categoryId": 6, - "url": "http://www.openwebanalytics.com/", - "companyId": "open_web_analytics" - }, - "openx": { - "name": "OpenX", - "categoryId": 4, - "url": "https://www.openx.com", - "companyId": "openx" - }, - "operative_media": { - "name": "Operative Media", - "categoryId": 4, - "url": "http://www.operative.com/", - "companyId": "operative_media" - }, - "opinary": { - "name": "Opinary", - "categoryId": 2, - "url": "http://opinary.com/", - "companyId": "opinary" - }, - "opinionbar": { - "name": "OpinionBar", - "categoryId": 2, - "url": "http://www.metrixlab.com", - "companyId": "metrixlab" - }, - "oplytic": { - "name": "Oplytic", - "categoryId": 6, - "url": "http://www.oplytic.com", - "companyId": "oplytic" - }, - "oppo": { - "name": "OPPO", - "categoryId": 101, - "url": "https://www.oppo.com/", - "companyId": "bbk", - "source": "AdGuard" - }, - "opta.net": { - "name": "Opta", - "categoryId": 6, - "url": "http://www.optasports.de/", - "companyId": "opta_sports" - }, - "optaim": { - "name": "OptAim", - "categoryId": 4, - "url": "http://optaim.com/", - "companyId": "optaim" - }, - "optanaon": { - "name": "Optanaon by OneTrust", - "categoryId": 5, - "url": "https://www.cookielaw.org/", - "companyId": "onetrust" - }, - "optify": { - "name": "Optify", - "categoryId": 4, - "url": "http://www.optify.net", - "companyId": "optify" - }, - "optimatic": { - "name": "Optimatic", - "categoryId": 0, - "url": "http://www.optimatic.com/", - "companyId": "optimatic" - }, - "optimax_media_delivery": { - "name": "Optimax Media Delivery", - "categoryId": 4, - "url": "http://optmd.com/", - "companyId": "optimax_media_delivery" - }, - "optimicdn.com": { - "name": "OptimiCDN", - "categoryId": 9, - "url": "https://en.optimicdn.com/", - "companyId": null - }, - "optimizely": { - "name": "Optimizely", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_error_log": { - "name": "Optimizely Error Log", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_geo_targeting": { - "name": "Optimizely Geographical Targeting", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_logging": { - "name": "Optimizely Logging", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimonk": { - "name": "Optimonk", - "categoryId": 6, - "url": "https://www.optimonk.com/", - "companyId": "optimonk" - }, - "optinmonster": { - "name": "OptInMonster", - "categoryId": 2, - "url": "https://optinmonster.com/", - "companyId": "optinmonster" - }, - "optinproject.com": { - "name": "OptinProject", - "categoryId": 4, - "url": "https://www.optincollect.com/en", - "companyId": "optincollect" - }, - "optomaton": { - "name": "Optomaton", - "categoryId": 4, - "url": "http://www.optomaton.com/", - "companyId": "ve" - }, - "ora.tv": { - "name": "Ora.TV", - "categoryId": 4, - "url": "http://www.ora.tv/", - "companyId": "ora.tv" - }, - "oracle_infinity": { - "name": "Oracle Infinity Behavioral Intelligence", - "categoryId": 6, - "url": "https://www.oracle.com/au/cx/marketing/digital-intelligence/", - "companyId": "oracle", - "source": "AdGuard" - }, - "oracle_live_help": { - "name": "Oracle Live Help", - "categoryId": 2, - "url": "http://www.oracle.com/us/products/applications/atg/live-help-on-demand/index.html", - "companyId": "oracle" - }, - "oracle_rightnow": { - "name": "Oracle RightNow", - "categoryId": 8, - "url": "http://www.oracle.com/", - "companyId": "oracle" - }, - "orange": { - "name": "Orange", - "categoryId": 4, - "url": "http://www.orange.co.uk/", - "companyId": "orange_mobile" - }, - "orange142": { - "name": "Orange142", - "categoryId": 4, - "url": "http://www.orange142.com/", - "companyId": "orange142" - }, - "orange_france": { - "name": "Orange France", - "categoryId": 8, - "url": "https://www.orange.fr/", - "companyId": "orange_france" - }, - "orangesoda": { - "name": "OrangeSoda", - "categoryId": 4, - "url": "http://www.orangesoda.com/", - "companyId": "orangesoda" - }, - "orc_international": { - "name": "ORC International", - "categoryId": 4, - "url": "https://orcinternational.com/", - "companyId": "engine_group" - }, - "order_groove": { - "name": "Order Groove", - "categoryId": 4, - "url": "http://ordergroove.com/", - "companyId": "order_groove" - }, - "orel_site": { - "name": "Orel Site", - "categoryId": 2, - "url": "https://www.orelsite.ru/", - "companyId": "orel_site" - }, - "otclick": { - "name": "otClick", - "categoryId": 4, - "url": "http://otclick-adv.ru/", - "companyId": "otclick" - }, - "othersearch.info": { - "name": "FlowSurf", - "categoryId": 8, - "url": null, - "companyId": null - }, - "otm-r.com": { - "name": "OTM", - "categoryId": 4, - "url": "http://otm-r.com/", - "companyId": null - }, - "otto.de": { - "name": "Otto Group", - "categoryId": 8, - "url": null, - "companyId": null - }, - "outbrain": { - "name": "Outbrain", - "categoryId": 4, - "url": "https://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_amplify": { - "name": "Outbrain Amplify", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_analytics": { - "name": "Outbrain Analytics", - "categoryId": 6, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_logger": { - "name": "Outbrain Logger", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_pixel": { - "name": "Outbrain Pixel", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_utilities": { - "name": "Outbrain Utilities", - "categoryId": 6, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_widgets": { - "name": "Outbrain Widgets", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outlook": { - "name": "Microsoft Outlook", - "categoryId": 13, - "url": "https://outlook.live.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "overheat.it": { - "name": "overheat", - "categoryId": 6, - "url": "https://overheat.io/", - "companyId": null - }, - "owa": { - "name": "OWA", - "categoryId": 6, - "url": "http://oewa.at/", - "companyId": "the_austrian_web_analysis" - }, - "owneriq": { - "name": "OwnerIQ", - "categoryId": 4, - "url": "http://www.owneriq.com/", - "companyId": "owneriq" - }, - "ownpage": { - "name": "Ownpage", - "categoryId": 2, - "url": "http://www.ownpage.fr/index.en.html", - "companyId": null - }, - "owox.com": { - "name": "OWOX", - "categoryId": 6, - "url": "https://www.owox.com/", - "companyId": "owox_inc" - }, - "oxamedia": { - "name": "OxaMedia", - "categoryId": 2, - "url": "http://www.oxamedia.com/", - "companyId": "oxamedia" - }, - "oxomi.com": { - "name": "Oxomi", - "categoryId": 4, - "url": "https://oxomi.com/", - "companyId": null - }, - "oztam": { - "name": "OzTAM", - "categoryId": 8, - "url": "https://oztam.com.au/", - "companyId": "oztam", - "source": "AdGuard" - }, - "pageanalytics.space": { - "name": "pageanalytics.space", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pagefair": { - "name": "PageFair", - "categoryId": 2, - "url": "https://pagefair.com/", - "companyId": "blockthrough" - }, - "pagescience": { - "name": "PageScience", - "categoryId": 4, - "url": "http://www.precisionhealthmedia.com/index.html", - "companyId": "pagescience" - }, - "paid-to-promote": { - "name": "Paid-To-Promote", - "categoryId": 4, - "url": "http://www.paid-to-promote.net/", - "companyId": "paid-to-promote" - }, - "paperg": { - "name": "PaperG", - "categoryId": 4, - "url": "http://www.paperg.com/", - "companyId": "paperg" - }, - "pardot": { - "name": "Pardot", - "categoryId": 6, - "url": "http://www.pardot.com/", - "companyId": "pardot" - }, - "parsely": { - "name": "Parse.ly", - "categoryId": 6, - "url": "https://www.parse.ly/", - "companyId": "parse.ly" - }, - "partner-ads": { - "name": "Partner-Ads", - "categoryId": 4, - "url": "http://www.partner-ads.com/", - "companyId": "partner-ads" - }, - "passionfruit": { - "name": "Passionfruit", - "categoryId": 4, - "url": "http://passionfruitads.com/", - "companyId": "passionfruit" - }, - "pathful": { - "name": "Pathful", - "categoryId": 6, - "url": "http://www.pathful.com/", - "companyId": "pathful" - }, - "pay-hit": { - "name": "Pay-Hit", - "categoryId": 4, - "url": "http://pay-hit.com/", - "companyId": "pay-hit" - }, - "payclick": { - "name": "PayClick", - "categoryId": 4, - "url": "http://payclick.it/", - "companyId": "payclick" - }, - "paykickstart": { - "name": "PayKickstart", - "categoryId": 6, - "url": "https://paykickstart.com/", - "companyId": "paykickstart" - }, - "paypal": { - "name": "PayPal", - "categoryId": 2, - "url": "https://www.paypal.com", - "companyId": "ebay" - }, - "pcvark.com": { - "name": "pcvark.com", - "categoryId": 11, - "url": "https://pcvark.com/", - "companyId": null - }, - "peer39": { - "name": "Peer39", - "categoryId": 4, - "url": "http://www.peer39.com/", - "companyId": "peer39" - }, - "peer5.com": { - "name": "Peer5", - "categoryId": 9, - "url": "https://www.peer5.com/", - "companyId": "peer5" - }, - "peerius": { - "name": "Peerius", - "categoryId": 2, - "url": "http://www.peerius.com/", - "companyId": "peerius" - }, - "pendo.io": { - "name": "pendo", - "categoryId": 6, - "url": "https://www.pendo.io/", - "companyId": null - }, - "pepper.com": { - "name": "Pepper", - "categoryId": 4, - "url": "https://www.pepper.com/", - "companyId": "6minutes" - }, - "pepperjam": { - "name": "Pepperjam", - "categoryId": 4, - "url": "http://www.pepperjam.com", - "companyId": "pepperjam" - }, - "pepsia": { - "name": "Pepsia", - "categoryId": 6, - "url": "http://pepsia.com/en/", - "companyId": "pepsia" - }, - "perfdrive.com": { - "name": "perfdrive.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "perfect_audience": { - "name": "Perfect Audience", - "categoryId": 4, - "url": "https://www.perfectaudience.com/", - "companyId": "perfect_audience" - }, - "perfect_market": { - "name": "Perfect Market", - "categoryId": 4, - "url": "http://perfectmarket.com/", - "companyId": "perfect_market" - }, - "perfops": { - "name": "PerfOps", - "categoryId": 6, - "url": "https://perfops.net/", - "companyId": "perfops", - "source": "AdGuard" - }, - "perform_group": { - "name": "Perform Group", - "categoryId": 5, - "url": "http://www.performgroup.co.uk/", - "companyId": "perform_group" - }, - "performable": { - "name": "Performable", - "categoryId": 6, - "url": "http://www.performable.com/", - "companyId": "hubspot" - }, - "performancing_metrics": { - "name": "Performancing Metrics", - "categoryId": 6, - "url": "http://pmetrics.performancing.com", - "companyId": "performancing" - }, - "performax": { - "name": "Performax", - "categoryId": 4, - "url": "https://www.performax.cz/", - "companyId": "performax" - }, - "perimeterx.net": { - "name": "Perimeterx", - "categoryId": 6, - "url": "https://www.perimeterx.com/", - "companyId": null - }, - "permutive": { - "name": "Permutive", - "categoryId": 4, - "url": "http://permutive.com/", - "companyId": "permutive" - }, - "persgroep": { - "name": "De Persgroep", - "categoryId": 4, - "url": "https://www.persgroep.be/", - "companyId": "de_persgroep" - }, - "persianstat": { - "name": "PersianStat", - "categoryId": 6, - "url": "http://www.persianstat.com", - "companyId": "persianstat" - }, - "persio": { - "name": "Persio", - "categoryId": 4, - "url": "http://www.pers.io/", - "companyId": "pers.io" - }, - "personyze": { - "name": "Personyze", - "categoryId": 2, - "url": "http://personyze.com/", - "companyId": "personyze" - }, - "petametrics": { - "name": "LiftIgniter", - "categoryId": 2, - "url": "https://www.liftigniter.com/", - "companyId": "liftigniter" - }, - "pheedo": { - "name": "Pheedo", - "categoryId": 4, - "url": "http://pheedo.com/", - "companyId": "pheedo" - }, - "phonalytics": { - "name": "Phonalytics", - "categoryId": 2, - "url": "http://www.phonalytics.com/", - "companyId": "phonalytics" - }, - "phunware": { - "name": "Phunware", - "categoryId": 4, - "url": "https://www.phunware.com", - "companyId": "phunware" - }, - "piguiqproxy.com": { - "name": "piguiqproxy.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pilot": { - "name": "Pilot", - "categoryId": 6, - "url": "http://www.pilot.de/en/home.html", - "companyId": "pilot_gmbh" - }, - "pingdom": { - "name": "Pingdom", - "categoryId": 6, - "url": "https://www.pingdom.com/", - "companyId": "pingdom" - }, - "pinterest": { - "name": "Pinterest", - "categoryId": 7, - "url": "http://pinterest.com/", - "companyId": "pinterest" - }, - "pinterest_conversion_tracker": { - "name": "Pinterest Conversion Tracker", - "categoryId": 6, - "url": "http://pinterest.com/", - "companyId": "pinterest" - }, - "pipz": { - "name": "Pipz", - "categoryId": 4, - "url": "https://pipz.com/br/", - "companyId": "pipz_automation" - }, - "piwik": { - "name": "Tombstone (Matomo/Piwik before the split)", - "categoryId": 6, - "url": "http://piwik.org/", - "companyId": "matomo" - }, - "piwik_pro_analytics_suite": { - "name": "Piwik PRO Analytics Suite", - "categoryId": 6, - "url": "https://piwik.pro/", - "companyId": "piwik_pro" - }, - "pixalate": { - "name": "Pixalate", - "categoryId": 4, - "url": "http://www.pixalate.com/", - "companyId": "pixalate" - }, - "pixel_union": { - "name": "Pixel Union", - "categoryId": 4, - "url": "https://www.pixelunion.net/", - "companyId": "pixel_union" - }, - "pixfuture": { - "name": "PixFuture", - "categoryId": 4, - "url": "http://www.pixfuture.com", - "companyId": "pixfuture" - }, - "piximedia": { - "name": "Piximedia", - "categoryId": 4, - "url": "http://www.piximedia.com/piximedia?en", - "companyId": "piximedia" - }, - "pizzaandads_com": { - "name": "pizzaandads.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "placester": { - "name": "Placester", - "categoryId": 4, - "url": "https://placester.com/", - "companyId": "placester" - }, - "pladform.ru": { - "name": "Pladform", - "categoryId": 4, - "url": "https://distribution.pladform.ru/", - "companyId": "pladform" - }, - "plan.net_experience_cloud": { - "name": "Plan.net Experience Cloud", - "categoryId": 6, - "url": "https://www.serviceplan.com/", - "companyId": "serviceplan" - }, - "platform360": { - "name": "Platform360", - "categoryId": 4, - "url": "http://www.platform360.co/#home", - "companyId": null - }, - "platformone": { - "name": "Platform One", - "categoryId": 4, - "url": "https://www.platform-one.co.jp/", - "companyId": "daconsortium" - }, - "play_by_mamba": { - "name": "Play by Mamba", - "categoryId": 4, - "url": "http://play.mamba.ru/", - "companyId": "mamba" - }, - "playbuzz.com": { - "name": "Playbuzz", - "categoryId": 2, - "url": "https://www.playbuzz.com/", - "companyId": "playbuzz" - }, - "plenty_of_fish": { - "name": "Plenty Of Fish", - "categoryId": 6, - "url": "http://www.pof.com/", - "companyId": "plentyoffish" - }, - "plex": { - "name": "Plex", - "categoryId": 0, - "url": "https://www.plex.tv/", - "companyId": "plex", - "source": "AdGuard" - }, - "plex_metrics": { - "name": "Plex Metrics", - "categoryId": 6, - "url": "https://www.plex.tv/", - "companyId": "plex" - }, - "plista": { - "name": "Plista", - "categoryId": 4, - "url": "http://www.plista.com", - "companyId": "plista" - }, - "plugrush": { - "name": "PlugRush", - "categoryId": 4, - "url": "http://www.plugrush.com/", - "companyId": "plugrush" - }, - "pluso.ru": { - "name": "Pluso", - "categoryId": 7, - "url": "https://share.pluso.ru/", - "companyId": "pluso" - }, - "plutusads": { - "name": "Plutusads", - "categoryId": 4, - "url": "http://plutusads.com", - "companyId": "plutusads" - }, - "pmddby.com": { - "name": "pmddby.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "pnamic.com": { - "name": "pnamic.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "po.st": { - "name": "Po.st", - "categoryId": 7, - "url": "https://www.po.st/", - "companyId": "rythmone" - }, - "pocket": { - "name": "Pocket", - "categoryId": 6, - "url": "http://getpocket.com/", - "companyId": "pocket" - }, - "pocketcents": { - "name": "PocketCents", - "categoryId": 4, - "url": "http://pocketcents.com/", - "companyId": "pocketcents" - }, - "pointific": { - "name": "Pointific", - "categoryId": 6, - "url": "http://www.pontiflex.com/", - "companyId": "pontiflex" - }, - "pointroll": { - "name": "PointRoll", - "categoryId": 4, - "url": "http://www.pointroll.com/", - "companyId": "gannett_digital_media_network" - }, - "poirreleast.club": { - "name": "poirreleast.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "polar.me": { - "name": "Polar", - "categoryId": 4, - "url": "https://polar.me/", - "companyId": "polar_inc" - }, - "polldaddy": { - "name": "Polldaddy", - "categoryId": 2, - "url": "http://polldaddy.com/", - "companyId": "automattic" - }, - "polyad": { - "name": "PolyAd", - "categoryId": 4, - "url": "http://polyad.net", - "companyId": "polyad" - }, - "polyfill.io": { - "name": "Polyfill", - "categoryId": 8, - "url": "https://polyfill.io/", - "companyId": "polyfill.io" - }, - "popads": { - "name": "PopAds", - "categoryId": 4, - "url": "https://www.popads.net/", - "companyId": "popads" - }, - "popcash": { - "name": "Popcash", - "categoryId": 4, - "url": "http://popcash.net/", - "companyId": "popcash_network" - }, - "popcorn_metrics": { - "name": "Popcorn Metrics", - "categoryId": 6, - "url": "https://www.popcornmetrics.com/", - "companyId": "popcorn_metrics" - }, - "popin.cc": { - "name": "popIn", - "categoryId": 7, - "url": "https://www.popin.cc/", - "companyId": "popin" - }, - "popmyads": { - "name": "PopMyAds", - "categoryId": 4, - "url": "http://popmyads.com/", - "companyId": "popmyads" - }, - "poponclick": { - "name": "PopOnClick", - "categoryId": 4, - "url": "http://poponclick.com", - "companyId": "poponclick" - }, - "populis": { - "name": "Populis", - "categoryId": 4, - "url": "http://www.populis.com", - "companyId": "populis" - }, - "pornhub": { - "name": "PornHub", - "categoryId": 3, - "url": "https://www.pornhub.com/", - "companyId": "pornhub" - }, - "pornwave": { - "name": "Pornwave", - "categoryId": 3, - "url": "http://pornwave.com", - "companyId": "pornwave.com" - }, - "porta_brazil": { - "name": "Porta Brazil", - "categoryId": 4, - "url": "http://brasil.gov.br/", - "companyId": "portal_brazil" - }, - "post_affiliate_pro": { - "name": "Post Affiliate Pro", - "categoryId": 4, - "url": "http://www.qualityunit.com/", - "companyId": "qualityunit" - }, - "powerlinks": { - "name": "PowerLinks", - "categoryId": 4, - "url": "http://www.powerlinks.com/", - "companyId": "powerlinks" - }, - "powerreviews": { - "name": "PowerReviews", - "categoryId": 2, - "url": "http://www.powerreviews.com/", - "companyId": "powerreviews" - }, - "powr.io": { - "name": "POWr", - "categoryId": 6, - "url": "https://www.powr.io/", - "companyId": "powr" - }, - "pozvonim": { - "name": "Pozvonim", - "categoryId": 4, - "url": "https://pozvonim.com/", - "companyId": "pozvonim" - }, - "prebid": { - "name": "Prebid", - "categoryId": 4, - "url": "http://prebid.org/", - "companyId": null - }, - "precisionclick": { - "name": "PrecisionClick", - "categoryId": 4, - "url": "http://www.precisionclick.com/", - "companyId": "precisionclick" - }, - "predicta": { - "name": "Predicta", - "categoryId": 4, - "url": "http://predicta.com.br/", - "companyId": "predicta" - }, - "premonix": { - "name": "Premonix", - "categoryId": 4, - "url": "http://www.premonix.com/", - "companyId": "premonix" - }, - "press": { - "name": "Press+", - "categoryId": 4, - "url": "http://www.mypressplus.com/", - "companyId": "press+" - }, - "pressly": { - "name": "Pressly", - "categoryId": 4, - "url": "https://www.pressly.com/", - "companyId": "pressly" - }, - "pricegrabber": { - "name": "PriceGrabber", - "categoryId": 4, - "url": "http://www.pricegrabber.com", - "companyId": "pricegrabber" - }, - "pricespider": { - "name": "Pricespider", - "categoryId": 4, - "url": "http://www.pricespider.com/", - "companyId": "price_spider" - }, - "prismamediadigital.com": { - "name": "Prisma Media Digital", - "categoryId": 4, - "url": "http://www.pmdrecrute.com/", - "companyId": "prisma_media_digital" - }, - "privy.com": { - "name": "Privy", - "categoryId": 2, - "url": "https://privy.com/", - "companyId": "privy" - }, - "proclivity": { - "name": "Proclivity", - "categoryId": 4, - "url": "http://www.proclivitysystems.com/", - "companyId": "proclivity_media" - }, - "prodperfect": { - "name": "ProdPerfect", - "categoryId": 6, - "url": "https://prodperfect.com/", - "companyId": "prodperfect" - }, - "productsup": { - "name": "ProductsUp", - "categoryId": 4, - "url": "https://productsup.io/", - "companyId": "productsup" - }, - "profiliad": { - "name": "Profiliad", - "categoryId": 6, - "url": "http://profiliad.com/", - "companyId": "profiliad" - }, - "profitshare": { - "name": "Profitshare", - "categoryId": 6, - "url": "https://profitshare.ro/", - "companyId": "profitshare" - }, - "proformics": { - "name": "Proformics", - "categoryId": 6, - "url": "http://proformics.com/", - "companyId": "proformics_digital" - }, - "programattik": { - "name": "Programattik", - "categoryId": 4, - "url": "http://www.programattik.com/", - "companyId": "ttnet" - }, - "project_wonderful": { - "name": "Project Wonderful", - "categoryId": 4, - "url": "http://www.projectwonderful.com/", - "companyId": "project_wonderful" - }, - "propel_marketing": { - "name": "Propel Marketing", - "categoryId": 4, - "url": "http://propelmarketing.com/", - "companyId": "propel_marketing" - }, - "propeller_ads": { - "name": "Propeller Ads", - "categoryId": 4, - "url": "http://www.propellerads.com/", - "companyId": "propeller_ads" - }, - "propermedia": { - "name": "Proper Media", - "categoryId": 4, - "url": "https://proper.io/", - "companyId": "propermedia" - }, - "props": { - "name": "Props", - "categoryId": 4, - "url": "http://props.id/", - "companyId": "props" - }, - "propvideo_net": { - "name": "propvideo.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "prospecteye": { - "name": "ProspectEye", - "categoryId": 4, - "url": "https://www.prospecteye.com/", - "companyId": "prospecteye" - }, - "prosperent": { - "name": "Prosperent", - "categoryId": 4, - "url": "http://prosperent.com", - "companyId": "prosperent" - }, - "prostor": { - "name": "Prostor", - "categoryId": 4, - "url": "http://prostor-lite.ru/", - "companyId": "prostor" - }, - "provide_support": { - "name": "Provide Support", - "categoryId": 2, - "url": "http://www.providesupport.com/", - "companyId": "provide_support" - }, - "proximic": { - "name": "Proximic", - "categoryId": 4, - "url": "http://www.proximic.com/", - "companyId": "proximic" - }, - "proxistore.com": { - "name": "Proxistore", - "categoryId": 4, - "url": "https://www.proxistore.com/", - "companyId": "proxistore" - }, - "pscp.tv": { - "name": "Periscope", - "categoryId": 7, - "url": "https://www.pscp.tv/", - "companyId": "periscope" - }, - "pstatic.net": { - "name": "Naver CDN", - "categoryId": 9, - "url": "https://www.naver.com/", - "companyId": "naver" - }, - "psyma": { - "name": "Psyma", - "categoryId": 4, - "url": "http://www.psyma.com/", - "companyId": "psyma" - }, - "pt_engine": { - "name": "Pt engine", - "categoryId": 6, - "url": "http://www.ptengine.jp/", - "companyId": "pt_engine" - }, - "pub-fit": { - "name": "Pub-Fit", - "categoryId": 4, - "url": "http://www.pub-fit.com/", - "companyId": "pub-fit" - }, - "pub.network": { - "name": "pub.network", - "categoryId": 4, - "url": null, - "companyId": null - }, - "pubble": { - "name": "Pubble", - "categoryId": 2, - "url": "http://www.pubble.co/", - "companyId": "pubble" - }, - "pubdirecte": { - "name": "Pubdirecte", - "categoryId": 4, - "url": "http://www.pubdirecte.com/", - "companyId": "pubdirecte" - }, - "pubgears": { - "name": "PubGears", - "categoryId": 4, - "url": "http://pubgears.com/", - "companyId": "pubgears" - }, - "public_ideas": { - "name": "Public Ideas", - "categoryId": 4, - "url": "http://www.publicidees.co.uk/", - "companyId": "public-idees" - }, - "publicidad.net": { - "name": "Publicidad.net", - "categoryId": 4, - "url": "http://www.en.publicidad.net/", - "companyId": "publicidad.net" - }, - "publir": { - "name": "Publir", - "categoryId": 4, - "url": "http://www.publir.com", - "companyId": "publir" - }, - "pubmatic": { - "name": "PubMatic", - "categoryId": 4, - "url": "http://www.pubmatic.com/", - "companyId": "pubmatic" - }, - "pubnub.com": { - "name": "PubNub", - "categoryId": 8, - "url": "https://www.pubnub.com/", - "companyId": null - }, - "puboclic": { - "name": "Puboclic", - "categoryId": 4, - "url": "http://www.puboclic.com/", - "companyId": "puboclic" - }, - "pulpix.com": { - "name": "Pulpix", - "categoryId": 4, - "url": "https://www.pulpix.com/", - "companyId": "adyoulike" - }, - "pulpo_media": { - "name": "Pulpo Media", - "categoryId": 4, - "url": "http://www.pulpomedia.com/home.html", - "companyId": "pulpo_media" - }, - "pulse360": { - "name": "Pulse360", - "categoryId": 4, - "url": "http://www.pulse360.com", - "companyId": "pulse360" - }, - "pulse_insights": { - "name": "Pulse Insights", - "categoryId": 6, - "url": "http://pulseinsights.com/", - "companyId": "pulse_insights" - }, - "pulsepoint": { - "name": "PulsePoint", - "categoryId": 4, - "url": "http://www.contextweb.com/", - "companyId": "pulsepoint_ad_exchange" - }, - "punchtab": { - "name": "PunchTab", - "categoryId": 4, - "url": "http://www.punchtab.com/", - "companyId": "punchtab" - }, - "purch": { - "name": "Purch", - "categoryId": 4, - "url": "http://www.purch.com/", - "companyId": "purch" - }, - "pure_chat": { - "name": "Pure Chat", - "categoryId": 2, - "url": "https://www.purechat.com", - "companyId": "pure_chat" - }, - "pureprofile": { - "name": "Pureprofile", - "categoryId": 6, - "url": "https://www.pureprofile.com/us/", - "companyId": "pureprofile" - }, - "purlive": { - "name": "PurLive", - "categoryId": 4, - "url": "http://www.purlive.com/", - "companyId": "purlive" - }, - "puserving.com": { - "name": "puserving.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "push.world": { - "name": "Push.world", - "categoryId": 2, - "url": "https://push.world/en", - "companyId": "push.world" - }, - "push_engage": { - "name": "Push Engage", - "categoryId": 2, - "url": "https://www.pushengage.com/", - "companyId": "push_engage" - }, - "pushame.com": { - "name": "pushame.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushbullet": { - "name": "Pushbullet", - "categoryId": 2, - "url": "https://www.pushbullet.com/", - "companyId": "pushbullet" - }, - "pushcrew": { - "name": "VWO Engage", - "categoryId": 2, - "url": "https://vwo.com/engage/", - "companyId": "wingify" - }, - "pusher.com": { - "name": "Pusher", - "categoryId": 6, - "url": "https://pusher.com/", - "companyId": null - }, - "pushnative.com": { - "name": "pushnative.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushnews": { - "name": "Pushnews", - "categoryId": 4, - "url": "https://www.pushnews.eu/", - "companyId": "pushnews" - }, - "pushno.com": { - "name": "pushno.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushwhy.com": { - "name": "pushwhy.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushwoosh.com": { - "name": "Pushwoosh", - "categoryId": 2, - "url": "https://www.pushwoosh.com/", - "companyId": "pushwoosh" - }, - "pvclouds.com": { - "name": "pvclouds.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "q1media": { - "name": "Q1Media", - "categoryId": 4, - "url": "http://q1media.com/", - "companyId": "q1media" - }, - "q_division": { - "name": "Q-Division", - "categoryId": 4, - "url": "https://q-division.de/", - "companyId": null - }, - "qbaka": { - "name": "Qbaka", - "categoryId": 6, - "url": "https://qbaka.com/", - "companyId": "qbaka" - }, - "qcri_analytics": { - "name": "QCRI Analytics", - "categoryId": 6, - "url": "http://qcri.org/", - "companyId": "qatar_computing_research_institute" - }, - "qeado": { - "name": "Qeado", - "categoryId": 6, - "url": "https://www.qeado.com/", - "companyId": "qeado" - }, - "qihoo_360": { - "name": "Qihoo 360", - "categoryId": 6, - "url": "https://www.360totalsecurity.com/en/", - "companyId": "qihoo_360_technology" - }, - "qq.com": { - "name": "QQ International", - "categoryId": 2, - "url": "https://www.qq.com/", - "companyId": "tencent", - "source": "AdGuard" - }, - "qrius": { - "name": "Qrius", - "categoryId": 7, - "url": "http://www.qrius.me/", - "companyId": "mediafed" - }, - "qualaroo": { - "name": "Qualaroo", - "categoryId": 6, - "url": null, - "companyId": null - }, - "qualcomm": { - "name": "Qualcomm", - "categoryId": 8, - "url": "https://www.qualcomm.com/", - "companyId": "qualcomm", - "source": "AdGuard" - }, - "qualcomm_location_service": { - "name": "Qualcomm Location Service", - "categoryId": 15, - "url": "https://www.qualcomm.com/site/privacy/services", - "companyId": "qualcomm", - "source": "AdGuard" - }, - "qualia": { - "name": "Qualia", - "categoryId": 4, - "url": "http://www.bluecava.com/", - "companyId": "qualia" - }, - "qualtrics": { - "name": "Qualtrics", - "categoryId": 6, - "url": "http://www.qualtrics.com/", - "companyId": "qualtrics" - }, - "quantcast": { - "name": "Quantcast", - "categoryId": 4, - "url": "http://www.quantcast.com/", - "companyId": "quantcast" - }, - "quantcount": { - "name": "Quantcount", - "categoryId": 6, - "url": "http://www.quantcast.com", - "companyId": "quantcast" - }, - "quantum_metric": { - "name": "Quantum Metric", - "categoryId": 6, - "url": "https://www.quantummetric.com/", - "companyId": "quantum_metric" - }, - "quartic.pl": { - "name": "Quartic", - "categoryId": 6, - "url": "https://www.quarticon.com/", - "companyId": "quarticon" - }, - "qubit": { - "name": "Qubit Opentag", - "categoryId": 6, - "url": "http://www.qubit.com/", - "companyId": "qubit" - }, - "questback": { - "name": "Questback", - "categoryId": 2, - "url": "http://www1.questback.com/", - "companyId": "questback" - }, - "queue-it": { - "name": "Queue-it", - "categoryId": 6, - "url": "https://queue-it.com/", - "companyId": null - }, - "quick-counter.net": { - "name": "Quick-counter.net", - "categoryId": 6, - "url": "http://www.quick-counter.net/", - "companyId": "quick-counter.net" - }, - "quigo_adsonar": { - "name": "Quigo AdSonar", - "categoryId": 4, - "url": "http://www.quigo.com", - "companyId": "verizon" - }, - "quinstreet": { - "name": "QuinStreet", - "categoryId": 4, - "url": "http://www.quinstreet.com/", - "companyId": "quinstreet" - }, - "quintelligence": { - "name": "Quintelligence", - "categoryId": 6, - "url": "http://www.quintelligence.com/", - "companyId": "quintelligence" - }, - "quisma": { - "name": "Quisma", - "categoryId": 4, - "url": "http://www.quisma.com/en/", - "companyId": "wpp" - }, - "quora.com": { - "name": "Quora", - "categoryId": 7, - "url": "https://quora.com/", - "companyId": null - }, - "r_advertising": { - "name": "R-Advertising", - "categoryId": 4, - "url": "http://www.r-advertising.com/", - "companyId": "r-advertising" - }, - "rackcdn.com": { - "name": "Rackspace", - "categoryId": 9, - "url": "https://www.rackspace.com/", - "companyId": null - }, - "radarurl": { - "name": "RadarURL", - "categoryId": 6, - "url": "http://radarurl.com/", - "companyId": "radarurl" - }, - "radial": { - "name": "Radial", - "categoryId": 4, - "url": "http://www.clearsaleing.com/", - "companyId": "radial" - }, - "radiumone": { - "name": "RadiumOne", - "categoryId": 4, - "url": "http://www.radiumone.com/index.html", - "companyId": "rythmone" - }, - "raisenow": { - "name": "RaiseNow", - "categoryId": 6, - "url": "https://www.raisenow.com/de", - "companyId": "raisenow" - }, - "rakuten_display": { - "name": "Rakuten Display", - "categoryId": 4, - "url": "https://rakutenmarketing.com/display", - "companyId": "rakuten" - }, - "rakuten_globalmarket": { - "name": "Rakuten", - "categoryId": 4, - "url": "https://www.rakuten.co.jp/", - "companyId": "rakuten" - }, - "rakuten_widget": { - "name": "Rakuten Widget", - "categoryId": 4, - "url": "http://global.rakuten.com/corp/", - "companyId": "rakuten" - }, - "rambler": { - "name": "Rambler", - "categoryId": 6, - "url": "https://www.rambler.ru/", - "companyId": "rambler" - }, - "rambler_count": { - "name": "Rambler Count", - "categoryId": 2, - "url": "http://www.rambler.ru/", - "companyId": "rambler" - }, - "rambler_widget": { - "name": "Rambler Widget", - "categoryId": 2, - "url": "http://www.rambler.ru/", - "companyId": "rambler" - }, - "rapidspike": { - "name": "RapidSpike", - "categoryId": 6, - "url": "https://www.rapidspike.com", - "companyId": "rapidspike" - }, - "ravelin": { - "name": "Ravelin", - "categoryId": 6, - "url": "https://www.ravelin.com/", - "companyId": null - }, - "rawgit": { - "name": "RawGit", - "categoryId": 9, - "url": "http://rawgit.com/", - "companyId": null - }, - "raygun": { - "name": "Raygun", - "categoryId": 4, - "url": "https://raygun.com/", - "companyId": "raygun" - }, - "rbc_counter": { - "name": "RBC Counter", - "categoryId": 6, - "url": "http://www.rbc.ru/", - "companyId": "rbc_group" - }, - "rcs.it": { - "name": "RCS", - "categoryId": 4, - "url": "http://www.rcsmediagroup.it/", - "companyId": "rcs" - }, - "rd_station": { - "name": "RD Station", - "categoryId": 6, - "url": "http://www.rdstation.com/en/", - "companyId": "rd_station" - }, - "rea_group": { - "name": "REA Group Ltd.", - "categoryId": 4, - "url": "https://www.rea-group.com/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "reachforce": { - "name": "ReachForce", - "categoryId": 6, - "url": "http://www.reachforce.com/", - "companyId": "reachforce" - }, - "reachjunction": { - "name": "ReachJunction", - "categoryId": 4, - "url": "http://www.reachjunction.com/", - "companyId": "reachjunction" - }, - "reachlocal": { - "name": "ReachLocal", - "categoryId": 4, - "url": "http://www.reachlocal.com/", - "companyId": "reachlocal" - }, - "reactful": { - "name": "Reactful", - "categoryId": 4, - "url": "http://www.reactful.com/", - "companyId": "reactful" - }, - "reactivpub": { - "name": "Reactivpub", - "categoryId": 6, - "url": "http://www.reactivpub.com/", - "companyId": "r-advertising" - }, - "reactx": { - "name": "ReactX", - "categoryId": 4, - "url": "http://home.skinected.com", - "companyId": "reactx" - }, - "readerboard": { - "name": "ReaderBoard", - "categoryId": 7, - "url": "http://www.readrboard.com", - "companyId": "centre_phi" - }, - "readme": { - "name": "ReadMe", - "categoryId": 6, - "url": "https://readme.com/", - "companyId": "readme" - }, - "readspeaker.com": { - "name": "ReadSpeaker", - "categoryId": 2, - "url": "https://www.readspeaker.com/", - "companyId": null - }, - "realclick": { - "name": "RealClick", - "categoryId": 4, - "url": "http://www.realclick.co.kr/", - "companyId": "realclick" - }, - "realestate.com.au": { - "name": "realestate.com.au Pty Limited", - "categoryId": 4, - "url": "https://www.realestate.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "realperson.de": { - "name": "Realperson Chat", - "categoryId": 2, - "url": "http://www.optimise-it.de/", - "companyId": "optimise_it" - }, - "realtime": { - "name": "Realtime", - "categoryId": 2, - "url": "http://www.realtime.co/", - "companyId": "realtime" - }, - "realytics": { - "name": "Realytics", - "categoryId": 6, - "url": "https://www.realytics.io/", - "companyId": "realytics" - }, - "rebel_mouse": { - "name": "Rebel Mouse", - "categoryId": 6, - "url": "https://www.rebelmouse.com/", - "companyId": "rebelmouse" - }, - "recaptcha": { - "name": "reCAPTCHA", - "categoryId": 8, - "url": "https://www.google.com/recaptcha/about/", - "companyId": "google", - "source": "AdGuard" - }, - "recettes.net": { - "name": "Recettes.net", - "categoryId": 8, - "url": "http://www.recettes.net/", - "companyId": "recettes.net" - }, - "recopick": { - "name": "RecoPick", - "categoryId": 4, - "url": "https://recopick.com/", - "companyId": "recopick" - }, - "recreativ": { - "name": "Recreativ", - "categoryId": 4, - "url": "http://recreativ.ru/", - "companyId": "recreativ" - }, - "recruitics": { - "name": "Recruitics", - "categoryId": 6, - "url": "http://recruitics.com/", - "companyId": "recruitics" - }, - "red_ventures": { - "name": "Red Ventures", - "categoryId": 6, - "url": "https://www.redventures.com/", - "companyId": "red_ventures" - }, - "redblue_de": { - "name": "redblue", - "categoryId": 6, - "url": "https://www.redblue.de/", - "companyId": null - }, - "redcdn.pl": { - "name": "redGalaxy CDN", - "categoryId": 9, - "url": "http://www.atendesoftware.pl/", - "companyId": "atende_software" - }, - "reddit": { - "name": "Reddit", - "categoryId": 7, - "url": "https://www.reddit.com", - "companyId": "advance", - "source": "AdGuard" - }, - "redhelper": { - "name": "RedHelper", - "categoryId": 2, - "url": "http://redhelper.com/", - "companyId": "redhelper" - }, - "redlotus": { - "name": "RedLotus", - "categoryId": 4, - "url": "http://triggit.com/", - "companyId": "redlotus" - }, - "redtram": { - "name": "RedTram", - "categoryId": 4, - "url": "http://www.redtram.com/", - "companyId": "redtram" - }, - "redtube.com": { - "name": "redtube.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "redux_media": { - "name": "Redux Media", - "categoryId": 4, - "url": "http://reduxmedia.com/", - "companyId": "redux_media" - }, - "reed_business_information": { - "name": "Reed Business Information", - "categoryId": 6, - "url": "http://www.reedbusiness.com/", - "companyId": "andera_partners" - }, - "reembed.com": { - "name": "reEmbed", - "categoryId": 0, - "url": "https://www.reembed.com/", - "companyId": "reembed" - }, - "reevoo.com": { - "name": "Reevoo", - "categoryId": 4, - "url": "https://www.reevoo.com/en/", - "companyId": "reevoo" - }, - "refericon": { - "name": "Refericon", - "categoryId": 4, - "url": "https://refericon.pl/#", - "companyId": "refericon" - }, - "referlocal": { - "name": "ReferLocal", - "categoryId": 4, - "url": "http://referlocal.com/", - "companyId": "referlocal" - }, - "refersion": { - "name": "Refersion", - "categoryId": 4, - "url": "https://www.refersion.com/", - "companyId": "refersion" - }, - "refined_labs": { - "name": "Refined Labs", - "categoryId": 4, - "url": "http://www.refinedlabs.com", - "companyId": "refined_labs" - }, - "reflektion": { - "name": "Reflektion", - "categoryId": 4, - "url": "http://", - "companyId": "reflektion" - }, - "reformal": { - "name": "Reformal", - "categoryId": 2, - "url": "http://reformal.ru/", - "companyId": "reformal" - }, - "reinvigorate": { - "name": "Reinvigorate", - "categoryId": 6, - "url": "http://www.reinvigorate.net/", - "companyId": "media_temple" - }, - "rekko": { - "name": "Rekko", - "categoryId": 4, - "url": "http://convert.us/", - "companyId": "rekko" - }, - "reklam_store": { - "name": "Reklam Store", - "categoryId": 4, - "url": "http://www.reklamstore.com", - "companyId": "reklam_store" - }, - "reklamport": { - "name": "Reklamport", - "categoryId": 4, - "url": "http://www.reklamport.com/", - "companyId": "reklamport" - }, - "reklamz": { - "name": "ReklamZ", - "categoryId": 4, - "url": "http://www.reklamz.com/", - "companyId": "reklamz" - }, - "rekmob": { - "name": "Rekmob", - "categoryId": 4, - "url": "https://www.rekmob.com/", - "companyId": "rekmob" - }, - "relap": { - "name": "Relap", - "categoryId": 4, - "url": "https://relap.io/", - "companyId": "relap" - }, - "relay42": { - "name": "Relay42", - "categoryId": 5, - "url": "http://synovite.com", - "companyId": "relay42" - }, - "relestar": { - "name": "Relestar", - "categoryId": 6, - "url": "https://relestar.com/", - "companyId": "relestar" - }, - "relevant4.com": { - "name": "relevant4 GmbH", - "categoryId": 8, - "url": "https://www.relevant4.com/", - "companyId": null - }, - "remintrex": { - "name": "Remintrex", - "categoryId": 4, - "url": "http://www.remintrex.com/", - "companyId": null - }, - "remove.video": { - "name": "remove.video", - "categoryId": 12, - "url": null, - "companyId": null - }, - "repost.us": { - "name": "Repost.us", - "categoryId": 4, - "url": "http://www.freerangecontent.com/", - "companyId": "repost" - }, - "republer.com": { - "name": "Republer", - "categoryId": 4, - "url": "http://republer.com/", - "companyId": "republer" - }, - "res-meter": { - "name": "Res-meter", - "categoryId": 6, - "url": "http://respublica.al/res-meter", - "companyId": "respublica" - }, - "research_now": { - "name": "Research Now", - "categoryId": 4, - "url": "http://www.researchnow.com/", - "companyId": "research_now" - }, - "resonate_networks": { - "name": "Resonate Networks", - "categoryId": 4, - "url": "http://www.resonatenetworks.com/", - "companyId": "resonate" - }, - "respond": { - "name": "Respond", - "categoryId": 4, - "url": "http://respondhq.com/", - "companyId": "respond" - }, - "responsetap": { - "name": "ResponseTap", - "categoryId": 4, - "url": "http://www.adinsight.eu/", - "companyId": "responsetap" - }, - "result_links": { - "name": "Result Links", - "categoryId": 4, - "url": "http://www.resultlinks.com/", - "companyId": "result_links" - }, - "resultspage.com": { - "name": "SLI Systems", - "categoryId": 6, - "url": "https://www.sli-systems.com/", - "companyId": "sli_systems" - }, - "retailrocket.net": { - "name": "Retail Rocket", - "categoryId": 4, - "url": "https://retailrocket.net/", - "companyId": "retail_rocket" - }, - "retarget_app": { - "name": "Retarget App", - "categoryId": 4, - "url": "https://retargetapp.com/", - "companyId": "retargetapp" - }, - "retargeter_beacon": { - "name": "ReTargeter Beacon", - "categoryId": 4, - "url": "http://www.retargeter.com/", - "companyId": "retargeter" - }, - "retargeting.cl": { - "name": "Retargeting.cl", - "categoryId": 4, - "url": "http://retargeting.cl/", - "companyId": "retargeting" - }, - "retention_science": { - "name": "Retention Science", - "categoryId": 4, - "url": "http://retentionscience.com/", - "companyId": "retention_science" - }, - "reuters_media": { - "name": "Reuters media", - "categoryId": 9, - "url": "https://reuters.com", - "companyId": null - }, - "revcontent": { - "name": "RevContent", - "categoryId": 4, - "url": "https://www.revcontent.com/", - "companyId": "revcontent" - }, - "reve_marketing": { - "name": "Reve Marketing", - "categoryId": 4, - "url": "http://tellafriend.socialtwist.com/", - "companyId": "reve_marketing" - }, - "revenue": { - "name": "Revenue", - "categoryId": 4, - "url": "https://revenue.com/", - "companyId": "revenue" - }, - "revenuehits": { - "name": "RevenueHits", - "categoryId": 4, - "url": "http://www.revenuehits.com/", - "companyId": "revenuehits" - }, - "revenuemantra": { - "name": "RevenueMantra", - "categoryId": 4, - "url": "http://www.revenuemantra.com/", - "companyId": "revenuemantra" - }, - "revive_adserver": { - "name": "Revive Adserver", - "categoryId": 4, - "url": "https://www.revive-adserver.com/", - "companyId": "revive_adserver" - }, - "revolver_maps": { - "name": "Revolver Maps", - "categoryId": 6, - "url": "http://www.revolvermaps.com/", - "companyId": "revolver_maps" - }, - "revresponse": { - "name": "RevResponse", - "categoryId": 4, - "url": "http://www.netline.com/", - "companyId": "netline" - }, - "rewords": { - "name": "ReWords", - "categoryId": 4, - "url": "http://www.rewords.pl/", - "companyId": "rewords" - }, - "rhythmone": { - "name": "RhythmOne", - "categoryId": 4, - "url": "http://www.adconductor.com/", - "companyId": "rhythmone" - }, - "rhythmone_beacon": { - "name": "Rhythmone Beacon", - "categoryId": 4, - "url": "https://www.rhythmone.com/", - "companyId": "rythmone" - }, - "ria.ru": { - "name": "ria.ru", - "categoryId": 8, - "url": "https://ria.ru/", - "companyId": null - }, - "rich_media_banner_network": { - "name": "Rich Media Banner Network", - "categoryId": 4, - "url": "http://rmbn.ru/", - "companyId": "rich_media_banner_network" - }, - "richrelevance": { - "name": "RichRelevance", - "categoryId": 2, - "url": "http://www.richrelevance.com/", - "companyId": "richrelevance" - }, - "ringier.ch": { - "name": "Ringier", - "categoryId": 6, - "url": "http://ringier.ch/en", - "companyId": "ringier" - }, - "rio_seo": { - "name": "Rio SEO", - "categoryId": 7, - "url": "http://www.meteorsolutions.com", - "companyId": "rio_seo" - }, - "riskfield.com": { - "name": "Riskified", - "categoryId": 2, - "url": "https://www.riskified.com/", - "companyId": "riskfield" - }, - "rncdn3.com": { - "name": "Reflected Networks", - "categoryId": 9, - "url": "http://www.rncdn3.com/", - "companyId": null - }, - "ro2.biz": { - "name": "Ro2.biz", - "categoryId": 4, - "url": "http://ro2.biz/index.php?r=adikku", - "companyId": "ro2.biz" - }, - "roblox": { - "name": "Roblox", - "categoryId": 8, - "url": "https://www.roblox.com/", - "companyId": null - }, - "rockerbox": { - "name": "Rockerbox", - "categoryId": 6, - "url": "https://www.rockerbox.com/privacy", - "companyId": "rockerbox" - }, - "rocket.ia": { - "name": "Rocket.ia", - "categoryId": 4, - "url": "https://rocket.la/", - "companyId": "rocket.la" - }, - "roi_trax": { - "name": "ROI trax", - "categoryId": 4, - "url": "http://www.oneupweb.com/", - "companyId": "oneupweb" - }, - "roistat": { - "name": "Roistat", - "categoryId": 6, - "url": "https://roistat.com", - "companyId": "roistat" - }, - "rollad": { - "name": "Rollad", - "categoryId": 4, - "url": "http://rollad.ru", - "companyId": "rollad" - }, - "rollbar": { - "name": "Rollbar", - "categoryId": 6, - "url": "http://www.rollbar.com/", - "companyId": "rollbar" - }, - "roost": { - "name": "Roost", - "categoryId": 6, - "url": "http://roost.me/", - "companyId": "roost" - }, - "rooster": { - "name": "Rooster", - "categoryId": 6, - "url": "http://www.getrooster.com/", - "companyId": "rooster" - }, - "roq.ad": { - "name": "Roq.ad", - "categoryId": 4, - "url": "https://www.roq.ad/", - "companyId": "roq.ad" - }, - "rotaban": { - "name": "RotaBan", - "categoryId": 4, - "url": "http://www.rotaban.ru/", - "companyId": "rotaban" - }, - "routenplaner-karten.com": { - "name": "Routenplaner Karten", - "categoryId": 2, - "url": "https://www.routenplaner-karten.com/", - "companyId": null - }, - "rovion": { - "name": "Rovion", - "categoryId": 4, - "url": "http://www.rovion.com/", - "companyId": "rovion" - }, - "rsspump": { - "name": "RSSPump", - "categoryId": 2, - "url": "http://www.rsspump.com", - "companyId": "rsspump" - }, - "rtb_house": { - "name": "RTB House", - "categoryId": 4, - "url": "http://en.adpilot.com/", - "companyId": "rtb_house" - }, - "rtblab": { - "name": "RTBmarkt", - "categoryId": 4, - "url": "http://www.rtbmarkt.de/en/home/", - "companyId": "rtbmarkt" - }, - "rtbsuperhub.com": { - "name": "rtbsuperhub.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "rtl_group": { - "name": "RTL Group", - "categoryId": 8, - "url": "http://www.rtlgroup.com/www/htm/home.aspx", - "companyId": "rtl_group" - }, - "rtmark.net": { - "name": "Advertising Technologies Ltd", - "categoryId": 4, - "url": "http://rtmark.net/", - "companyId": "big_wall_vision" - }, - "rubicon": { - "name": "Rubicon", - "categoryId": 4, - "url": "http://rubiconproject.com/", - "companyId": "rubicon_project" - }, - "ruhrgebiet": { - "name": "Ruhrgebiet", - "categoryId": 4, - "url": "https://www.ruhrgebiet-onlineservices.de/", - "companyId": "ruhrgebiet" - }, - "rummycircle": { - "name": "RummyCircle", - "categoryId": 4, - "url": "https://www.rummycircle.com/", - "companyId": "rummycircle" - }, - "run": { - "name": "RUN", - "categoryId": 4, - "url": "http://www.rundsp.com/", - "companyId": "run" - }, - "runative": { - "name": "Runative", - "categoryId": 4, - "url": "https://runative.com/", - "companyId": null - }, - "rune": { - "name": "Rune", - "categoryId": 6, - "url": "http://www.secretrune.com/", - "companyId": "rune_inc." - }, - "runmewivel.com": { - "name": "runmewivel.com", - "categoryId": 10, - "url": null, - "companyId": null - }, - "rythmxchange": { - "name": "Rythmxchange", - "categoryId": 0, - "url": "https://www.rhythmone.com/", - "companyId": "rythmone" - }, - "s24_com": { - "name": "Shopping24 internet group", - "categoryId": 4, - "url": "https://www.s24.com/", - "companyId": null - }, - "s3xified.com": { - "name": "s3xified.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sabavision": { - "name": "SabaVision", - "categoryId": 4, - "url": "http://www.sabavision.com/en/", - "companyId": "sabavision" - }, - "sagemetrics": { - "name": "SageMetrics", - "categoryId": 4, - "url": "http://www.sagemetrics.com", - "companyId": "ipmg" - }, - "sailthru_horizon": { - "name": "Sailthru Horizon", - "categoryId": 4, - "url": "https://www.sailthru.com", - "companyId": "sailthru" - }, - "salecycle": { - "name": "SaleCycle", - "categoryId": 4, - "url": "http://www.salecycle.com/", - "companyId": "salecycle" - }, - "sales_feed": { - "name": "Sales Feed", - "categoryId": 4, - "url": "https://www.salesfeed.com/", - "companyId": "sales_feed" - }, - "sales_manago": { - "name": "SALESmanago", - "categoryId": 6, - "url": "https://www.salesmanago.com/", - "companyId": "sales_manago" - }, - "salesforce.com": { - "name": "Salesforce", - "categoryId": 4, - "url": "https://www.salesforce.com/eu/", - "companyId": "salesforce" - }, - "salesforce_live_agent": { - "name": "Salesforce Live Agent", - "categoryId": 2, - "url": "http://www.salesforce.com/", - "companyId": "salesforce" - }, - "salesfusion": { - "name": "SalesFUSION", - "categoryId": 4, - "url": "http://salesfusion.com/", - "companyId": "salesfusion" - }, - "salespider_media": { - "name": "SaleSpider Media", - "categoryId": 4, - "url": "http://salespidermedia.com/", - "companyId": "salespider_media" - }, - "salesviewer": { - "name": "SalesViewer", - "categoryId": 6, - "url": "https://www.salesviewer.com/", - "companyId": "salesviewer" - }, - "samba.tv": { - "name": "Samba TV", - "categoryId": 4, - "url": "https://samba.tv/", - "companyId": "samba_tv" - }, - "samsung": { - "name": "Samsung", - "categoryId": 8, - "url": "https://www.samsung.com/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungads": { - "name": "Samsung Ads", - "categoryId": 4, - "url": "https://www.samsung.com/business/samsungads/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungapps": { - "name": "Samsung Apps", - "categoryId": 101, - "url": "https://www.samsung.com/au/apps/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungmobile": { - "name": "Samsung Mobile", - "categoryId": 101, - "url": "https://www.samsung.com/mobile/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungpush": { - "name": "Samsung Push", - "categoryId": 8, - "url": null, - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungsds": { - "name": "Samsung SDS", - "categoryId": 10, - "url": "https://www.samsungsds.com/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungtv": { - "name": "Samsung TV", - "categoryId": 15, - "url": "https://www.samsung.com/au/tvs/", - "companyId": "samsung", - "source": "AdGuard" - }, - "sanoma.fi": { - "name": "Sanoma", - "categoryId": 4, - "url": "https://sanoma.com/", - "companyId": "sanoma" - }, - "sap_crm": { - "name": "SAP CRM", - "categoryId": 6, - "url": "https://www.sap.com/products/crm.html", - "companyId": "sap" - }, - "sap_sales_cloud": { - "name": "SAP Sales Cloud", - "categoryId": 2, - "url": "http://leadforce1.com/", - "companyId": "sap" - }, - "sap_xm": { - "name": "SAP Exchange Media", - "categoryId": 4, - "url": "http://sapexchange.media/", - "companyId": null - }, - "sape.ru": { - "name": "Sape", - "categoryId": 6, - "url": "https://www.sape.ru/en", - "companyId": "sape" - }, - "sapo_ads": { - "name": "SAPO Ads", - "categoryId": 4, - "url": "http://www.sapo.pt/", - "companyId": "sapo" - }, - "sas": { - "name": "SAS", - "categoryId": 6, - "url": "http://www.sas.com/", - "companyId": "sas" - }, - "say.ac": { - "name": "Say.ac", - "categoryId": 4, - "url": "http://say.ac", - "companyId": "say.ac" - }, - "say_media": { - "name": "Say Media", - "categoryId": 4, - "url": "http://www.saymedia.com/", - "companyId": "say_media" - }, - "sayyac": { - "name": "Sayyac", - "categoryId": 6, - "url": "http://www.sayyac.com/", - "companyId": "sayyac" - }, - "scarabresearch": { - "name": "Scarab Research", - "categoryId": 4, - "url": "https://www.scarabresearch.com/", - "companyId": "emarsys" - }, - "schibsted": { - "name": "Schibsted Media Group", - "categoryId": 8, - "url": "http://www.schibsted.com/", - "companyId": "schibsted_asa" - }, - "schneevonmorgen.com": { - "name": "Schnee von Morgen", - "categoryId": 0, - "url": "http://www.schneevonmorgen.com/", - "companyId": null - }, - "scoota": { - "name": "Scoota", - "categoryId": 4, - "url": "http://scoota.com/", - "companyId": "rockabox" - }, - "scorecard_research_beacon": { - "name": "ScoreCard Research Beacon", - "categoryId": 6, - "url": "https://www.scorecardresearch.com/", - "companyId": "comscore" - }, - "scout_analytics": { - "name": "Scout Analytics", - "categoryId": 4, - "url": "http://scoutanalytics.com/", - "companyId": "scout_analytics" - }, - "scribblelive": { - "name": "ScribbleLive", - "categoryId": 8, - "url": null, - "companyId": null - }, - "scribol": { - "name": "Scribol", - "categoryId": 4, - "url": "http://scribol.com/", - "companyId": "scribol" - }, - "scripps_analytics": { - "name": "Scripps Analytics", - "categoryId": 6, - "url": "http://www.scrippsnetworksinteractive.com/", - "companyId": "scripps_networks" - }, - "scroll": { - "name": "Scroll", - "categoryId": 5, - "url": "https://scroll.com/", - "companyId": "scroll" - }, - "scupio": { - "name": "Scupio", - "categoryId": 4, - "url": "http://ad.scupio.com/", - "companyId": "bridgewell" - }, - "search123": { - "name": "Search123", - "categoryId": 4, - "url": "http://www.search123.com/", - "companyId": "search123" - }, - "searchforce": { - "name": "SearchForce", - "categoryId": 4, - "url": "http://www.searchforce.com/", - "companyId": "searchforce" - }, - "searchignite": { - "name": "SearchIgnite", - "categoryId": 4, - "url": "https://searchignite.com/", - "companyId": "zeta" - }, - "searchrev": { - "name": "SearchRev", - "categoryId": 4, - "url": "http://www.searchrev.com/", - "companyId": "searchrev" - }, - "second_media": { - "name": "Second Media", - "categoryId": 4, - "url": "http://www.secondmedia.com/", - "companyId": "second_media" - }, - "sectigo": { - "name": "Sectigo Limited", - "categoryId": 5, - "url": "https://www.sectigo.com", - "companyId": "sectigo", - "source": "AdGuard" - }, - "securedtouch": { - "name": "SecuredTouch", - "categoryId": 6, - "url": "https://www.securedtouch.com/", - "companyId": null - }, - "securedvisit": { - "name": "SecuredVisit", - "categoryId": 4, - "url": "http://securedvisit.com/", - "companyId": "securedvisit" - }, - "seeding_alliance": { - "name": "Seeding Alliance", - "categoryId": 4, - "url": "http://seeding-alliance.de", - "companyId": "stroer" - }, - "seedtag.com": { - "name": "Seedtag", - "categoryId": 4, - "url": "https://www.seedtag.com/en/", - "companyId": "seedtag" - }, - "seevolution": { - "name": "SeeVolution", - "categoryId": 6, - "url": "http://www.seevolution.com", - "companyId": "seevolution" - }, - "segment": { - "name": "Segment", - "categoryId": 6, - "url": "https://segment.io/", - "companyId": "segment" - }, - "segmento": { - "name": "Segmento", - "categoryId": 4, - "url": "https://segmento.ru/en", - "companyId": "segmento" - }, - "segmint": { - "name": "Segmint", - "categoryId": 6, - "url": "http://www.segmint.com/", - "companyId": "segmint" - }, - "sekindo": { - "name": "Sekindo", - "categoryId": 4, - "url": "http://www.sekindo.com/", - "companyId": "sekindo" - }, - "sellpoints": { - "name": "Sellpoints", - "categoryId": 4, - "url": "https://www.sellpoints.com/", - "companyId": "sellpoints" - }, - "semantiqo.com": { - "name": "Semantiqo", - "categoryId": 4, - "url": "https://semantiqo.com/", - "companyId": null - }, - "semasio": { - "name": "Semasio", - "categoryId": 4, - "url": "http://semasio.com/", - "companyId": "semasio" - }, - "semilo": { - "name": "Semilo", - "categoryId": 4, - "url": "http://www.semilo.nl/", - "companyId": "semilo" - }, - "semknox.com": { - "name": "SEMKNOX GmbH", - "categoryId": 5, - "url": "https://semknox.com/", - "companyId": null - }, - "sendinblue": { - "name": "sendinblue", - "categoryId": 4, - "url": "https://fr.sendinblue.com/", - "companyId": "sendinblue" - }, - "sendpulse.com": { - "name": "SendPulse", - "categoryId": 3, - "url": "https://sendpulse.com/", - "companyId": null - }, - "sendsay": { - "name": "Sendsay", - "categoryId": 2, - "url": "https://sendsay.ru", - "companyId": "sendsay" - }, - "sense_digital": { - "name": "Sense Digital", - "categoryId": 6, - "url": "http://sensedigital.in/", - "companyId": "sense_digital" - }, - "sensors_data": { - "name": "Sensors Data", - "categoryId": 6, - "url": "https://www.sensorsdata.cn/", - "companyId": "sensors_data" - }, - "sentifi.com": { - "name": "Sentifi", - "categoryId": 6, - "url": "https://sentifi.com/", - "companyId": "sentifi" - }, - "sentry": { - "name": "Sentry", - "categoryId": 6, - "url": "https://sentry.io/", - "companyId": "sentry" - }, - "sepyra": { - "name": "Sepyra", - "categoryId": 4, - "url": "http://sepyra.com/", - "companyId": "sepyra" - }, - "sessioncam": { - "name": "SessionCam", - "categoryId": 6, - "url": "http://www.sessioncam.com/", - "companyId": "sessioncam" - }, - "sessionly": { - "name": "Sessionly", - "categoryId": 2, - "url": "https://www.sessionly.io/", - "companyId": "sessionly" - }, - "sevenone_media": { - "name": "SevenOne Media", - "categoryId": 4, - "url": null, - "companyId": null - }, - "sexadnetwork": { - "name": "SexAdNetwork", - "categoryId": 3, - "url": "http://www.sexadnetwork.com/", - "companyId": "sexadnetwork" - }, - "sexinyourcity": { - "name": "SexInYourCity", - "categoryId": 3, - "url": "http://www.sexinyourcity.com/", - "companyId": "sexinyourcity" - }, - "sextracker": { - "name": "SexTracker", - "categoryId": 3, - "url": "http://webmasters.sextracker.com/", - "companyId": "sextracker" - }, - "sexypartners.net": { - "name": "sexypartners.net", - "categoryId": 3, - "url": null, - "companyId": null - }, - "seznam": { - "name": "Seznam", - "categoryId": 6, - "url": "https://onas.seznam.cz/cz/", - "companyId": "seznam" - }, - "shareaholic": { - "name": "Shareaholic", - "categoryId": 6, - "url": "hhttps://www.shareaholic.com/", - "companyId": "shareaholic" - }, - "shareasale": { - "name": "ShareASale", - "categoryId": 4, - "url": "http://www.shareasale.com/", - "companyId": "shareasale" - }, - "sharecompany": { - "name": "ShareCompany", - "categoryId": 2, - "url": "http://sharecompany.nl", - "companyId": "sharecompany" - }, - "sharepoint": { - "name": "SharePoint", - "categoryId": 8, - "url": "https://www.microsoft.com/microsoft-365/sharepoint/collaboration", - "companyId": "microsoft", - "source": "AdGuard" - }, - "sharethis": { - "name": "ShareThis", - "categoryId": 4, - "url": "http://sharethis.com/", - "companyId": "sharethis" - }, - "sharethrough": { - "name": "ShareThrough", - "categoryId": 4, - "url": "http://www.sharethrough.com/", - "companyId": "sharethrough" - }, - "sharpspring": { - "name": "Sharpspring", - "categoryId": 6, - "url": "https://sharpspring.com/", - "companyId": "sharpspring" - }, - "sheego.de": { - "name": "sheego.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "sheerid": { - "name": "SheerID", - "categoryId": 4, - "url": "http://www.sheerid.com/", - "companyId": "sheerid" - }, - "shinystat": { - "name": "ShinyStat", - "categoryId": 6, - "url": "http://www.shinystat.com/", - "companyId": "shinystat" - }, - "shop_target": { - "name": "Shop Target", - "categoryId": 4, - "url": "http://shoptarget.com.br/", - "companyId": "shopback" - }, - "shopauskunft.de": { - "name": "ShopAuskunft.de", - "categoryId": 2, - "url": "https://shopauskunft.de/", - "companyId": null - }, - "shopgate.com": { - "name": "Shopgate", - "categoryId": 2, - "url": "https://www.shopgate.com/", - "companyId": null - }, - "shopify": { - "name": "Shopify Inc.", - "categoryId": 2, - "url": "https://www.shopify.com/", - "companyId": "shopify", - "source": "AdGuard" - }, - "shopify_stats": { - "name": "Shopify Stats", - "categoryId": 6, - "url": "http://www.shopify.com/", - "companyId": "shopify", - "source": "AdGuard" - }, - "shopifycdn.com": { - "name": "Shopify CDN", - "categoryId": 9, - "url": "https://www.shopify.com/", - "companyId": "shopify" - }, - "shopifycloud.com": { - "name": "Shopify Cloud", - "categoryId": 2, - "url": "https://www.shopify.com/", - "companyId": "shopify" - }, - "shopper_approved": { - "name": "Shopper Approved", - "categoryId": 2, - "url": "http://www.shopperapproved.com", - "companyId": "shopper_approved" - }, - "shopping_com": { - "name": "Shopping.com", - "categoryId": 4, - "url": "https://partnernetwork.ebay.com/", - "companyId": "ebay_partner_network" - }, - "shopping_flux": { - "name": "Shopping Flux", - "categoryId": 6, - "url": "http://www.shopping-flux.com/", - "companyId": "shopping_flux" - }, - "shoprunner": { - "name": "ShopRunner", - "categoryId": 2, - "url": "https://www.shoprunner.com", - "companyId": "shoprunner" - }, - "shopsocially": { - "name": "ShopSocially", - "categoryId": 2, - "url": "http://shopsocially.com/", - "companyId": "shopsocially" - }, - "shopzilla": { - "name": "Shopzilla", - "categoryId": 4, - "url": "http://www.shopzilla.com/", - "companyId": "shopzilla" - }, - "shortnews": { - "name": "ShortNews.de", - "categoryId": 8, - "url": "http://www.shortnews.de/#", - "companyId": null - }, - "showrss": { - "name": "showRSS", - "categoryId": 8, - "url": "https://showrss.info/", - "companyId": "showrss", - "source": "AdGuard" - }, - "shrink": { - "name": "Shrink", - "categoryId": 2, - "url": "http://shink.in/", - "companyId": "shrink.in" - }, - "shutterstock": { - "name": "Shutterstock", - "categoryId": 8, - "url": "https://www.shutterstock.com/", - "companyId": "shutterstock_inc" - }, - "siblesectiveal.club": { - "name": "siblesectiveal.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sidecar": { - "name": "Sidecar", - "categoryId": 6, - "url": "http://hello.getsidecar.com/", - "companyId": "sidecar" - }, - "sift_science": { - "name": "Sift Science", - "categoryId": 6, - "url": "https://siftscience.com/", - "companyId": "sift_science" - }, - "signal": { - "name": "Signal", - "categoryId": 5, - "url": "https://www.signal.co/", - "companyId": "signal_digital" - }, - "signifyd": { - "name": "Signifyd", - "categoryId": 6, - "url": "https://www.signifyd.com/", - "companyId": "signifyd" - }, - "silverpop": { - "name": "Silverpop", - "categoryId": 2, - "url": "http://www.silverpop.com/", - "companyId": "ibm" - }, - "similardeals.net": { - "name": "SimilarDeals", - "categoryId": 8, - "url": "http://www.similardeals.net/", - "companyId": null - }, - "similarweb": { - "name": "SimilarWeb", - "categoryId": 6, - "url": "https://www.similarweb.com/", - "companyId": "similarweb", - "source": "AdGuard" - }, - "simplereach": { - "name": "SimpleReach", - "categoryId": 6, - "url": "https://www.nativo.com/simplereach", - "companyId": "nativo" - }, - "simpli.fi": { - "name": "Simpli.fi", - "categoryId": 4, - "url": "http://www.simpli.fi", - "companyId": "simpli.fi" - }, - "sina": { - "name": "Sina", - "categoryId": 6, - "url": "http://www.sina.com/", - "companyId": "sina" - }, - "sina_cdn": { - "name": "Sina CDN", - "categoryId": 9, - "url": "https://www.sina.com.cn/", - "companyId": "sina" - }, - "singlefeed": { - "name": "SingleFeed", - "categoryId": 4, - "url": "https://www.singlefeed.com/", - "companyId": "singlefeed" - }, - "sirdata": { - "name": "Sirdata", - "categoryId": 6, - "url": "http://www.sirdata.com/home/", - "companyId": "sirdata" - }, - "site24x7": { - "name": "Site24x7", - "categoryId": 6, - "url": "https://www.site24x7.com/", - "companyId": "zoho_corp" - }, - "site_booster": { - "name": "Site Booster", - "categoryId": 7, - "url": "https://sitebooster.com/", - "companyId": "site_booster" - }, - "site_stratos": { - "name": "Site Stratos", - "categoryId": 4, - "url": "http://www.infocube.co.jp/", - "companyId": "infocube" - }, - "siteapps": { - "name": "SiteApps", - "categoryId": 2, - "url": "http://siteapps.com", - "companyId": "siteapps" - }, - "sitebro": { - "name": "SiteBro", - "categoryId": 6, - "url": "http://www.sitebro.net/", - "companyId": "sitebro" - }, - "siteheart": { - "name": "SiteHeart", - "categoryId": 2, - "url": "http://siteheart.com/", - "companyId": "siteheart" - }, - "siteimprove": { - "name": "Siteimprove", - "categoryId": 6, - "url": "http://siteimprove.com", - "companyId": "siteimprove" - }, - "siteimprove_analytics": { - "name": "SiteImprove Analytics", - "categoryId": 6, - "url": "http://siteimprove.com", - "companyId": "siteimprove" - }, - "sitelabweb.com": { - "name": "sitelabweb.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sitemeter": { - "name": "SiteMeter", - "categoryId": 6, - "url": "http://www.sitemeter.com/", - "companyId": "sitemeter,_inc." - }, - "sitescout": { - "name": "SiteScout by Centro", - "categoryId": 4, - "url": "http://www.sitescout.com", - "companyId": "centro" - }, - "sitetag": { - "name": "SiteTag", - "categoryId": 2, - "url": "http://www.sitetag.us/", - "companyId": "sitetag" - }, - "sitewit": { - "name": "SiteWit", - "categoryId": 4, - "url": "http://www.sitewit.com/", - "companyId": "sitewit" - }, - "six_apart_advertising": { - "name": "Six Apart Advertising", - "categoryId": 4, - "url": "http://www.sixapart.com/advertising/", - "companyId": "six_apart" - }, - "sixt-neuwagen.de": { - "name": "sixt-neuwagen.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "skadtec.com": { - "name": "GP One GmbH", - "categoryId": 6, - "url": "http://www.gp-one.com/", - "companyId": null - }, - "skimlinks": { - "name": "SkimLinks", - "categoryId": 4, - "url": "http://www.skimlinks.com/", - "companyId": "skimlinks" - }, - "skroutz": { - "name": "Skroutz", - "categoryId": 6, - "url": "https://www.skroutz.gr/", - "companyId": "skroutz" - }, - "skyglue": { - "name": "SkyGlue", - "categoryId": 6, - "url": "http://www.skyglue.com/", - "companyId": "skyglue_technology" - }, - "skype": { - "name": "Skype", - "categoryId": 2, - "url": "http://www.skype.com", - "companyId": "microsoft" - }, - "skysa": { - "name": "Skysa", - "categoryId": 2, - "url": "http://www.skysa.com/", - "companyId": "skysa" - }, - "skyscnr.com": { - "name": "Skyscanner CDN", - "categoryId": 9, - "url": "https://www.skyscanner.net/", - "companyId": null - }, - "slack": { - "name": "Slack", - "categoryId": 8, - "url": "https://www.slack.com/", - "companyId": "salesforce", - "source": "AdGuard" - }, - "slashdot_widget": { - "name": "Slashdot Widget", - "categoryId": 2, - "url": "http://slashdot.org", - "companyId": "slashdot" - }, - "sleeknote": { - "name": "Sleeknote", - "categoryId": 2, - "url": "https://sleeknote.com/", - "companyId": "sleeknote" - }, - "sli_systems": { - "name": "SLI Systems", - "categoryId": 2, - "url": "http://www.sli-systems.com", - "companyId": "sli_systems" - }, - "slice_factory": { - "name": "Slice Factory", - "categoryId": 2, - "url": "http://www.slicefactory.com/", - "companyId": "slice_factory" - }, - "slimcutmedia": { - "name": "SlimCutMedia", - "categoryId": 6, - "url": "http://www.slimcutmedia.com/", - "companyId": "slimcutmedia" - }, - "slingpic": { - "name": "Slingpic", - "categoryId": 4, - "url": "http://slingpic.com/", - "companyId": "affectv" - }, - "smaato": { - "name": "Smaato", - "categoryId": 4, - "url": "http://www.smaato.com/", - "companyId": "smaato" - }, - "smart4ads": { - "name": "smart4ads", - "categoryId": 4, - "url": "http://www.smart4ads.com", - "companyId": "smart4ads" - }, - "smart_adserver": { - "name": "SMART AdServer", - "categoryId": 4, - "url": "https://smartadserver.com/", - "companyId": "smart_adserver" - }, - "smart_call": { - "name": "Smart Call", - "categoryId": 2, - "url": "https://smartcall.kz/", - "companyId": "smart_call" - }, - "smart_content": { - "name": "Smart Content", - "categoryId": 4, - "url": "http://www.getsmartcontent.com", - "companyId": "get_smart_content" - }, - "smart_device_media": { - "name": "Smart Device Media", - "categoryId": 4, - "url": "http://www.smartdevicemedia.com/", - "companyId": "smart_device_media" - }, - "smart_leads": { - "name": "Smart Leads", - "categoryId": 4, - "url": "http://www.cnt.my/", - "companyId": "smart_leads" - }, - "smart_selling": { - "name": "Smart Selling", - "categoryId": 2, - "url": "https://smartselling.cz/", - "companyId": "smart_selling" - }, - "smartad": { - "name": "smartAD", - "categoryId": 4, - "url": "http://smartad.eu/", - "companyId": "smartad" - }, - "smartbn": { - "name": "SmartBN", - "categoryId": 4, - "url": "http://smartbn.ru/", - "companyId": "smartbn" - }, - "smartclick.net": { - "name": "SmartClick", - "categoryId": 4, - "url": "http://smartclick.net/", - "companyId": null - }, - "smartclip": { - "name": "SmartClip", - "categoryId": 4, - "url": "http://www.smartclip.com/", - "companyId": "smartclip" - }, - "smartcontext": { - "name": "SmartContext", - "categoryId": 4, - "url": "http://smartcontext.pl/", - "companyId": "smartcontext" - }, - "smarter_remarketer": { - "name": "SmarterHQ", - "categoryId": 4, - "url": "https://smarterhq.com", - "companyId": "smarterhq" - }, - "smarter_travel": { - "name": "Smarter Travel Media", - "categoryId": 4, - "url": "https://www.smartertravel.com/", - "companyId": "iac_apps" - }, - "smarterclick": { - "name": "Smarterclick", - "categoryId": 4, - "url": "http://www.smarterclick.co.uk/", - "companyId": "smarter_click" - }, - "smartertrack": { - "name": "SmarterTrack", - "categoryId": 4, - "url": "http://www.smartertrack.com/", - "companyId": "smartertrack" - }, - "smartlink.cool": { - "name": "smartlink.cool", - "categoryId": 11, - "url": null, - "companyId": null - }, - "smartlook": { - "name": "Smartlook", - "categoryId": 2, - "url": "https://www.smartlook.com/", - "companyId": "smartlook" - }, - "smartstream.tv": { - "name": "SmartStream.TV", - "categoryId": 4, - "url": "https://www.smartstream.tv/en", - "companyId": "smartstream" - }, - "smartsupp_chat": { - "name": "Smartsupp Chat", - "categoryId": 2, - "url": "https://www.smartsupp.com/", - "companyId": "smartsuppp" - }, - "smi2.ru": { - "name": "smi2.ru", - "categoryId": 6, - "url": "https://smi2.net/", - "companyId": "media2_stat.media" - }, - "smooch": { - "name": "Smooch", - "categoryId": 2, - "url": "https://smooch.io/", - "companyId": "smooch" - }, - "smowtion": { - "name": "Smowtion", - "categoryId": 4, - "url": "http://www.smowtion.com/", - "companyId": "smowtion" - }, - "smx_ventures": { - "name": "SMX Ventures", - "categoryId": 6, - "url": "http://smxeventures.com/", - "companyId": "smx_ventures" - }, - "smyte": { - "name": "Smyte", - "categoryId": 6, - "url": "https://www.smyte.com/", - "companyId": "smyte" - }, - "snacktv": { - "name": "SnackTV", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "snacktv_player": { - "name": "SnackTV-Player", - "categoryId": 0, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "snap": { - "name": "Snap", - "categoryId": 2, - "url": "http://www.snap.com/", - "companyId": "snap_technologies" - }, - "snap_engage": { - "name": "Snap Engage", - "categoryId": 2, - "url": "https://snapengage.com/", - "companyId": "snap_engage" - }, - "snapchat": { - "name": "Snapchat For Business", - "categoryId": 4, - "url": "https://www.snapchat.com/", - "companyId": "snap_technologies" - }, - "snapcraft": { - "name": "Snapcraft", - "categoryId": 8, - "url": "https://snapcraft.io", - "companyId": "canonical", - "source": "AdGuard" - }, - "snigelweb": { - "name": "SnigelWeb, Inc.", - "categoryId": 4, - "url": "http://www.snigelweb.com/", - "companyId": "snigelweb_inc" - }, - "snoobi": { - "name": "Snoobi", - "categoryId": 6, - "url": "http://www.snoobi.eu/", - "companyId": "snoobi" - }, - "snoobi_analytics": { - "name": "Snoobi Analytics", - "categoryId": 6, - "url": "http://www.snoobi.com/", - "companyId": "snoobi_oy" - }, - "snowplow": { - "name": "Snowplow", - "categoryId": 6, - "url": "http://snowplowanalytics.com/", - "companyId": "snowplow" - }, - "soasta_mpulse": { - "name": "SOASTA mPulse", - "categoryId": 6, - "url": "http://www.soasta.com/", - "companyId": "akamai" - }, - "sociable_labs": { - "name": "Sociable Labs", - "categoryId": 4, - "url": "http://www.sociablelabs.com/", - "companyId": "sociable_labs" - }, - "social_amp": { - "name": "Social Amp", - "categoryId": 4, - "url": "http://www.merkleinc.com/", - "companyId": "dentsu_aegis_network" - }, - "social_annex": { - "name": "Social Annex", - "categoryId": 4, - "url": "http://www.socialannex.com", - "companyId": "social_annex" - }, - "social_miner": { - "name": "Social Miner", - "categoryId": 7, - "url": "https://socialminer.com/", - "companyId": "social_miner" - }, - "socialbeat": { - "name": "socialbeat", - "categoryId": 4, - "url": "http://www.socialbeat.it/", - "companyId": "socialbeat" - }, - "socialrms": { - "name": "SocialRMS", - "categoryId": 7, - "url": "http://socialinterface.com/socialrms/", - "companyId": "socialinterface" - }, - "sociaplus.com": { - "name": "SociaPlus", - "categoryId": 6, - "url": "https://sociaplus.com/", - "companyId": null - }, - "sociomantic": { - "name": "Sociomantic", - "categoryId": 4, - "url": "http://www.sociomantic.com/", - "companyId": "sociomantic_labs_gmbh" - }, - "sohu": { - "name": "Sohu", - "categoryId": 7, - "url": "http://www.sohu.com", - "companyId": "sohu" - }, - "sojern": { - "name": "Sojern", - "categoryId": 4, - "url": "http://www.sojern.com/", - "companyId": "sojern" - }, - "sokrati": { - "name": "Sokrati", - "categoryId": 4, - "url": "http://sokrati.com/", - "companyId": "sokrati" - }, - "solads.media": { - "name": "solads.media", - "categoryId": 4, - "url": "http://solads.media/", - "companyId": null - }, - "solaredge": { - "name": "SolarEdge Technologies, Inc.", - "categoryId": 8, - "url": "https://www.solaredge.com/", - "companyId": "solaredge", - "source": "AdGuard" - }, - "solidopinion": { - "name": "SolidOpinion", - "categoryId": 2, - "url": "https://solidopinion.com/", - "companyId": "solidopinion" - }, - "solve_media": { - "name": "Solve Media", - "categoryId": 4, - "url": "http://solvemedia.com/", - "companyId": "solve_media" - }, - "soma_2": { - "name": "SOMA 2", - "categoryId": 4, - "url": "http://www.webcombi.de/", - "companyId": "soma_2_gmbh" - }, - "somoaudience": { - "name": "SoMo Audience", - "categoryId": 4, - "url": "https://somoaudience.com/", - "companyId": "somoaudience" - }, - "sonobi": { - "name": "Sonobi", - "categoryId": 4, - "url": "http://sonobi.com/", - "companyId": "sonobi" - }, - "sonos": { - "name": "Sonos", - "categoryId": 8, - "url": "https://www.sonos.com/", - "companyId": "sonos", - "source": "AdGuard" - }, - "sophus3": { - "name": "Sophus3", - "categoryId": 4, - "url": "http://www.sophus3.com/", - "companyId": "sophus3" - }, - "sortable": { - "name": "Sortable", - "categoryId": 4, - "url": "https://sortable.com/", - "companyId": "sortable" - }, - "soundcloud": { - "name": "SoundCloud", - "categoryId": 0, - "url": "http://soundcloud.com/", - "companyId": "soundcloud" - }, - "sourceknowledge_pixel": { - "name": "SourceKnowledge Pixel", - "categoryId": 4, - "url": "http://www.provenpixel.com/", - "companyId": "sourceknowledge" - }, - "sourcepoint": { - "name": "Sourcepoint", - "categoryId": 4, - "url": "https://www.sourcepoint.com/", - "companyId": "sourcepoint" - }, - "sovrn": { - "name": "sovrn", - "categoryId": 4, - "url": "https://www.sovrn.com/", - "companyId": "sovrn" - }, - "sovrn_viewability_solutions": { - "name": "Sovrn Signal", - "categoryId": 4, - "url": "https://www.sovrn.com/publishers/signal/", - "companyId": "sovrn" - }, - "spark_studios": { - "name": "Spark Studios", - "categoryId": 0, - "url": "http://www.sparkstudios.com/", - "companyId": "spark_studios" - }, - "sparkasse.de": { - "name": "sparkasse.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "speakpipe": { - "name": "SpeakPipe", - "categoryId": 2, - "url": "http://www.speakpipe.com/", - "companyId": "speakpipe" - }, - "specific_media": { - "name": "Specific Media", - "categoryId": 4, - "url": "http://www.specificmedia.com", - "companyId": "specific_media" - }, - "spectate": { - "name": "Spectate", - "categoryId": 6, - "url": "http://spectate.com/", - "companyId": "spectate" - }, - "speed_shift_media": { - "name": "Speed Shift Media", - "categoryId": 4, - "url": "http://www.speedshiftmedia.com/", - "companyId": "speed_shift_media" - }, - "speedcurve": { - "name": "SpeedCurve", - "categoryId": 6, - "url": "https://speedcurve.com/", - "companyId": null - }, - "speedyads": { - "name": "SpeedyAds", - "categoryId": 4, - "url": "http://www.entireweb.com/speedyads/", - "companyId": "entireweb" - }, - "speee": { - "name": "Speee", - "categoryId": 4, - "url": "https://speee.jp", - "companyId": "speee" - }, - "sphere": { - "name": "Sphere", - "categoryId": 4, - "url": "http://www.sphere.com/", - "companyId": "verizon" - }, - "spheremall": { - "name": "SphereMall", - "categoryId": 6, - "url": "https://spheremall.com", - "companyId": "spheremall" - }, - "sphereup": { - "name": "SphereUp", - "categoryId": 2, - "url": "http://zoomd.com/", - "companyId": "zoomd" - }, - "spicy": { - "name": "Spicy", - "categoryId": 4, - "url": "http://sspicy.ru/#main", - "companyId": "spicy_ssp" - }, - "spider.ad": { - "name": "Spider.Ad", - "categoryId": 4, - "url": "http://spider.ad/", - "companyId": "spider.ad" - }, - "spider_ads": { - "name": "Spider Ads", - "categoryId": 4, - "url": "http://www.spiderads.eu/", - "companyId": "spiderads" - }, - "spinnakr": { - "name": "Spinnakr", - "categoryId": 6, - "url": "http://spinnakr.com/", - "companyId": "spinnakr" - }, - "spokenlayer": { - "name": "SpokenLayer", - "categoryId": 0, - "url": "http://www.spokenlayer.com", - "companyId": "spokenlayer" - }, - "spongecell": { - "name": "Spongecell", - "categoryId": 4, - "url": "http://www.spongecell.com/", - "companyId": "spongecell" - }, - "sponsorads.de": { - "name": "SponsorAds.de", - "categoryId": 4, - "url": "http://sponsorads.de", - "companyId": "sponsorads.de" - }, - "sportsbet_affiliates": { - "name": "Sportsbet Affiliates", - "categoryId": 4, - "url": "http://www.sportsbetaffiliates.com.au/", - "companyId": "sportsbet_affiliates" - }, - "spot.im": { - "name": "Spot.IM", - "categoryId": 7, - "url": "https://www.spot.im/", - "companyId": "spot.im" - }, - "spoteffect": { - "name": "Spoteffect", - "categoryId": 6, - "url": "http://www.spoteffects.com/home/", - "companyId": "spoteffect" - }, - "spotify": { - "name": "Spotify", - "categoryId": 0, - "url": "https://www.spotify.com/", - "companyId": "spotify" - }, - "spotify_embed": { - "name": "Spotify Embed", - "categoryId": 0, - "url": "https://www.spotify.com", - "companyId": "spotify" - }, - "spotscenered.info": { - "name": "spotscenered.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "spotxchange": { - "name": "SpotX", - "categoryId": 4, - "url": "https://www.spotx.tv/", - "companyId": "rtl_group" - }, - "spoutable": { - "name": "Spoutable", - "categoryId": 4, - "url": "http://spoutable.com/", - "companyId": "spoutable" - }, - "springboard": { - "name": "SpringBoard", - "categoryId": 4, - "url": "http://home.springboardplatform.com/", - "companyId": "springboard" - }, - "springserve": { - "name": "SpringServe", - "categoryId": 4, - "url": "http://springserve.com/", - "companyId": "springserve" - }, - "sprinklr": { - "name": "Sprinklr", - "categoryId": 4, - "url": "https://www.sprinklr.com/", - "companyId": "sprinklr" - }, - "sputnik": { - "name": "Sputnik", - "categoryId": 6, - "url": "https://cnt.sputnik.ru/", - "companyId": "sputnik" - }, - "squadata": { - "name": "Squadata", - "categoryId": 4, - "url": "http://www.email-match.net/", - "companyId": "squadata" - }, - "squarespace.com": { - "name": "Squarespace", - "categoryId": 6, - "url": "https://www.squarespace.com/", - "companyId": null - }, - "srvtrck.com": { - "name": "srvtrck.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "srvvtrk.com": { - "name": "srvvtrk.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sstatic.net": { - "name": "Stack Exchange", - "categoryId": 9, - "url": "https://sstatic.net/", - "companyId": null - }, - "st-hatena": { - "name": "Hatena", - "categoryId": 7, - "url": "http://www.hatena.ne.jp/", - "companyId": "hatena_jp" - }, - "stackadapt": { - "name": "StackAdapt", - "categoryId": 4, - "url": "http://www.stackadapt.com/", - "companyId": "stackadapt" - }, - "stackpathdns.com": { - "name": "StackPath", - "categoryId": 9, - "url": "https://www.stackpath.com/", - "companyId": null - }, - "stailamedia_com": { - "name": "stailamedia.com", - "categoryId": 4, - "url": "http://stailamedia.com/", - "companyId": null - }, - "stalluva.pro": { - "name": "stalluva.pro", - "categoryId": 11, - "url": null, - "companyId": null - }, - "startapp": { - "name": "StartApp", - "categoryId": 4, - "url": "https://www.startapp.com/", - "companyId": null - }, - "stat24": { - "name": "Stat24", - "categoryId": 6, - "url": "http://www.stat24.com/en/", - "companyId": "stat24" - }, - "stat4u": { - "name": "stat4u", - "categoryId": 6, - "url": "http://stat.4u.pl/", - "companyId": "stat4u" - }, - "statcounter": { - "name": "Statcounter", - "categoryId": 6, - "url": "http://www.statcounter.com/", - "companyId": "statcounter" - }, - "stathat": { - "name": "StatHat", - "categoryId": 6, - "url": "http://www.stathat.com/", - "companyId": "stathat" - }, - "statisfy": { - "name": "Statisfy", - "categoryId": 6, - "url": "http://www.statisfy.com/", - "companyId": "statisfy" - }, - "statsy.net": { - "name": "statsy.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "statuscake": { - "name": "StatusCake", - "categoryId": 6, - "url": "https://www.statuscake.com/", - "companyId": "statuscake" - }, - "statuspage.io": { - "name": "Statuspage", - "categoryId": 2, - "url": "https://www.statuspage.io/", - "companyId": "atlassian" - }, - "stayfriends.de": { - "name": "stayfriends.de", - "categoryId": 8, - "url": "https://www.stayfriends.de/", - "companyId": null - }, - "steelhouse": { - "name": "Steel House Media", - "categoryId": 4, - "url": "https://steelhouse.com/", - "companyId": "steelhouse" - }, - "steepto.com": { - "name": "Steepto", - "categoryId": 4, - "url": "https://www.steepto.com/", - "companyId": null - }, - "stepstone.com": { - "name": "StepStone", - "categoryId": 8, - "url": "https://www.stepstone.com/", - "companyId": null - }, - "stetic": { - "name": "Stetic", - "categoryId": 6, - "url": "https://www.stetic.com/", - "companyId": "stetic" - }, - "stickyads": { - "name": "StickyAds", - "categoryId": 4, - "url": "http://corporate.comcast.com/", - "companyId": "comcast" - }, - "stocktwits": { - "name": "StockTwits", - "categoryId": 2, - "url": "http://stocktwits.com", - "companyId": "stocktwits" - }, - "storify": { - "name": "Storify", - "categoryId": 4, - "url": "https://storify.com/", - "companyId": "adobe" - }, - "storygize": { - "name": "Storygize", - "categoryId": 4, - "url": "http://www.storygize.com/", - "companyId": null - }, - "strands_recommender": { - "name": "Strands Recommender", - "categoryId": 4, - "url": "http://recommender.strands.com", - "companyId": "strands" - }, - "strava": { - "name": "Strava", - "categoryId": 6, - "url": "https://strava.com", - "companyId": "strava" - }, - "streak": { - "name": "Streak", - "categoryId": 2, - "url": "http://www.streak.com/", - "companyId": "streak" - }, - "streamotion": { - "name": "Streamotion", - "categoryId": 0, - "url": "https://streamotion.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "streamrail.com": { - "name": "StreamRail", - "categoryId": 4, - "url": "https://www.streamrail.com/", - "companyId": "ironsource" - }, - "stride": { - "name": "Stride", - "categoryId": 6, - "url": "https://www.getstride.com/", - "companyId": "stride_software" - }, - "stripchat.com": { - "name": "stripchat.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "stripe.com": { - "name": "Stripe", - "categoryId": 2, - "url": "https://stripe.com/", - "companyId": null - }, - "stripst.com": { - "name": "stripst.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "stroer_digital_media": { - "name": "Stroer Digital Media", - "categoryId": 4, - "url": "http://www.stroeer.de/", - "companyId": "stroer" - }, - "strossle": { - "name": "Strossle", - "categoryId": 4, - "url": "https://strossle.com/", - "companyId": "strossle" - }, - "struq": { - "name": "Struq", - "categoryId": 4, - "url": "http://www.struq.com/", - "companyId": "quantcast" - }, - "stumbleupon_widgets": { - "name": "StumbleUpon Widgets", - "categoryId": 7, - "url": "http://www.stumbleupon.com/", - "companyId": "stumbleupon" - }, - "sub2": { - "name": "Sub2", - "categoryId": 4, - "url": "http://www.sub2tech.com/", - "companyId": "sub2" - }, - "sublime_skinz": { - "name": "Sublime", - "categoryId": 4, - "url": "https://sublimeskinz.com/home", - "companyId": "sublime_skinz" - }, - "suggest.io": { - "name": "Suggest.io", - "categoryId": 4, - "url": "https://suggest.io/", - "companyId": "suggest.io" - }, - "sumologic.com": { - "name": "Sumologic", - "categoryId": 6, - "url": "https://www.sumologic.com/", - "companyId": null - }, - "sumome": { - "name": "Sumo", - "categoryId": 6, - "url": "https://sumo.com/", - "companyId": "sumome" - }, - "sundaysky": { - "name": "SundaySky", - "categoryId": 4, - "url": "http://www.sundaysky.com/", - "companyId": "sundaysky" - }, - "supercell": { - "name": "Supercell", - "categoryId": 2, - "url": "https://supercell.com/", - "companyId": "supercell", - "source": "AdGuard" - }, - "supercounters": { - "name": "SuperCounters", - "categoryId": 6, - "url": "http://www.supercounters.com/", - "companyId": "supercounters" - }, - "superfastcdn.com": { - "name": "superfastcdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "supership": { - "name": "Supership", - "categoryId": 4, - "url": "https://supership.jp/en/", - "companyId": "supership" - }, - "supplyframe": { - "name": "SupplyFrame", - "categoryId": 4, - "url": "https://supplyframe.com/", - "companyId": "supplyframe" - }, - "surf_by_surfingbird": { - "name": "Surf by Surfingbird", - "categoryId": 2, - "url": "http://surfingbird.ru/", - "companyId": "surfingbird" - }, - "survata": { - "name": "Survata", - "categoryId": 4, - "url": "https://www.survata.com/", - "companyId": "survata" - }, - "sweettooth": { - "name": "Sweettooth", - "categoryId": 2, - "url": "https://www.sweettoothrewards.com/", - "companyId": "sweet_tooth_rewards" - }, - "swiftype": { - "name": "Swiftype", - "categoryId": 9, - "url": "https://swiftype.com/", - "companyId": "elastic" - }, - "swisscom": { - "name": "Swisscom", - "categoryId": 8, - "url": null, - "companyId": null - }, - "switch_concepts": { - "name": "Switch Concepts", - "categoryId": 4, - "url": "http://www.switchconcepts.co.uk/", - "companyId": "switch_concepts" - }, - "switchtv": { - "name": "Switch Media", - "categoryId": 8, - "url": "https://www.switch.tv/", - "companyId": "switchtv", - "source": "AdGuard" - }, - "swoop": { - "name": "Swoop", - "categoryId": 4, - "url": "http://swoop.com/", - "companyId": "swoop" - }, - "sykes": { - "name": "Sykes", - "categoryId": 6, - "url": "http://www.sykescottages.co.uk/", - "companyId": "sykes_cottages" - }, - "symantec": { - "name": "Symantec (Norton Secured Seal)", - "categoryId": 5, - "url": "https://www.symantec.com/page.jsp?id=ssl-resources&tabID=3#", - "companyId": "symantec" - }, - "symphony_talent": { - "name": "Symphony Talent", - "categoryId": 2, - "url": "http://www.symphonytalent.com/", - "companyId": "symphony_talent" - }, - "synacor": { - "name": "Synacor", - "categoryId": 4, - "url": "https://www.synacor.com/", - "companyId": "synacor" - }, - "syncapse": { - "name": "Syncapse", - "categoryId": 4, - "url": "http://www.clickable.com/", - "companyId": "syncapse" - }, - "synergy-e": { - "name": "Synergy-E", - "categoryId": 4, - "url": "http://synergy-e.com/", - "companyId": "synergy-e" - }, - "t-mobile": { - "name": "Deutsche Telekom", - "categoryId": 8, - "url": null, - "companyId": null - }, - "t8cdn.com": { - "name": "t8cdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "tableteducation.com": { - "name": "tableteducation.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "taboola": { - "name": "Taboola", - "categoryId": 4, - "url": "http://www.taboola.com", - "companyId": "taboola" - }, - "tacoda": { - "name": "Tacoda", - "categoryId": 4, - "url": "http://www.tacoda.com/", - "companyId": "verizon" - }, - "tag_commander": { - "name": "Commanders Act", - "categoryId": 5, - "url": "https://www.commandersact.com/en/", - "companyId": "tag_commander" - }, - "tagcade": { - "name": "Tagcade", - "categoryId": 4, - "url": "https://www.pubvantage.com/", - "companyId": "pubvantage" - }, - "taggify": { - "name": "Taggify", - "categoryId": 4, - "url": "http://new.taggify.net/", - "companyId": "taggify" - }, - "taggy": { - "name": "TAGGY", - "categoryId": 4, - "url": "http://taggy.jp/", - "companyId": "taggy" - }, - "tagman": { - "name": "TagMan", - "categoryId": 5, - "url": "http://www.tagman.com/", - "companyId": "ensighten" - }, - "tail_target": { - "name": "Tail", - "categoryId": 6, - "url": "https://www.tail.digital/", - "companyId": "tail.digital" - }, - "tailsweep": { - "name": "Tailsweep", - "categoryId": 4, - "url": "http://www.tailsweep.se/", - "companyId": "tailsweep" - }, - "tamedia.ch": { - "name": "Tamedia", - "categoryId": 4, - "url": "https://www.tamedia.ch/", - "companyId": null - }, - "tanx": { - "name": "Tanx", - "categoryId": 4, - "url": "http://tanx.com/", - "companyId": "tanx" - }, - "taobao": { - "name": "Taobao", - "categoryId": 4, - "url": "https://world.taobao.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "tapad": { - "name": "Tapad", - "categoryId": 4, - "url": "http://www.tapad.com/", - "companyId": "telenor" - }, - "tapinfluence": { - "name": "TapInfluence", - "categoryId": 4, - "url": "http://theblogfrog.com/", - "companyId": "tapinfluence" - }, - "tarafdari": { - "name": "Tarafdari", - "categoryId": 4, - "url": "https://www.tarafdari.com/", - "companyId": "tarafdari" - }, - "target_2_sell": { - "name": "Target 2 Sell", - "categoryId": 4, - "url": "http://www.target2sell.com/en/", - "companyId": "target_2_sell" - }, - "target_circle": { - "name": "Target Circle", - "categoryId": 6, - "url": "http://targetcircle.com", - "companyId": "target_circle" - }, - "target_fuel": { - "name": "Target Fuel", - "categoryId": 6, - "url": "http://targetfuel.com/", - "companyId": "target_fuel" - }, - "tawk": { - "name": "Tawk", - "categoryId": 2, - "url": "https://www.tawk.to/", - "companyId": "tawk" - }, - "tbn.ru": { - "name": "TBN.ru", - "categoryId": 4, - "url": "http://www.agava.ru", - "companyId": "agava" - }, - "tchibo_de": { - "name": "tchibo.de", - "categoryId": 8, - "url": "http://tchibo.de/", - "companyId": null - }, - "tdsrmbl_net": { - "name": "tdsrmbl.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "teads": { - "name": "Teads", - "categoryId": 4, - "url": "http://teads.tv/", - "companyId": "teads" - }, - "tealeaf": { - "name": "Tealeaf", - "categoryId": 6, - "url": "https://www.ibm.com/digital-marketing", - "companyId": "ibm" - }, - "tealium": { - "name": "Tealium", - "categoryId": 5, - "url": "http://www.tealium.com/", - "companyId": "tealium" - }, - "teaser.cc": { - "name": "Teaser.cc", - "categoryId": 4, - "url": "http://www.teaser.cc/", - "companyId": "teaser.cc" - }, - "tedemis": { - "name": "Tedemis", - "categoryId": 4, - "url": "http://www.tedemis.com", - "companyId": "tedemis" - }, - "teletech": { - "name": "TeleTech", - "categoryId": 4, - "url": "http://www.webmetro.com/whoweare/technology.aspx", - "companyId": "teletech" - }, - "telstra": { - "name": "Telstra", - "categoryId": 8, - "url": "https://www.telstra.com.au/", - "companyId": "telstra", - "source": "AdGuard" - }, - "tender": { - "name": "Tender", - "categoryId": 2, - "url": "http://www.tenderapp.com/", - "companyId": "tender" - }, - "tensitionschoo.club": { - "name": "tensitionschoo.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "teroti": { - "name": "Teroti", - "categoryId": 4, - "url": "http://www.teroti.com/", - "companyId": "teroti" - }, - "terren": { - "name": "Terren", - "categoryId": 4, - "url": "http://www.webterren.com/", - "companyId": "terren" - }, - "teufel.de": { - "name": "teufel.de", - "categoryId": 8, - "url": "https://www.teufel.de/", - "companyId": null - }, - "the_adex": { - "name": "The ADEX", - "categoryId": 4, - "url": "http://www.theadex.com/", - "companyId": "prosieben_sat1" - }, - "the_deck": { - "name": "The DECK", - "categoryId": 4, - "url": "http://decknetwork.net/", - "companyId": "the_deck" - }, - "the_guardian": { - "name": "The Guardian", - "categoryId": 8, - "url": "https://www.theguardian.com/", - "companyId": "the_guardian" - }, - "the_reach_group": { - "name": "The Reach Group", - "categoryId": 4, - "url": "http://www.redvertisment.com", - "companyId": "the_reach_group" - }, - "the_search_agency": { - "name": "The Search Agency", - "categoryId": 4, - "url": "http://www.thesearchagency.com/", - "companyId": "the_search_agency" - }, - "the_sun": { - "name": "The Sun", - "categoryId": 8, - "url": "https://www.thesun.co.uk/", - "companyId": "the_sun" - }, - "the_weather_company": { - "name": "The Weather Company", - "categoryId": 4, - "url": "http://www.theweathercompany.com/", - "companyId": "ibm" - }, - "themoviedb": { - "name": "The Movie DB", - "categoryId": 8, - "url": "https://www.themoviedb.org/", - "companyId": "themoviedb" - }, - "thinglink": { - "name": "ThingLink", - "categoryId": 4, - "url": "http://www.thinglink.com/", - "companyId": "thinglink" - }, - "threatmetrix": { - "name": "ThreatMetrix", - "categoryId": 6, - "url": "http://threatmetrix.com/", - "companyId": "threatmetrix" - }, - "tidbit": { - "name": "Tidbit", - "categoryId": 2, - "url": "http://tidbit.co.in/", - "companyId": "tidbit" - }, - "tidio": { - "name": "Tidio", - "categoryId": 2, - "url": "https://www.tidio.com/", - "companyId": "tidio_chat" - }, - "tiktok_analytics": { - "name": "TikTok Analytics", - "categoryId": 6, - "url": "https://analytics.tiktok.com", - "companyId": "bytedance_inc" - }, - "tiller": { - "name": "Tiller", - "categoryId": 4, - "url": "https://www.tiller.com/", - "companyId": "tiller" - }, - "timezondb": { - "name": "TimezonDB", - "categoryId": 4, - "url": "https://timezonedb.com/", - "companyId": "timezonedb" - }, - "tinypass": { - "name": "Piano", - "categoryId": 5, - "url": "https://piano.io/", - "companyId": "piano" - }, - "tisoomi": { - "name": "Tisoomi", - "categoryId": 4, - "url": "https://tisoomi-services.com/", - "companyId": null - }, - "tlv_media": { - "name": "TLV Media", - "categoryId": 4, - "url": "http://www.tlvmedia.com", - "companyId": "tlvmedia" - }, - "tns": { - "name": "TNS", - "categoryId": 6, - "url": "http://www.tnsglobal.com/", - "companyId": "wpp" - }, - "tomnewsupdate.info": { - "name": "tomnewsupdate.info", - "categoryId": 12, - "url": null, - "companyId": null - }, - "tomorrow_focus": { - "name": "Tomorrow Focus", - "categoryId": 4, - "url": "http://www.tomorrow-focus.com", - "companyId": "hubert_burda_media" - }, - "tonefuse": { - "name": "ToneFuse", - "categoryId": 4, - "url": "http://www.tonefuse.com/", - "companyId": "tonefuse" - }, - "top_mail": { - "name": "Top Mail", - "categoryId": 6, - "url": "https://corp.megafon.com/", - "companyId": "megafon" - }, - "toplist.cz": { - "name": "toplist.cz", - "categoryId": 11, - "url": null, - "companyId": null - }, - "toponclick_com": { - "name": "toponclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "topsy": { - "name": "Topsy", - "categoryId": 4, - "url": "http://topsy.com/", - "companyId": "topsy" - }, - "torbit": { - "name": "Torbit", - "categoryId": 6, - "url": "http://torbit.com/", - "companyId": "torbit" - }, - "toro": { - "name": "TORO", - "categoryId": 4, - "url": "http://toroadvertising.com/", - "companyId": "toro_advertising" - }, - "tororango.com": { - "name": "tororango.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "total_media": { - "name": "Total Media", - "categoryId": 4, - "url": "http://www.totalmedia.co.il/eng/", - "companyId": "total_media" - }, - "touchcommerce": { - "name": "Nuance", - "categoryId": 2, - "url": "https://www.nuance.com/omni-channel-customer-engagement/digital.html", - "companyId": "touchcommerce" - }, - "tovarro.com": { - "name": "Tovarro", - "categoryId": 4, - "url": "https://www.tovarro.com/", - "companyId": null - }, - "tp-cdn.com": { - "name": "TrialPay", - "categoryId": 4, - "url": "https://www.trialpay.com/", - "companyId": null - }, - "tracc.it": { - "name": "Kiwe.io", - "categoryId": 6, - "url": "https://www.kiwe.io/", - "companyId": null - }, - "tracemyip": { - "name": "TraceMyIP", - "categoryId": 4, - "url": "http://www.tracemyip.org/", - "companyId": "tracemyip" - }, - "traceview": { - "name": "TraceView", - "categoryId": 6, - "url": "http://www.appneta.com/", - "companyId": "appneta" - }, - "track_duck": { - "name": "Track Duck", - "categoryId": 6, - "url": "https://trackduck.com/", - "companyId": "track_duck" - }, - "trackjs": { - "name": "TrackJS", - "categoryId": 6, - "url": "http://www.trackjs.com/", - "companyId": "trackjs" - }, - "trackset_conversionlab": { - "name": "Trackset ConversionLab", - "categoryId": 4, - "url": "http://www.trackset.com/", - "companyId": "trackset" - }, - "trackuity": { - "name": "Trackuity", - "categoryId": 2, - "url": "http://www.trackuity.com/", - "companyId": "trackuity" - }, - "tradedesk": { - "name": "TradeDesk", - "categoryId": 4, - "url": "http://www.thetradedesk.com/", - "companyId": "the_trade_desk" - }, - "tradedoubler": { - "name": "TradeDoubler", - "categoryId": 4, - "url": "http://www.tradedoubler.com/", - "companyId": "tradedoubler" - }, - "tradelab": { - "name": "Tradelab", - "categoryId": 4, - "url": "http://www.tradelab.fr/", - "companyId": "tradelab" - }, - "tradetracker": { - "name": "TradeTracker", - "categoryId": 4, - "url": "http://www.tradetracker.com", - "companyId": "tradetracker" - }, - "traffective": { - "name": "Traffective", - "categoryId": 4, - "url": "https://traffective.com/", - "companyId": null - }, - "traffic_fuel": { - "name": "Traffic Fuel", - "categoryId": 4, - "url": "https://trafficfuel.com/", - "companyId": "traffic_fuel" - }, - "traffic_revenue": { - "name": "Traffic Revenue", - "categoryId": 4, - "url": "http://www.trafficrevenue.net/", - "companyId": "traffic_revenue" - }, - "traffic_stars": { - "name": "Traffic Stars", - "categoryId": 3, - "url": "https://trafficstars.com/#index_page", - "companyId": "traffic_stars" - }, - "trafficbroker": { - "name": "TrafficBroker", - "categoryId": 4, - "url": "http://trafficbroker.com/", - "companyId": "trafficbroker" - }, - "trafficfabrik.com": { - "name": "Traffic Fabrik", - "categoryId": 3, - "url": "https://www.trafficfabrik.com/", - "companyId": null - }, - "trafficfactory": { - "name": "Traffic Factory", - "categoryId": 4, - "url": "https://www.trafficfactory.biz/", - "companyId": null - }, - "trafficforce": { - "name": "TrafficForce", - "categoryId": 4, - "url": "http://www.trafficforce.com/", - "companyId": "trafficforce" - }, - "traffichaus": { - "name": "TrafficHaus", - "categoryId": 3, - "url": "http://www.traffichaus.com", - "companyId": "traffichaus" - }, - "trafficjunky": { - "name": "TrafficJunky", - "categoryId": 3, - "url": "http://www.trafficjunky.net/", - "companyId": "trafficjunky" - }, - "traffiliate": { - "name": "Traffiliate", - "categoryId": 4, - "url": "http://www.traffiliate.com/", - "companyId": "dsnr_media_group" - }, - "trafic": { - "name": "Trafic", - "categoryId": 6, - "url": "http://www.trafic.ro/", - "companyId": "trafic" - }, - "trafmag.com": { - "name": "TrafMag", - "categoryId": 4, - "url": "https://trafmag.com/", - "companyId": "trafmag" - }, - "transcend": { - "name": "Transcend Consent", - "categoryId": 14, - "url": "https://transcend.io/consent/", - "companyId": "transcend" - }, - "transcend_telemetry": { - "name": "Transcend Telemetry", - "categoryId": 6, - "url": "https://transcend.io", - "companyId": "transcend" - }, - "transmatic": { - "name": "Transmatic", - "categoryId": 6, - "url": "http://www.transmatico.com/en/", - "companyId": "transmatico" - }, - "travel_audience": { - "name": "Travel Audience", - "categoryId": 6, - "url": "https://travelaudience.com/", - "companyId": "travel_audience" - }, - "trbo": { - "name": "trbo", - "categoryId": 4, - "url": "http://www.trbo.com/", - "companyId": "trbo" - }, - "treasuredata": { - "name": "Treasure Data", - "categoryId": 6, - "url": "https://www.treasuredata.com/", - "companyId": "arm" - }, - "tremor_video": { - "name": "Tremor Video", - "categoryId": 0, - "url": "http://www.tremormedia.com/", - "companyId": "tremor_video" - }, - "trendcounter": { - "name": "trendcounter", - "categoryId": 6, - "url": "http://www.trendcounter.com/", - "companyId": "trendcounter" - }, - "trendemon": { - "name": "TrenDemon", - "categoryId": 6, - "url": "http://trendemon.com", - "companyId": "trendemon" - }, - "tribal_fusion": { - "name": "Tribal Fusion", - "categoryId": 4, - "url": "http://www.tribalfusion.com/", - "companyId": "exponential_interactive" - }, - "tribal_fusion_notice": { - "name": "Tribal Fusion Notice", - "categoryId": 4, - "url": "http://www.tribalfusion.com", - "companyId": "exponential_interactive" - }, - "triblio": { - "name": "Triblio", - "categoryId": 6, - "url": "https://triblio.com/", - "companyId": "triblio" - }, - "trigger_mail_marketing": { - "name": "Trigger Mail Marketing", - "categoryId": 4, - "url": "http://www.triggeremailmarketing.com/", - "companyId": "trigger_mail_marketing" - }, - "triggerbee": { - "name": "Triggerbee", - "categoryId": 2, - "url": "https://triggerbee.com/", - "companyId": "triggerbee" - }, - "tripadvisor": { - "name": "TripAdvisor", - "categoryId": 8, - "url": "http://iac.com/", - "companyId": "iac_apps" - }, - "triplelift": { - "name": "TripleLift", - "categoryId": 4, - "url": "http://triplelift.com/", - "companyId": "triplelift" - }, - "triptease": { - "name": "Triptease", - "categoryId": 2, - "url": "https://www.triptease.com", - "companyId": "triptease" - }, - "triton_digital": { - "name": "Triton Digital", - "categoryId": 0, - "url": "http://www.tritondigital.com/", - "companyId": "triton_digital" - }, - "trovus_revelations": { - "name": "Trovus Revelations", - "categoryId": 4, - "url": "http://www.trovus.co.uk/", - "companyId": "trovus_revelations" - }, - "trsv3.com": { - "name": "trsv3.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "true_fit": { - "name": "True Fit", - "categoryId": 4, - "url": "https://www.truefit.com/", - "companyId": "true_fit" - }, - "trueanthem": { - "name": "True Anthem", - "categoryId": 4, - "url": "https://www.trueanthem.com/", - "companyId": "trueanthem" - }, - "trueffect": { - "name": "TruEffect", - "categoryId": 4, - "url": "http://www.trueffect.com/", - "companyId": "trueffect" - }, - "truehits.net": { - "name": "Truehits.net", - "categoryId": 6, - "url": "http://truehits.net/", - "companyId": "truehits.net" - }, - "trumba": { - "name": "Trumba", - "categoryId": 4, - "url": "http://www.trumba.com", - "companyId": "trumba" - }, - "truoptik": { - "name": "Tru Optik", - "categoryId": 6, - "url": "http://truoptik.com/", - "companyId": null - }, - "trustarc": { - "name": "TrustArc", - "categoryId": 5, - "url": "http://www.trustarc.com/", - "companyId": "trustarc" - }, - "truste_consent": { - "name": "Truste Consent", - "categoryId": 5, - "url": "http://www.trustarc.com/", - "companyId": "trustarc" - }, - "truste_notice": { - "name": "TRUSTe Notice", - "categoryId": 5, - "url": "http://www.truste.com/", - "companyId": "trustarc" - }, - "truste_seal": { - "name": "TRUSTe Seal", - "categoryId": 5, - "url": "http://www.truste.com/", - "companyId": "trustarc" - }, - "trusted_shops": { - "name": "Trusted Shops", - "categoryId": 5, - "url": "http://www.trustedshops.com/", - "companyId": "trusted_shops" - }, - "trustev": { - "name": "Trustev", - "categoryId": 6, - "url": "http://www.trustev.com/", - "companyId": "trustev" - }, - "trustlogo": { - "name": "TrustLogo", - "categoryId": 5, - "url": "http://www.comodo.com/", - "companyId": "comodo" - }, - "trustpilot": { - "name": "Trustpilot", - "categoryId": 2, - "url": "http://www.trustpilot.com", - "companyId": "trustpilot" - }, - "trustwave.com": { - "name": "Trustwave", - "categoryId": 8, - "url": "https://www.trustwave.com/home/", - "companyId": null - }, - "tubecorporate": { - "name": "Tube Corporate", - "categoryId": 3, - "url": "https://tubecorporate.com/", - "companyId": null - }, - "tubecup.org": { - "name": "tubecup.org", - "categoryId": 3, - "url": null, - "companyId": null - }, - "tubemogul": { - "name": "TubeMogul", - "categoryId": 4, - "url": "http://tubemogul.com/", - "companyId": "tubemogul" - }, - "tumblr_analytics": { - "name": "Tumblr Analytics", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "tumblr_buttons": { - "name": "Tumblr Buttons", - "categoryId": 7, - "url": "http://www.tumblr.com/", - "companyId": "verizon" - }, - "tumblr_dashboard": { - "name": "Tumblr Dashboard", - "categoryId": 7, - "url": "http://www.tumblr.com/", - "companyId": "verizon" - }, - "tune_in": { - "name": "Tune In", - "categoryId": 0, - "url": "http://tunein.com/", - "companyId": "tunein" - }, - "turbo": { - "name": "Turbo", - "categoryId": 4, - "url": "http://www.turboadv.com/", - "companyId": "turbo" - }, - "turn_inc.": { - "name": "Turn Inc.", - "categoryId": 4, - "url": "https://www.amobee.com/company/", - "companyId": "singtel" - }, - "turner": { - "name": "Warner Media", - "categoryId": 6, - "url": "https://www.warnermedia.com/", - "companyId": "turner" - }, - "turnsocial": { - "name": "TurnSocial", - "categoryId": 7, - "url": "http://turnsocial.com/", - "companyId": "turnsocial" - }, - "turnto": { - "name": "TurnTo", - "categoryId": 2, - "url": "http://www.turntonetworks.com/", - "companyId": "turnto_networks" - }, - "tvsquared.com": { - "name": "TVSquared", - "categoryId": 4, - "url": "http://tvsquared.com/", - "companyId": "tvsquared" - }, - "tweetboard": { - "name": "Tweetboard", - "categoryId": 7, - "url": "http://tweetboard.com/alpha/", - "companyId": "tweetboard" - }, - "tweetmeme": { - "name": "TweetMeme", - "categoryId": 7, - "url": "http://tweetmeme.com/", - "companyId": "tweetmeme" - }, - "twenga": { - "name": "Twenga Solutions", - "categoryId": 4, - "url": "https://www.twenga-solutions.com/", - "companyId": null - }, - "twiago": { - "name": "Twiago", - "categoryId": 4, - "url": "https://www.twiago.com/", - "companyId": "twiago" - }, - "twine": { - "name": "Twine", - "categoryId": 6, - "url": "http://twinedigital.com/", - "companyId": "twine_digital" - }, - "twitch.tv": { - "name": "Twitch", - "categoryId": 0, - "url": "https://www.twitch.tv/", - "companyId": "amazon_associates" - }, - "twitch_cdn": { - "name": "Twitch CDN", - "categoryId": 0, - "url": "https://www.twitch.tv/", - "companyId": "amazon_associates" - }, - "twitter": { - "name": "X (formerly Twitter)", - "categoryId": 7, - "url": "https://twitter.com", - "companyId": "twitter", - "source": "AdGuard" - }, - "twitter_ads": { - "name": "Twitter Advertising", - "categoryId": 4, - "url": "http://twitter.com/widgets", - "companyId": "twitter" - }, - "twitter_analytics": { - "name": "Twitter Analytics", - "categoryId": 6, - "url": "https://twitter.com", - "companyId": "twitter" - }, - "twitter_badge": { - "name": "Twitter Badge", - "categoryId": 7, - "url": "http://twitter.com/widgets", - "companyId": "twitter" - }, - "twitter_button": { - "name": "Twitter Button", - "categoryId": 7, - "url": "http://twitter.com", - "companyId": "twitter" - }, - "twitter_conversion_tracking": { - "name": "Twitter Conversion Tracking", - "categoryId": 4, - "url": "https://twitter.com/", - "companyId": "twitter" - }, - "twitter_for_business": { - "name": "Twitter for Business", - "categoryId": 4, - "url": "https://business.twitter.com/", - "companyId": "twitter" - }, - "twitter_syndication": { - "name": "Twitter Syndication", - "categoryId": 7, - "url": "https://twitter.com", - "companyId": "twitter" - }, - "twittercounter": { - "name": "TwitterCounter", - "categoryId": 6, - "url": "http://twittercounter.com/", - "companyId": "twitter_counter" - }, - "twyn": { - "name": "Twyn", - "categoryId": 4, - "url": "http://www.twyn.com", - "companyId": "twyn" - }, - "txxx.com": { - "name": "txxx.com", - "categoryId": 8, - "url": "https://txxx.com", - "companyId": null - }, - "tynt": { - "name": "33Across", - "categoryId": 4, - "url": "http://www.tynt.com/", - "companyId": "33across" - }, - "typeform": { - "name": "Typeform", - "categoryId": 2, - "url": "https://www.typeform.com/", - "companyId": null - }, - "typepad_stats": { - "name": "Typepad Stats", - "categoryId": 6, - "url": "http://www.typepad.com/features/statistics.ht", - "companyId": "typepad" - }, - "typography.com": { - "name": "Webfonts by Hoefler&Co", - "categoryId": 9, - "url": "https://www.typography.com/", - "companyId": null - }, - "tyroo": { - "name": "Tyroo", - "categoryId": 7, - "url": "http://www.tyroo.com/", - "companyId": "tyroo" - }, - "tzetze": { - "name": "TzeTze", - "categoryId": 2, - "url": "http://www.tzetze.it/", - "companyId": "tzetze" - }, - "ubersetzung-app.com": { - "name": "ubersetzung-app.com", - "categoryId": 12, - "url": "https://www.ubersetzung-app.com/", - "companyId": null - }, - "ubuntu": { - "name": "Ubuntu", - "categoryId": 8, - "url": "https://ubuntu.com/", - "companyId": "canonical", - "source": "AdGuard" - }, - "ucfunnel": { - "name": "ucfunnel", - "categoryId": 4, - "url": "https://www.ucfunnel.com/", - "companyId": "ucfunnel" - }, - "ucoz": { - "name": "uCoz", - "categoryId": 6, - "url": "http://www.ucoz.net/", - "companyId": "ucoz" - }, - "uliza": { - "name": "Uliza", - "categoryId": 4, - "url": "http://uliza.jp/index.html", - "companyId": "uliza" - }, - "umbel": { - "name": "Umbel", - "categoryId": 6, - "url": "http://umbel.com", - "companyId": "umbel" - }, - "umebiggestern.club": { - "name": "umebiggestern.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "unanimis": { - "name": "Unanimis", - "categoryId": 4, - "url": "http://www.unanimis.co.uk/", - "companyId": "switch_concepts" - }, - "unbounce": { - "name": "Unbounce", - "categoryId": 6, - "url": "http://unbounce.com/", - "companyId": "unbounce" - }, - "unbxd": { - "name": "UNBXD", - "categoryId": 6, - "url": "http://unbxd.com/", - "companyId": "unbxd" - }, - "under-box.com": { - "name": "under-box.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "undercomputer.com": { - "name": "undercomputer.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "underdog_media": { - "name": "Underdog Media", - "categoryId": 4, - "url": "http://www.underdogmedia.com", - "companyId": "underdog_media" - }, - "undertone": { - "name": "Undertone", - "categoryId": 4, - "url": "https://www.undertone.com/", - "companyId": "perion" - }, - "unica": { - "name": "Unica", - "categoryId": 2, - "url": "http://www.unica.com/", - "companyId": "ibm" - }, - "unister": { - "name": "Unister", - "categoryId": 6, - "url": "http://www.unister.de/", - "companyId": "unister" - }, - "unite": { - "name": "Unite", - "categoryId": 4, - "url": "http://unite.me/#", - "companyId": "unite" - }, - "united_digital_group": { - "name": "United Digital Group", - "categoryId": 4, - "url": "https://www.udg.de/", - "companyId": "united_digital_group" - }, - "united_internet_media_gmbh": { - "name": "United Internet Media GmbH", - "categoryId": 4, - "url": "https://www.united-internet.de/", - "companyId": "united_internet" - }, - "unity": { - "name": "Unity", - "categoryId": 8, - "url": "https://unity.com/", - "companyId": "unity", - "source": "AdGuard" - }, - "unity_ads": { - "name": "Unity Ads", - "categoryId": 4, - "url": "https://unity.com/products/unity-ads", - "companyId": "unity", - "source": "AdGuard" - }, - "univide": { - "name": "Univide", - "categoryId": 4, - "url": "http://www.oracle.com/", - "companyId": "oracle" - }, - "unpkg.com": { - "name": "unpkg", - "categoryId": 9, - "url": "https://unpkg.com/#/", - "companyId": null - }, - "unruly_media": { - "name": "Unruly Media", - "categoryId": 4, - "url": "http://www.unrulymedia.com/", - "companyId": "unruly" - }, - "untriel_finger_printing": { - "name": "Untriel Finger Printing", - "categoryId": 6, - "url": "https://www.untriel.nl/", - "companyId": "untriel" - }, - "upland_clickability_beacon": { - "name": "Upland Clickability Beacon", - "categoryId": 4, - "url": "http://www.clickability.com/", - "companyId": "upland_software" - }, - "uppr.de": { - "name": "uppr GmbH", - "categoryId": 4, - "url": "https://uppr.de/", - "companyId": null - }, - "upravel.com": { - "name": "upravel.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "upsellit": { - "name": "UpSellit", - "categoryId": 2, - "url": "http://www.upsellit.com", - "companyId": "upsellit" - }, - "upsight": { - "name": "Upsight", - "categoryId": 6, - "url": "http://www.upsight.com/", - "companyId": "upsight" - }, - "uptain": { - "name": "Uptain", - "categoryId": 6, - "url": "http://www.uptain.de/en/regaining-lost-customers/", - "companyId": "uptain" - }, - "uptolike.com": { - "name": "Uptolike", - "categoryId": 7, - "url": "https://www.uptolike.com/", - "companyId": "uptolike" - }, - "uptrends": { - "name": "Uptrends", - "categoryId": 6, - "url": "http://www.uptrends.com/", - "companyId": "uptrends" - }, - "urban-media.com": { - "name": "Urban Media GmbH", - "categoryId": 4, - "url": "https://www.urban-media.com/", - "companyId": null - }, - "urban_airship": { - "name": "Urban Airship", - "categoryId": 6, - "url": "https://www.urbanairship.com/", - "companyId": "urban_airship" - }, - "usability_tools": { - "name": "Usability Tools", - "categoryId": 6, - "url": "http://usabilitytools.com/", - "companyId": "usability_tools" - }, - "usabilla": { - "name": "Usabilla", - "categoryId": 2, - "url": "https://usabilla.com/", - "companyId": "usabilla" - }, - "usemax": { - "name": "Usemax", - "categoryId": 4, - "url": "http://www.usemax.de", - "companyId": "usemax" - }, - "usemessages.com": { - "name": "usemessages.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "usercycle": { - "name": "USERcycle", - "categoryId": 6, - "url": "http://usercycle.com/", - "companyId": "usercycle" - }, - "userdive": { - "name": "USERDIVE", - "categoryId": 6, - "url": "http://userdive.com/", - "companyId": "userdive" - }, - "userecho": { - "name": "UserEcho", - "categoryId": 2, - "url": "http://userecho.com", - "companyId": "userecho" - }, - "userlike.com": { - "name": "Userlike", - "categoryId": 2, - "url": "https://www.userlike.com/", - "companyId": "userlike" - }, - "userpulse": { - "name": "UserPulse", - "categoryId": 2, - "url": "http://www.userpulse.com/", - "companyId": "userpulse" - }, - "userreplay": { - "name": "UserReplay", - "categoryId": 6, - "url": "https://www.userreplay.com/", - "companyId": "userreplay" - }, - "userreport": { - "name": "UserReport", - "categoryId": 2, - "url": "http://www.userreport.com/", - "companyId": "userreport" - }, - "userrules": { - "name": "UserRules", - "categoryId": 2, - "url": "http://www.userrules.com/", - "companyId": "userrules_software" - }, - "usersnap": { - "name": "Usersnap", - "categoryId": 2, - "url": "http://usersnap.com/", - "companyId": "usersnap" - }, - "uservoice": { - "name": "UserVoice", - "categoryId": 2, - "url": "http://uservoice.com/", - "companyId": "uservoice" - }, - "userzoom.com": { - "name": "UserZoom", - "categoryId": 2, - "url": "https://www.userzoom.com/", - "companyId": "userzoom" - }, - "usocial": { - "name": "Usocial", - "categoryId": 7, - "url": "https://usocial.pro/en", - "companyId": "usocial" - }, - "utarget": { - "name": "uTarget", - "categoryId": 4, - "url": "http://utarget.ru/", - "companyId": "utarget" - }, - "uuidksinc.net": { - "name": "uuidksinc.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "v12_group": { - "name": "V12 Group", - "categoryId": 6, - "url": null, - "companyId": null - }, - "vacaneedasap.com": { - "name": "vacaneedasap.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "valassis": { - "name": "Valassis", - "categoryId": 4, - "url": "http://www.brand.net/", - "companyId": "valassis" - }, - "validclick": { - "name": "ValidClick", - "categoryId": 4, - "url": "http://inuvo.com/", - "companyId": "inuvo" - }, - "valiton": { - "name": "Valiton", - "categoryId": 4, - "url": "https://www.valiton.com/", - "companyId": "hubert_burda_media" - }, - "valueclick_media": { - "name": "ValueClick Media", - "categoryId": 4, - "url": "https://www.conversantmedia.eu/", - "companyId": "conversant" - }, - "valuecommerce": { - "name": "ValueCommerce", - "categoryId": 4, - "url": "https://www.valuecommerce.ne.jp", - "companyId": "valuecommerce" - }, - "valued_opinions": { - "name": "Valued Opinions", - "categoryId": 4, - "url": "http://valuedopinions.com", - "companyId": "valued_opinions" - }, - "vanksen": { - "name": "Vanksen", - "categoryId": 4, - "url": "http://www.buzzparadise.com/", - "companyId": "vanksen" - }, - "varick_media_management": { - "name": "Varick Media Management", - "categoryId": 4, - "url": "http://www.varickmm.com/", - "companyId": "varick_media_management" - }, - "vcita": { - "name": "Vcita", - "categoryId": 6, - "url": "https://www.vcita.com/", - "companyId": "vcita" - }, - "vcommission": { - "name": "vCommission", - "categoryId": 4, - "url": "http://www.vcommission.com/", - "companyId": "vcommission" - }, - "vdopia": { - "name": "Vdopia", - "categoryId": 4, - "url": "http://mobile.vdopia.com/", - "companyId": "vdopia" - }, - "ve_interactive": { - "name": "Ve Interactive", - "categoryId": 4, - "url": "https://www.veinteractive.com", - "companyId": "ve_interactive" - }, - "vee24": { - "name": "VEE24", - "categoryId": 0, - "url": "https://www.vee24.com/", - "companyId": "vee24" - }, - "velocecdn.com": { - "name": "velocecdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "velti_mgage_visualize": { - "name": "Velti mGage Visualize", - "categoryId": 4, - "url": "http://www.velti.com/", - "companyId": "velti" - }, - "vendemore": { - "name": "Vendemore", - "categoryId": 1, - "url": "https://vendemore.com/", - "companyId": "ratos" - }, - "venturead.com": { - "name": "venturead.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "venyoo": { - "name": "Venyoo", - "categoryId": 2, - "url": "http://venyoo.ru/", - "companyId": "venyoo" - }, - "veoxa": { - "name": "Veoxa", - "categoryId": 4, - "url": "http://www.veoxa.com/", - "companyId": "veoxa" - }, - "vergic.com": { - "name": "Vergic", - "categoryId": 1, - "url": "https://www.vergic.com/", - "companyId": null - }, - "vero": { - "name": "Vero", - "categoryId": 4, - "url": "http://www.getvero.com/", - "companyId": "vero" - }, - "vertical_acuity": { - "name": "Vertical Acuity", - "categoryId": 4, - "url": "http://www.verticalacuity.com/", - "companyId": "outbrain" - }, - "vertical_leap": { - "name": "Vertical Leap", - "categoryId": 4, - "url": "http://www.vertical-leap.co.uk/", - "companyId": "vertical_leap" - }, - "verticalresponse": { - "name": "VerticalResponse", - "categoryId": 4, - "url": "http://www.verticalresponse.com", - "companyId": "verticalresponse" - }, - "verticalscope": { - "name": "VerticalScope", - "categoryId": 4, - "url": "http://www.verticalscope.com", - "companyId": "verticalscope" - }, - "vertoz": { - "name": "Vertoz", - "categoryId": 4, - "url": "http://www.vertoz.com/", - "companyId": "vertoz" - }, - "veruta": { - "name": "Veruta", - "categoryId": 4, - "url": "http://www.veruta.com/", - "companyId": "veruta" - }, - "verve_mobile": { - "name": "Verve Mobile", - "categoryId": 4, - "url": "http://www.vervemobile.com/", - "companyId": "verve_mobile" - }, - "vg_wort": { - "name": "VG Wort", - "categoryId": 6, - "url": "https://tom.vgwort.de/portal/showHelp", - "companyId": "vg_wort" - }, - "vi": { - "name": "Vi", - "categoryId": 4, - "url": "http://www.vi.ru/", - "companyId": "vi" - }, - "viacom_tag_container": { - "name": "Viacom Tag Container", - "categoryId": 4, - "url": "http://www.viacom.com/", - "companyId": "viacom" - }, - "viafoura": { - "name": "Viafoura", - "categoryId": 4, - "url": "http://www.viafoura.com/", - "companyId": "viafoura" - }, - "vibrant_ads": { - "name": "Vibrant Ads", - "categoryId": 4, - "url": "http://www.vibrantmedia.com/", - "companyId": "vibrant_media" - }, - "vicomi.com": { - "name": "Vicomi", - "categoryId": 6, - "url": "http://www.vicomi.com/", - "companyId": "vicomi" - }, - "vidazoo.com": { - "name": "Vidazoo", - "categoryId": 4, - "url": "https://www.vidazoo.com/", - "companyId": null - }, - "video_desk": { - "name": "Video Desk", - "categoryId": 0, - "url": "https://www.videodesk.com/", - "companyId": "video_desk" - }, - "video_potok": { - "name": "Video Potok", - "categoryId": 0, - "url": "http://videopotok.pro/", - "companyId": "videopotok" - }, - "videoadex.com": { - "name": "VideoAdX", - "categoryId": 4, - "url": "https://www.videoadex.com/", - "companyId": "digiteka" - }, - "videology": { - "name": "Videology", - "categoryId": 4, - "url": "https://videologygroup.com/", - "companyId": "singtel" - }, - "videonow": { - "name": "VideoNow", - "categoryId": 4, - "url": "https://videonow.ru/", - "companyId": "videonow" - }, - "videoplayerhub.com": { - "name": "videoplayerhub.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "videoplaza": { - "name": "Videoplaza", - "categoryId": 4, - "url": "http://www.videoplaza.com/", - "companyId": "videoplaza" - }, - "videostep": { - "name": "VideoStep", - "categoryId": 4, - "url": "https://www.videostep.com/", - "companyId": "videostep" - }, - "vidgyor": { - "name": "Vidgyor", - "categoryId": 0, - "url": "http://vidgyor.com/", - "companyId": "vidgyor" - }, - "vidible": { - "name": "Vidible", - "categoryId": 4, - "url": "http://vidible.tv/", - "companyId": "verizon" - }, - "vidora": { - "name": "Vidora", - "categoryId": 0, - "url": "https://www.vidora.com/", - "companyId": "vidora" - }, - "vietad": { - "name": "VietAd", - "categoryId": 4, - "url": "http://vietad.vn/", - "companyId": "vietad" - }, - "viglink": { - "name": "VigLink", - "categoryId": 4, - "url": "http://www.viglink.com", - "companyId": "viglink" - }, - "vigo": { - "name": "Vigo", - "categoryId": 6, - "url": "https://vigo.one/", - "companyId": "vigo" - }, - "vimeo": { - "name": "Vimeo", - "categoryId": 0, - "url": "http://vimeo.com/", - "companyId": "vimeo" - }, - "vindico_group": { - "name": "Vindico Group", - "categoryId": 4, - "url": "http://www.vindicogroup.com/", - "companyId": "vindico_group" - }, - "vinted": { - "name": "Vinted", - "categoryId": 8, - "url": "https://www.vinted.com/", - "companyId": null - }, - "viral_ad_network": { - "name": "Viral Ad Network", - "categoryId": 4, - "url": "http://viraladnetwork.joinvan.com/", - "companyId": "viral_ad_network" - }, - "viral_loops": { - "name": "Viral Loops", - "categoryId": 2, - "url": "https://viral-loops.com/", - "companyId": "viral-loops" - }, - "viralgains": { - "name": "ViralGains", - "categoryId": 4, - "url": "https://www.viralgains.com/", - "companyId": null - }, - "viralmint": { - "name": "ViralMint", - "categoryId": 7, - "url": "http://www.viralmint.com", - "companyId": "viralmint" - }, - "virgul": { - "name": "Virgul", - "categoryId": 4, - "url": "http://www.virgul.com/", - "companyId": "virgul" - }, - "virool_player": { - "name": "Virool Player", - "categoryId": 4, - "url": "https://www.virool.com/", - "companyId": "virool" - }, - "virtusize": { - "name": "Virtusize", - "categoryId": 5, - "url": "http://www.virtusize.com/", - "companyId": "virtusize" - }, - "visible_measures": { - "name": "Visible Measures", - "categoryId": 4, - "url": "http://www.visiblemeasures.com/", - "companyId": "visible_measures" - }, - "vision_critical": { - "name": "Vision Critical", - "categoryId": 6, - "url": "http://visioncritical.com/", - "companyId": "vision_critical" - }, - "visit_streamer": { - "name": "Visit Streamer", - "categoryId": 6, - "url": "http://www.visitstreamer.com/", - "companyId": "visit_streamer" - }, - "visitortrack": { - "name": "VisitorTrack", - "categoryId": 4, - "url": "http://www.netfactor.com/", - "companyId": "netfactor" - }, - "visitorville": { - "name": "VisitorVille", - "categoryId": 6, - "url": "http://www.visitorville.com", - "companyId": "visitorville" - }, - "visscore": { - "name": "VisScore", - "categoryId": 4, - "url": "http://withcubed.com/", - "companyId": "cubed_attribution" - }, - "visual_iq": { - "name": "Visual IQ", - "categoryId": 6, - "url": "http://visualiq.com/", - "companyId": "visualiq" - }, - "visual_revenue": { - "name": "Visual Revenue", - "categoryId": 6, - "url": "http://visualrevenue.com/", - "companyId": "outbrain" - }, - "visual_website_optimizer": { - "name": "VWO", - "categoryId": 6, - "url": "https://vwo.com/", - "companyId": "wingify" - }, - "visualdna": { - "name": "VisualDNA", - "categoryId": 4, - "url": "http://www.visualdna.com/", - "companyId": "nielsen" - }, - "visualstudio.com": { - "name": "Visualstudio.com", - "categoryId": 8, - "url": "https://www.visualstudio.com/", - "companyId": "microsoft" - }, - "visualvisitor": { - "name": "VisualVisitor", - "categoryId": 6, - "url": "http://www.visualvisitor.com/", - "companyId": "visualvisitor" - }, - "vivalu": { - "name": "VIVALU", - "categoryId": 4, - "url": "https://www.vivalu.com/", - "companyId": "vivalu" - }, - "vivistats": { - "name": "ViviStats", - "categoryId": 6, - "url": "http://en.vivistats.com/", - "companyId": "vivistats" - }, - "vizury": { - "name": "Vizury", - "categoryId": 4, - "url": "http://www.vizury.com/website/", - "companyId": "vizury" - }, - "vizzit": { - "name": "Vizzit", - "categoryId": 4, - "url": "http://www.vizzit.se/h/en/", - "companyId": "vizzit" - }, - "vk.com": { - "name": "Vk.com", - "categoryId": 7, - "url": "https://vk.com/", - "companyId": "vk", - "source": "AdGuard" - }, - "vkontakte": { - "name": "VKontakte", - "categoryId": 7, - "url": "https://vk.com/", - "companyId": "vk", - "source": "AdGuard" - }, - "vkontakte_widgets": { - "name": "VKontakte Widgets", - "categoryId": 7, - "url": "https://dev.vk.com/", - "companyId": "vk", - "source": "AdGuard" - }, - "vntsm.com": { - "name": "Venatus Media", - "categoryId": 4, - "url": "https://www.venatusmedia.com/", - "companyId": "venatus" - }, - "vodafone.de": { - "name": "vodafone.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "voicefive": { - "name": "VoiceFive", - "categoryId": 6, - "url": "https://www.voicefive.com", - "companyId": "comscore" - }, - "volusion_chat": { - "name": "Volusion Chat", - "categoryId": 2, - "url": "https://www.volusion.com/", - "companyId": "volusion" - }, - "voluum": { - "name": "Voluum", - "categoryId": 4, - "url": "https://voluum.com/", - "companyId": "codewise" - }, - "vooxe.com": { - "name": "vooxe.com", - "categoryId": 8, - "url": "http://www.vooxe.com/", - "companyId": null - }, - "vorwerk.de": { - "name": "vorwerk.de", - "categoryId": 8, - "url": "https://corporate.vorwerk.de/home/", - "companyId": null - }, - "vox": { - "name": "Vox", - "categoryId": 2, - "url": "https://www.voxmedia.com/", - "companyId": "vox" - }, - "voxus": { - "name": "Voxus", - "categoryId": 4, - "url": "http://www.voxus.tv/", - "companyId": "voxus" - }, - "vpon": { - "name": "VPON", - "categoryId": 4, - "url": "http://www.vpon.com/en/", - "companyId": "vpon" - }, - "vpscash": { - "name": "VPSCash", - "categoryId": 4, - "url": "http://vpscash.nl/home", - "companyId": "vps_cash" - }, - "vs": { - "name": "Visual Studio", - "categoryId": 8, - "url": "https://visualstudio.microsoft.com", - "companyId": "microsoft", - "source": "AdGuard" - }, - "vscode": { - "name": "Visual Studio Code", - "categoryId": 8, - "url": "https://code.visualstudio.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "vtracy.de": { - "name": "vtracy.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "vungle": { - "name": "Vungle", - "categoryId": 4, - "url": "https://vungle.com/", - "companyId": "blackstone", - "source": "AdGuard" - }, - "vuukle": { - "name": "Vuukle", - "categoryId": 6, - "url": "http://vuukle.com/", - "companyId": "vuukle" - }, - "vzaar": { - "name": "Vzaar", - "categoryId": 0, - "url": "http://vzaar.com/", - "companyId": "vzaar" - }, - "w3counter": { - "name": "W3Counter", - "categoryId": 6, - "url": "http://www.w3counter.com/", - "companyId": "awio_web_services" - }, - "w3roi": { - "name": "w3roi", - "categoryId": 6, - "url": "http://www.w3roi.com/", - "companyId": "w3roi" - }, - "wahoha": { - "name": "Wahoha", - "categoryId": 2, - "url": "http://wahoha.com/", - "companyId": "wahoha" - }, - "walkme.com": { - "name": "WalkMe", - "categoryId": 2, - "url": "https://www.walkme.com/", - "companyId": "walkme" - }, - "wall_street_on_demand": { - "name": "Wall Street on Demand", - "categoryId": 4, - "url": "http://www.wallst.com", - "companyId": "markit_on_demand" - }, - "walmart": { - "name": "Walmart", - "categoryId": 8, - "url": null, - "companyId": null - }, - "wamcash": { - "name": "Wamcash", - "categoryId": 3, - "url": "http://wamcash.com/", - "companyId": "wamcash" - }, - "wanelo": { - "name": "Wanelo", - "categoryId": 2, - "url": "https://wanelo.com/", - "companyId": "wanelo" - }, - "warp.ly": { - "name": "Warp.ly", - "categoryId": 6, - "url": "https://warp.ly/", - "companyId": "warp.ly" - }, - "way2traffic": { - "name": "Way2traffic", - "categoryId": 4, - "url": "http://www.way2traffic.com/", - "companyId": "way2traffic" - }, - "wayfair_com": { - "name": "Wayfair", - "categoryId": 8, - "url": "https://www.wayfair.com/", - "companyId": null - }, - "wdr.de": { - "name": "wdr.de", - "categoryId": 8, - "url": "https://www1.wdr.de/index.html", - "companyId": null - }, - "web-stat": { - "name": "Web-Stat", - "categoryId": 6, - "url": "http://www.web-stat.net/", - "companyId": "web-stat" - }, - "web.de": { - "name": "web.de", - "categoryId": 8, - "url": "https://web.de/", - "companyId": null - }, - "web.stat": { - "name": "Web.STAT", - "categoryId": 6, - "url": "http://webstat.net/", - "companyId": "web.stat" - }, - "web_service_award": { - "name": "Web Service Award", - "categoryId": 6, - "url": "http://webserviceaward.com/english/", - "companyId": "web_service_award" - }, - "web_traxs": { - "name": "Web Traxs", - "categoryId": 6, - "url": "http://websolutions.thomasnet.com/web-traxs-analytics.php", - "companyId": "thomasnet_websolutions" - }, - "web_wipe_analytics": { - "name": "Web Wipe Analytics", - "categoryId": 6, - "url": "http://tensquare.de", - "companyId": "tensquare" - }, - "webads": { - "name": "WebAds", - "categoryId": 4, - "url": "http://www.webads.co.uk/", - "companyId": "webads" - }, - "webantenna": { - "name": "WebAntenna", - "categoryId": 6, - "url": "http://www.bebit.co.jp/webantenna/", - "companyId": "webantenna" - }, - "webclicks24_com": { - "name": "webclicks24.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "webclose.net": { - "name": "webclose.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "webcollage": { - "name": "Webcollage", - "categoryId": 2, - "url": "http://www.webcollage.com/", - "companyId": "webcollage" - }, - "webedia": { - "name": "Webedia", - "categoryId": 4, - "url": "http://fr.webedia-group.com/", - "companyId": "fimalac_group" - }, - "webeffective": { - "name": "WebEffective", - "categoryId": 6, - "url": "http://www.keynote.com/", - "companyId": "keynote_systems" - }, - "webengage": { - "name": "WebEngage", - "categoryId": 2, - "url": "http://webengage.com/", - "companyId": "webengage" - }, - "webgains": { - "name": "Webgains", - "categoryId": 8, - "url": null, - "companyId": null - }, - "webgozar": { - "name": "WebGozar", - "categoryId": 6, - "url": "http://webgozar.com/", - "companyId": "webgozar" - }, - "webhelpje": { - "name": "Webhelpje", - "categoryId": 2, - "url": "http://www.webhelpje.nl/", - "companyId": "webhelpje" - }, - "webleads_tracker": { - "name": "Webleads Tracker", - "categoryId": 6, - "url": "http://www.webleads-tracker.fr/", - "companyId": "webleads_tracker" - }, - "webmecanik": { - "name": "Webmecanik", - "categoryId": 6, - "url": "http://www.webmecanik.com/en/", - "companyId": "webmecanik" - }, - "weborama": { - "name": "Weborama", - "categoryId": 4, - "url": "https://weborama.com/", - "companyId": "weborama" - }, - "webprospector": { - "name": "WebProspector", - "categoryId": 6, - "url": "http://www.webprospector.de/", - "companyId": "webprospector" - }, - "webstat": { - "name": "WebSTAT", - "categoryId": 6, - "url": "http://www.webstat.com/", - "companyId": "webstat" - }, - "webstat.se": { - "name": "Webstat.se", - "categoryId": 6, - "url": "http://www.webstat.se/", - "companyId": "webstat.se" - }, - "webtrack": { - "name": "webtrack", - "categoryId": 6, - "url": "http://www.webtrack.biz/", - "companyId": "webtrack" - }, - "webtraffic": { - "name": "Webtraffic", - "categoryId": 6, - "url": "http://www.webtraffic.se/", - "companyId": "schibsted_asa" - }, - "webtrekk": { - "name": "Webtrekk", - "categoryId": 6, - "url": "http://www.webtrekk.com/", - "companyId": "webtrekk" - }, - "webtrekk_cc": { - "name": "Webtrek Control Cookie", - "categoryId": 6, - "url": "https://www.webtrekk.com/en/home/", - "companyId": "webtrekk" - }, - "webtrends": { - "name": "Webtrends", - "categoryId": 6, - "url": "http://www.webtrends.com/", - "companyId": "webtrends" - }, - "webtrends_ads": { - "name": "Webtrends Ads", - "categoryId": 4, - "url": "http://www.webtrends.com", - "companyId": "webtrends" - }, - "webvisor": { - "name": "WebVisor", - "categoryId": 6, - "url": "http://webvisor.ru", - "companyId": "yandex" - }, - "wedcs": { - "name": "WEDCS", - "categoryId": 4, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "weebly_ads": { - "name": "Weebly Ads", - "categoryId": 4, - "url": "http://www.weebly.com", - "companyId": "weebly" - }, - "weibo_widget": { - "name": "Weibo Widget", - "categoryId": 4, - "url": "http://www.sina.com/", - "companyId": "sina" - }, - "westlotto_com": { - "name": "westlotto.com", - "categoryId": 8, - "url": "http://westlotto.com/", - "companyId": null - }, - "wetter_com": { - "name": "Wetter.com", - "categoryId": 8, - "url": "http://www.wetter.com/", - "companyId": null - }, - "whatbroadcast": { - "name": "Whatbroadcast", - "categoryId": 2, - "url": "https://www.whatsbroadcast.com/", - "companyId": "whatsbroadcast" - }, - "whatsapp": { - "name": "WhatsApp", - "categoryId": 8, - "url": "https://www.whatsapp.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "whisper": { - "name": "Whisper", - "categoryId": 7, - "url": "https://whisper.sh/", - "companyId": "medialab", - "source": "AdGuard" - }, - "whos.amung.us": { - "name": "Whos.amung.us", - "categoryId": 6, - "url": "http://whos.amung.us/", - "companyId": "whos.amung.us" - }, - "whoson": { - "name": "WhosOn", - "categoryId": 6, - "url": "http://www.whoson.com/", - "companyId": "whoson" - }, - "wibbitz": { - "name": "Wibbitz", - "categoryId": 0, - "url": "http://www.wibbitz.com/", - "companyId": "wibbitz" - }, - "wibiya_toolbar": { - "name": "Wibiya Toolbar", - "categoryId": 7, - "url": "http://www.wibiya.com/", - "companyId": "wibiya" - }, - "widdit": { - "name": "Widdit", - "categoryId": 2, - "url": "http://www.predictad.com/", - "companyId": "widdit" - }, - "widerplanet": { - "name": "WiderPlanet", - "categoryId": 4, - "url": "http://widerplanet.com/", - "companyId": "wider_planet" - }, - "widespace": { - "name": "Widespace", - "categoryId": 4, - "url": "https://www.widespace.com/", - "companyId": "widespace" - }, - "widgetbox": { - "name": "WidgetBox", - "categoryId": 2, - "url": "http://www.widgetbox.com/", - "companyId": "widgetbox" - }, - "wiget_media": { - "name": "Wiget Media", - "categoryId": 4, - "url": "http://wigetmedia.com", - "companyId": "wiget_media" - }, - "wigzo": { - "name": "Wigzo", - "categoryId": 4, - "url": "https://www.wigzo.com/", - "companyId": "wigzo" - }, - "wikia-services.com": { - "name": "Wikia Services", - "categoryId": 8, - "url": "http://www.wikia.com/fandom", - "companyId": "wikia" - }, - "wikia_beacon": { - "name": "Wikia Beacon", - "categoryId": 6, - "url": "http://www.wikia.com/", - "companyId": "wikia" - }, - "wikia_cdn": { - "name": "Wikia CDN", - "categoryId": 9, - "url": "http://www.wikia.com/fandom", - "companyId": "wikia" - }, - "wikimedia.org": { - "name": "WikiMedia", - "categoryId": 9, - "url": "https://wikimediafoundation.org/", - "companyId": "wikimedia_foundation" - }, - "winaffiliates": { - "name": "Winaffiliates", - "categoryId": 6, - "url": "http://www.winaffiliates.com/", - "companyId": "winaffiliates" - }, - "windows_maps": { - "name": "Windows Maps", - "categoryId": 8, - "url": "https://www.microsoft.com/store/apps/9wzdncrdtbvb", - "companyId": "microsoft", - "source": "AdGuard" - }, - "windows_notifications": { - "name": "The Windows Push Notification Services", - "categoryId": 8, - "url": "https://learn.microsoft.com/en-us/windows/apps/design/shell/tiles-and-notifications/windows-push-notification-services--wns--overview", - "companyId": "microsoft", - "source": "AdGuard" - }, - "windows_time": { - "name": "Windows Time Service", - "categoryId": 8, - "url": "https://learn.microsoft.com/en-us/windows-server/networking/windows-time-service/how-the-windows-time-service-works", - "companyId": "microsoft", - "source": "AdGuard" - }, - "windowsupdate": { - "name": "Windows Update", - "categoryId": 9, - "url": "https://support.microsoft.com/en-us/windows/windows-update-faq-8a903416-6f45-0718-f5c7-375e92dddeb2", - "companyId": "microsoft", - "source": "AdGuard" - }, - "wipmania": { - "name": "WIPmania", - "categoryId": 6, - "url": "http://www.wipmania.com/", - "companyId": "wipmania" - }, - "wiqhit": { - "name": "WiQhit", - "categoryId": 6, - "url": "https://wiqhit.com/nl/", - "companyId": "wiqhit" - }, - "wirecard": { - "name": "Wirecard", - "categoryId": 2, - "url": "https://www.wirecard.com/", - "companyId": null - }, - "wiredminds": { - "name": "WiredMinds", - "categoryId": 6, - "url": "http://www.wiredminds.de/", - "companyId": "wiredminds" - }, - "wirtualna_polska": { - "name": "Wirtualna Polska", - "categoryId": 4, - "url": "http://reklama.wp.pl/", - "companyId": "wirtualna_polska" - }, - "wisepops": { - "name": "WisePops", - "categoryId": 4, - "url": "http://wisepops.com/", - "companyId": "wisepops" - }, - "wishpond": { - "name": "Wishpond", - "categoryId": 2, - "url": "http://wishpond.com", - "companyId": "wishpond" - }, - "wistia": { - "name": "Wistia", - "categoryId": 6, - "url": "http://wistia.com/", - "companyId": "wistia" - }, - "wix.com": { - "name": "Wix", - "categoryId": 8, - "url": "https://www.wix.com/", - "companyId": "wix" - }, - "wixab": { - "name": "Wixab", - "categoryId": 6, - "url": "http://wixab.com/en/", - "companyId": "wixab" - }, - "wixmp": { - "name": "Wix Media Platform", - "categoryId": 9, - "url": "https://www.wixmp.com/", - "companyId": "wix" - }, - "wnzmauurgol.com": { - "name": "wnzmauurgol.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "wonderpush": { - "name": "WonderPush", - "categoryId": 2, - "url": "https://www.wonderpush.com/", - "companyId": "wonderpush" - }, - "woopic.com": { - "name": "woopic.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "woopra": { - "name": "Woopra", - "categoryId": 6, - "url": "http://www.woopra.com/", - "companyId": "woopra" - }, - "wordpress_ads": { - "name": "Wordpress Ads", - "categoryId": 4, - "url": "https://wordpress.com/", - "companyId": "automattic" - }, - "wordpress_stats": { - "name": "WordPress Stats", - "categoryId": 6, - "url": "http://wordpress.org/extend/plugins/stats/", - "companyId": "automattic" - }, - "wordstream": { - "name": "WordStream", - "categoryId": 6, - "url": "http://www.wordstream.com/", - "companyId": "wordstream" - }, - "worldnaturenet_xyz": { - "name": "worldnaturenet.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "wp.pl": { - "name": "Wirtualna Polska ", - "categoryId": 4, - "url": "https://www.wp.pl/", - "companyId": "wp" - }, - "wp_engine": { - "name": "WP Engine", - "categoryId": 5, - "url": "https://wpengine.com/", - "companyId": "wp_engine" - }, - "writeup_clickanalyzer": { - "name": "WriteUp ClickAnalyzer", - "categoryId": 6, - "url": "http://www.writeup.co.jp/", - "companyId": "writeup" - }, - "wurfl": { - "name": "WURFL", - "categoryId": 6, - "url": "https://web.wurfl.io/", - "companyId": "scientiamobile" - }, - "wwwpromoter": { - "name": "WWWPromoter", - "categoryId": 4, - "url": "http://wwwpromoter.com/", - "companyId": "wwwpromoter" - }, - "wykop": { - "name": "Wykop", - "categoryId": 7, - "url": "http://www.wykop.pl", - "companyId": "wykop" - }, - "wysistat.com": { - "name": "WysiStat", - "categoryId": 6, - "url": "https://www.wysistat.net/", - "companyId": "wysistat" - }, - "wywy.com": { - "name": "wywy", - "categoryId": 4, - "url": "http://wywy.com/", - "companyId": "tvsquared" - }, - "x-lift": { - "name": "X-lift", - "categoryId": 4, - "url": "https://www.x-lift.jp/", - "companyId": "x-lift" - }, - "xapads": { - "name": "Xapads", - "categoryId": 4, - "url": "http://www.xapads.com/", - "companyId": "xapads" - }, - "xen-media.com": { - "name": "Xen Media", - "categoryId": 11, - "url": "https://www.xenmedia.net/", - "companyId": "xenmedia", - "source": "AdGuard" - }, - "xfreeservice.com": { - "name": "xfreeservice.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "xhamster": { - "name": "xHamster", - "categoryId": 3, - "url": "https://xhamster.com/", - "companyId": "xhamster", - "source": "AdGuard" - }, - "xiaomi": { - "name": "Xiaomi", - "categoryId": 8, - "url": "https://www.mi.com/", - "companyId": "xiaomi", - "source": "AdGuard" - }, - "xing": { - "name": "Xing", - "categoryId": 6, - "url": "http://www.xing.com/", - "companyId": "xing" - }, - "xmediaclicks": { - "name": "XmediaClicks", - "categoryId": 3, - "url": "http://exoclick.com/", - "companyId": "exoclick" - }, - "xnxx_cdn": { - "name": "XNXX", - "categoryId": 9, - "url": "https://www.xnxx.com", - "companyId": "xnxx", - "source": "AdGuard" - }, - "xplosion": { - "name": "xplosion", - "categoryId": 4, - "url": "http://www.xplosion.de/", - "companyId": "xplosion_interactive" - }, - "xtend": { - "name": "XTEND", - "categoryId": 4, - "url": "http://www.xtendmedia.com/", - "companyId": "matomy_media" - }, - "xvideos_com": { - "name": "Xvideos", - "categoryId": 8, - "url": "https://www.xvideos.com", - "companyId": "xvideos", - "source": "AdGuard" - }, - "xxxlshop.de": { - "name": "XXXLutz", - "categoryId": 8, - "url": "https://www.xxxlutz.de/", - "companyId": "xxxlutz", - "source": "AdGuard" - }, - "xxxlutz": { - "name": "XXXLutz", - "categoryId": 8, - "url": "https://www.xxxlutz.de/", - "companyId": "xxxlutz" - }, - "yabbi": { - "name": "Yabbi", - "categoryId": 4, - "url": "https://yabbi.me/", - "companyId": "yabbi", - "source": "AdGuard" - }, - "yabuka": { - "name": "Yabuka", - "categoryId": 4, - "url": "http://www.yabuka.com/", - "companyId": "yabuka" - }, - "yahoo": { - "name": "Yahoo!", - "categoryId": 6, - "url": "https://yahoo.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "yahoo_ad_exchange": { - "name": "Yahoo! Ad Exchange", - "categoryId": 4, - "url": "https://www.verizonmedia.com/advertising", - "companyId": "verizon" - }, - "yahoo_ad_manager": { - "name": "Yahoo! Ad Manager Plus", - "categoryId": 4, - "url": "https://developer.yahoo.com/analytics/", - "companyId": "verizon" - }, - "yahoo_advertising": { - "name": "Yahoo! Advertising", - "categoryId": 4, - "url": "https://www.advertising.yahooinc.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "yahoo_analytics": { - "name": "Yahoo! Analytics", - "categoryId": 6, - "url": "http://web.analytics.yahoo.com/", - "companyId": "verizon" - }, - "yahoo_commerce_central": { - "name": "Yahoo! Commerce Central", - "categoryId": 4, - "url": "http://lexity.com/", - "companyId": "verizon" - }, - "yahoo_dot_tag": { - "name": "Yahoo! DOT tag", - "categoryId": 4, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "yahoo_japan_retargeting": { - "name": "Yahoo! Japan Retargeting", - "categoryId": 4, - "url": "http://www.yahoo.com/", - "companyId": "yahoo_japan" - }, - "yahoo_overture": { - "name": "Yahoo! Overture", - "categoryId": 4, - "url": "http://searchmarketing.yahoo.com", - "companyId": "verizon" - }, - "yahoo_search": { - "name": "Yahoo! Search", - "categoryId": 4, - "url": "https://search.yahooinc.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "yahoo_small_business": { - "name": "Yahoo! Small Business", - "categoryId": 4, - "url": "http://www.pixazza.com/", - "companyId": "verizon" - }, - "yandex": { - "name": "Yandex", - "categoryId": 4, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yandex.api": { - "name": "Yandex.API", - "categoryId": 2, - "url": "http://api.yandex.ru/", - "companyId": "yandex" - }, - "yandex_adexchange": { - "name": "Yandex AdExchange", - "categoryId": 4, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yandex_advisor": { - "name": "Yandex.Advisor", - "categoryId": 12, - "url": "https://sovetnik.yandex.ru/", - "companyId": "yandex" - }, - "yandex_appmetrica": { - "name": "Yandex AppMetrica", - "categoryId": 101, - "url": "https://appmetrica.yandex.com/", - "companyId": "yandex", - "source": "AdGuard" - }, - "yandex_direct": { - "name": "Yandex.Direct", - "categoryId": 6, - "url": "https://direct.yandex.com/", - "companyId": "yandex" - }, - "yandex_metrika": { - "name": "Yandex Metrika", - "categoryId": 6, - "url": "https://metrica.yandex.com/", - "companyId": "yandex" - }, - "yandex_passport": { - "name": "Yandex Passport", - "categoryId": 2, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yapfiles.ru": { - "name": "yapfiles.ru", - "categoryId": 8, - "url": "https://www.yapfiles.ru/", - "companyId": null - }, - "yashi": { - "name": "Yashi", - "categoryId": 4, - "url": "http://www.yashi.com/", - "companyId": "mass2" - }, - "ybrant_media": { - "name": "Ybrant Media", - "categoryId": 4, - "url": "http://www.addynamix.com/index.html", - "companyId": "ybrant_media" - }, - "ycontent": { - "name": "Ycontent", - "categoryId": 0, - "url": "http://ycontent.com.br/", - "companyId": "ycontent" - }, - "yektanet": { - "name": "Yektanet", - "categoryId": 4, - "url": "https://yektanet.com/", - "companyId": "yektanet" - }, - "yengo": { - "name": "Yengo", - "categoryId": 4, - "url": "http://www.yengo.com/", - "companyId": "yengo" - }, - "yesmail": { - "name": "Yesmail", - "categoryId": 4, - "url": "http://www.yesmail.com/", - "companyId": "yes_mail" - }, - "yesup_advertising": { - "name": "YesUp Advertising", - "categoryId": 4, - "url": "http://yesup.net/", - "companyId": "yesup" - }, - "yesware": { - "name": "Yesware", - "categoryId": 2, - "url": "http://www.yesware.com/", - "companyId": "yesware" - }, - "yieldbot": { - "name": "Yieldbot", - "categoryId": 6, - "url": "https://www.yieldbot.com/", - "companyId": "yieldbot" - }, - "yieldify": { - "name": "Yieldify", - "categoryId": 4, - "url": "http://www.yieldify.com/", - "companyId": "yieldify" - }, - "yieldlab": { - "name": "Yieldlab", - "categoryId": 4, - "url": "http://www.yieldlab.de/", - "companyId": "prosieben_sat1" - }, - "yieldlove": { - "name": "Yieldlove", - "categoryId": 4, - "url": "https://www.yieldlove.com/", - "companyId": "yieldlove" - }, - "yieldmo": { - "name": "Yieldmo", - "categoryId": 4, - "url": "https://www.yieldmo.com/", - "companyId": "yieldmo" - }, - "yieldr": { - "name": "Yieldr Ads", - "categoryId": 4, - "url": "https://www.yieldr.com/", - "companyId": "yieldr" - }, - "yieldr_air": { - "name": "Yieldr Air", - "categoryId": 6, - "url": "https://www.yieldr.com/", - "companyId": "yieldr" - }, - "yieldsquare": { - "name": "YieldSquare", - "categoryId": 4, - "url": "http://www.yieldsquare.com/", - "companyId": "yieldsquare" - }, - "yle": { - "name": "YLE", - "categoryId": 6, - "url": "http://yle.fi/", - "companyId": "yle" - }, - "yllixmedia": { - "name": "YllixMedia", - "categoryId": 4, - "url": "http://yllix.com/", - "companyId": "yllixmedia" - }, - "ymetrica1.com": { - "name": "ymetrica1.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ymzrrizntbhde.com": { - "name": "ymzrrizntbhde.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "yo_button": { - "name": "Yo Button", - "categoryId": 2, - "url": "http://www.justyo.co/", - "companyId": "yo" - }, - "yodle": { - "name": "Yodle", - "categoryId": 4, - "url": "http://www.yodle.com/", - "companyId": "yodle" - }, - "yola_analytics": { - "name": "Yola Analytics", - "categoryId": 6, - "url": "https://www.yola.com/", - "companyId": "yola" - }, - "yomedia": { - "name": "Yomedia", - "categoryId": 4, - "url": "http://www.pinetech.vn/", - "companyId": "yomedia" - }, - "yoochoose.net": { - "name": "Ibexa Personalizaton Software", - "categoryId": 4, - "url": "https://yoochoose.net/", - "companyId": "ibexa", - "source": "AdGuard" - }, - "yotpo": { - "name": "Yotpo", - "categoryId": 1, - "url": "https://www.yotpo.com/", - "companyId": "yotpo" - }, - "yottaa": { - "name": "Yottaa", - "categoryId": 6, - "url": "https://www.yottaa.com/", - "companyId": "yottaa" - }, - "yottly": { - "name": "Yottly", - "categoryId": 4, - "url": "https://yottly.com/", - "companyId": "yottly" - }, - "youcanbookme": { - "name": "YouCanBookMe", - "categoryId": 2, - "url": "https://youcanbook.me/", - "companyId": "youcanbookme" - }, - "youku": { - "name": "Youku", - "categoryId": 0, - "url": "http://www.youku.com/", - "companyId": "youku" - }, - "youporn": { - "name": "YouPorn", - "categoryId": 3, - "url": "https://www.youporn.com/", - "companyId": "youporn", - "source": "AdGuard" - }, - "youtube": { - "name": "YouTube", - "categoryId": 0, - "url": "https://www.youtube.com/", - "companyId": "google" - }, - "youtube_subscription": { - "name": "YouTube Subscription", - "categoryId": 2, - "url": "http://www.youtube.com/", - "companyId": "google" - }, - "yp": { - "name": "YellowPages", - "categoryId": 4, - "url": "https://www.yellowpages.com/", - "companyId": "thryv" - }, - "ysance": { - "name": "YSance", - "categoryId": 4, - "url": "http://www.ysance.com/en/index.html", - "companyId": "ysance" - }, - "yume": { - "name": "YuMe", - "categoryId": 4, - "url": "http://www.yume.com/", - "companyId": "yume" - }, - "yume,_inc.": { - "name": "YuMe, Inc.", - "categoryId": 4, - "url": "http://www.yume.com/", - "companyId": "yume" - }, - "yusp": { - "name": "Yusp", - "categoryId": 6, - "url": "https://www.yusp.com/", - "companyId": "yusp" - }, - "zadarma": { - "name": "Zadarma", - "categoryId": 2, - "url": "https://zadarma.com/", - "companyId": "zadarma" - }, - "zalando_de": { - "name": "zalando.de", - "categoryId": 8, - "url": "https://zalando.de/", - "companyId": "zalando" - }, - "zalo": { - "name": "Zalo", - "categoryId": 2, - "url": "https://zaloapp.com/", - "companyId": "zalo" - }, - "zanox": { - "name": "Zanox", - "categoryId": 4, - "url": "http://www.zanox.com/us/", - "companyId": "axel_springer" - }, - "zaparena": { - "name": "zaparena", - "categoryId": 4, - "url": "http://www.zaparena.com/", - "companyId": "zapunited" - }, - "zappos": { - "name": "Zappos", - "categoryId": 4, - "url": "http://www.zappos.com/", - "companyId": "zappos" - }, - "zdassets.com": { - "name": "Zendesk CDN", - "categoryId": 8, - "url": "http://www.zendesk.com/", - "companyId": "zendesk" - }, - "zebestof.com": { - "name": "Zebestof", - "categoryId": 4, - "url": "http://www.zebestof.com/en/home/", - "companyId": "zebestof" - }, - "zedo": { - "name": "Zedo", - "categoryId": 4, - "url": "http://www.zedo.com/", - "companyId": "zedo" - }, - "zemanta": { - "name": "Zemanta", - "categoryId": 2, - "url": "http://www.zemanta.com/", - "companyId": "zemanta" - }, - "zencoder": { - "name": "Zencoder", - "categoryId": 0, - "url": "https://zencoder.com/en/", - "companyId": "zencoder" - }, - "zendesk": { - "name": "Zendesk", - "categoryId": 2, - "url": "http://www.zendesk.com/", - "companyId": "zendesk" - }, - "zergnet": { - "name": "ZergNet", - "categoryId": 2, - "url": "http://www.zergnet.com/info", - "companyId": "zergnet" - }, - "zero.kz": { - "name": "ZERO.kz", - "categoryId": 6, - "url": "http://zero.kz/", - "companyId": "neolabs_zero" - }, - "zeta": { - "name": "Zeta", - "categoryId": 2, - "url": "https://zetaglobal.com/", - "companyId": "zeta" - }, - "zeusclicks": { - "name": "ZeusClicks", - "categoryId": 4, - "url": "http://zeusclicks.com/", - "companyId": "zeusclicks", - "source": "AdGuard" - }, - "ziff_davis": { - "name": "Ziff Davis", - "categoryId": 4, - "url": "https://www.ziffdavis.com/", - "companyId": "ziff_davis" - }, - "zift_solutions": { - "name": "Zift Solutions", - "categoryId": 6, - "url": "https://ziftsolutions.com/", - "companyId": "zift_solutions" - }, - "zimbio.com": { - "name": "Zimbio", - "categoryId": 8, - "url": "http://www.zimbio.com/", - "companyId": "livinglymedia", - "source": "AdGuard" - }, - "zippyshare_widget": { - "name": "Zippyshare Widget", - "categoryId": 2, - "url": "http://www.zippyshare.com", - "companyId": "zippyshare" - }, - "zmags": { - "name": "Zmags", - "categoryId": 6, - "url": "https://zmags.com/", - "companyId": "zmags" - }, - "zmctrack.net": { - "name": "zmctrack.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zog.link": { - "name": "zog.link", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zoho": { - "name": "Zoho", - "categoryId": 6, - "url": "https://www.zohocorp.com/index.html", - "companyId": "zoho_corp" - }, - "zononi.com": { - "name": "zononi.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "zopim": { - "name": "Zopim", - "categoryId": 2, - "url": "http://www.zopim.com/", - "companyId": "zendesk" - }, - "zukxd6fkxqn.com": { - "name": "zukxd6fkxqn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zwaar": { - "name": "Zwaar", - "categoryId": 4, - "url": "http://www.zwaar.org", - "companyId": "zwaar" - }, - "zypmedia": { - "name": "ZypMedia", - "categoryId": 4, - "url": "http://www.zypmedia.com/", - "companyId": "zypmedia" - } - }, - "trackerDomains": { - "mmtro.com": "1000mercis", - "creative-serving.com": "161media", - "p161.net": "161media", - "analytics.163.com": "163", - "1822direkt.de": "1822direkt.de", - "1dmp.io": "1dmp.io", - "opecloud.com": "1plusx", - "1sponsor.com": "1sponsor", - "tm.dentsu.de": "1tag", - "1and1.com": "1und1", - "1und1.de": "1und1", - "uicdn.com": "1und1", - "website-start.de": "1und1", - "24-ads.com": "24-ads.com", - "247-inc.net": "24_7", - "d1af033869koo7.cloudfront.net": "24_7", - "counter.24log.ru": "24log", - "24smi.net": "24smi", - "24smi.org": "24smi", - "2leep.com": "2leep", - "33across.com": "33across", - "3dstats.com": "3dstats", - "3gpp.org": "3gpp", - "3gppnetwork.org": "3gpp", - "4cdn.org": "4chan", - "4finance.com": "4finance_com", - "4wnet.com": "4w_marketplace", - "d3aa0ztdn3oibi.cloudfront.net": "500friends", - "51.la": "51.la", - "5min.com": "5min_media", - "d1lm7kd3bd3yo9.cloudfront.net": "6sense", - "grepdata.com": "6sense", - "77tracking.com": "77tracking", - "swm.digital": "7plus", - "7tv.de": "7tv.de", - "888media.net": "888media", - "hit.8digits.com": "8digits", - "94j7afz2nr.xyz": "94j7afz2nr.xyz", - "statsanalytics.com": "99stats", - "a3cloud.net": "a3cloud_net", - "a8.net": "a8", - "aaxads.com": "aaxads.com", - "abtasty.com": "ab_tasty", - "d1447tq2m68ekg.cloudfront.net": "ab_tasty", - "ab.co": "abc", - "abc-cdn.net.au": "abc", - "abc-host.net": "abc", - "abc-host.net.au": "abc", - "abc-prod.net.au": "abc", - "abc-stage.net.au": "abc", - "abc-test.net.au": "abc", - "abc.net.au": "abc", - "abcaustralia.net.au": "abc", - "abcradio.net.au": "abc", - "ablida.de": "ablida", - "ablida.net": "ablida", - "durasite.net": "accelia", - "accengage.net": "accengage", - "ax.xrea.com": "accessanalyzer", - "accesstrade.net": "accesstrade", - "agcdn.com": "accord_group", - "accmgr.com": "accordant_media", - "p-td.com": "accuen_media", - "acestream.net": "acestream.net", - "acint.net": "acint.net", - "acloudimages.com": "acloudimages", - "acpm.fr": "acpm.fr", - "acquia.com": "acquia.com", - "ziyu.net": "acrweb", - "actionpay.ru": "actionpay", - "adnwb.ru": "actionpay", - "adonweb.ru": "actionpay", - "active-agent.com": "active_agent", - "trackcmp.net": "active_campaign", - "active-srv02.de": "active_performance", - "active-tracking.de": "active_performance", - "activeconversion.com": "activeconversion", - "a-cast.jp": "activecore", - "activemeter.com": "activemeter", - "go.activengage.com": "activengage", - "actonsoftware.com": "acton", - "acuityplatform.com": "acuity_ads", - "acxiom-online.com": "acxiom", - "acxiom.com": "acxiom", - "ad-blocker.org": "ad-blocker.org", - "ads.ad-center.com": "ad-center", - "ad-delivery.net": "ad-delivery.net", - "ad-sys.com": "ad-sys", - "adagionet.com": "ad.agio", - "ad2click.go2cloud.org": "ad2click", - "ad2games.com": "ad2games", - "ad360.vn": "ad360", - "ads.ad4game.com": "ad4game", - "ad4mat.ar": "ad4mat", - "ad4mat.at": "ad4mat", - "ad4mat.be": "ad4mat", - "ad4mat.bg": "ad4mat", - "ad4mat.br": "ad4mat", - "ad4mat.ch": "ad4mat", - "ad4mat.co.uk": "ad4mat", - "ad4mat.cz": "ad4mat", - "ad4mat.de": "ad4mat", - "ad4mat.dk": "ad4mat", - "ad4mat.es": "ad4mat", - "ad4mat.fi": "ad4mat", - "ad4mat.fr": "ad4mat", - "ad4mat.gr": "ad4mat", - "ad4mat.hu": "ad4mat", - "ad4mat.it": "ad4mat", - "ad4mat.mx": "ad4mat", - "ad4mat.net": "ad4mat", - "ad4mat.nl": "ad4mat", - "ad4mat.no": "ad4mat", - "ad4mat.pl": "ad4mat", - "ad4mat.ro": "ad4mat", - "ad4mat.ru": "ad4mat", - "ad4mat.se": "ad4mat", - "ad4mat.tr": "ad4mat", - "ad6.fr": "ad6media", - "ad6media.co.uk": "ad6media", - "ad6media.com": "ad6media", - "ad6media.es": "ad6media", - "ad6media.fr": "ad6media", - "a2dfp.net": "ad_decisive", - "addynamo.net": "ad_dynamo", - "ebis.ne.jp": "ad_ebis", - "adlightning.com": "ad_lightning", - "admagnet.net": "ad_magnet", - "amimg.net": "ad_magnet", - "adspirit.de": "ad_spirit", - "adspirit.net": "ad_spirit", - "adac.de": "adac_de", - "adacado.com": "adacado", - "ozonemedia.com": "adadyn", - "adrtx.net": "adality_gmbh", - "adalliance.io": "adalliance.io", - "adalyser.com": "adalyser.com", - "adaos-ads.net": "adaos", - "adap.tv": "adap.tv", - "smrtlnks.com": "adaptiveblue_smartlinks", - "yieldoptimizer.com": "adara_analytics", - "adnetwork.adasiaholdings.com": "adasia_holdings", - "adbetclickin.pink": "adbetclickin.pink", - "adbetnet.com": "adbetnet.com", - "adblade.com": "adblade.com", - "adbooth.com": "adbooth", - "adbooth.net": "adbooth", - "adbox.lv": "adbox", - "adbrn.com": "adbrain", - "adbrite.com": "adbrite", - "adbull.com": "adbull", - "adbutler.com": "adbutler", - "adc-serv.net": "adc_media", - "adc-srv.net": "adc_media", - "adcash.com": "adcash", - "vuroll.in": "adchakra", - "acs86.com": "adchina", - "csbew.com": "adchina", - "irs09.com": "adchina", - "adcito.com": "adcito", - "adcitomedia.com": "adcito", - "adclear.net": "adclear", - "swift.adclerks.com": "adclerks", - "adclickmedia.com": "adclickmedia", - "adclickzone.go2cloud.org": "adclickzone", - "ad-cloud.jp": "adcloud", - "admarvel.s3.amazonaws.com": "adcolony", - "ads.admarvel.com": "adcolony", - "adcolony.com": "adcolony", - "adrdgt.com": "adconion", - "amgdgt.com": "adconion", - "adcrowd.com": "adcrowd", - "shop2market.com": "adcurve", - "addtocalendar.com": "add_to_calendar", - "dpmsrv.com": "addaptive", - "yagiay.com": "addefend", - "addfreestats.com": "addfreestats", - "addinto.com": "addinto", - "addshoppers.com": "addshoppers", - "shop.pe": "addshoppers", - "addthis.com": "addthis", - "addthiscdn.com": "addthis", - "addthisedge.com": "addthis", - "b2btracking.addvalue.de": "addvalue", - "addyon.com": "addyon", - "adeasy.ru": "adeasy", - "ipredictive.com": "adelphic", - "adengage.com": "adengage", - "adespresso.com": "adespresso", - "adexcite.com": "adexcite", - "adextent.com": "adextent", - "adf.ly": "adf.ly", - "adfalcon.com": "adfalcon", - "adfoc.us": "adfocus", - "js.adforgames.com": "adforgames", - "adform.net": "adform", - "adformdsp.net": "adform", - "seadform.net": "adform", - "adfox.ru": "adfox", - "adwolf.ru": "adfox", - "adfreestyle.pl": "adfreestyle", - "adfront.org": "adfront", - "adfrontiers.com": "adfrontiers", - "adgebra.co.in": "adgebra", - "adgenie.co.uk": "adgenie", - "ad.adgile.com": "adgile", - "ad.antventure.com": "adgile", - "adglare.net": "adglare.net", - "adsafety.net": "adglue", - "smartadcheck.de": "adgoal", - "smartredirect.de": "adgoal", - "adgorithms.com": "adgorithms", - "adgoto.com": "adgoto", - "adguard.com": "adguard", - "adguard.app": "adguard", - "adguard.info": "adguard", - "adguard.io": "adguard", - "adguard.org": "adguard", - "adtidy.org": "adguard", - "agrd.io": "adguard", - "agrd.eu": "adguard", - "adguard-dns.com": "adguard_dns", - "adguard-dns.io": "adguard_dns", - "adguard-vpn.com": "adguard_vpn", - "adguard-vpn.online": "adguard_vpn", - "adguardvpn.com": "adguard_vpn", - "adhands.ru": "adhands", - "adhese.be": "adhese", - "adhese.com": "adhese", - "adhese.net": "adhese", - "adhitzads.com": "adhitz", - "adhood.com": "adhood", - "afy11.net": "adify", - "cdn.adikteev.com": "adikteev", - "adimpact.com": "adimpact", - "adinch.com": "adinch", - "adition.com": "adition", - "adjal.com": "adjal", - "cdn.adjs.net": "adjs", - "adjug.com": "adjug", - "adjust.com": "adjust", - "adj.st": "adjust", - "adjust.io": "adjust", - "adjust.net.in": "adjust", - "adjust.world": "adjust", - "apptrace.com": "adjust", - "adk2.com": "adk2", - "cdn.adsrvmedia.com": "adk2", - "cdn.cdnrl.com": "adk2", - "adklip.com": "adklip", - "adkengage.com": "adknowledge", - "adknowledge.com": "adknowledge", - "bidsystem.com": "adknowledge", - "blogads.com": "adknowledge", - "cubics.com": "adknowledge", - "yarpp.org": "adknowledge", - "adsearch.adkontekst.pl": "adkontekst", - "netsprint.eu": "adkontekst.pl", - "adlabs.ru": "adlabs", - "clickiocdn.com": "adlabs", - "luxup.ru": "adlabs", - "mixmarket.biz": "adlabs", - "ad-serverparc.nl": "adlantic", - "adimg.net": "adlantis", - "adlantis.jp": "adlantis", - "cdn.adless.io": "adless", - "api.publishers.adlive.io": "adlive_header_bidding", - "adlooxtracking.com": "adloox", - "adx1.com": "admachine", - "adman.gr": "adman", - "adman.in.gr": "adman", - "admanmedia.com": "adman_media", - "admantx.com": "admantx.com", - "admaster.net": "admaster", - "cdnmaster.com": "admaster", - "admaster.com.cn": "admaster.cn", - "admasterapi.com": "admaster.cn", - "admatic.com.tr": "admatic", - "ads5.admatic.com.tr": "admatic", - "cdn2.admatic.com.tr": "admatic", - "lib-3pas.admatrix.jp": "admatrix", - "admaxserver.com": "admax", - "admaxim.com": "admaxim", - "admaya.in": "admaya", - "admedia.com": "admedia", - "adizio.com": "admedo_com", - "admedo.com": "admedo_com", - "admeira.ch": "admeira.ch", - "admeld.com": "admeld", - "admeo.ru": "admeo", - "admaym.com": "admeta", - "atemda.com": "admeta", - "admicro.vn": "admicro", - "vcmedia.vn": "admicro", - "admitad.com": "admitad.com", - "admixer.net": "admixer", - "admixer.com": "admixer", - "admized.com": "admized", - "admo.tv": "admo.tv", - "a.admob.com": "admob", - "mm.admob.com": "admob", - "mmv.admob.com": "admob", - "p.admob.com": "admob", - "run.admost.com": "admost", - "dmmotion.com": "admotion", - "nspmotion.com": "admotion", - "admulti.com": "admulti", - "adnegah.net": "adnegah", - "adnet.vn": "adnet", - "adnet.biz": "adnet.de", - "adnet.de": "adnet.de", - "adclick.lt": "adnet_media", - "adnet.lt": "adnet_media", - "ad.adnetwork.net": "adnetwork.net", - "adnetworkperformance.com": "adnetworkperformance.com", - "adserver.adnexio.com": "adnexio", - "adnium.com": "adnium.com", - "heias.com": "adnologies", - "smaclick.com": "adnow", - "st-n.ads3-adnow.com": "adnow", - "adnymics.com": "adnymics", - "adobe.com": "adobe_audience_manager", - "demdex.net": "adobe_audience_manager", - "everestjs.net": "adobe_audience_manager", - "everesttech.net": "adobe_audience_manager", - "adobe.io": "adobe_developer", - "scene7.com": "adobe_dynamic_media", - "adobedtm.com": "adobe_dynamic_tag_management", - "2o7.net": "adobe_experience_cloud", - "du8783wkf05yr.cloudfront.net": "adobe_experience_cloud", - "hitbox.com": "adobe_experience_cloud", - "imageg.net": "adobe_experience_cloud", - "nedstat.com": "adobe_experience_cloud", - "omtrdc.net": "adobe_experience_cloud", - "sitestat.com": "adobe_experience_cloud", - "adobedc.net": "adobe_experience_league", - "adobelogin.com": "adobe_login", - "adobetag.com": "adobe_tagmanager", - "typekit.com": "adobe_typekit", - "typekit.net": "adobe_typekit", - "adocean.pl": "adocean", - "dmtry.com": "adometry", - "adomik.com": "adomik", - "adcde.com": "adon_network", - "addlvr.com": "adon_network", - "adfeedstrk.com": "adon_network", - "adtrgt.com": "adon_network", - "bannertgt.com": "adon_network", - "cptgt.com": "adon_network", - "cpvfeed.com": "adon_network", - "cpvtgt.com": "adon_network", - "mygeek.com": "adon_network", - "popcde.com": "adon_network", - "sdfje.com": "adon_network", - "urtbk.com": "adon_network", - "adonion.com": "adonion", - "t.adonly.com": "adonly", - "adoperator.com": "adoperator", - "adoric.com": "adoric", - "adorika.com": "adorika", - "adorika.net": "adorika", - "adosia.com": "adosia", - "adotmob.com": "adotmob.com", - "adotube.com": "adotube", - "adparlor.com": "adparlor", - "adparlour.com": "adparlor", - "a4p.adpartner.pro": "adpartner", - "adpeepshosted.com": "adpeeps", - "adperfect.com": "adperfect", - "adperium.com": "adperium", - "adpilot.at": "adpilot", - "erne.co": "adpilot", - "adplan-ds.com": "adplan", - "advg.jp": "adplan", - "c.p-advg.com": "adplan", - "adplus.co.id": "adplus", - "adprofex.com": "adprofex", - "ads2.bid": "adprofex", - "adframesrc.com": "adprofy", - "adserve.adpulse.ir": "adpulse", - "ads.adpv.com": "adpv", - "adreactor.com": "adreactor", - "adrecord.com": "adrecord", - "adrecover.com": "adrecover", - "ad.vcm.jp": "adresult", - "adresult.jp": "adresult", - "adriver.ru": "adriver", - "adroll.com": "adroll", - "adrom.net": "adrom", - "txt.eu": "adrom", - "adru.net": "adru.net", - "adrunnr.com": "adrunnr", - "adsame.com": "adsame", - "adsbookie.com": "adsbookie", - "adscale.de": "adscale", - "adscience.nl": "adscience", - "adsco.re": "adsco.re", - "adsensecamp.com": "adsensecamp", - "adserverpub.com": "adserverpub", - "online.adservicemedia.dk": "adservice_media", - "adsfactor.net": "adsfactor", - "ads.doclix.com": "adside", - "adskeeper.co.uk": "adskeeper", - "ssp.adskom.com": "adskom", - "adslot.com": "adslot", - "adsnative.com": "adsnative", - "adsniper.ru": "adsniper.ru", - "adspeed.com": "adspeed", - "adspeed.net": "adspeed", - "o333o.com": "adspyglass", - "adstage-analytics.herokuapp.com": "adstage", - "code.adstanding.com": "adstanding", - "adstars.co.id": "adstars", - "ad-stir.com": "adstir", - "4dsply.com": "adsupply", - "cdn.engine.adsupply.com": "adsupply", - "trklnks.com": "adsupply", - "adswizz.com": "adswizz", - "adtaily.com": "adtaily", - "adtaily.pl": "adtaily", - "adtarget.me": "adtarget.me", - "adtech.de": "adtech", - "adtechus.com": "adtech", - "adtegrity.net": "adtegrity", - "adtpix.com": "adtegrity", - "adtelligence.de": "adtelligence.de", - "adentifi.com": "adtheorent", - "adthink.com": "adthink", - "advertstream.com": "adthink", - "audienceinsights.net": "adthink", - "adtiger.de": "adtiger", - "adtimaserver.vn": "adtima", - "adtng.com": "adtng.com", - "adtoma.com": "adtoma", - "adtomafusion.com": "adtoma", - "adtr02.com": "adtr02.com", - "track.adtraction.com": "adtraction", - "adtraxx.de": "adtraxx", - "adtriba.com": "adtriba.com", - "adtrue.com": "adtrue", - "adtrustmedia.com": "adtrustmedia", - "ad.adtube.ir": "adtube", - "awempire.com": "adult_webmaster_empire", - "dditscdn.com": "adult_webmaster_empire", - "livejasmin.com": "adult_webmaster_empire", - "adultadworld.com": "adultadworld", - "adworldmedia.com": "adultadworld", - "adup-tech.com": "adup-tech.com", - "advaction.ru": "advaction", - "aucourant.info": "advaction", - "schetu.net": "advaction", - "dqfw2hlp4tfww.cloudfront.net": "advalo", - "ahcdn.com": "advanced_hosters", - "pix-cdn.org": "advanced_hosters", - "s3.advarkads.com": "advark", - "adventori.com": "adventori", - "adnext.fr": "adverline", - "adverline.com": "adverline", - "surinter.net": "adverline", - "adversaldisplay.com": "adversal", - "adversalservers.com": "adversal", - "go.adversal.com": "adversal", - "adverserve.net": "adverserve", - "ad.adverteerdirect.nl": "adverteerdirect", - "adverticum.net": "adverticum", - "advertise.com": "advertise.com", - "advertisespace.com": "advertisespace", - "adsdk.com": "advertising.com", - "advertising.com": "advertising.com", - "aol.com": "advertising.com", - "atwola.com": "advertising.com", - "pictela.net": "advertising.com", - "verizonmedia.com": "advertising.com", - "advertlets.com": "advertlets", - "advertserve.com": "advertserve", - "advidi.com": "advidi", - "am10.ru": "advmaker.ru", - "am15.net": "advmaker.ru", - "advolution.de": "advolution", - "adwebster.com": "adwebster", - "ads.adwitserver.com": "adwit", - "adworx.at": "adworx.at", - "adworxs.net": "adworxs.net", - "adxion.com": "adxion", - "adxpansion.com": "adxpansion", - "ads.adxpose.com": "adxpose", - "event.adxpose.com": "adxpose", - "servedby.adxpose.com": "adxpose", - "adxprtz.com": "adxprtz.com", - "adyoulike.com": "adyoulike", - "omnitagjs.com": "adyoulike", - "adzerk.net": "adzerk", - "adzly.com": "adzly", - "aemediatraffic.com": "aemediatraffic", - "hprofits.com": "aemediatraffic", - "amxdt.com": "aerify_media", - "aerisapi.com": "aeris_weather", - "aerisweather.com": "aeris_weather", - "affectv.com": "affectv", - "go.affec.tv": "affectv", - "hybridtheory.com": "affectv", - "affilbox.com": "affilbox", - "affilbox.cz": "affilbox", - "track.affiliate-b.com": "affiliate-b", - "affiliate4you.nl": "affiliate4you", - "ads.affbuzzads.com": "affiliatebuzz", - "affiliatefuture.com": "affiliatefuture", - "affiliatelounge.com": "affiliatelounge", - "affiliation-france.com": "affiliation_france", - "affiliator.com": "affiliator", - "affiliaweb.fr": "affiliaweb", - "banner-rotation.com": "affilinet", - "webmasterplan.com": "affilinet", - "affimax.de": "affimax", - "affinity.com": "affinity", - "countby.com": "affinity.by", - "affiz.net": "affiz_cpm", - "pml.afftrack.com": "afftrack", - "afgr2.com": "afgr2.com", - "v2.afilio.com.br": "afilio", - "afsanalytics.com": "afs_analystics", - "ads.aftonbladet.se": "aftonbladet_ads", - "aftv-serving.bid": "aftv-serving.bid", - "agkn.com": "aggregate_knowledge", - "agilone.com": "agilone", - "adview.pl": "agora", - "pingagenow.com": "ahalogy", - "aimediagroup.com": "ai_media_group", - "advombat.ru": "aidata", - "aidata.io": "aidata", - "aim4media.com": "aim4media", - "muscache.com": "airbnb", - "musthird.com": "airbnb", - "airbrake.io": "airbrake", - "airpr.com": "airpr.com", - "ab.airpush.com": "airpush", - "abmr.net": "akamai_technologies", - "akamai.net": "akamai_technologies", - "akamaihd.net": "akamai_technologies", - "akamaized.net": "akamai_technologies", - "akstat.io": "akamai_technologies", - "edgekey.net": "akamai_technologies", - "edgesuite.net": "akamai_technologies", - "imiclk.com": "akamai_technologies", - "akadns.net": "akamai_technologies", - "akamaiedge.net": "akamai_technologies", - "akaquill.net": "akamai_technologies", - "akamoihd.net": "akamoihd.net", - "adn-d.sp.gmossp-sp.jp": "akane", - "akanoo.com": "akanoo", - "akavita.com": "akavita", - "ads.albawaba.com": "al_bawaba_advertising", - "serve.albacross.com": "albacross", - "aldi-international.com": "aldi-international.com", - "alenty.com": "alenty", - "alephd.com": "alephd.com", - "alexametrics.com": "alexa_metrics", - "d31qbv1cthcecs.cloudfront.net": "alexa_metrics", - "d5nxst8fruw4z.cloudfront.net": "alexa_metrics", - "alexa.com": "alexa_traffic_rank", - "algolia.com": "algolia.net", - "algolia.net": "algolia.net", - "algovid.com": "algovid.com", - "alibaba.com": "alibaba.com", - "alicdn.com": "alibaba.com", - "aliapp.org": "alibaba.com", - "alibabachengdun.com": "alibaba.com", - "alibabausercontent.com": "alibaba.com", - "aliexpress.com": "alibaba.com", - "alikunlun.com": "alibaba.com", - "aliyuncs.com": "alibaba.com", - "alibabacloud.com": "alibaba_cloud", - "alibabadns.com": "alibaba_cloud", - "aliyun.com": "alibaba_cloud", - "ucweb.com": "alibaba_ucbrowser", - "alipay.com": "alipay.com", - "alipayobjects.com": "alipay.com", - "websitealive.com": "alivechat", - "allegroimg.com": "allegro.pl", - "allegrostatic.com": "allegro.pl", - "allegrostatic.pl": "allegro.pl", - "ngacm.com": "allegro.pl", - "ngastatic.com": "allegro.pl", - "i.btg360.com.br": "allin", - "allo-pages.fr": "allo-pages.fr", - "allotraffic.com": "allotraffic", - "edge.alluremedia.com.au": "allure_media", - "allyes.com": "allyes", - "inputs.alooma.com": "alooma", - "arena.altitude-arena.com": "altitude_digital", - "amadesa.com": "amadesa", - "amap.com": "amap", - "amazon.ca": "amazon", - "amazon.co.jp": "amazon", - "amazon.co.uk": "amazon", - "amazon.com": "amazon", - "amazon.de": "amazon", - "amazon.es": "amazon", - "amazon.fr": "amazon", - "amazon.it": "amazon", - "d3io1k5o0zdpqr.cloudfront.net": "amazon", - "a2z.com": "amazon", - "aamazoncognito.com": "amazon", - "amazon-corp.com": "amazon", - "amazon-dss.com": "amazon", - "amazon.com.au": "amazon", - "amazon.com.mx": "amazon", - "amazon.dev": "amazon", - "amazon.in": "amazon", - "amazon.nl": "amazon", - "amazon.sa": "amazon", - "amazonbrowserapp.co.uk": "amazon", - "amazonbrowserapp.es": "amazon", - "amazoncrl.com": "amazon", - "firetvcaptiveportal.com": "amazon", - "ntp-fireos.com": "amazon", - "amazon-adsystem.com": "amazon_adsystem", - "serving-sys.com": "amazon_adsystem", - "sizmek.com": "amazon_adsystem", - "assoc-amazon.ca": "amazon_associates", - "assoc-amazon.co.uk": "amazon_associates", - "assoc-amazon.com": "amazon_associates", - "assoc-amazon.de": "amazon_associates", - "assoc-amazon.fr": "amazon_associates", - "assoc-amazon.jp": "amazon_associates", - "images-amazon.com": "amazon_cdn", - "media-amazon.com": "amazon_cdn", - "ssl-images-amazon.com": "amazon_cdn", - "amazontrust.com": "amazon_cdn", - "associates-amazon.com": "amazon_cdn", - "cloudfront.net": "amazon_cloudfront", - "ota-cloudfront.net": "amazon_cloudfront", - "axx-eu.amazon-adsystem.com": "amazon_mobile_ads", - "amazonpay.com": "amazon_payments", - "payments-amazon.com": "amazon_payments", - "amazonpay.in": "amazon_payments", - "aiv-cdn.net": "amazon_video", - "aiv-delivery.net": "amazon_video", - "amazonvideo.com": "amazon_video", - "pv-cdn.net": "amazon_video", - "primevideo.com": "amazon_video", - "amazonaws.com": "amazon_web_services", - "amazonwebservices.com": "amazon_web_services", - "awsstatic.com": "amazon_web_services", - "adnetwork.net.vn": "ambient_digital", - "adnetwork.vn": "ambient_digital", - "ambientplatform.vn": "ambient_digital", - "amgload.net": "amgload.net", - "amoad.com": "amoad", - "ad.amgdgt.com": "amobee", - "ads.amgdgt.com": "amobee", - "amobee.com": "amobee", - "collective-media.net": "amp_platform", - "amplitude.com": "amplitude", - "d24n15hnbwhuhn.cloudfront.net": "amplitude", - "ampproject.org": "ampproject.org", - "anametrix.net": "anametrix", - "ancestrycdn.com": "ancestry_cdn", - "ancoraplatform.com": "ancora", - "anetwork.ir": "anetwork", - "aniview.com": "aniview.com", - "a-ads.com": "anonymousads", - "anormal-tracker.de": "anormal_tracker", - "answerscloud.com": "answers_cloud_service", - "anthill.vn": "ants", - "ants.vn": "ants", - "rt.analytics.anvato.net": "anvato", - "tkx2-prod.anvato.net": "anvato", - "w3.cdn.anvato.net": "anvato", - "player.anyclip.com": "anyclip", - "video-loader.com": "aol_be_on", - "aolcdn.com": "aol_cdn", - "isp.netscape.com": "aol_cdn", - "apa.at": "apa.at", - "apester.com": "apester", - "apicit.net": "apicit.net", - "carrierzone.com": "aplus_analytics", - "appcenter.ms": "appcenter", - "appcues.com": "appcues", - "appdynamics.com": "appdynamics", - "de8of677fyt0b.cloudfront.net": "appdynamics", - "eum-appdynamics.com": "appdynamics", - "jscdn.appier.net": "appier", - "apple.com": "apple", - "aaplimg.com": "apple", - "apple-cloudkit.com": "apple", - "apple-dns.net": "apple", - "apple-livephotoskit.com": "apple", - "apple-mapkit.com": "apple", - "apple.news": "apple", - "apzones.com": "apple", - "cdn-apple.com": "apple", - "icloud-content.com": "apple", - "icloud.com": "apple", - "icons.axm-usercontent-apple.com": "apple", - "itunes.com": "apple", - "me.com": "apple", - "mzstatic.com": "apple", - "safebrowsing.apple": "apple", - "safebrowsing.g.applimg.com": "apple", - "iadsdk.apple.com": "apple_ads", - "applifier.com": "applifier", - "assets.applovin.com": "applovin", - "applovin.com": "applovin", - "applvn.com": "applovin", - "appmetrx.com": "appmetrx", - "adnxs.com": "appnexus", - "adnxs.net": "appnexus", - "appsflyer.com": "appsflyer", - "appsflyersdk.com": "appsflyer", - "adne.tv": "apptv", - "readserver.net": "apptv", - "www.apture.com": "apture", - "arcpublishing.com": "arcpublishing", - "ard.de": "ard.de", - "areyouahuman.com": "are_you_a_human", - "arkoselabs.com": "arkoselabs.com", - "art19.com": "art19", - "banners.advsnx.net": "artimedia", - "artlebedev.ru": "artlebedev.ru", - "ammadv.it": "aruba_media_marketing", - "arubamediamarketing.it": "aruba_media_marketing", - "cya2.net": "arvato_canvas_fp", - "asambeauty.com": "asambeauty.com", - "ask.com": "ask.com", - "aspnetcdn.com": "aspnetcdn", - "ads.assemblyexchange.com": "assemblyexchange", - "cdn.astronomer.io": "astronomer", - "ati-host.net": "at_internet", - "aticdn.net": "at_internet", - "xiti.com": "at_internet", - "atedra.com": "atedra", - "oadts.com": "atg_group", - "as00.estara.com": "atg_optimization", - "atgsvcs.com": "atg_recommendations", - "adbureau.net": "atlas", - "atdmt.com": "atlas", - "atlassbx.com": "atlas", - "track.roiservice.com": "atlas_profitbuilder", - "atl-paas.net": "atlassian.net", - "atlassian.com": "atlassian.net", - "atlassian.net": "atlassian.net", - "d12ramskps3070.cloudfront.net": "atlassian.net", - "bitbucket.org": "atlassian.net", - "jira.com": "atlassian.net", - "ss-inf.net": "atlassian.net", - "d1xfq2052q7thw.cloudfront.net": "atlassian_marketplace", - "marketplace.atlassian.com": "atlassian_marketplace", - "atomz.com": "atomz_search", - "atsfi.de": "atsfi_de", - "cdn.attracta.com": "attracta", - "locayta.com": "attraqt", - "ads.audience2media.com": "audience2media", - "qwobl.net": "audience_ad_network", - "revsci.net": "audience_science", - "wunderloop.net": "audience_science", - "12mlbe.com": "audiencerate", - "audiencesquare.com": "audiencesquare.com", - "auditude.com": "auditude", - "audtd.com": "audtd.com", - "cdn.augur.io": "augur", - "aumago.com": "aumago", - "clicktracks.com": "aurea_clicktracks", - "ausgezeichnet.org": "ausgezeichnet_org", - "advertising.gov.au": "australia.gov", - "auth0.com": "auth0", - "ai.autoid.com": "autoid", - "optimost.com": "autonomy", - "oc-track.autonomycloud.com": "autonomy_campaign", - "track.yieldsoftware.com": "autonomy_campaign", - "api.autopilothq.com": "autopilothq", - "autoscout24.com": "autoscout24.com", - "autoscout24.net": "autoscout24.com", - "avail.net": "avail", - "analytics.avanser.com.au": "avanser", - "avmws.com": "avant_metrics", - "avantlink.com": "avantlink", - "ads.avazu.net": "avazu_network", - "avenseo.com": "avenseo", - "adspdbl.com": "avid_media", - "avocet.io": "avocet", - "aweber.com": "aweber", - "awin.com": "awin", - "awin1.com": "awin", - "perfb.com": "awin", - "ad.globe7.com": "axill", - "azadify.com": "azadify", - "azure.com": "azure", - "azure.net": "azure", - "azurefd.net": "azure", - "trafficmanager.net": "azure", - "blob.core.windows.net": "azure_blob_storage", - "azureedge.net": "azureedge.net", - "b2bcontext.ru": "b2bcontext", - "b2bvideo.ru": "b2bvideo", - "babator.com": "babator.com", - "backbeatmedia.com": "back_beat_media", - "widgets.backtype.com": "backtype_widgets", - "bahn.de": "bahn_de", - "img-bahn.de": "bahn_de", - "baidu.com": "baidu_ads", - "baidustatic.com": "baidu_ads", - "bdimg.com": "baidu_static", - "bdstatic.com": "baidu_static", - "baletingo.com": "baletingo.com", - "bangdom.com": "bangdom.com", - "widgets.bankrate.com": "bankrate", - "bannerconnect.net": "banner_connect", - "bannerflow.com": "bannerflow.com", - "bannerplay.com": "bannerplay", - "cdn.bannersnack.com": "bannersnack", - "dn3y71tq7jf07.cloudfront.net": "barilliance", - "getbarometer.s3.amazonaws.com": "barometer", - "basilic.io": "basilic.io", - "batanga.com": "batanga_network", - "t4ft.de": "batch_media", - "bauernative.com": "bauer_media", - "baur.de": "baur.de", - "baynote.net": "baynote_observer", - "bazaarvoice.com": "bazaarvoice", - "bbci.co.uk": "bbci", - "tracking.bd4travel.com": "bd4travel", - "beopinion.com": "be_opinion", - "bfmio.com": "beachfront", - "beaconads.com": "beacon_ad_network", - "beampulse.com": "beampulse.com", - "beanstalkdata.com": "beanstalk_data", - "bebi.com": "bebi", - "beeketing.com": "beeketing.com", - "beeline.ru": "beeline.ru", - "bidr.io": "beeswax", - "tracker.beezup.com": "beezup", - "begun.ru": "begun", - "behavioralengine.com": "behavioralengine", - "belboon.de": "belboon_gmbh", - "cdn.belco.io": "belco", - "belstat.be": "belstat", - "belstat.com": "belstat", - "belstat.de": "belstat", - "belstat.fr": "belstat", - "belstat.nl": "belstat", - "bemobile.ua": "bemobile.ua", - "tag.benchplatform.com": "bench_platform", - "betterttv.net": "betterttv", - "betweendigital.com": "betweendigital.com", - "intencysrv.com": "betweendigital.com", - "bid.run": "bid.run", - "bidgear.com": "bidgear", - "bidswitch.net": "bidswitch", - "exe.bid": "bidswitch", - "bttrack.com": "bidtellect", - "bidtheatre.com": "bidtheatre", - "bidvertiser.com": "bidvertiser", - "bigmobileads.com": "big_mobile", - "bigcommerce.com": "bigcommerce.com", - "bigmir.net": "bigmir.net", - "bigpoint-payment.com": "bigpoint", - "bigpoint.com": "bigpoint", - "bigpoint.net": "bigpoint", - "bpcdn.net": "bigpoint", - "bpsecure.com": "bigpoint", - "bildstatic.de": "bild", - "ad-cdn.bilgin.pro": "bilgin_pro", - "pixel.bilinmedia.net": "bilin", - "bat.r.msn.com": "bing_ads", - "bing.com": "bing_ads", - "bing.net": "bing_ads", - "virtualearth.net": "bing_maps", - "binge.com.au": "binge", - "view.binlayer.com": "binlayer", - "widgets.binotel.com": "binotel", - "esendra.fi": "bisnode", - "bitcoinplus.com": "bitcoin_miner", - "bit.ly": "bitly", - "bitrix.de": "bitrix", - "bitrix.info": "bitrix", - "bitrix.ru": "bitrix", - "bitrix24.com": "bitrix", - "bitrix24.com.br": "bitrix", - "bitwarden.com": "bitwarden", - "traffic.adxprts.com": "bizcn", - "jssr.jd.com": "blackdragon", - "blau.de": "blau.de", - "bnmla.com": "blink_new_media", - "blismedia.com": "blis", - "blogad.com.tw": "blogad", - "blogbang.com": "blogbang", - "www.blogcatalog.com": "blogcatalog", - "track.blogcounter.de": "blogcounter", - "blogfoster.com": "blogfoster.com", - "bloggerads.net": "bloggerads", - "blogher.com": "blogher", - "blogherads.com": "blogher", - "blogimg.jp": "blogimg.jp", - "blogsmithmedia.com": "blogsmithmedia.com", - "blogblog.com": "blogspot_com", - "blogger.com": "blogspot_com", - "blogspot.com": "blogspot_com", - "brcdn.com": "bloomreach", - "brsrvr.com": "bloomreach", - "brtstats.com": "bloomreach", - "offerpoint.net": "blue_cherry_group", - "blueserving.com": "blue_seed", - "blueconic.net": "blueconic.net", - "bluecore.com": "bluecore", - "triggeredmail.appspot.com": "bluecore", - "bkrtx.com": "bluekai", - "bluekai.com": "bluekai", - "adrevolver.com": "bluelithium", - "bluelithium.com": "bluelithium", - "bmmetrix.com": "bluemetrix", - "japanmetrix.jp": "bluemetrix", - "bluenewsupdate.info": "bluenewsupdate.info", - "bluestreak.com": "bluestreak", - "bluetriangletech.com": "bluetriangle", - "btttag.com": "bluetriangle", - "bodelen.com": "bodelen.com", - "tracking.bol.com": "bol_affiliate_program", - "qb.boldapps.net": "bold", - "secure.apps.shappify.com": "bold", - "boldchat.com": "boldchat", - "boltdns.net": "boltdns.net", - "bom.gov.au": "bom", - "ml314.com": "bombora", - "bongacams.com": "bongacams.com", - "bonial.com": "bonial", - "bonialconnect.com": "bonial", - "bonialserviceswidget.de": "bonial", - "boo-box.com": "boo-box", - "booking.com": "booking.com", - "bstatic.com": "booking.com", - "boostbox.com.br": "boost_box", - "boostervideo.ru": "booster_video", - "bootstrapcdn.com": "bootstrap", - "borrango.com": "borrango.com", - "scan.botscanner.com": "botscanner", - "boudja.com": "boudja.com", - "bounceexchange.com": "bounce_exchange", - "bouncex.com": "bouncex", - "bouncex.net": "bouncex", - "j.clickdensity.com": "box_uk", - "boxever.com": "boxever", - "brainient.com": "brainient", - "brainsins.com": "brainsins", - "d2xkqxdy6ewr93.cloudfront.net": "brainsins", - "mobileapptracking.com": "branch", - "app.link": "branch_metrics", - "branch.io": "branch_metrics", - "brandaffinity.net": "brand_affinity", - "go.cpmadvisors.com": "brand_networks", - "optorb.com": "brand_networks", - "brandmetrics.com": "brandmetrics.com", - "brandreachsys.com": "brandreach", - "rtbidder.net": "brandscreen", - "brandwire.tv": "brandwire.tv", - "branica.com": "branica", - "appboycdn.com": "braze", - "braze.com": "braze", - "brealtime.com": "brealtime", - "bridgetrack.com": "bridgetrack", - "brightcove.com": "brightcove", - "brightcove.net": "brightcove_player", - "analytics.brightedge.com": "brightedge", - "munchkin.brightfunnel.com": "brightfunnel", - "brightonclick.com": "brightonclick.com", - "btrll.com": "brightroll", - "p.brilig.com": "brilig", - "brillen.de": "brillen.de", - "broadstreetads.com": "broadstreet", - "bm23.com": "bronto", - "brow.si": "brow.si", - "browser-statistik.de": "browser-statistik", - "browser-update.org": "browser_update", - "btncdn.com": "btncdn.com", - "in.bubblestat.com": "bubblestat", - "brighteroption.com": "buddy_media", - "bufferapp.com": "buffer_button", - "bugherd.com": "bugherd.com", - "bugsnag.com": "bugsnag", - "d2wy8f7a9ursnm.cloudfront.net": "bugsnag", - "bulkhentai.com": "bulkhentai.com", - "bumlam.com": "bumlam.com", - "bunchbox.co": "bunchbox", - "bf-ad.net": "burda", - "bf-tools.net": "burda", - "bstatic.de": "burda_digital_systems", - "burstbeacon.com": "burst_media", - "burstnet.com": "burst_media", - "burt.io": "burt", - "d3q6px0y2suh5n.cloudfront.net": "burt", - "rich-agent.s3.amazonaws.com": "burt", - "richmetrics.com": "burt", - "stats.businessol.com": "businessonline_analytics", - "bttn.io": "button", - "buysellads.com": "buysellads", - "servedby-buysellads.com": "buysellads", - "buzzadexchange.com": "buzzadexchange.com", - "buzzador.com": "buzzador", - "buzzfed.com": "buzzfeed", - "bwbx.io": "bwbx.io", - "bypass.jp": "bypass", - "c1exchange.com": "c1_exchange", - "c3metrics.com": "c3_metrics", - "c3tag.com": "c3_metrics", - "c8.net.ua": "c8_network", - "cackle.me": "cackle.me", - "d1cerpgff739r9.cloudfront.net": "cadreon", - "d1qpxk1wfeh8v1.cloudfront.net": "cadreon", - "callpage.io": "call_page", - "callbackhunter.com": "callbackhunter", - "callmeasurement.com": "callbox", - "callibri.ru": "callibri", - "callrail.com": "callrail", - "calltracking.ru": "calltracking", - "caltat.com": "caltat.com", - "cam-content.com": "cam-content.com", - "camakaroda.com": "camakaroda.com", - "s.edkay.com": "campus_explorer", - "canddi.com": "canddi", - "canonical.com": "canonical", - "canvas.net": "canvas", - "canvasnetwork.com": "canvas", - "du11hjcvx0uqb.cloudfront.net": "canvas", - "kdata.fr": "capitaldata", - "captora.com": "captora", - "edge.capturemedia.network": "capture_media", - "cdn.capturly.com": "capturly", - "route.carambo.la": "carambola", - "carbonads.com": "carbonads", - "carbonads.net": "carbonads", - "fusionads.net": "carbonads", - "cardinalcommerce.com": "cardinal", - "cardlytics.com": "cardlytics", - "cdn.carrotquest.io": "carrot_quest", - "api.cartstack.com": "cartstack", - "caspion.com": "caspion", - "t.castle.io": "castle", - "3gl.net": "catchpoint", - "cbox.ws": "cbox", - "adlog.com.com": "cbs_interactive", - "cbsinteractive.com": "cbs_interactive", - "dw.com.com": "cbs_interactive", - "ccmbg.com": "ccm_benchmark", - "admission.net": "cdk_digital_marketing", - "cdn-net.com": "cdn-net.com", - "cdn13.com": "cdn13.com", - "cdn77.com": "cdn77", - "cdn77.org": "cdn77", - "cdnetworks.com": "cdnetworks.net", - "cdnetworks.net": "cdnetworks.net", - "cdnnetwok.xyz": "cdnnetwok_xyz", - "cdnondemand.org": "cdnondemand.org", - "cdnsure.com": "cdnsure.com", - "cdnvideo.com": "cdnvideo.com", - "cdnwidget.com": "cdnwidget.com", - "cedexis-radar.net": "cedexis_radar", - "cedexis-test.com": "cedexis_radar", - "cedexis.com": "cedexis_radar", - "cedexis.fastlylb.net": "cedexis_radar", - "cedexis.net": "cedexis_radar", - "celebrus.com": "celebrus", - "celtra.com": "celtra", - "cendyn.adtrack.calls.net": "cendyn", - "centraltag.com": "centraltag", - "brand-server.com": "centro", - "speed-trap.nl": "cerberus_speed-trap", - "link.ixs1.net": "certainsource", - "hits.e.cl": "certifica_metric", - "certona.net": "certona", - "res-x.com": "certona", - "gsn.chameleon.ad": "chameleon", - "chango.ca": "chango", - "chango.com": "chango", - "channelintelligence.com": "channel_intelligence", - "cptrack.de": "channel_pilot_solutions", - "channeladvisor.com": "channeladvisor", - "searchmarketing.com": "channeladvisor", - "channelfinder.net": "channelfinder", - "chaordicsystems.com": "chaordic", - "chartbeat.com": "chartbeat", - "chartbeat.net": "chartbeat", - "chartboost.com": "chartboost", - "chaser.ru": "chaser", - "cloud.chatbeacon.io": "chat_beacon", - "chatango.com": "chatango", - "call.chatra.io": "chatra", - "chaturbate.com": "chaturbate.com", - "chatwing.com": "chatwing", - "checkmystats.com.au": "checkmystats", - "chefkoch-cdn.de": "chefkoch_de", - "chefkoch.de": "chefkoch_de", - "tracker.chinmedia.vn": "chin_media", - "chinesean.com": "chinesean", - "chitika.net": "chitika", - "choicestream.com": "choicestream", - "api.getchute.com": "chute", - "media.chute.io": "chute", - "iqcontentplatform.de": "circit", - "data.circulate.com": "circulate", - "p.cityspark.com": "city_spark", - "cityads.ru": "cityads", - "gameleads.ru": "cityads", - "ciuvo.com": "ciuvo.com", - "widget.civey.com": "civey_widgets", - "civicscience.com": "civicscience.com", - "ciweb.ciwebgroup.com": "ciwebgroup", - "clcknads.pro": "clcknads.pro", - "pulseradius.com": "clear_pier", - "clearbit.com": "clearbit.com", - "clearsale.com.br": "clearsale", - "tag.clrstm.com": "clearstream.tv", - "api.clerk.io": "clerk.io", - "cleverpush.com": "clever_push", - "wzrkt.com": "clever_tap", - "cleversite.ru": "cleversite", - "script.click360.io": "click360", - "clickandchat.com": "click_and_chat", - "software.clickback.com": "click_back", - "hit.clickaider.com": "clickaider", - "clickaine.com": "clickaine", - "clickbank.net": "clickbank", - "cbproads.com": "clickbank_proads", - "adtoll.com": "clickbooth", - "clickbooth.com": "clickbooth", - "clickboothlnk.com": "clickbooth", - "clickcease.com": "clickcease", - "clickcertain.com": "clickcertain", - "remarketstats.com": "clickcertain", - "clickdesk.com": "clickdesk", - "analytics.clickdimensions.com": "clickdimensions", - "clickequations.net": "clickequations", - "clickexperts.net": "clickexperts", - "doublemax.net": "clickforce", - "clickinc.com": "clickinc", - "clickintext.net": "clickintext", - "clickky.biz": "clickky", - "9nl.be": "clickmeter", - "9nl.com": "clickmeter", - "9nl.eu": "clickmeter", - "9nl.it": "clickmeter", - "9nl.me": "clickmeter", - "clickmeter.com": "clickmeter", - "clickonometrics.pl": "clickonometrics", - "clickpoint.com": "clickpoint", - "clickpoint.it": "clickpoint", - "clickprotector.com": "clickprotector", - "clickreport.com": "clickreport", - "doogleonduty.com": "clickreport", - "ctn.go2cloud.org": "clicks_thru_networks", - "clicksor.com": "clicksor", - "hatid.com": "clicksor", - "lzjl.com": "clicksor", - "myroitracking.com": "clicksor", - "clicktale.com": "clicktale", - "clicktale.net": "clicktale", - "clicktale.pantherssl.com": "clicktale", - "clicktalecdn.sslcs.cdngc.net": "clicktale", - "clicktripz.com": "clicktripz", - "clickwinks.com": "clickwinks", - "getclicky.com": "clicky", - "staticstuff.net": "clicky", - "clickyab.com": "clickyab", - "clicmanager.fr": "clicmanager", - "eplayer.clipsyndicate.com": "clip_syndicate", - "www.is1.clixgalore.com": "clixgalore", - "clixmetrix.com": "clixmetrix", - "clixsense.com": "clixsense", - "cloud-media.fr": "cloud-media.fr", - "cloudflare.com": "cloudflare", - "cloudflare.net": "cloudflare", - "cloudflare-dm-cmpimg.com": "cloudflare", - "cloudflare-dns.com": "cloudflare", - "cloudflare-ipfs.com": "cloudflare", - "cloudflare-quic.com": "cloudflare", - "cloudflare-terms-of-service-abuse.com": "cloudflare", - "cloudflare.tv": "cloudflare", - "cloudflareaccess.com": "cloudflare", - "cloudflareclient.com": "cloudflare", - "cloudflareinsights.com": "cloudflare", - "cloudflareok.com": "cloudflare", - "cloudflareportal.com": "cloudflare", - "cloudflareresolve.com": "cloudflare", - "cloudflaressl.com": "cloudflare", - "cloudflarestatus.com": "cloudflare", - "cloudflarestream.com": "cloudflare", - "pacloudflare.com": "cloudflare", - "sn-cloudflare.com": "cloudflare", - "videodelivery.net": "cloudflare", - "cloudimg.io": "cloudimage.io", - "cloudinary.com": "cloudinary", - "clovenetwork.com": "clove_network", - "clustrmaps.com": "clustrmaps", - "cnbc.com": "cnbc", - "cnetcontent.com": "cnetcontent.com", - "cnstats.ru": "cnstats", - "cnzz.com": "cnzz.com", - "umeng.com": "cnzz.com", - "acc-hd.de": "coadvertise", - "client.cobrowser.net": "cobrowser", - "codeonclick.com": "codeonclick.com", - "cogocast.net": "cogocast", - "coin-have.com": "coin_have", - "appsha1.cointraffic.io": "coin_traffic", - "authedmine.com": "coinhive", - "coin-hive.com": "coinhive", - "coinhive.com": "coinhive", - "coinurl.com": "coinurl", - "coll1onf.com": "coll1onf.com", - "coll2onf.com": "coll2onf.com", - "service.collarity.com": "collarity", - "static.clmbtech.com": "columbia_online", - "combotag.com": "combotag", - "pdk.theplatform.com": "comcast_technology_solutions", - "comm100.cn": "comm100", - "comm100.com": "comm100", - "cdn-cs.com": "commerce_sciences", - "cdn.mercent.com": "commercehub", - "link.mercent.com": "commercehub", - "commercialvalue.org": "commercialvalue.org", - "afcyhf.com": "commission_junction", - "anrdoezrs.net": "commission_junction", - "apmebf.com": "commission_junction", - "awltovhc.com": "commission_junction", - "emjcd.com": "commission_junction", - "ftjcfx.com": "commission_junction", - "lduhtrp.net": "commission_junction", - "qksz.net": "commission_junction", - "tkqlhce.com": "commission_junction", - "tqlkg.com": "commission_junction", - "yceml.net": "commission_junction", - "communicatorcorp.com": "communicator_corp", - "wowanalytics.co.uk": "communigator", - "c-col.com": "competexl", - "c.compete.com": "competexl", - "complex.com": "complex_media_network", - "complexmedianetwork.com": "complex_media_network", - "comprigo.com": "comprigo", - "comscore.com": "comscore", - "zqtk.net": "comscore", - "conative.de": "conative.de", - "condenast.com": "condenastdigital.com", - "conduit-banners.com": "conduit", - "conduit-data.com": "conduit", - "conduit.com": "conduit", - "confirmit.com": "confirmit", - "congstar.de": "congstar.de", - "connatix.com": "connatix.com", - "connected-by.connectad.io": "connectad", - "cdn.connecto.io": "connecto", - "connexity.net": "connexity", - "cxt.ms": "connexity", - "connextra.com": "connextra", - "rs6.net": "constant_contact", - "serverbid.com": "consumable", - "contactatonce.com": "contact_at_once", - "adrolays.de": "contact_impact", - "c-i.as": "contact_impact", - "df-srv.de": "contact_impact", - "d1uwd25yvxu96k.cloudfront.net": "contactme", - "static.contactme.com": "contactme", - "contaxe.com": "contaxe", - "content.ad": "content.ad", - "ingestion.contentinsights.com": "content_insights", - "contentexchange.me": "contentexchange.me", - "ctfassets.net": "contentful_gmbh", - "contentpass.de": "contentpass", - "contentpass.net": "contentpass", - "contentsquare.net": "contentsquare.net", - "d1aug3dv5magti.cloudfront.net": "contentwrx", - "d39se0h2uvfakd.cloudfront.net": "contentwrx", - "c-on-text.com": "context", - "intext.contextad.pl": "context.ad", - "continum.net": "continum_net", - "s2.contribusourcesyndication.com": "contribusource", - "hits.convergetrack.com": "convergetrack", - "fastclick.net": "conversant", - "mediaplex.com": "conversant", - "mplxtms.com": "conversant", - "cm-commerce.com": "conversio", - "media.conversio.com": "conversio", - "c.conversionlogic.net": "conversion_logic", - "conversionruler.com": "conversionruler", - "conversionsbox.com": "conversions_box", - "conversionsondemand.com": "conversions_on_demand", - "ant.conversive.nl": "conversive", - "convertexperiments.com": "convert", - "d3sjgucddk68ji.cloudfront.net": "convertfox", - "convertro.com": "convertro", - "d1ivexoxmp59q7.cloudfront.net": "convertro", - "conviva.com": "conviva", - "cookieconsent.silktide.com": "cookie_consent", - "cookie-script.com": "cookie_script", - "cookiebot.com": "cookiebot", - "cookieq.com": "cookieq", - "lite.piclens.com": "cooliris", - "copacet.com": "copacet", - "raasnet.com": "coreaudience", - "coremotives.com": "coremotives", - "coull.com": "coull", - "cpmrocket.com": "cpm_rocket", - "cpmprofit.com": "cpmprofit", - "cpmstar.com": "cpmstar", - "captifymedia.com": "cpx.to", - "cpx.to": "cpx.to", - "cqcounter.com": "cq_counter", - "cqq5id8n.com": "cqq5id8n.com", - "cquotient.com": "cquotient.com", - "craftkeys.com": "craftkeys", - "ads.crakmedia.com": "crakmedia_network", - "craktraffic.com": "crakmedia_network", - "crankyads.com": "crankyads", - "crashlytics.com": "crashlytics", - "cetrk.com": "crazy_egg", - "crazyegg.com": "crazy_egg", - "dnn506yrbagrg.cloudfront.net": "crazy_egg", - "creafi-online-media.com": "creafi", - "createjs.com": "createjs", - "creativecommons.org": "creative_commons", - "brandwatch.com": "crimsonhexagon_com", - "crimsonhexagon.com": "crimsonhexagon_com", - "hexagon-analytics.com": "crimsonhexagon_com", - "ctnsnet.com": "crimtan", - "crisp.chat": "crisp", - "crisp.im": "crisp", - "criteo.com": "criteo", - "criteo.net": "criteo", - "p.crm4d.com": "crm4d", - "crossengage.io": "crossengage", - "crosspixel.net": "crosspixel", - "crsspxl.com": "crosspixel", - "crosssell.info": "crosssell.info", - "crossss.com": "crossss", - "widget.crowdignite.com": "crowd_ignite", - "static.crowdscience.com": "crowd_science", - "ss.crowdprocess.com": "crowdprocess", - "our.glossip.nl": "crowdynews", - "widget.breakingburner.com": "crowdynews", - "widget.crowdynews.com": "crowdynews", - "searchg2.crownpeak.net": "crownpeak", - "snippet.omm.crownpeak.com": "crownpeak", - "cryptoloot.pro": "cryptoloot_miner", - "ctnetwork.hu": "ctnetwork", - "adzhub.com": "ctrlshift", - "data.withcubed.com": "cubed", - "cuelinks.com": "cuelinks", - "cdn.cupinteractive.com": "cup_interactive", - "curse.com": "curse.com", - "cursecdn.com": "cursecdn.com", - "assets.customer.io": "customer.io", - "widget.customerly.io": "customerly", - "cxense.com": "cxense", - "cxo.name": "cxo.name", - "cyberwing.co.jp": "cyber_wing", - "cybersource.com": "cybersource", - "cygnus.com": "cygnus", - "da-ads.com": "da-ads.com", - "dailymail.co.uk": "dailymail.co.uk", - "dailymotion.com": "dailymotion", - "dailymotionbus.com": "dailymotion", - "dm-event.net": "dailymotion", - "dmcdn.net": "dailymotion", - "dmxleo.com": "dailymotion_advertising", - "ds1.nl": "daisycon", - "dantrack.net": "dantrack.net", - "dmclick.cn": "darwin_marketing", - "tags.dashboardad.net": "dashboard_ad", - "datacaciques.com": "datacaciques.com", - "datacoral.com": "datacoral", - "abandonaid.com": "datacrushers", - "datacrushers.com": "datacrushers", - "datadome.co": "datadome", - "optimahub.com": "datalicious_datacollector", - "supert.ag": "datalicious_supertag", - "inextaction.net": "datalogix", - "nexac.com": "datalogix", - "datamind.ru": "datamind.ru", - "datatables.net": "datatables", - "adunits.datawrkz.com": "datawrkz", - "dataxpand.script.ag": "dataxpand", - "tc.dataxpand.com": "dataxpand", - "w55c.net": "dataxu", - "datds.net": "datds.net", - "pro-market.net": "datonics", - "displaymarketplace.com": "datran", - "davebestdeals.com": "davebestdeals.com", - "dawandastatic.com": "dawandastatic.com", - "dc-storm.com": "dc_stormiq", - "h4k5.com": "dc_stormiq", - "stormcontainertag.com": "dc_stormiq", - "stormiq.com": "dc_stormiq", - "dcbap.com": "dcbap.com", - "dcmn.com": "dcmn.com", - "statslogger.rocket.persgroep.cloud": "de_persgroep", - "deadlinefunnel.com": "deadline_funnel", - "cc2.dealer.com": "dealer.com", - "d9lq0o81skkdj.cloudfront.net": "dealer.com", - "esm1.net": "dealer.com", - "static.dealer.com": "dealer.com", - "decibelinsight.net": "decibel_insight", - "ads.dedicatedmedia.com": "dedicated_media", - "api.deep.bi": "deep.bi", - "deepintent.com": "deepintent.com", - "defpush.com": "defpush.com", - "deichmann.com": "deichmann.com", - "vxml4.delacon.com.au": "delacon", - "tracking.percentmobile.com": "delivr", - "adaction.se": "delta_projects", - "de17a.com": "delta_projects", - "deluxe.script.ag": "deluxe", - "delvenetworks.com": "delve_networks", - "company-target.com": "demandbase", - "demandbase.com": "demandbase", - "dmd53.com": "demandmedia", - "dmtracker.com": "demandmedia", - "deqwas.net": "deqwas", - "devatics.com": "devatics", - "developermedia.com": "developer_media", - "dapxl.com": "deviantart.net", - "deviantart.net": "deviantart.net", - "my.blueadvertise.com": "dex_platform", - "dgm-au.com": "dgm", - "s2d6.com": "dgm", - "d31y97ze264gaa.cloudfront.net": "dialogtech", - "d3von6il1wr7wo.cloudfront.net": "dianomi", - "dianomi.com": "dianomi", - "dianomioffers.co.uk": "dianomi", - "tag.didit.com": "didit_blizzard", - "track.did-it.com": "didit_maestro", - "privacy-center.org": "didomi", - "digg.com": "digg_widget", - "digicert.com": "digicert_trust_seal", - "phicdn.net": "digicert_trust_seal", - "digidip.net": "digidip", - "digiglitzmarketing.go2cloud.org": "digiglitz", - "wtp101.com": "digilant", - "digioh.com": "digioh", - "lightboxcdn.com": "digioh", - "digitalgov.gov": "digital.gov", - "cookiereports.com": "digital_control_room", - "adtag.cc": "digital_nomads", - "adready.com": "digital_remedy", - "adreadytractions.com": "digital_remedy", - "cpxinteractive.com": "digital_remedy", - "directtrack.com": "digital_river", - "onenetworkdirect.net": "digital_river", - "track.digitalriver.com": "digital_river", - "dwin1.com": "digital_window", - "digiteka.net": "digiteka", - "ultimedia.com": "digiteka", - "digitru.st": "digitrust", - "widget.dihitt.com.br": "dihitt_badge", - "dimml.io": "dimml", - "keywordsconnect.com": "direct_keyword_link", - "directadvert.ru": "directadvert", - "directrev.com": "directrev", - "discordapp.com": "discord", - "disneyplus.com": "disneyplus", - "bamgrid.com": "disneystreaming", - "dssedge.com": "disneystreaming", - "dssott.com": "disneystreaming", - "d81mfvml8p5ml.cloudfront.net": "display_block", - "disqus.com": "disqus", - "disquscdn.com": "disqus", - "disqusads.com": "disqus_ads", - "distiltag.com": "distil_tag", - "districtm.ca": "districtm.io", - "districtm.io": "districtm.io", - "jsrdn.com": "distroscale", - "div.show": "div.show", - "stats.vertriebsassistent.de": "diva", - "tag.divvit.com": "divvit", - "d-msquared.com": "dm2", - "and.co.uk": "dmg_media", - "dmm.co.jp": "dmm", - "ctret.de": "dmwd", - "toolbar.dockvine.com": "dockvine", - "awecr.com": "docler", - "fwbntw.com": "docler", - "s.dogannet.tv": "dogannet", - "domain.glass": "domainglass", - "www.domodomain.com": "domodomain", - "donation-tools.org": "donationtools", - "doofinder.com": "doofinder.com", - "embed.doorbell.io": "doorbell.io", - "dotandad.com": "dotandmedia", - "trackedlink.net": "dotmailer", - "dotmetrics.net": "dotmetrics.net", - "dotomi.com": "dotomi", - "dtmc.com": "dotomi", - "dtmpub.com": "dotomi", - "double.net": "double.net", - "2mdn.net": "doubleclick", - "doubleclick.net": "doubleclick", - "invitemedia.com": "doubleclick", - "doubleclick.com": "doubleclick", - "doublepimp.com": "doublepimp", - "doublepimpssl.com": "doublepimp", - "redcourtside.com": "doublepimp", - "xeontopa.com": "doublepimp", - "zerezas.com": "doublepimp", - "doubleverify.com": "doubleverify", - "wrating.com": "dratio", - "adsymptotic.com": "drawbridge", - "dreame.tech": "dreame_tech", - "dreametech.com": "dreame_tech", - "dreamlab.pl": "dreamlab.pl", - "drift.com": "drift", - "js.driftt.com": "drift", - "getdrip.com": "drip", - "dropbox.com": "dropbox.com", - "dropboxstatic.com": "dropbox.com", - "z5x.net": "dsnr_media_group", - "dsp-rambler.ru": "dsp_rambler", - "m6d.com": "dstillery", - "media6degrees.com": "dstillery", - "dtscout.com": "dtscout.com", - "dd-cdn.multiscreensite.com": "dudamobile", - "px.multiscreensite.com": "dudamobile", - "cdn-0.d41.co": "dun_and_bradstreet", - "cn01.dwstat.cn": "dwstat.cn", - "dynad.net": "dynad", - "dyntrk.com": "dynadmic", - "dyntracker.de": "dynamic_1001_gmbh", - "media01.eu": "dynamic_1001_gmbh", - "content.dl-rms.com": "dynamic_logic", - "dlqm.net": "dynamic_logic", - "questionmarket.com": "dynamic_logic", - "dynamicyield.com": "dynamic_yield", - "beacons.hottraffic.nl": "dynata", - "dynatrace.com": "dynatrace.com", - "dyncdn.me": "dyncdn.me", - "e-planning.net": "e-planning", - "eadv.it": "eadv", - "eanalyzer.de": "eanalyzer.de", - "early-birds.fr": "early_birds", - "cdn.earnify.com": "earnify", - "earnify.com": "earnify_tracker", - "easyads.bg": "easyads", - "easylist.club": "easylist_club", - "classistatic.de": "ebay", - "ebay-us.com": "ebay", - "ebay.com": "ebay", - "ebay.de": "ebay", - "ebayclassifiedsgroup.com": "ebay", - "ebaycommercenetwork.com": "ebay", - "ebaydesc.com": "ebay", - "ebayimg.com": "ebay", - "ebayrtm.com": "ebay", - "ebaystatic.com": "ebay", - "ad.about.co.kr": "ebay_korea", - "adcheck.about.co.kr": "ebay_korea", - "adn.ebay.com": "ebay_partner_network", - "beead.co.uk": "ebuzzing", - "beead.fr": "ebuzzing", - "beead.net": "ebuzzing", - "ebuzzing.com": "ebuzzing", - "ebz.io": "ebuzzing", - "echoenabled.com": "echo", - "eclick.vn": "eclick", - "econda-monitor.de": "econda", - "eco-tag.jp": "ecotag", - "alphacdn.net": "edgio", - "edg.io": "edgio", - "edgecast.com": "edgio", - "edgecastcdn.net": "edgio", - "edgecastdns.net": "edgio", - "sigmacdn.net": "edgio", - "ecustomeropinions.com": "edigitalresearch", - "effectivemeasure.net": "effective_measure", - "effiliation.com": "effiliation", - "egain.net": "egain", - "cloud-emea.analytics-egain.com": "egain_analytics", - "ehi-siegel.de": "ehi-siegel_de", - "ekmpinpoint.com": "ekmpinpoint", - "ekomi.de": "ekomi", - "elasticad.net": "elastic_ad", - "elasticbeanstalk.com": "elastic_beanstalk", - "cloudcell.com": "electronic_arts", - "ea.com": "electronic_arts", - "eamobile.com": "electronic_arts", - "element.io": "element", - "riot.im": "element", - "elicitapp.com": "elicit", - "eloqua.com": "eloqua", - "en25.com": "eloqua", - "eluxer.net": "eluxer_net", - "tracker.emailaptitude.com": "email_aptitude", - "tag.email-attitude.com": "email_attitude", - "app.emarketeer.com": "emarketeer", - "embed.ly": "embed.ly", - "embedly.com": "embed.ly", - "emediate.dk": "emediate", - "emediate.eu": "emediate", - "emediate.se": "emediate", - "emetriq.de": "emetriq", - "e2ma.net": "emma", - "adinsight.co.kr": "emnet", - "colbenson.es": "empathy", - "emsmobile.de": "emsmobile.de", - "sitecompass.com": "encore_metrics", - "enectoanalytics.com": "enecto_analytics", - "trk.enecto.com": "enecto_analytics", - "track.engagesciences.com": "engage_sciences", - "widget.engageya.com": "engageya_widget", - "engagio.com": "engagio", - "engineseeker.com": "engineseeker", - "enquisite.com": "enquisite", - "adtlgc.com": "enreach", - "ats.tumri.net": "ensemble", - "ensighten.com": "ensighten", - "envolve.com": "envolve", - "cdn.callbackkiller.com": "envybox", - "email-reflex.com": "eperflex", - "epicgameads.com": "epic_game_ads", - "trafficmp.com": "epic_marketplace", - "adshost1.com": "epom", - "adshost2.com": "epom", - "epom.com": "epom", - "epoq.de": "epoq", - "banzaiadv.it": "eprice", - "eproof.com": "eproof", - "equitystory.com": "eqs_group", - "eqads.com": "eqworks", - "ero-advertising.com": "eroadvertising", - "eroadvertising.com": "eroadvertising", - "d15qhc0lu1ghnk.cloudfront.net": "errorception", - "errorception.com": "errorception", - "eshopcomp.com": "eshopcomp.com", - "espncdn.com": "espn_cdn", - "esprit.de": "esprit.de", - "cybermonitor.com": "estat", - "estat.com": "estat", - "teste-s3-maycon.s3.amazonaws.com": "etag", - "etahub.com": "etahub.com", - "etargetnet.com": "etarget", - "ethn.io": "ethnio", - "pages.etology.com": "etology", - "sa.etp-prod.com": "etp", - "etracker.com": "etracker", - "etracker.de": "etracker", - "sedotracker.com": "etracker", - "etrigue.com": "etrigue", - "etsystatic.com": "etsystatic", - "eulerian.net": "eulerian", - "eultech.fnac.com": "eulerian", - "ew3.io": "eulerian", - "euroads.dk": "euroads", - "euroads.fi": "euroads", - "euroads.no": "euroads", - "newpromo.europacash.com": "europecash", - "tracker.euroweb.net": "euroweb_counter", - "apptegic.com": "evergage.com", - "evergage.com": "evergage.com", - "listener.everstring.com": "everstring", - "waterfrontmedia.com": "everyday_health", - "betrad.com": "evidon", - "evidon.com": "evidon", - "evisitanalyst.com": "evisit_analyst", - "evisitcs.com": "evisit_analyst", - "websiteperform.com": "evisit_analyst", - "ads.exactdrive.com": "exact_drive", - "exactag.com": "exactag", - "exelator.com": "exelate", - "dynamicoxygen.com": "exitjunction", - "exitjunction.com": "exitjunction", - "exdynsrv.com": "exoclick", - "exoclick.com": "exoclick", - "exosrv.com": "exoclick", - "exoticads.com": "exoticads.com", - "expedia.com": "expedia", - "trvl-px.com": "expedia", - "eccmp.com": "experian", - "audienceiq.com": "experian_marketing_services", - "techlightenment.com": "experian_marketing_services", - "expo-max.com": "expo-max", - "server.exposebox.com": "expose_box", - "sf.exposebox.com": "expose_box_widgets", - "express.co.uk": "express.co.uk", - "d1lp05q4sghme9.cloudfront.net": "expressvpn", - "extreme-dm.com": "extreme_tracker", - "eyenewton.ru": "eye_newton", - "eyeota.net": "eyeota", - "eyereturn.com": "eyereturnmarketing", - "eyeviewads.com": "eyeview", - "ezakus.net": "ezakus", - "f11-ads.com": "f11-ads.com", - "facebook.com": "facebook", - "facebook.net": "facebook", - "graph.facebook.com": "facebook_audience", - "fbcdn.net": "facebook_cdn", - "fbsbx.com": "facebook_cdn", - "facetz.net": "facetz.dca", - "adsfac.eu": "facilitate_digital", - "adsfac.net": "facilitate_digital", - "adsfac.sg": "facilitate_digital", - "adsfac.us": "facilitate_digital", - "faktor.io": "faktor.io", - "thefancy.com": "fancy_widget", - "d1q7pknmpq2wkm.cloudfront.net": "fanplayr", - "fap.to": "fap.to", - "farlightgames.com": "farlight_pte_ltd", - "fastly-insights.com": "fastly_insights", - "fastly.net": "fastlylb.net", - "fastlylb.net": "fastlylb.net", - "fastpic.ru": "fastpic.ru", - "fmpub.net": "federated_media", - "fby.s3.amazonaws.com": "feedbackify", - "feedbackify.com": "feedbackify", - "feedburner.com": "feedburner.com", - "feedify.de": "feedify", - "feedjit.com": "feedjit", - "log.feedjit.com": "feedjit", - "tracking.feedperfect.com": "feedperfect", - "feedsportal.com": "feedsportal", - "feefo.com": "feefo", - "fidelity-media.com": "fidelity_media", - "fiksu.com": "fiksu", - "filamentapp.s3.amazonaws.com": "filament.io", - "fileserve.xyz": "fileserve", - "tools.financeads.net": "financeads", - "tracker.financialcontent.com": "financial_content", - "findizer.fr": "findizer.fr", - "findologic.com": "findologic.com", - "app-measurement.com": "firebase", - "fcm.googleapis.com": "firebase", - "firebase.com": "firebase", - "firebase.google.com": "firebase", - "firebase.googleapis.com": "firebase", - "firebaseapp.com": "firebase", - "firebaseappcheck.googleapis.com": "firebase", - "firebasedynamiclinks-ipv4.googleapis.com": "firebase", - "firebasedynamiclinks-ipv6.googleapis.com": "firebase", - "firebasedynamiclinks.googleapis.com": "firebase", - "firebaseinappmessaging.googleapis.com": "firebase", - "firebaseinstallations.googleapis.com": "firebase", - "firebaselogging-pa.googleapis.com": "firebase", - "firebaselogging.googleapis.com": "firebase", - "firebaseperusertopics-pa.googleapis.com": "firebase", - "firebaseremoteconfig.googleapis.com": "firebase", - "firebaseio.com": "firebaseio.com", - "firstimpression.io": "first_impression", - "fitanalytics.com": "fit_analytics", - "fivetran.com": "fivetran", - "flagads.net": "flag_ads", - "flagcounter.com": "flag_counter", - "flashnews.com.au": "flash", - "flashtalking.com": "flashtalking", - "flattr.com": "flattr_button", - "flexlinks.com": "flexoffers", - "linkoffers.net": "flexoffers", - "flickr.com": "flickr_badge", - "staticflickr.com": "flickr_badge", - "lflipboard.com": "flipboard", - "flipboard.com": "flipboard", - "flite.com": "flite", - "flixcdn.com": "flixcdn.com", - "flix360.com": "flixmedia", - "flixcar.com": "flixmedia", - "flocktory.com": "flocktory.com", - "flowplayer.org": "flowplayer", - "adingo.jp": "fluct", - "clicken.us": "fluent", - "strcst.net": "fluid", - "fluidads.co": "fluidads", - "fluidsurveys.com": "fluidsurveys", - "cdn.flurry.com": "flurry", - "data.flurry.com": "flurry", - "flurry.com": "flurry", - "flx1.com": "flxone", - "flxpxl.com": "flxone", - "api.flyertown.ca": "flyertown", - "adservinghost.com": "fmadserving", - "adservinginternational.com": "fmadserving", - "special.matchtv.ru": "fonbet", - "kavijaseuranta.fi": "fonecta", - "fontawesome.com": "fontawesome_com", - "foodieblogroll.com": "foodie_blogroll", - "footprintlive.com": "footprint", - "footprintdns.com": "footprintdns.com", - "forcetrac.com": "forcetrac", - "fqsecure.com": "forensiq", - "fqtag.com": "forensiq", - "securepaths.com": "forensiq", - "4seeresults.com": "foresee", - "foresee.com": "foresee", - "cdn-static.formisimo.com": "formisimo", - "forter.com": "forter", - "fortlachanhecksof.info": "fortlachanhecksof.info", - "platform.foursquare.com": "foursquare_widget", - "fout.jp": "fout.jp", - "fimserve.com": "fox_audience_network", - "foxsports.com.au": "fox_sports", - "fncstatic.com": "foxnews_static", - "cdn.foxpush.net": "foxpush", - "foxpush.com": "foxpush", - "foxtel.com.au": "foxtel", - "foxydeal.com": "foxydeal_com", - "yabidos.com": "fraudlogix", - "besucherstatistiken.com": "free_counter", - "compteurdevisite.com": "free_counter", - "contadorvisitasgratis.com": "free_counter", - "contatoreaccessi.com": "free_counter", - "freecounterstat.com": "free_counter", - "statcounterfree.com": "free_counter", - "webcontadores.com": "free_counter", - "fastonlineusers.com": "free_online_users", - "fastwebcounter.com": "free_online_users", - "freeonlineusers.com": "free_online_users", - "atoomic.com": "free_pagerank", - "free-pagerank.com": "free_pagerank", - "freedom.com": "freedom_mortgage", - "freegeoip.net": "freegeoip_net", - "freenet.de": "freenet_de", - "freent.de": "freenet_de", - "freeview.com": "freeview", - "freeview.com.au": "freeview", - "freeviewaustralia.tv": "freeview", - "fwmrm.net": "freewheel", - "heimdall.fresh8.co": "fresh8", - "d36mpcpuzc4ztk.cloudfront.net": "freshdesk", - "freshdesk.com": "freshdesk", - "freshplum.com": "freshplum", - "friendbuy.com": "friendbuy", - "friendfeed.com": "friendfeed", - "adultfriendfinder.com": "friendfinder_network", - "amigos.com": "friendfinder_network", - "board-books.com": "friendfinder_network", - "cams.com": "friendfinder_network", - "facebookofsex.com": "friendfinder_network", - "getiton.com": "friendfinder_network", - "nostringsattached.com": "friendfinder_network", - "pop6.com": "friendfinder_network", - "streamray.com": "friendfinder_network", - "inpref.com": "frosmo_optimizer", - "inpref.s3-external-3.amazonaws.com": "frosmo_optimizer", - "inpref.s3.amazonaws.com": "frosmo_optimizer", - "adflan.com": "fruitflan", - "fruitflan.com": "fruitflan", - "fstrk.net": "fstrk.net", - "cookie.fuel451.com": "fuelx", - "fullstory.com": "fullstory", - "track.funnelytics.io": "funnelytics", - "angsrvr.com": "fyber", - "fyber.com": "fyber", - "game-advertising-online.com": "game_advertising_online", - "gameanalytics.com": "gameanalytics", - "gamedistribution.com": "gamedistribution.com", - "gamerdna.com": "gamerdna", - "gannett-cdn.com": "gannett", - "gaug.es": "gaug.es", - "gpm-digital.com": "gazprom-media_digital", - "js.gb-world.net": "gb-world", - "gdeslon.ru": "gdeslon", - "gdmdigital.com": "gdm_digital", - "gntm.geeen.co.jp": "geeen", - "lpomax.net": "geeen", - "gemius.pl": "gemius", - "generaltracking.de": "generaltracking_de", - "genesismedia.com": "genesis", - "gssprt.jp": "geniee", - "rsvpgenius.com": "genius", - "genoo.com": "genoo", - "js.geoads.com": "geoads", - "geolify.com": "geolify", - "geoplugin.net": "geoplugin", - "geotrust.com": "geotrust", - "geovisite.com": "geovisite", - "gestionpub.com": "gestionpub", - "app.getresponse.com": "get_response", - "getsitecontrol.com": "get_site_control", - "getconversion.net": "getconversion", - "widgets.getglue.com": "getglue", - "adhigh.net": "getintent", - "static.getkudos.me": "getkudos", - "yottos.com": "getmyad", - "gsfn.us": "getsatisfaction", - "gettyimages.com": "gettyimages", - "sensic.net": "gfk", - "gfycat.com": "gfycat.com", - "a.giantrealm.com": "giant_realm", - "videostat.com": "giantmedia", - "gigaonclick.com": "giga", - "analytics.gigyahosting1.com": "gigya", - "gigcount.com": "gigya", - "gigya.com": "gigya", - "service.giosg.com": "giosg", - "giphy.com": "giphy.com", - "giraff.io": "giraff.io", - "github.com": "github", - "githubassets.com": "github", - "githubusercontent.com": "github", - "ghcr.io": "github", - "github.blog": "github", - "github.dev": "github", - "octocaptcha.com": "github", - "githubapp.com": "github_apps", - "github.io": "github_pages", - "aff3.gittigidiyor.com": "gittigidiyor_affiliate_program", - "gittip.com": "gittip", - "sitest.jp": "glad_cube", - "glganltcs.space": "glganltcs.space", - "globalwebindex.net": "global_web_index", - "globalnotifier.com": "globalnotifier.com", - "globalsign.com": "globalsign", - "ad.globaltakeoff.net": "globaltakeoff", - "glomex.cloud": "glomex.com", - "glomex.com": "glomex.com", - "glotgrx.com": "glotgrx.com", - "a.gmdelivery.com": "gm_delivery", - "gmail.com": "gmail", - "ad.atown.jp": "gmo", - "gmx.net": "gmx_net", - "gmxpro.net": "gmx_net", - "go.com": "go.com", - "affiliate.godaddy.com": "godaddy_affiliate_program", - "trafficfacts.com": "godaddy_site_analytics", - "seal.godaddy.com": "godaddy_site_seal", - "tracking.godatafeed.com": "godatafeed", - "counter.goingup.com": "goingup", - "axf8.net": "gomez", - "goodadvert.ru": "goodadvert", - "google.at": "google", - "google.be": "google", - "google.ca": "google", - "google.ch": "google", - "google.co.id": "google", - "google.co.in": "google", - "google.co.jp": "google", - "google.co.ma": "google", - "google.co.th": "google", - "google.co.uk": "google", - "google.com": "google", - "google.com.ar": "google", - "google.com.au": "google", - "google.com.br": "google", - "google.com.mx": "google", - "google.com.tr": "google", - "google.com.tw": "google", - "google.com.ua": "google", - "google.cz": "google", - "google.de": "google", - "google.dk": "google", - "google.dz": "google", - "google.es": "google", - "google.fi": "google", - "google.fr": "google", - "google.gr": "google", - "google.hu": "google", - "google.ie": "google", - "google.it": "google", - "google.nl": "google", - "google.no": "google", - "google.pl": "google", - "google.pt": "google", - "google.ro": "google", - "google.rs": "google", - "google.ru": "google", - "google.se": "google", - "google.tn": "google", - "1e100.net": "google", - "agnss.goog": "google", - "channel.status.request.url": "google", - "g.cn": "google", - "g.co": "google", - "google.ad": "google", - "google.ae": "google", - "google.al": "google", - "google.am": "google", - "google.as": "google", - "google.az": "google", - "google.ba": "google", - "google.bf": "google", - "google.bg": "google", - "google.bi": "google", - "google.bj": "google", - "google.bs": "google", - "google.bt": "google", - "google.by": "google", - "google.cat": "google", - "google.cd": "google", - "google.cf": "google", - "google.cg": "google", - "google.ci": "google", - "google.cl": "google", - "google.cm": "google", - "google.cn": "google", - "google.co.ao": "google", - "google.co.bw": "google", - "google.co.ck": "google", - "google.co.cr": "google", - "google.co.il": "google", - "google.co.ke": "google", - "google.co.kr": "google", - "google.co.ls": "google", - "google.co.mz": "google", - "google.co.nz": "google", - "google.co.tz": "google", - "google.co.ug": "google", - "google.co.uz": "google", - "google.co.ve": "google", - "google.co.vi": "google", - "google.co.za": "google", - "google.co.zm": "google", - "google.co.zw": "google", - "google.com.af": "google", - "google.com.ag": "google", - "google.com.ai": "google", - "google.com.bd": "google", - "google.com.bh": "google", - "google.com.bn": "google", - "google.com.bo": "google", - "google.com.bz": "google", - "google.com.co": "google", - "google.com.cu": "google", - "google.com.cy": "google", - "google.com.ec": "google", - "google.com.eg": "google", - "google.com.et": "google", - "google.com.fj": "google", - "google.com.gh": "google", - "google.com.gi": "google", - "google.com.gt": "google", - "google.com.hk": "google", - "google.com.jm": "google", - "google.com.kh": "google", - "google.com.kw": "google", - "google.com.lb": "google", - "google.com.my": "google", - "google.com.na": "google", - "google.com.nf": "google", - "google.com.ng": "google", - "google.com.ni": "google", - "google.com.np": "google", - "google.com.om": "google", - "google.com.pa": "google", - "google.com.pe": "google", - "google.com.pg": "google", - "google.com.ph": "google", - "google.com.pk": "google", - "google.com.pr": "google", - "google.com.py": "google", - "google.com.qa": "google", - "google.com.sa": "google", - "google.com.sb": "google", - "google.com.sg": "google", - "google.com.sl": "google", - "google.com.sv": "google", - "google.com.tj": "google", - "google.com.uy": "google", - "google.com.vc": "google", - "google.com.vn": "google", - "google.cv": "google", - "google.dj": "google", - "google.dm": "google", - "google.ee": "google", - "google.fm": "google", - "google.ga": "google", - "google.ge": "google", - "google.gg": "google", - "google.gl": "google", - "google.gm": "google", - "google.gp": "google", - "google.gy": "google", - "google.hn": "google", - "google.hr": "google", - "google.ht": "google", - "google.im": "google", - "google.in": "google", - "google.iq": "google", - "google.is": "google", - "google.je": "google", - "google.jo": "google", - "google.kg": "google", - "google.ki": "google", - "google.kz": "google", - "google.la": "google", - "google.li": "google", - "google.lk": "google", - "google.lt": "google", - "google.lu": "google", - "google.lv": "google", - "google.md": "google", - "google.me": "google", - "google.mg": "google", - "google.mk": "google", - "google.ml": "google", - "google.mn": "google", - "google.ms": "google", - "google.mu": "google", - "google.mv": "google", - "google.mw": "google", - "google.ne": "google", - "google.net": "google", - "google.nr": "google", - "google.nu": "google", - "google.org": "google", - "google.pn": "google", - "google.ps": "google", - "google.rw": "google", - "google.sc": "google", - "google.sh": "google", - "google.si": "google", - "google.sk": "google", - "google.sm": "google", - "google.sn": "google", - "google.so": "google", - "google.sr": "google", - "google.st": "google", - "google.td": "google", - "google.tg": "google", - "google.tk": "google", - "google.tl": "google", - "google.tm": "google", - "google.to": "google", - "google.tt": "google", - "google.us": "google", - "google.vg": "google", - "google.vu": "google", - "google.ws": "google", - "googleapis.cn": "google", - "googlecode.com": "google", - "googledownloads.cn": "google", - "googleoptimize.com": "google", - "googleweblight.in": "google", - "googlezip.net": "google", - "gstatic.cn": "google", - "news.google.com": "google", - "oo.gl": "google", - "withgoogle.com": "google", - "googleadservices.com": "google_adservices", - "google-analytics.com": "google_analytics", - "app-analytics-services.com": "google_analytics", - "ssl-google-analytics.l.google.com": "google_analytics", - "www-googletagmanager.l.google.com": "google_analytics", - "appspot.com": "google_appspot", - "googlehosted.com": "google_appspot", - "accounts.google.com": "google_auth", - "myaccount.google.com": "google_auth", - "oauth2.googleapis.com": "google_auth", - "ogs.google.com": "google_auth", - "securetoken.googleapis.com": "google_auth", - "beacons-google.com": "google_beacons", - "alt1-mtalk.google.com": "google_chat", - "alt2-mtalk.google.com": "google_chat", - "alt3-mtalk.google.com": "google_chat", - "alt4-mtalk.google.com": "google_chat", - "alt5-mtalk.google.com": "google_chat", - "alt6-mtalk.google.com": "google_chat", - "alt7-mtalk.google.com": "google_chat", - "alt8-mtalk.google.com": "google_chat", - "chat.google.com": "google_chat", - "mobile-gtalk.l.google.com": "google_chat", - "mobile-gtalk4.l.google.com": "google_chat", - "mtalk.google.com": "google_chat", - "mtalk4.google.com": "google_chat", - "talk.google.com": "google_chat", - "talk.l.google.com": "google_chat", - "talkx.l.google.com": "google_chat", - "cloud.google.com": "google_cloud_platform", - "gcp.gvt2.com": "google_cloud_platform", - "storage.googleapis.com": "google_cloud_storage", - "adsensecustomsearchads.com": "google_custom_search", - "dns.google": "google_dns", - "dns.google.com": "google_dns", - "google-public-dns-a.google.com": "google_dns", - "google-public-dns-b.google.com": "google_dns", - "domains.google": "google_domains", - "googledomains.com": "google_domains", - "nic.google": "google_domains", - "registry.google": "google_domains", - "edge.google.com": "google_edge", - "mail-ads.google.com": "google_email", - "fonts.googleapis.com": "google_fonts", - "cloudfunctions.net": "google_hosted", - "ghs.googlehosted.com": "google_hosted", - "ghs4.googlehosted.com": "google_hosted", - "ghs46.googlehosted.com": "google_hosted", - "ghs6.googlehosted.com": "google_hosted", - "googlehosted.l.googleusercontent.com": "google_hosted", - "run.app": "google_hosted", - "supl.google.com": "google_location", - "earth.app.goo.gl": "google_maps", - "geo0.ggpht.com": "google_maps", - "geo1.ggpht.com": "google_maps", - "geo2.ggpht.com": "google_maps", - "geo3.ggpht.com": "google_maps", - "kh.google.com": "google_maps", - "maps.app.goo.gl": "google_maps", - "maps.google.ca": "google_maps", - "maps.google.ch": "google_maps", - "maps.google.co.jp": "google_maps", - "maps.google.co.uk": "google_maps", - "maps.google.com": "google_maps", - "maps.google.com.mx": "google_maps", - "maps.google.es": "google_maps", - "maps.google.se": "google_maps", - "maps.gstatic.com": "google_maps", - "adsense.google.com": "google_marketing", - "adservice.google.ca": "google_marketing", - "adservice.google.co.in": "google_marketing", - "adservice.google.co.kr": "google_marketing", - "adservice.google.co.uk": "google_marketing", - "adservice.google.co.za": "google_marketing", - "adservice.google.com": "google_marketing", - "adservice.google.com.ar": "google_marketing", - "adservice.google.com.au": "google_marketing", - "adservice.google.com.br": "google_marketing", - "adservice.google.com.co": "google_marketing", - "adservice.google.com.gt": "google_marketing", - "adservice.google.com.mx": "google_marketing", - "adservice.google.com.pe": "google_marketing", - "adservice.google.com.ph": "google_marketing", - "adservice.google.com.pk": "google_marketing", - "adservice.google.com.tr": "google_marketing", - "adservice.google.com.tw": "google_marketing", - "adservice.google.com.vn": "google_marketing", - "adservice.google.de": "google_marketing", - "adservice.google.dk": "google_marketing", - "adservice.google.es": "google_marketing", - "adservice.google.fr": "google_marketing", - "adservice.google.nl": "google_marketing", - "adservice.google.no": "google_marketing", - "adservice.google.pl": "google_marketing", - "adservice.google.ru": "google_marketing", - "adservice.google.vg": "google_marketing", - "dai.google.com": "google_marketing", - "doubleclickbygoogle.com": "google_marketing", - "googlesyndication-cn.com": "google_marketing", - "duo.google.com": "google_meet", - "hangouts.clients6.google.com": "google_meet", - "hangouts.google.com": "google_meet", - "hangouts.googleapis.com": "google_meet", - "meet.google.com": "google_meet", - "meetings.googleapis.com": "google_meet", - "stun.l.google.com": "google_meet", - "stun1.l.google.com": "google_meet", - "ggpht.com": "google_photos", - "play-fe.googleapis.com": "google_play", - "play-lh.googleusercontent.com": "google_play", - "play.google.com": "google_play", - "play.googleapis.com": "google_play", - "1e100cdn.net": "google_servers", - "gvt1.com": "google_servers", - "gvt2.com": "google_servers", - "gvt3.com": "google_servers", - "googlesyndication.com": "google_syndication", - "googletagmanager.com": "google_tag_manager", - "googletagservices.com": "google_tag_manager", - "translate.google.com": "google_translate", - "googletraveladservices.com": "google_travel_adds", - "pki.goog": "google_trust_services", - "googlecommerce.com": "google_trusted_stores", - "googleusercontent.com": "google_users", - "telephony.goog": "google_voice", - "voice.google.com": "google_voice", - "gmodules.com": "google_widgets", - "calendar.google.com": "google_workspace", - "contacts.google.com": "google_workspace", - "currents.google.com": "google_workspace", - "docs.google.com": "google_workspace", - "drive.google.com": "google_workspace", - "forms.google.com": "google_workspace", - "gsuite.google.com": "google_workspace", - "jamboard.google.com": "google_workspace", - "keep.google.com": "google_workspace", - "plus.google.com": "google_workspace", - "sheets.google.com": "google_workspace", - "slides.google.com": "google_workspace", - "spreadsheets.google.com": "google_workspace", - "googleapis.com": "googleapis.com", - "gooal.herokuapp.com": "goooal", - "gooo.al": "goooal", - "cdn.triggertag.gorillanation.com": "gorilla_nation", - "evolvemediametrics.com": "gorilla_nation", - "d1l6p2sc9645hc.cloudfront.net": "gosquared", - "gosquared.com": "gosquared", - "gostats.com": "gostats", - "govmetric.com": "govmetric", - "servmetric.com": "govmetric", - "b.grabo.bg": "grabo_affiliate", - "trw12.com": "grandslammedia", - "tuberewards.com": "grandslammedia", - "d2bw638ufki166.cloudfront.net": "granify", - "granify.com": "granify", - "grapeshot.co.uk": "grapeshot", - "gscontxt.net": "grapeshot", - "graphcomment.com": "graph_comment", - "gravatar.com": "gravatar", - "cdn.gravitec.net": "gravitec", - "gravity.com": "gravity_insights", - "grvcdn.com": "gravity_insights", - "greatviews.de": "greatviews.de", - "gandrad.org": "green_and_red", - "green-red.com": "green_and_red", - "co2stats.com": "green_certified_site", - "greenstory.ca": "green_story", - "greentube.com": "greentube.com", - "gt-cdn.net": "greentube.com", - "greystripe.com": "greystripe", - "groovehq.com": "groove", - "groovinads.com": "groovinads", - "bidagent.xad.com": "groundtruth", - "gmads.net": "groupm_server", - "grmtech.net": "groupm_server", - "media.gsimedia.net": "gsi_media", - "gstatic.com": "gstatic", - "fx.gtop.ro": "gtop", - "fx.gtopstats.com": "gtop", - "gubagootracking.com": "gugaboo", - "guj.de": "guj.de", - "emsservice.de": "gujems", - "gumgum.com": "gumgum", - "gumroad.com": "gumroad", - "gunggo.com": "gunggo", - "h12-media.com": "h12_ads", - "h12-media.net": "h12_ads", - "hnbutton.appspot.com": "hacker_news_button", - "haendlerbund.de": "haendlerbund.de", - "halogennetwork.com": "halogen_network", - "d1l7z5ofrj6ab8.cloudfront.net": "happy_fox_chat", - "ad.harrenmedianetwork.com": "harren_media", - "ads.networkhm.com": "harren_media", - "app.hatchbuck.com": "hatchbuck", - "hhcdn.ru": "head_hunter", - "healte.de": "healte.de", - "d36lvucg9kzous.cloudfront.net": "heap", - "heapanalytics.com": "heap", - "heatmap.it": "heatmap", - "weltsport.net": "heimspiel", - "hellobar.com": "hello_bar", - "hellosociety.com": "hellosociety", - "here.com": "here", - "herokuapp.com": "heroku", - "heureka.cz": "heureka-widget", - "heybubble.com": "heybubble", - "heyos.com": "heyos", - "adlink.net": "hi-media_performance", - "comclick.com": "hi-media_performance", - "hi-mediaserver.com": "hi-media_performance", - "himediads.com": "hi-media_performance", - "himediadx.com": "hi-media_performance", - "hiconversion.com": "hiconversion", - "highwebmedia.com": "highwebmedia.com", - "hwcdn.net": "highwinds", - "hiiir.com": "hiiir", - "hiro.tv": "hiro", - "histats.com": "histats", - "hit-parade.com": "hit-parade", - "hit.ua": "hit.ua", - "hitslink.com": "hitslink", - "hitsprocessor.com": "hitslink", - "hitsniffer.com": "hitsniffer", - "hittail.com": "hittail", - "hivedx.com": "hivedx.com", - "ads.thehiveworks.com": "hiveworks", - "hockeyapp.net": "hockeyapp", - "hoholikik.club": "hoholikik.club", - "h-cdn.com": "hola_player", - "homeaway.com": "homeaway", - "honeybadger.io": "honeybadger", - "hlserve.com": "hooklogic", - "apiae.hopscore.com": "hop-cube", - "hotdogsandads.com": "hotdogsandads.com", - "hotjar.com": "hotjar", - "hotkeys.com": "hotkeys", - "hotlog.ru": "hotlog.ru", - "hotwords.com": "hotwords", - "hotwords.es": "hotwords", - "howtank.com": "howtank.com", - "hqentertainmentnetwork.com": "hqentertainmentnetwork.com", - "justservingfiles.net": "hqentertainmentnetwork.com", - "hsoub.com": "hsoub", - "hstrck.com": "hstrck.com", - "httpool.com": "httpool", - "toboads.com": "httpool", - "hubrus.com": "hubrus", - "hs-analytics.net": "hubspot", - "hs-scripts.com": "hubspot", - "hsleadflows.net": "hubspot", - "hubapi.com": "hubspot", - "hubspot.com": "hubspot", - "forms.hubspot.com": "hubspot_forms", - "hubvisor.io": "hubvisor.io", - "files.hucksterbot.com": "hucksterbot", - "hupso.com": "hupso", - "hurra.com": "hurra_tracker", - "hybrid.ai": "hybrid.ai", - "targetix.net": "hybrid.ai", - "hypeads.org": "hype_exchange", - "hypercomments.com": "hypercomments", - "hyves.nl": "hyves_widgets", - "hyvyd.com": "hyvyd", - "ib-ibi.com": "i-behavior", - "i-mobile.co.jp": "i-mobile", - "r.i.ua": "i.ua", - "i10c.net": "i10c.net", - "i2i.jp": "i2i.jp", - "i2idata.com": "i2i.jp", - "consensu.org": "iab_consent", - "iadvize.com": "iadvize", - "cmcore.com": "ibm_customer_experience", - "coremetrics.com": "ibm_customer_experience", - "coremetrics.eu": "ibm_customer_experience", - "tracker.icerocket.com": "icerocket_tracker", - "nsimg.net": "icf_technology", - "optimix.asia": "iclick", - "ic-live.com": "icrossing", - "icstats.nl": "icstats", - "icuazeczpeoohx.com": "icuazeczpeoohx.com", - "id-news.net": "id-news.net", - "idcdn.de": "id-news.net", - "cdn.id.services": "id_services", - "e-generator.com": "ideal_media", - "idealo.com": "idealo_com", - "identrust.com": "identrust", - "ideoclick.com": "ideoclick", - "s.idio.co": "idio", - "ie8eamus.com": "ie8eamus.com", - "600z.com": "ientry", - "api.iflychat.com": "iflychat", - "ignitionone.com": "ignitionone", - "knotice.net": "ignitionone", - "igodigital.com": "igodigital", - "ad.wsod.com": "ihs_markit", - "collserve.com": "ihs_markit_online_shopper_insigh", - "ihvmcqojoj.com": "ihvmcqojoj.com", - "iias.eu": "iias.eu", - "ijento.com": "ijento", - "adv.imadrep.co.kr": "imad", - "worthathousandwords.com": "image_advantage", - "picadmedia.com": "image_space_media", - "imgix.net": "imgix.net", - "imgur.com": "imgur", - "vidigital.ru": "imho_vi", - "immanalytics.com": "immanalytics", - "immobilienscout24.de": "immobilienscout24_de", - "static-immobilienscout24.de": "immobilienscout24_de", - "imonomy.com": "imonomy", - "7eer.net": "impact_radius", - "d3cxv97fi8q177.cloudfront.net": "impact_radius", - "evyy.net": "impact_radius", - "impactradius-event.com": "impact_radius", - "impactradius-tag.com": "impact_radius", - "impactradius.com": "impact_radius", - "ojrq.net": "impact_radius", - "r7ls.net": "impact_radius", - "impresionesweb.com": "impresiones_web", - "360yield.com": "improve_digital", - "iljmp.com": "improvely", - "inbenta.com": "inbenta", - "inboxsdk.com": "inboxsdk.com", - "indeed.com": "indeed", - "casalemedia.com": "index_exchange", - "indexww.com": "index_exchange", - "indieclick.com": "indieclick", - "industrybrains.com": "industry_brains", - "impdesk.com": "infectious_media", - "impressiondesk.com": "infectious_media", - "zachysprod.infiniteanalytics.com": "infinite_analytics", - "infinity-tracking.net": "infinity_tracking", - "engine.influads.com": "influads", - "infolinks.com": "infolinks", - "intextscript.com": "infolinks", - "ioam.de": "infonline", - "iocnt.net": "infonline", - "ivwbox.de": "infonline", - "informer.com": "informer_technologies", - "infusionsoft.com": "infusionsoft", - "keap.com": "infusionsoft", - "innity.com": "innity", - "innity.net": "innity", - "innogames.com": "innogames.de", - "innogames.de": "innogames.de", - "innogamescdn.com": "innogames.de", - "innovid.com": "innovid", - "inside-graph.com": "inside", - "useinsider.com": "insider", - "insightexpressai.com": "insightexpress", - "inskinad.com": "inskin_media", - "inskinmedia.com": "inskin_media", - "inspectlet.com": "inspectlet", - "inspsearchapi.com": "inspsearchapi.com", - "cdninstagram.com": "instagram_com", - "instagram.com": "instagram_com", - "tcgtrkr.com": "instant_check_mate", - "sdad.guru": "instart_logic", - "insticator.com": "insticator", - "load.instinctiveads.com": "instinctive", - "intango.com": "intango", - "adsafeprotected.com": "integral_ad_science", - "iasds01.com": "integral_ad_science", - "integral-marketing.com": "integral_marketing", - "intelliad.com": "intelliad", - "intelliad.de": "intelliad", - "saas.intelligencefocus.com": "intelligencefocus", - "ist-track.com": "intelligent_reach", - "intensedebate.com": "intense_debate", - "intentiq.com": "intent_iq", - "intentmedia.net": "intent_media", - "intercom.com": "intercom", - "intercom.io": "intercom", - "intercomassets.com": "intercom", - "intercomcdn.com": "intercom", - "interedy.info": "interedy.info", - "ads.intergi.com": "intergi", - "intermarkets.net": "intermarkets.net", - "intermundomedia.com": "intermundo_media", - "bbelements.com": "internet_billboard", - "goadservices.com": "internet_billboard", - "ibillboard.com": "internet_billboard", - "mediainter.net": "internet_billboard", - "voice2page.com": "internetaudioads", - "ibpxl.com": "internetbrands", - "ibsrv.net": "internetbrands", - "interpolls.com": "interpolls", - "ps7894.com": "interyield", - "intilery-analytics.com": "intilery", - "im-apps.net": "intimate_merger", - "investingchannel.com": "investingchannel", - "inviziads.com": "inviziads", - "js12.invoca.net": "invoca", - "ringrevenue.com": "invoca", - "invodo.com": "invodo", - "ionicframework.com": "ionicframework.com", - "dsp.io": "iotec", - "iesnare.com": "iovation", - "iovation.com": "iovation", - "ip-label.net": "ip-label", - "eltoro.com": "ip_targeting", - "iptargeting.com": "ip_targeting", - "ip-tracker.org": "ip_tracker", - "iptrack.io": "ip_tracker", - "iperceptions.com": "iperceptions", - "dust.ipfingerprint.com": "ipfingerprint", - "mbww.com": "ipg_mediabrands", - "ipify.org": "ipify", - "ipinfo.io": "ipinfo", - "iplogger.ru": "iplogger", - "centraliprom.com": "iprom", - "iprom.net": "iprom", - "ipromote.com": "ipromote", - "clickmanage.com": "iprospect", - "iq.com": "iqiyi", - "iqiyi.com": "iqiyi", - "qy.net": "iqiyi", - "addelive.com": "ironsource", - "afdads.com": "ironsource", - "delivery47.com": "ironsource", - "ironsrc.com": "ironsource", - "ironsrc.net": "ironsource", - "is.com": "ironsource", - "soom.la": "ironsource", - "supersonicads.com": "ironsource", - "tapjoy.com": "ironsource", - "adsbyisocket.com": "isocket", - "isocket.com": "isocket", - "isolarcloud.com": "isolarcloud", - "isolarcloud.com.a.lahuashanbx.com": "isolarcloud", - "isolarcloud.com.w.cdngslb.com": "isolarcloud", - "isolarcloud.com.w.kunlunsl.com": "isolarcloud", - "ispot.tv": "ispot.tv", - "itineraire.info": "itineraire.info", - "autolinkmaker.itunes.apple.com": "itunes_link_maker", - "ity.im": "ity.im", - "iubenda.com": "iubenda.com", - "ivcbrasil.org.br": "ivcbrasil.org.br", - "ivitrack.com": "ividence", - "iwiw.hu": "iwiw_widgets", - "ixiaa.com": "ixi_digital", - "ixquick.com": "ixquick.com", - "cdn.izooto.com": "izooto", - "jlist.com": "j-list_affiliate_program", - "getjaco.com": "jaco", - "janrainbackplane.com": "janrain", - "rpxnow.com": "janrain", - "jeeng.com": "jeeng", - "api.jeeng.com": "jeeng_widgets", - "phone-analytics.com": "jet_interactive", - "jetlore.com": "jetlore", - "pixel.wp.com": "jetpack", - "stats.wp.com": "jetpack", - "jetpackdigital.com": "jetpack_digital", - "jimcdn.com": "jimdo.com", - "jimdo.com": "jimdo.com", - "jimstatic.com": "jimdo.com", - "ads.jinkads.com": "jink", - "jirafe.com": "jirafe", - "jivosite.com": "jivochat", - "jivox.com": "jivox", - "jobs2careers.com": "jobs_2_careers", - "joinhoney.com": "joinhoney", - "create.leadid.com": "jornaya", - "d1tprjo2w7krrh.cloudfront.net": "jornaya", - "cdnjquery.com": "jquery", - "jquery.com": "jquery", - "cjmooter.xcache.kinxcdn.com": "js_communications", - "jsdelivr.net": "jsdelivr", - "jsecoin.com": "jse_coin", - "jsuol.com.br": "jsuol.com.br", - "contentabc.com": "juggcash", - "mofos.com": "juggcash", - "juiceadv.com": "juiceadv", - "juicyads.com": "juicyads", - "cdn.jumplead.com": "jumplead", - "jumpstarttaggingsolutions.com": "jumpstart_tagging_solutions", - "jumptap.com": "jumptap", - "jump-time.net": "jumptime", - "jumptime.com": "jumptime", - "components.justanswer.com": "just_answer", - "justpremium.com": "just_premium", - "justpremium.nl": "just_premium", - "justrelevant.com": "just_relevant", - "jvc.gg": "jvc.gg", - "d21rhj7n383afu.cloudfront.net": "jw_player", - "jwpcdn.com": "jw_player", - "jwplatform.com": "jw_player", - "jwplayer.com": "jw_player", - "jwpltx.com": "jw_player", - "jwpsrv.com": "jw_player", - "ltassrv.com": "jw_player_ad_solutions", - "kaeufersiegel.de": "kaeufersiegel.de", - "kairion.de": "kairion.de", - "kctag.net": "kairion.de", - "kaloo.ga": "kaloo.ga", - "kaltura.com": "kaltura", - "kameleoon.com": "kameleoon", - "kameleoon.eu": "kameleoon", - "kampyle.com": "kampyle", - "kanoodle.com": "kanoodle", - "kmi-us.com": "kantar_media", - "tnsinternet.be": "kantar_media", - "karambasecurity.com": "karambasecurity", - "kargo.com": "kargo", - "kaspersky-labs.com": "kaspersky-labs.com", - "kataweb.it": "kataweb.it", - "cen.katchup.fr": "katchup", - "kau.li": "kauli", - "kavanga.ru": "kavanga", - "kayosports.com.au": "kayo_sports", - "dc8na2hxrj29i.cloudfront.net": "keen_io", - "keen.io": "keen_io", - "widget.kelkoo.com": "kelkoo", - "xg4ken.com": "kenshoo", - "keymetric.net": "keymetric", - "lb.keytiles.com": "keytiles", - "keywee.co": "keywee", - "keywordmax.com": "keywordmax", - "massrelevance.com": "khoros", - "tweetriver.com": "khoros", - "khzbeucrltin.com": "khzbeucrltin.com", - "ping.kickfactory.com": "kickfactory", - "sa-as.com": "kickfire", - "sniff.visistat.com": "kickfire", - "stats.visistat.com": "kickfire", - "apikik.com": "kik", - "kik-gateway-use1.meetme.com": "kik", - "kik-live.com": "kik", - "kik-stream.meetme.com": "kik", - "kik.com": "kik", - "king.com": "king.com", - "midasplayer.com": "king_com", - "kinja-img.com": "kinja.com", - "kinja-static.com": "kinja.com", - "kinja.com": "kinja.com", - "kiosked.com": "kiosked", - "doug1izaerwt3.cloudfront.net": "kissmetrics.com", - "kissmetrics.com": "kissmetrics.com", - "ad.103092804.com": "kitara_media", - "kmdisplay.com": "kitara_media", - "kixer.com": "kixer", - "klarna.com": "klarna.com", - "a.klaviyo.com": "klaviyo", - "klaviyo.com": "klaviyo", - "klikki.com": "klikki", - "scr.kliksaya.com": "kliksaya", - "mediapeo2.com": "kmeleo", - "knoopstat.nl": "knoopstat", - "knotch.it": "knotch", - "komoona.com": "komoona", - "kona.kontera.com": "kontera_contentlink", - "ktxtr.com": "kontextr", - "kontextua.com": "kontextua", - "cleanrm.net": "korrelate", - "korrelate.net": "korrelate", - "trackit.ktxlytics.io": "kortx", - "kaptcha.com": "kount", - "krxd.net": "krux_digital", - "d31bfnnwekbny6.cloudfront.net": "kupona", - "kpcustomer.de": "kupona", - "q-sis.de": "kupona", - "kxcdn.com": "kxcdn.com", - "cdn.kyto.com": "kyto", - "cd-ladsp-com.s3.amazonaws.com": "ladsp.com", - "ladmp.com": "ladsp.com", - "ladsp.com": "ladsp.com", - "lanistaads.com": "lanista_concepts", - "latimes.com": "latimes", - "events.launchdarkly.com": "launch_darkly", - "launchdarkly.com": "launch_darkly", - "launchbit.com": "launchbit", - "launchpad.net": "launchpad", - "launchpadcontent.net": "launchpad", - "layer-ad.org": "layer-ad.org", - "ph-live.slatic.net": "lazada", - "slatic.net": "lazada", - "lcxdigital.com": "lcx_digital", - "lemde.fr": "le_monde.fr", - "t1.llanalytics.com": "lead_liaison", - "leadback.ru": "leadback", - "leaddyno.com": "leaddyno", - "123-tracker.com": "leadforensics", - "55-trk-srv.com": "leadforensics", - "business-path-55.com": "leadforensics", - "click-to-trace.com": "leadforensics", - "cloud-exploration.com": "leadforensics", - "cloud-journey.com": "leadforensics", - "cloud-trail.com": "leadforensics", - "cloudpath82.com": "leadforensics", - "cloudtracer101.com": "leadforensics", - "discover-path.com": "leadforensics", - "discovertrail.net": "leadforensics", - "domainanalytics.net": "leadforensics", - "dthvdr9.com": "leadforensics", - "explore-123.com": "leadforensics", - "finger-info.net": "leadforensics", - "forensics1000.com": "leadforensics", - "ip-route.net": "leadforensics", - "ipadd-path.com": "leadforensics", - "iproute66.com": "leadforensics", - "lead-123.com": "leadforensics", - "lead-analytics-1000.com": "leadforensics", - "lead-watcher.com": "leadforensics", - "leadforensics.com": "leadforensics", - "ledradn.com": "leadforensics", - "letterbox-path.com": "leadforensics", - "letterboxtrail.com": "leadforensics", - "network-handle.com": "leadforensics", - "path-follower.com": "leadforensics", - "path-trail.com": "leadforensics", - "scan-trail.com": "leadforensics", - "site-research.net": "leadforensics", - "srv1010elan.com": "leadforensics", - "the-lead-tracker.com": "leadforensics", - "trace-2000.com": "leadforensics", - "track-web.net": "leadforensics", - "trackdiscovery.net": "leadforensics", - "trackercloud.net": "leadforensics", - "trackinvestigate.net": "leadforensics", - "trail-viewer.com": "leadforensics", - "trail-web.com": "leadforensics", - "trailbox.net": "leadforensics", - "trailinvestigator.com": "leadforensics", - "web-path.com": "leadforensics", - "webforensics.co.uk": "leadforensics", - "websiteexploration.com": "leadforensics", - "www-path.com": "leadforensics", - "gate.leadgenic.com": "leadgenic", - "leadhit.ru": "leadhit", - "js.leadin.com": "leadin", - "io.leadingreports.de": "leading_reports", - "js.leadinspector.de": "leadinspector", - "formalyzer.com": "leadlander", - "trackalyzer.com": "leadlander", - "analytics.leadlifesolutions.net": "leadlife", - "my.leadpages.net": "leadpages", - "leadplace.fr": "leadplace", - "scorecard.wspisp.net": "leads_by_web.com", - "www.leadscoreapp.dk": "leadscoreapp", - "tracker.leadsius.com": "leadsius", - "leady.com": "leady", - "leady.cz": "leady", - "leiki.com": "leiki", - "lengow.com": "lengow", - "lenmit.com": "lenmit.com", - "lentainform.com": "lentainform.com", - "lenua.de": "lenua.de", - "letreach.com": "let_reach", - "lencr.org": "lets_encrypt", - "letsencrypt.org": "lets_encrypt", - "js.letvcdn.com": "letv", - "footprint.net": "level3_communications", - "alphonso.tv": "lgads", - "lgads.tv": "lgads", - "lg.com": "lgtv", - "lge.com": "lgtv", - "lgsmartad.com": "lgtv", - "lgtvcommon.com": "lgtv", - "lgtvsdp.com": "lgtv", - "licensebuttons.net": "licensebuttons.net", - "lfstmedia.com": "lifestreet_media", - "content-recommendation.net": "ligatus", - "ligadx.com": "ligatus", - "ligatus.com": "ligatus", - "ligatus.de": "ligatus", - "veeseo.com": "ligatus", - "limk.com": "limk", - "line-apps.com": "line_apps", - "line-scdn.net": "line_apps", - "line.me": "line_apps", - "tongji.linezing.com": "linezing", - "linkbucks.com": "linkbucks", - "linkconnector.com": "linkconnector", - "bizo.com": "linkedin", - "licdn.com": "linkedin", - "linkedin.com": "linkedin", - "lynda.com": "linkedin", - "ads.linkedin.com": "linkedin_ads", - "snap.licdn.com": "linkedin_analytics", - "bizographics.com": "linkedin_marketing_solutions", - "platform.linkedin.com": "linkedin_widgets", - "linker.hr": "linker", - "linkprice.com": "linkprice", - "lp4.io": "linkpulse", - "linksalpha.com": "linksalpha", - "erovinmo.com": "linksmart", - "linksmart.com": "linksmart", - "linkstorm.net": "linkstorm", - "linksynergy.com": "linksynergy.com", - "linkup.com": "linkup", - "linkwi.se": "linkwise", - "linkwithin.com": "linkwithin", - "lqm.io": "liquidm_technology_gmbh", - "lqmcdn.com": "liquidm_technology_gmbh", - "liqwid.net": "liqwid", - "list.ru": "list.ru", - "listrakbi.com": "listrak", - "live2support.com": "live2support", - "live800.com": "live800", - "ladesk.com": "live_agent", - "livehelpnow.net": "live_help_now", - "liadm.com": "live_intent", - "l-stat.livejournal.net": "live_journal", - "liveadexchanger.com": "liveadexchanger.com", - "livechat.s3.amazonaws.com": "livechat", - "livechatinc.com": "livechat", - "livechatinc.net": "livechat", - "livechatnow.com": "livechatnow", - "livechatnow.net": "livechatnow", - "liveclicker.net": "liveclicker", - "livecounter.dk": "livecounter", - "fyre.co": "livefyre", - "livefyre.com": "livefyre", - "yadro.ru": "liveinternet", - "liveperson.net": "liveperson", - "lpsnmedia.net": "liveperson", - "pippio.com": "liveramp", - "rapleaf.com": "liveramp", - "rlcdn.com": "liveramp", - "livere.co.kr": "livere", - "livere.co.kr.cizion.ixcloud.net": "livere", - "livesportmedia.eu": "livesportmedia.eu", - "analytics.livestream.com": "livestream", - "livetex.ru": "livetex.ru", - "lkqd.net": "lkqd", - "loadbee.com": "loadbee.com", - "loadercdn.com": "loadercdn.com", - "loadsource.org": "loadsource.org", - "web.localytics.com": "localytics", - "localytics.com": "localytics", - "cdn2.lockerdome.com": "lockerdome", - "addtoany.com": "lockerz_share", - "pixel.loganmedia.mobi": "logan_media", - "ping.answerbook.com": "logdna", - "loggly.com": "loggly", - "logly.co.jp": "logly", - "logsss.com": "logsss.com", - "lomadee.com": "lomadee", - "assets.loomia.com": "loomia", - "loop11.com": "loop11", - "lfov.net": "loopfuse_oneview", - "crwdcntrl.net": "lotame", - "vidcpm.com": "lottex_inc", - "tracker.samplicio.us": "lucid", - "lucidmedia.com": "lucid_media", - "lead.adsender.us": "lucini", - "livestatserver.com": "lucky_orange", - "luckyorange.com": "lucky_orange", - "luckyorange.net": "lucky_orange", - "luckypushh.com": "luckypushh.com", - "adelixir.com": "lxr100", - "lypn.com": "lynchpin_analytics", - "lypn.net": "lynchpin_analytics", - "lytics.io": "lytics", - "lyuoaxruaqdo.com": "lyuoaxruaqdo.com", - "m-pathy.com": "m-pathy", - "mpnrs.com": "m._p._newmedia", - "m4n.nl": "m4n", - "madadsmedia.com": "mad_ads_media", - "madeleine.de": "madeleine.de", - "dinclinx.com": "madison_logic", - "madisonlogic.com": "madison_logic", - "madnet.ru": "madnet", - "eu2.madsone.com": "mads", - "magna.ru": "magna_advertise", - "d3ezl4ajpp2zy8.cloudfront.net": "magnetic", - "domdex.com": "magnetic", - "domdex.net": "magnetic", - "magnetisemedia.com": "magnetise_group", - "magnify360.com": "magnify360", - "magnuum.com": "magnuum.com", - "ad.mail.ru": "mail.ru_banner", - "imgsmail.ru": "mail.ru_group", - "mail.ru": "mail.ru_group", - "mradx.net": "mail.ru_group", - "odnoklassniki.ru": "mail.ru_group", - "ok.ru": "mail.ru_group", - "chimpstatic.com": "mailchimp_tracking", - "list-manage.com": "mailchimp_tracking", - "mailchimp.com": "mailchimp_tracking", - "mailerlite.com": "mailerlite.com", - "mailtrack.io": "mailtrack.io", - "mainadv.com": "mainadv", - "makazi.com": "makazi", - "makeappdev.xyz": "makeappdev.xyz", - "makesource.cool": "makesource.cool", - "widgets.mango-office.ru": "mango", - "manycontacts.com": "manycontacts", - "mapandroute.de": "mapandroute.de", - "mapbox.com": "mapbox", - "www.maploco.com": "maploco", - "px.marchex.io": "marchex", - "voicestar.com": "marchex", - "mmadsgadget.com": "marimedia", - "qadabra.com": "marimedia", - "qadserve.com": "marimedia", - "qadservice.com": "marimedia", - "marinsm.com": "marin_search_marketer", - "markandmini.com": "mark_+_mini", - "ak-cdn.placelocal.com": "market_thunder", - "dt00.net": "marketgid", - "dt07.net": "marketgid", - "marketgid.com": "marketgid", - "mgid.com": "marketgid", - "marketingautomation.si": "marketing_automation", - "marketo.com": "marketo", - "marketo.net": "marketo", - "mktoresp.com": "marketo", - "caanalytics.com": "markmonitor", - "mmstat.com": "markmonitor", - "markmonitor.com": "markmonitor", - "netscope.data.marktest.pt": "marktest", - "marshadow.io": "marshadow.io", - "martiniadnetwork.com": "martini_media", - "edigitalsurvey.com": "maru-edu", - "marvellousmachine.net": "marvellous_machine", - "mbn.com.ua": "master_banner_network", - "mastertarget.ru": "mastertarget", - "rns.matelso.de": "matelso", - "matheranalytics.com": "mather_analytics", - "mathjax.org": "mathjax.org", - "nzaza.com": "matiro", - "matomo.cloud": "matomo", - "matomo.org": "matomo", - "piwik.org": "matomo", - "adsmarket.com": "matomy_market", - "m2pub.com": "matomy_market", - "matrix.org": "matrix", - "mb01.com": "maxbounty", - "maxcdn.com": "maxcdn", - "netdna-cdn.com": "maxcdn", - "netdna-ssl.com": "maxcdn", - "maxlab.ru": "maxlab", - "maxmind.com": "maxmind", - "maxonclick.com": "maxonclick_com", - "mxptint.net": "maxpoint_interactive", - "maxymiser.hs.llnwd.net": "maxymiser", - "maxymiser.net": "maxymiser", - "m6r.eu": "mbr_targeting", - "pixel.adbuyer.com": "mbuy", - "mcabi.mcloudglobal.com": "mcabi", - "scanalert.com": "mcafee_secure", - "ywxi.net": "mcafee_secure", - "mconet.biz": "mconet", - "mdotlabs.com": "mdotlabs", - "media-clic.com": "media-clic", - "media-imdb.com": "media-imdb.com", - "media.net": "media.net", - "mediaimpact.de": "media_impact", - "mookie1.com": "media_innovation_group", - "idntfy.ru": "media_today", - "s1.mediaad.org": "mediaad", - "mlnadvertising.com": "mediaglu", - "fhserve.com": "mediahub", - "media-lab.ai": "medialab", - "medialab.la": "medialab", - "adnet.ru": "medialand", - "medialand.ru": "medialand", - "medialead.de": "medialead", - "mathads.com": "mediamath", - "mathtag.com": "mediamath", - "mediametrics.ru": "mediametrics", - "audit.median.hu": "median", - "mediapass.com": "mediapass", - "mt.mediapostcommunication.net": "mediapost_communications", - "mediarithmics.com": "mediarithmics.com", - "tns-counter.ru": "mediascope", - "ad.media-servers.net": "mediashakers", - "adsvc1107131.net": "mediashift", - "mediator.media": "mediator.media", - "mediav.com": "mediav", - "adnetinteractive.com": "mediawhiz", - "adnetinteractive.net": "mediawhiz", - "mediego.com": "medigo", - "medleyads.com": "medley", - "adnet.com.tr": "medyanet", - "e-kolay.net": "medyanet", - "medyanetads.com": "medyanet", - "cim.meebo.com": "meebo_bar", - "meetrics.net": "meetrics", - "mxcdn.net": "meetrics", - "research.de.com": "meetrics", - "counter.megaindex.ru": "megaindex", - "mega.co.nz": "meganz", - "mega.io": "meganz", - "mega.nz": "meganz", - "mein-bmi.com": "mein-bmi.com", - "webvisitor.melissadata.net": "melissa", - "meltdsp.com": "melt", - "mlt01.com": "menlo", - "mentad.com": "mentad", - "mercadoclics.com": "mercado", - "mercadolivre.com.br": "mercado", - "mlstatic.com": "mercado", - "merchantadvantage.com": "merchantadvantage", - "merchenta.com": "merchenta", - "roia.biz": "mercury_media", - "cdn.merklesearch.com": "merkle_research", - "rkdms.com": "merkle_rkg", - "messenger.com": "messenger.com", - "ad.metanetwork.com": "meta_network", - "metaffiliation.com": "metaffiliation.com", - "netaffiliation.com": "metaffiliation.com", - "metalyzer.com": "metapeople", - "mlsat02.de": "metapeople", - "metrigo.com": "metrigo", - "metriweb.be": "metriweb", - "miaozhen.com": "miaozhen", - "microad.co.jp": "microad", - "microad.jp": "microad", - "microad.net": "microad", - "microadinc.com": "microad", - "azurewebsites.net": "microsoft", - "cloudapp.net": "microsoft", - "gfx.ms": "microsoft", - "microsoft.com": "microsoft", - "microsoftonline-p.com": "microsoft", - "microsoftonline.com": "microsoft", - "microsofttranslator.com": "microsoft", - "msecnd.net": "microsoft", - "msedge.net": "microsoft", - "msocdn.com": "microsoft", - "onestore.ms": "microsoft", - "s-microsoft.com": "microsoft", - "trouter.io": "microsoft", - "windows.net": "microsoft", - "aka.ms": "microsoft", - "microsoftazuread-sso.com": "microsoft", - "bingapis.com": "microsoft", - "msauth.net": "microsoft", - "msauthimages.net": "microsoft", - "msftauth.net": "microsoft", - "msftstatic.com": "microsoft", - "msidentity.com": "microsoft", - "nelreports.net": "microsoft", - "windowscentral.com": "microsoft", - "analytics.live.com": "microsoft_analytics", - "a.clarity.ms": "microsoft_clarity", - "b.clarity.ms": "microsoft_clarity", - "c.clarity.ms": "microsoft_clarity", - "d.clarity.ms": "microsoft_clarity", - "e.clarity.ms": "microsoft_clarity", - "f.clarity.ms": "microsoft_clarity", - "g.clarity.ms": "microsoft_clarity", - "h.clarity.ms": "microsoft_clarity", - "i.clarity.ms": "microsoft_clarity", - "j.clarity.ms": "microsoft_clarity", - "log.clarity.ms": "microsoft_clarity", - "www.clarity.ms": "microsoft_clarity", - "mmismm.com": "mindset_media", - "imgfarm.com": "mindspark", - "mindspark.com": "mindspark", - "staticimgfarm.com": "mindspark", - "mvtracker.com": "mindviz_tracker", - "minewhat.com": "minewhat", - "mintsapp.io": "mints_app", - "snackly.co": "minute.ly", - "snippet.minute.ly": "minute.ly", - "apv.configuration.minute.ly": "minute.ly_video", - "get.mirando.de": "mirando", - "mirtesen.ru": "mirtesen.ru", - "misterbell.com": "mister_bell", - "mixi.jp": "mixi", - "mixpanel.com": "mixpanel", - "mxpnl.com": "mixpanel", - "mxpnl.net": "mixpanel", - "swf.mixpo.com": "mixpo", - "app.mluvii.com": "mluvii", - "mncdn.com": "mncdn.com", - "moatads.com": "moat", - "moatpixel.com": "moat", - "mobicow.com": "mobicow", - "a.mobify.com": "mobify", - "mobtrks.com": "mobtrks.com", - "ads.mocean.mobi": "mocean_mobile", - "ads.moceanads.com": "mocean_mobile", - "chat.mochapp.com": "mochapp", - "intelligentpixel.modernimpact.com": "modern_impact", - "teljari.is": "modernus", - "modulepush.com": "modulepush.com", - "mogointeractive.com": "mogo_interactive", - "mokonocdn.com": "mokono_analytics", - "devappgrant.space": "monero_miner", - "monetate.net": "monetate", - "monetize-me.com": "monetize_me", - "ads.themoneytizer.com": "moneytizer", - "mongoosemetrics.com": "mongoose_metrics", - "track.monitis.com": "monitis", - "monitus.net": "monitus", - "fonts.net": "monotype_gmbh", - "fonts.com": "monotype_imaging", - "cdn.monsido.com": "monsido", - "monster.com": "monster_advertising", - "mooxar.com": "mooxar", - "mopinion.com": "mopinion.com", - "mopub.com": "mopub", - "ad.ad-arata.com": "more_communication", - "moras.jp": "moreads", - "nedstatbasic.net": "motigo_webstats", - "webstats.motigo.com": "motigo_webstats", - "analytics.convertlanguage.com": "motionpoint", - "mouseflow.com": "mouseflow", - "mousestats.com": "mousestats", - "s.mousetrace.com": "mousetrace", - "movad.de": "mov.ad", - "movad.net": "mov.ad", - "micpn.com": "movable_ink", - "mvb.me": "movable_media", - "moz.com": "moz", - "firefox.com": "mozilla", - "mozaws.net": "mozilla", - "mozgcp.net": "mozilla", - "mozilla.com": "mozilla", - "mozilla.net": "mozilla", - "mozilla.org": "mozilla", - "storage.mozoo.com": "mozoo", - "tracker.mrpfd.com": "mrp", - "mrpdata.com": "mrpdata", - "mrpdata.net": "mrpdata", - "mrskincash.com": "mrskincash", - "a-msedge.net": "msedge", - "b-msedge.net": "msedge", - "e-msedge.net": "msedge", - "k-msedge.net": "msedge", - "l-msedge.net": "msedge", - "s-msedge.net": "msedge", - "spo-msedge.net": "msedge", - "t-msedge.net": "msedge", - "wac-msedge.net": "msedge", - "msn.com": "msn", - "s-msn.com": "msn", - "musculahq.appspot.com": "muscula", - "litix.io": "mux_inc", - "mybloglog.com": "mybloglog", - "t.p.mybuys.com": "mybuys", - "mycdn.me": "mycdn.me", - "mycliplister.com": "mycliplister.com", - "mycounter.com.ua": "mycounter.ua", - "mycounter.ua": "mycounter.ua", - "myfonts.net": "myfonts", - "mypagerank.net": "mypagerank", - "stat.mystat.hu": "mystat", - "mythings.com": "mythings", - "mystat-in.net": "mytop_counter", - "nab.com": "nab", - "nab.com.au": "nab", - "nab.net": "nab", - "nabgroup.com": "nab", - "national.com.au": "nab", - "nationalaustraliabank.com.au": "nab", - "nationalbank.com.au": "nab", - "nakanohito.jp": "nakanohito.jp", - "namogoo.coom": "namogoo", - "nanigans.com": "nanigans", - "audiencemanager.de": "nano_interactive", - "nanorep.com": "nanorep", - "narando.com": "narando", - "static.bam-x.com": "narrativ", - "narrative.io": "narrative_io", - "p1.ntvk1.ru": "natimatica", - "nativeads.com": "nativeads.com", - "cdn01.nativeroll.tv": "nativeroll", - "ntv.io": "nativo", - "postrelease.com": "nativo", - "navdmp.com": "navegg_dmp", - "naver.com": "naver.com", - "naver.net": "naver.com", - "s-nbcnews.com": "nbc_news", - "richmedia247.com": "ncol", - "needle.com": "needle", - "nekudo.com": "nekudo.com", - "neodatagroup.com": "neodata", - "ad-srv.net": "neory", - "contentspread.net": "neory", - "neory-tm.com": "neory", - "simptrack.com": "neory", - "nerfherdersolo.com": "nerfherdersolo_com", - "wemfbox.ch": "net-metrix", - "cdnma.com": "net-results", - "nr7.us": "net-results", - "netavenir.com": "net_avenir", - "netcommunities.com": "net_communities", - "visibility-stats.com": "net_visibility", - "netbiscuits.net": "netbiscuits", - "bbtrack.net": "netbooster_group", - "netbooster.com": "netbooster_group", - "netflix.com": "netflix", - "nflxext.com": "netflix", - "nflximg.net": "netflix", - "nflxso.net": "netflix", - "nflxvideo.net": "netflix", - "flxvpn.net": "netflix", - "netflix.ca": "netflix", - "netflix.com.au": "netflix", - "netflix.net": "netflix", - "netflixdnstest1.com": "netflix", - "netflixdnstest10.com": "netflix", - "netflixdnstest2.com": "netflix", - "netflixdnstest3.com": "netflix", - "netflixdnstest4.com": "netflix", - "netflixdnstest5.com": "netflix", - "netflixdnstest6.com": "netflix", - "netflixdnstest7.com": "netflix", - "netflixdnstest8.com": "netflix", - "netflixdnstest9.com": "netflix", - "netflixinvestor.com": "netflix", - "netflixstudios.com": "netflix", - "netflixtechblog.com": "netflix", - "nflximg.com": "netflix", - "netify.ai": "netify", - "netzathleten-media.de": "netletix", - "netminers.dk": "netminers", - "netmining.com": "netmining", - "netmng.com": "netmining", - "stat.netmonitor.fi": "netmonitor", - "glanceguide.com": "netratings_sitecensus", - "imrworldwide.com": "netratings_sitecensus", - "vizu.com": "netratings_sitecensus", - "netrk.net": "netrk.net", - "netseer.com": "netseer", - "netshelter.net": "netshelter", - "nsaudience.pl": "netsprint_audience", - "nwidget.networkedblogs.com": "networkedblogs", - "adadvisor.net": "neustar_adadvisor", - "d1ros97qkrwjf5.cloudfront.net": "new_relic", - "newrelic.com": "new_relic", - "nr-data.net": "new_relic", - "codestream.com": "new_relic", - "newscgp.com": "newscgp.com", - "nmcdn.us": "newsmax", - "newstogram.com": "newstogram", - "newsupdatedir.info": "newsupdatedir.info", - "newsupdatewe.info": "newsupdatewe.info", - "ads.newtention.net": "newtention", - "ads.newtentionassets.net": "newtention", - "nexage.com": "nexage", - "nexeps.com": "nexeps.com", - "nxtck.com": "next_performance", - "track.nextuser.com": "next_user", - "imgsrv.nextag.com": "nextag_roi_optimizer", - "nextclick.pl": "nextclick", - "nextstat.com": "nextstat", - "d1d8vn0fpluuz7.cloudfront.net": "neytiv", - "ads.ngageinc.com": "ngage_inc.", - "nice264.com": "nice264.com", - "nimblecommerce.com": "nimblecommerce", - "nineanalytics.io": "nine_direct_digital", - "cho-chin.com": "ninja_access_analysis", - "donburako.com": "ninja_access_analysis", - "hishaku.com": "ninja_access_analysis", - "shinobi.jp": "ninja_access_analysis", - "static.nirror.com": "nirror", - "nitropay.com": "nitropay", - "nk.pl": "nk.pl_widgets", - "noaa.gov": "noaa.gov", - "track.noddus.com": "noddus", - "contextbar.ru": "nolix", - "nonli.com": "nonli", - "non.li": "nonli", - "trkme.net": "nonstop_consulting", - "noop.style": "noop.style", - "nosto.com": "nosto.com", - "adleadevent.com": "notify", - "notifyfox.com": "notifyfox", - "notion.so": "notion", - "nowinteract.com": "now_interact", - "npario-inc.net": "npario", - "nplexmedia.com": "nplexmedia", - "nrelate.com": "nrelate", - "ns8.com": "ns8", - "nt.vc": "nt.vc", - "featurelink.com": "ntent", - "ntp.org": "ntppool", - "ntppool.org": "ntppool", - "tracer.jp": "nttcom_online_marketing_solutions", - "nuffnang.com": "nuffnang", - "nuggad.net": "nugg.ad", - "rotator.adjuggler.com": "nui_media", - "numbers.md": "numbers.md", - "channeliq.com": "numerator", - "nyacampwk.com": "nyacampwk.com", - "nyetm2mkch.com": "nyetm2mkch.com", - "nyt.com": "nyt.com", - "nytimes.com": "nyt.com", - "o12zs3u2n.com": "o12zs3u2n.com", - "o2.pl": "o2.pl", - "o2online.de": "o2online.de", - "oath.com": "oath_inc", - "observerapp.com": "observer", - "ocioso.com.br": "ocioso", - "oclasrv.com": "oclasrv.com", - "octapi.net": "octapi.net", - "service.octavius.rocks": "octavius", - "office.com": "office.com", - "office.net": "office.net", - "office365.com": "office365.com", - "oghub.io": "oghub.io", - "ohmystats.com": "oh_my_stats", - "adohana.com": "ohana_advertising_network", - "photorank.me": "olapic", - "olark.com": "olark", - "olx-st.com": "olx-st.com", - "onap.io": "olx-st.com", - "omarsys.com": "omarsys.com", - "ometria.com": "ometria", - "omgpm.com": "omg", - "omniconvert.com": "omniconvert.com", - "omnidsp.com": "omniscienta", - "oms.eu": "oms", - "omsnative.de": "oms", - "onaudience.com": "onaudience", - "btc-echode.api.oneall.com": "oneall", - "tracking.onefeed.co.uk": "onefeed", - "onesignal.com": "onesignal", - "os.tc": "onesignal", - "stat.onestat.com": "onestat", - "ocdn.eu": "onet.pl", - "onet.pl": "onet.pl", - "onetag.com": "onetag", - "s-onetag.com": "onetag", - "onetrust.com": "onetrust", - "fogl1onf.com": "onfocus.io", - "onfocus.io": "onfocus.io", - "onlinewebstat.com": "onlinewebstat", - "onlinewebstats.com": "onlinewebstat", - "onswipe.com": "onswipe", - "onthe.io": "onthe.io", - "moon-ray.com": "ontraport_autopilot", - "moonraymarketing.com": "ontraport_autopilot", - "ooyala.com": "ooyala.com", - "openadex.dk": "open_adexchange", - "247realmedia.com": "open_adstream", - "oaserve.com": "open_adstream", - "realmedia.com": "open_adstream", - "realmediadigital.com": "open_adstream", - "opensharecount.com": "open_share_count", - "chatgpt.com": "openai", - "oaistatic.com": "openai", - "oaiusercontent.com": "openai", - "openai.com": "openai", - "oloadcdn.net": "openload", - "openload.co": "openload", - "openstat.net": "openstat", - "spylog.com": "openstat", - "spylog.ru": "openstat", - "opentracker.net": "opentracker", - "openwebanalytics.com": "openwebanalytics", - "odnxs.net": "openx", - "openx.net": "openx", - "openx.org": "openx", - "openxenterprise.com": "openx", - "servedbyopenx.com": "openx", - "adsummos.net": "operative_media", - "opinary.com": "opinary", - "opinionbar.com": "opinionbar", - "emagazines.com": "oplytic", - "allawnos.com": "oppo", - "allawntech.com": "oppo", - "heytapdl.com": "oppo", - "heytapmobi.com": "oppo", - "heytapmobile.com": "oppo", - "oppomobile.com": "oppo", - "opta.net": "opta.net", - "optaim.com": "optaim", - "cookielaw.org": "optanaon", - "service.optify.net": "optify", - "optimatic.com": "optimatic", - "optmd.com": "optimax_media_delivery", - "optimicdn.com": "optimicdn.com", - "optimizely.com": "optimizely", - "episerver.net": "optimizely", - "optimonk.com": "optimonk", - "mstrlytcs.com": "optinmonster", - "optmnstr.com": "optinmonster", - "optmstr.com": "optinmonster", - "optnmstr.com": "optinmonster", - "optincollect.com": "optinproject.com", - "volvelle.tech": "optomaton", - "ora.tv": "ora.tv", - "oracleinfinity.io": "oracle_infinity", - "instantservice.com": "oracle_live_help", - "ts.istrack.com": "oracle_live_help", - "rightnowtech.com": "oracle_rightnow", - "rnengage.com": "oracle_rightnow", - "orange.fr": "orange", - "orangeads.fr": "orange", - "ads.orange142.com": "orange142", - "wanadoo.fr": "orange_france", - "otracking.com": "orangesoda", - "emxdgt.com": "orc_international", - "static.ordergroove.com": "order_groove", - "orelsite.ru": "orel_site", - "otclick-adv.ru": "otclick", - "othersearch.info": "othersearch.info", - "otm-r.com": "otm-r.com", - "otto.de": "otto.de", - "ottogroup.media": "otto.de", - "outbrain.com": "outbrain", - "outbrainimg.com": "outbrain", - "live.com": "outlook", - "cloud.microsoft": "outlook", - "hotmail.com": "outlook", - "outlook.com": "outlook", - "svc.ms": "outlook", - "overheat.it": "overheat.it", - "oewabox.at": "owa", - "owneriq.net": "owneriq", - "ownpage.fr": "ownpage", - "owox.com": "owox.com", - "adconnexa.com": "oxamedia", - "adsbwm.com": "oxamedia", - "oxomi.com": "oxomi.com", - "oztam.com.au": "oztam", - "pageanalytics.space": "pageanalytics.space", - "blockmetrics.com": "pagefair", - "pagefair.com": "pagefair", - "pagefair.net": "pagefair", - "ghmedia.com": "pagescience", - "777seo.com": "paid-to-promote", - "paid-to-promote.net": "paid-to-promote", - "ptp22.com": "paid-to-promote", - "ptp33.com": "paid-to-promote", - "paperg.com": "paperg", - "pardot.com": "pardot", - "d1z2jf7jlzjs58.cloudfront.net": "parsely", - "parsely.com": "parsely", - "partner-ads.com": "partner-ads", - "passionfruitads.com": "passionfruit", - "pathful.com": "pathful", - "pay-hit.com": "pay-hit", - "payclick.it": "payclick", - "app.paykickstart.com": "paykickstart", - "paypal.com": "paypal", - "paypalobjects.com": "paypal", - "pcvark.com": "pcvark.com", - "peer39.com": "peer39", - "peer39.net": "peer39", - "peer5.com": "peer5.com", - "peerius.com": "peerius", - "pendo.io": "pendo.io", - "pepper.com": "pepper.com", - "gopjn.com": "pepperjam", - "pjatr.com": "pepperjam", - "pjtra.com": "pepperjam", - "pntra.com": "pepperjam", - "pntrac.com": "pepperjam", - "pntrs.com": "pepperjam", - "player.pepsia.com": "pepsia", - "perfdrive.com": "perfdrive.com", - "perfectaudience.com": "perfect_audience", - "prfct.co": "perfect_audience", - "perfectmarket.com": "perfect_market", - "perfops.io": "perfops", - "performgroup.com": "perform_group", - "analytics.performable.com": "performable", - "performancing.com": "performancing_metrics", - "performax.cz": "performax", - "perimeterx.net": "perimeterx.net", - "permutive.com": "permutive", - "persgroep.net": "persgroep", - "persianstat.com": "persianstat", - "code.pers.io": "persio", - "counter.personyze.com": "personyze", - "petametrics.com": "petametrics", - "ads.pheedo.com": "pheedo", - "app.phonalytics.com": "phonalytics", - "d2bgg7rjywcwsy.cloudfront.net": "phunware", - "piguiqproxy.com": "piguiqproxy.com", - "trgt.eu": "pilot", - "pingdom.net": "pingdom", - "pinimg.com": "pinterest", - "pinterest.com": "pinterest", - "app.pipz.io": "pipz", - "disabled.invalid": "piwik", - "piwik.pro": "piwik_pro_analytics_suite", - "adrta.com": "pixalate", - "app.pixelpop.co": "pixel_union", - "pixfuture.net": "pixfuture", - "vast1.pixfuture.com": "pixfuture", - "piximedia.com": "piximedia", - "pizzaandads.com": "pizzaandads_com", - "ads.placester.net": "placester", - "d3uemyw1e5n0jw.cloudfront.net": "placester", - "pladform.com": "pladform.ru", - "tag.bi.serviceplan.com": "plan.net_experience_cloud", - "pfrm.co": "platform360", - "impact-ad.jp": "platformone", - "loveadvert.ru": "play_by_mamba", - "playbuzz.com": "playbuzz.com", - "pof.com": "plenty_of_fish", - "plex.bz": "plex", - "plex.direct": "plex", - "plex.tv": "plex", - "analytics.plex.tv": "plex_metrics", - "metrics.plex.tv": "plex_metrics", - "plista.com": "plista", - "plugrush.com": "plugrush", - "pluso.ru": "pluso.ru", - "plutusads.com": "plutusads", - "pmddby.com": "pmddby.com", - "pnamic.com": "pnamic.com", - "po.st": "po.st", - "widgets.getpocket.com": "pocket", - "pocketcents.com": "pocketcents", - "pointificsecure.com": "pointific", - "pointroll.com": "pointroll", - "poirreleast.club": "poirreleast.club", - "mediavoice.com": "polar.me", - "polar.me": "polar.me", - "polarmobile.com": "polar.me", - "polldaddy.com": "polldaddy", - "polyad.net": "polyad", - "polyfill.io": "polyfill.io", - "popads.net": "popads", - "popadscdn.net": "popads", - "popcash.net": "popcash", - "popcashjs.b-cdn.net": "popcash", - "desv383oqqc0.cloudfront.net": "popcorn_metrics", - "popin.cc": "popin.cc", - "cdn.popmyads.com": "popmyads", - "poponclick.com": "poponclick", - "populis.com": "populis", - "populisengage.com": "populis", - "phncdn.com": "pornhub", - "pornhub.com": "pornhub", - "prscripts.com": "pornwave", - "prstatics.com": "pornwave", - "prwidgets.com": "pornwave", - "barra.brasil.gov.br": "porta_brazil", - "postaffiliatepro.com": "post_affiliate_pro", - "powerlinks.com": "powerlinks", - "powerreviews.com": "powerreviews", - "powr.io": "powr.io", - "api.pozvonim.com": "pozvonim", - "prebid.org": "prebid", - "precisionclick.com": "precisionclick", - "adserver.com.br": "predicta", - "predicta.net": "predicta", - "prnx.net": "premonix", - "ppjol.com": "press", - "ppjol.net": "press", - "api.pressly.com": "pressly", - "pricegrabber.com": "pricegrabber", - "cdn.pricespider.com": "pricespider", - "pmdrecrute.com": "prismamediadigital.com", - "prismamediadigital.com": "prismamediadigital.com", - "privy.com": "privy.com", - "pswec.com": "proclivity", - "prodperfect.com": "prodperfect", - "lib.productsup.io": "productsup", - "proadsnet.com": "profiliad", - "profitshare.ro": "profitshare", - "tracking.proformics.com": "proformics", - "programattik.com": "programattik", - "projectwonderful.com": "project_wonderful", - "propelmarketing.com": "propel_marketing", - "oclaserver.com": "propeller_ads", - "onclasrv.com": "propeller_ads", - "onclickads.net": "propeller_ads", - "onclkds.com": "propeller_ads", - "propellerads.com": "propeller_ads", - "propellerpops.com": "propeller_ads", - "proper.io": "propermedia", - "st-a.props.id": "props", - "propvideo.net": "propvideo_net", - "tr.prospecteye.com": "prospecteye", - "prosperent.com": "prosperent", - "prostor-lite.ru": "prostor", - "providesupport.com": "provide_support", - "proximic.com": "proximic", - "proxistore.com": "proxistore.com", - "pscp.tv": "pscp.tv", - "pstatic.net": "pstatic.net", - "psyma.com": "psyma", - "ptengine.jp": "pt_engine", - "pub-fit.com": "pub-fit", - "pub.network": "pub.network", - "learnpipe.com": "pubble", - "pubble.co": "pubble", - "pubdirecte.com": "pubdirecte", - "pubgears.com": "pubgears", - "publicidees.com": "public_ideas", - "publicidad.net": "publicidad.net", - "intgr.net": "publir", - "pubmatic.com": "pubmatic", - "pubnub.com": "pubnub.com", - "puboclic.com": "puboclic", - "pulpix.com": "pulpix.com", - "tentaculos.net": "pulpo_media", - "pulse360.com": "pulse360", - "pulseinsights.com": "pulse_insights", - "contextweb.com": "pulsepoint", - "pulsepoint.com": "pulsepoint", - "punchtab.com": "punchtab", - "purch.com": "purch", - "servebom.com": "purch", - "purechat.com": "pure_chat", - "cdn.pprl.io": "pureprofile", - "oopt.fr": "purlive", - "puserving.com": "puserving.com", - "push.world": "push.world", - "pushengage.com": "push_engage", - "pushame.com": "pushame.com", - "zebra.pushbullet.com": "pushbullet", - "pushcrew.com": "pushcrew", - "pusher.com": "pusher.com", - "pusherapp.com": "pusher.com", - "pushnative.com": "pushnative.com", - "cdn.pushnews.eu": "pushnews", - "pushno.com": "pushno.com", - "pushwhy.com": "pushwhy.com", - "pushwoosh.com": "pushwoosh.com", - "pvclouds.com": "pvclouds.com", - "ads.q1media.com": "q1media", - "q1mediahydraplatform.com": "q1media", - "q-divisioncdn.de": "q_division", - "qbaka.net": "qbaka", - "track.qcri.org": "qcri_analytics", - "collect.qeado.com": "qeado", - "s.lianmeng.360.cn": "qihoo_360", - "qq.com": "qq.com", - "qrius.me": "qrius", - "qualaroo.com": "qualaroo", - "qualcomm.com": "qualcomm", - "gpsonextra.net": "qualcomm_location_service", - "izatcloud.net": "qualcomm_location_service", - "xtracloud.net": "qualcomm_location_service", - "bluecava.com": "qualia", - "qualtrics.com": "qualtrics", - "quantcast.com": "quantcast", - "quantserve.com": "quantcast", - "quantcount.com": "quantcount", - "quantummetric.com": "quantum_metric", - "quartic.pl": "quartic.pl", - "quarticon.com": "quartic.pl", - "d3c3cq33003psk.cloudfront.net": "qubit", - "qubit.com": "qubit", - "easyresearch.se": "questback", - "queue-it.net": "queue-it", - "quick-counter.net": "quick-counter.net", - "adsonar.com": "quigo_adsonar", - "qnsr.com": "quinstreet", - "quinstreet.com": "quinstreet", - "thecounter.com": "quinstreet", - "quintelligence.com": "quintelligence", - "qservz.com": "quisma", - "quisma.com": "quisma", - "quora.com": "quora.com", - "ads-digitalkeys.com": "r_advertising", - "rackcdn.com": "rackcdn.com", - "radarurl.com": "radarurl", - "dsa.csdata1.com": "radial", - "gwallet.com": "radiumone", - "r1-cdn.net": "radiumone", - "widget.raisenow.com": "raisenow", - "mediaforge.com": "rakuten_display", - "rmtag.com": "rakuten_display", - "rakuten.co.jp": "rakuten_globalmarket", - "trafficgate.net": "rakuten_globalmarket", - "mtwidget04.affiliate.rakuten.co.jp": "rakuten_widget", - "xml.affilliate.rakuten.co.jp": "rakuten_widget", - "rambler.ru": "rambler", - "top100.ru": "rambler", - "rapidspike.com": "rapidspike", - "ravelin.com": "ravelin", - "rawgit.com": "rawgit", - "raygun.io": "raygun", - "count.rbc.ru": "rbc_counter", - "rcs.it": "rcs.it", - "rcsmediagroup.it": "rcs.it", - "d335luupugsy2.cloudfront.net": "rd_station", - "rea-group.com": "rea_group", - "reagroupdata.com.au": "rea_group", - "reastatic.net": "rea_group", - "d12ulf131zb0yj.cloudfront.net": "reachforce", - "reachforce.com": "reachforce", - "reachjunction.com": "reachjunction", - "cdn.rlets.com": "reachlocal", - "reachlocal.com": "reachlocal", - "reachlocallivechat.com": "reachlocal", - "rlcdn.net": "reachlocal", - "plugin.reactful.com": "reactful", - "reactivpub.fr": "reactivpub", - "skinected.com": "reactx", - "readrboard.com": "readerboard", - "readme.com": "readme", - "readme.io": "readme", - "readspeaker.com": "readspeaker.com", - "realclick.co.kr": "realclick", - "realestate.com.au": "realestate.com.au", - "realperson.de": "realperson.de", - "powermarketing.com": "realtime", - "realtime.co": "realtime", - "webspectator.com": "realtime", - "dcniko1cv0rz.cloudfront.net": "realytics", - "realytics.io": "realytics", - "static.rbl.ms": "rebel_mouse", - "recaptcha.net": "recaptcha", - "recettes.net": "recettes.net", - "static.recopick.com": "recopick", - "recreativ.ru": "recreativ", - "analytics.recruitics.com": "recruitics", - "analytics.cohesionapps.com": "red_ventures", - "cdn.cohesionapps.com": "red_ventures", - "redblue.de": "redblue_de", - "atendesoftware.pl": "redcdn.pl", - "redd.it": "reddit", - "reddit-image.s3.amazonaws.com": "reddit", - "reddit.com": "reddit", - "redditmedia.com": "reddit", - "redditstatic.com": "reddit", - "redhelper.ru": "redhelper", - "pixelinteractivemedia.com": "redlotus", - "triggit.com": "redlotus", - "grt01.com": "redtram", - "grt02.com": "redtram", - "redtram.com": "redtram", - "rdtcdn.com": "redtube.com", - "redtube.com": "redtube.com", - "reduxmedia.com": "redux_media", - "reduxmediagroup.com": "redux_media", - "reedbusiness.net": "reed_business_information", - "reembed.com": "reembed.com", - "reevoo.com": "reevoo.com", - "refericon.pl": "refericon", - "ads.referlocal.com": "referlocal", - "refersion.com": "refersion", - "refinedads.com": "refined_labs", - "product.reflektion.com": "reflektion", - "reformal.ru": "reformal", - "reinvigorate.net": "reinvigorate", - "convertglobal.com": "rekko", - "convertglobal.s3.amazonaws.com": "rekko", - "dnhgz729v27ca.cloudfront.net": "rekko", - "reklamstore.com": "reklam_store", - "ad.reklamport.com": "reklamport", - "delivery.reklamz.com": "reklamz", - "adimg.rekmob.com": "rekmob", - "relap.io": "relap", - "svtrd.com": "relay42", - "synovite-scripts.com": "relay42", - "tdn.r42tag.com": "relay42", - "relestar.com": "relestar", - "relevant4.com": "relevant4.com", - "remintrex.com": "remintrex", - "remove.video": "remove.video", - "rp-api.com": "repost.us", - "republer.com": "republer.com", - "resmeter.respublica.al": "res-meter", - "researchnow.com": "research_now", - "reson8.com": "resonate_networks", - "respondhq.com": "respond", - "adinsight.com": "responsetap", - "adinsight.eu": "responsetap", - "responsetap.com": "responsetap", - "data.resultlinks.com": "result_links", - "sli-system.com": "resultspage.com", - "retailrocket.net": "retailrocket.net", - "retailrocket.ru": "retailrocket.net", - "shopify.retargetapp.com": "retarget_app", - "retargeter.com": "retargeter_beacon", - "retargeting.cl": "retargeting.cl", - "d1stxfv94hrhia.cloudfront.net": "retention_science", - "waves.retentionscience.com": "retention_science", - "reutersmedia.net": "reuters_media", - "revcontent.com": "revcontent", - "socialtwist.com": "reve_marketing", - "revenue.com": "revenue", - "clkads.com": "revenuehits", - "clkmon.com": "revenuehits", - "clkrev.com": "revenuehits", - "clksite.com": "revenuehits", - "eclkspbn.com": "revenuehits", - "imageshack.host": "revenuehits", - "revenuemantra.com": "revenuemantra", - "revive-adserver.com": "revive_adserver", - "revolvermaps.com": "revolver_maps", - "cts.tradepub.com": "revresponse", - "revresponse.com": "revresponse", - "incontext.pl": "rewords", - "pl-engine.intextad.net": "rewords", - "addesktop.com": "rhythmone", - "1rx.io": "rhythmone_beacon", - "ria.ru": "ria.ru", - "rmbn.ru": "rich_media_banner_network", - "ics0.com": "richrelevance", - "richrelevance.com": "richrelevance", - "ringier.ch": "ringier.ch", - "meteorsolutions.com": "rio_seo", - "riskified.com": "riskfield.com", - "rncdn3.com": "rncdn3.com", - "ro2.biz": "ro2.biz", - "rbxcdn.com": "roblox", - "getrockerbox.com": "rockerbox", - "rocket.la": "rocket.ia", - "trk.sodoit.com": "roi_trax", - "collector.roistat.com": "roistat", - "rollad.ru": "rollad", - "d37gvrvc0wt4s1.cloudfront.net": "rollbar", - "get.roost.me": "roost", - "getrooster.com": "rooster", - "rqtrk.eu": "roq.ad", - "rotaban.ru": "rotaban", - "routenplaner-karten.com": "routenplaner-karten.com", - "rovion.com": "rovion", - "rsspump.com": "rsspump", - "creativecdn.com": "rtb_house", - "rvty.net": "rtblab", - "rtbsuperhub.com": "rtbsuperhub.com", - "rtl.de": "rtl_group", - "static-fra.de": "rtl_group", - "technical-service.net": "rtl_group", - "rtmark.net": "rtmark.net", - "dpclk.com": "rubicon", - "mobsmith.com": "rubicon", - "nearbyad.com": "rubicon", - "rubiconproject.com": "rubicon", - "tracker.ruhrgebiet-onlineservices.de": "ruhrgebiet", - "click.rummycircle.com": "rummycircle", - "runadtag.com": "run", - "rundsp.com": "run", - "un-syndicate.com": "runative", - "cdn.secretrune.com": "rune", - "runmewivel.com": "runmewivel.com", - "rhythmxchange.com": "rythmxchange", - "s24.com": "s24_com", - "s3xified.com": "s3xified.com", - "camp.sabavision.com": "sabavision", - "sageanalyst.net": "sagemetrics", - "sail-horizon.com": "sailthru_horizon", - "sail-personalize.com": "sailthru_horizon", - "sailthru.com": "sailthru_horizon", - "d16fk4ms6rqz1v.cloudfront.net": "salecycle", - "salecycle.com": "salecycle", - "api.salesfeed.com": "sales_feed", - "salesmanago.com": "sales_manago", - "salesmanago.pl": "sales_manago", - "force.com": "salesforce.com", - "salesforce.com": "salesforce.com", - "liveagentforsalesforce.com": "salesforce_live_agent", - "salesforceliveagent.com": "salesforce_live_agent", - "msgapp.com": "salesfusion", - "salespidermedia.com": "salespider_media", - "salesviewer.com": "salesviewer", - "samba.tv": "samba.tv", - "game-mode.net": "samsung", - "gos-gsp.io": "samsung", - "lldns.net": "samsung", - "pavv.co.kr": "samsung", - "remotesamsung.com": "samsung", - "samsung-gamelauncher.com": "samsung", - "samsung.co.kr": "samsung", - "samsung.com": "samsung", - "samsung.com.cn": "samsung", - "samsungcloud.com": "samsung", - "samsungcloudcdn.com": "samsung", - "samsungcloudprint.com": "samsung", - "samsungcloudsolution.com": "samsung", - "samsungcloudsolution.net": "samsung", - "samsungelectronics.com": "samsung", - "samsunghealth.com": "samsung", - "samsungiotcloud.com": "samsung", - "samsungknox.com": "samsung", - "samsungnyc.com": "samsung", - "samsungosp.com": "samsung", - "samsungotn.net": "samsung", - "samsungpositioning.com": "samsung", - "samsungqbe.com": "samsung", - "samsungrm.net": "samsung", - "samsungrs.com": "samsung", - "samsungsemi.com": "samsung", - "samsungsetup.com": "samsung", - "samsungusa.com": "samsung", - "secb2b.com": "samsung", - "smartthings.com": "samsung", - "adgear.com": "samsungads", - "adgrx.com": "samsungads", - "samsungacr.com": "samsungads", - "samsungadhub.com": "samsungads", - "samsungads.com": "samsungads", - "samsungtifa.com": "samsungads", - "aibixby.com": "samsungapps", - "findmymobile.samsung.com": "samsungapps", - "samsapps.cust.lldns.net": "samsungapps", - "samsung-omc.com": "samsungapps", - "samsungapps.com": "samsungapps", - "samsungdiroute.net": "samsungapps", - "samsungdive.com": "samsungapps", - "samsungdm.com": "samsungapps", - "samsungdmroute.com": "samsungapps", - "samsungmdec.com": "samsungapps", - "samsungvisioncloud.com": "samsungapps", - "sbixby.com": "samsungapps", - "ospserver.net": "samsungmobile", - "samsungdms.net": "samsungmobile", - "samsungmax.com": "samsungmobile", - "samsungmobile.com": "samsungmobile", - "secmobilesvc.com": "samsungmobile", - "push.samsungosp.com": "samsungpush", - "pushmessage.samsung.com": "samsungpush", - "scs.samsungqbe.com": "samsungpush", - "ssp.samsung.com": "samsungpush", - "samsungsds.com": "samsungsds", - "internetat.tv": "samsungtv", - "samsungcloud.tv": "samsungtv", - "tizenservice.com": "samsungtv", - "ilsemedia.nl": "sanoma.fi", - "sanoma.fi": "sanoma.fi", - "d13im3ek7neeqp.cloudfront.net": "sap_crm", - "d28ethi6slcjbm.cloudfront.net": "sap_crm", - "d2uevgmgh16uk4.cloudfront.net": "sap_crm", - "d3m83gvgzupli.cloudfront.net": "sap_crm", - "saas.seewhy.com": "sap_crm", - "leadforce1.com": "sap_sales_cloud", - "vlog.leadformix.com": "sap_sales_cloud", - "sap-xm.org": "sap_xm", - "sape.ru": "sape.ru", - "js.sl.pt": "sapo_ads", - "aimatch.com": "sas", - "sas.com": "sas", - "say.ac": "say.ac", - "ads.saymedia.com": "say_media", - "srv.sayyac.net": "sayyac", - "scarabresearch.com": "scarabresearch", - "schibsted.com": "schibsted", - "schibsted.io": "schibsted", - "schneevonmorgen.com": "schneevonmorgen.com", - "svonm.com": "schneevonmorgen.com", - "rockabox.co": "scoota", - "scorecardresearch.com": "scorecard_research_beacon", - "scoreresearch.com": "scorecard_research_beacon", - "scrsrch.com": "scorecard_research_beacon", - "securestudies.com": "scorecard_research_beacon", - "scout.scoutanalytics.net": "scout_analytics", - "scribblelive.com": "scribblelive", - "scribol.com": "scribol", - "analytics.snidigital.com": "scripps_analytics", - "scroll.com": "scroll", - "scupio.com": "scupio", - "search123.uk.com": "search123", - "searchforce.net": "searchforce", - "searchignite.com": "searchignite", - "srtk.net": "searchrev", - "tacticalrepublic.com": "second_media", - "sectigo.com": "sectigo", - "securedtouch.com": "securedtouch", - "securedvisit.com": "securedvisit", - "bacontent.de": "seeding_alliance", - "nativendo.de": "seeding_alliance", - "seedtag.com": "seedtag.com", - "svlu.net": "seevolution", - "d2dq2ahtl5zl1z.cloudfront.net": "segment", - "d47xnnr8b1rki.cloudfront.net": "segment", - "segment.com": "segment", - "segment.io": "segment", - "rutarget.ru": "segmento", - "segmint.net": "segmint", - "sekindo.com": "sekindo", - "sellpoint.net": "sellpoints", - "sellpoints.com": "sellpoints", - "semantiqo.com": "semantiqo.com", - "semasio.net": "semasio", - "semilo.com": "semilo", - "semknox.com": "semknox.com", - "sibautomation.com": "sendinblue", - "sendpulse.com": "sendpulse.com", - "sendsay.ru": "sendsay", - "track.sensedigital.in": "sense_digital", - "static.sensorsdata.cn": "sensors_data", - "sentifi.com": "sentifi.com", - "d3nslu0hdya83q.cloudfront.net": "sentry", - "getsentry.com": "sentry", - "ravenjs.com": "sentry", - "sentry.io": "sentry", - "sepyra.com": "sepyra", - "d2oh4tlt9mrke9.cloudfront.net": "sessioncam", - "sessioncam.com": "sessioncam", - "sessionly.io": "sessionly", - "71i.de": "sevenone_media", - "sexad.net": "sexadnetwork", - "ads.sexinyourcity.com": "sexinyourcity", - "sextracker.com": "sextracker", - "sexypartners.net": "sexypartners.net", - "im.cz": "seznam", - "imedia.cz": "seznam", - "szn.cz": "seznam", - "dtym7iokkjlif.cloudfront.net": "shareaholic", - "shareaholic.com": "shareaholic", - "shareasale.com": "shareasale", - "quintrics.nl": "sharecompany", - "sharecompany.nl": "sharecompany", - "sharepointonline.com": "sharepoint", - "onmicrosoft.com": "sharepoint", - "sharepoint.com": "sharepoint", - "sharethis.com": "sharethis", - "shareth.ru": "sharethrough", - "sharethrough.com": "sharethrough", - "marketingautomation.services": "sharpspring", - "sharpspring.com": "sharpspring", - "sheego.de": "sheego.de", - "services.sheerid.com": "sheerid", - "shinystat.com": "shinystat", - "shinystat.it": "shinystat", - "app.shoptarget.com.br": "shop_target", - "retargeter.com.br": "shop_target", - "shopauskunft.de": "shopauskunft.de", - "shopgate.com": "shopgate.com", - "shopify.com": "shopify", - "shopifycdn.com": "shopify", - "cdn.shopify.com": "shopify", - "myshopify.com": "shopify", - "shop.app": "shopify", - "shopify.co.za": "shopify", - "shopify.com.au": "shopify", - "shopify.com.mx": "shopify", - "shopify.dev": "shopify", - "shopifyapps.com": "shopify", - "shopifycdn.net": "shopify", - "shopifynetwork.com": "shopify", - "shopifypreview.com": "shopify", - "shopifysvc.com": "shopify_stats", - "stats.shopify.com": "shopify_stats", - "v.shopify.com": "shopify_stats", - "shopifycloud.com": "shopifycloud.com", - "shopperapproved.com": "shopper_approved", - "shoppingshadow.com": "shopping_com", - "tracking.shopping-flux.com": "shopping_flux", - "shoprunner.com": "shoprunner", - "shopsocially.com": "shopsocially", - "shopzilla.com": "shopzilla", - "shortnews.de": "shortnews", - "showrss.info": "showrss", - "shink.in": "shrink", - "shutterstock.com": "shutterstock", - "siblesectiveal.club": "siblesectiveal.club", - "d3v27wwd40f0xu.cloudfront.net": "sidecar", - "getsidecar.com": "sidecar", - "dtlilztwypawv.cloudfront.net": "sift_science", - "siftscience.com": "sift_science", - "btstatic.com": "signal", - "signal.co": "signal", - "thebrighttag.com": "signal", - "cdn-scripts.signifyd.com": "signifyd", - "signifyd.com": "signifyd", - "gw-services.vtrenz.net": "silverpop", - "mkt51.net": "silverpop", - "mkt912.com": "silverpop", - "mkt922.com": "silverpop", - "mkt941.com": "silverpop", - "pages01.net": "silverpop", - "pages02.net": "silverpop", - "pages04.net": "silverpop", - "pages05.net": "silverpop", - "similardeals.net": "similardeals.net", - "similarweb.com": "similarweb", - "similarweb.io": "similarweb", - "d8rk54i4mohrb.cloudfront.net": "simplereach", - "simplereach.com": "simplereach", - "simpli.fi": "simpli.fi", - "sina.com.cn": "sina", - "sinaimg.cn": "sina_cdn", - "reporting.singlefeed.com": "singlefeed", - "sddan.com": "sirdata", - "site24x7rum.com": "site24x7", - "site24x7rum.eu": "site24x7", - "sitebooster-fjfmworld-production.azureedge.net": "site_booster", - "a5.ogt.jp": "site_stratos", - "siteapps.com": "siteapps", - "sitebro.com": "sitebro", - "sitebro.com.tw": "sitebro", - "sitebro.net": "sitebro", - "sitebro.tw": "sitebro", - "siteheart.com": "siteheart", - "siteimprove.com": "siteimprove", - "siteimproveanalytics.com": "siteimprove_analytics", - "sitelabweb.com": "sitelabweb.com", - "sitemeter.com": "sitemeter", - "pixel.ad": "sitescout", - "sitescout.com": "sitescout", - "ad.sitemaji.com": "sitetag", - "sitetag.us": "sitetag", - "analytics.sitewit.com": "sitewit", - "ads.sixapart.com": "six_apart_advertising", - "sixt-neuwagen.de": "sixt-neuwagen.de", - "skadtec.com": "skadtec.com", - "redirectingat.com": "skimlinks", - "skimlinks.com": "skimlinks", - "skimresources.com": "skimlinks", - "analytics.skroutz.gr": "skroutz", - "skyglue.com": "skyglue", - "skype.com": "skype", - "skypeassets.com": "skype", - "skysa.com": "skysa", - "skyscnr.com": "skyscnr.com", - "slack-edge.com": "slack", - "slack-imgs.com": "slack", - "slack.com": "slack", - "slackb.com": "slack", - "slashdot.org": "slashdot_widget", - "sleeknotestaticcontent.sleeknote.com": "sleeknote", - "resultspage.com": "sli_systems", - "builder.extensionfactory.com": "slice_factory", - "freeskreen.com": "slimcutmedia", - "slingpic.com": "slingpic", - "smaato.net": "smaato", - "smart4ads.com": "smart4ads", - "sascdn.com": "smart_adserver", - "smartadserver.com": "smart_adserver", - "styria-digital.com": "smart_adserver", - "yoc-adserver.com": "smart_adserver", - "smartcall.kz": "smart_call", - "getsmartcontent.com": "smart_content", - "smartdevicemedia.com": "smart_device_media", - "x.cnt.my": "smart_leads", - "tracking.smartselling.cz": "smart_selling", - "bepolite.eu": "smartad", - "smartbn.ru": "smartbn", - "smartclick.net": "smartclick.net", - "smartclip.net": "smartclip", - "smartcontext.pl": "smartcontext", - "d1n00d49gkbray.cloudfront.net": "smarter_remarketer", - "dhxtx5wtu812h.cloudfront.net": "smarter_remarketer", - "smartertravel.com": "smarter_travel", - "travelsmarter.net": "smarter_travel", - "smct.co": "smarterclick", - "smartertrack.com": "smartertrack", - "smartlink.cool": "smartlink.cool", - "getsmartlook.com": "smartlook", - "smartlook.com": "smartlook", - "smartstream.tv": "smartstream.tv", - "smartsuppchat.com": "smartsupp_chat", - "smi2.net": "smi2.ru", - "smi2.ru": "smi2.ru", - "stat.media": "smi2.ru", - "cdn.smooch.io": "smooch", - "smowtion.com": "smowtion", - "smxindia.in": "smx_ventures", - "smyte.com": "smyte", - "snacktv.de": "snacktv", - "snap.com": "snap", - "addlive.io": "snap", - "feelinsonice.com": "snap", - "sc-cdn.net": "snap", - "sc-corp.net": "snap", - "sc-gw.com": "snap", - "sc-jpl.com": "snap", - "sc-prod.net": "snap", - "snap-dev.net": "snap", - "snapads.com": "snap", - "snapkit.com": "snap", - "snapengage.com": "snap_engage", - "sc-static.net": "snapchat", - "snapchat.com": "snapchat", - "snapcraft.io": "snapcraft", - "snapcraftcontent.com": "snapcraft", - "h-bid.com": "snigelweb", - "eu2.snoobi.eu": "snoobi", - "snoobi.com": "snoobi_analytics", - "d346whrrklhco7.cloudfront.net": "snowplow", - "d78fikflryjgj.cloudfront.net": "snowplow", - "dc8xl0ndzn2cb.cloudfront.net": "snowplow", - "playwire.com": "snowplow", - "snplow.net": "snowplow", - "go-mpulse.net": "soasta_mpulse", - "mpstat.us": "soasta_mpulse", - "tiaa-cref.org": "soasta_mpulse", - "sociablelabs.com": "sociable_labs", - "socialamp.com": "social_amp", - "socialannex.com": "social_annex", - "soclminer.com.br": "social_miner", - "duu8lzqdm8tsz.cloudfront.net": "socialbeat", - "ratevoice.com": "socialrms", - "sociaplus.com": "sociaplus.com", - "sociomantic.com": "sociomantic", - "images.sohu.com": "sohu", - "sojern.com": "sojern", - "sokrati.com": "sokrati", - "solads.media": "solads.media", - "solaredge.com": "solaredge", - "solidopinion.com": "solidopinion", - "pixel.solvemedia.com": "solve_media", - "soma2.de": "soma_2", - "mobileadtrading.com": "somoaudience", - "sonobi.com": "sonobi", - "sonos.com": "sonos", - "sophus3.com": "sophus3", - "deployads.com": "sortable", - "sndcdn.com": "soundcloud", - "soundcloud.com": "soundcloud", - "provenpixel.com": "sourceknowledge_pixel", - "decenthat.com": "sourcepoint", - "summerhamster.com": "sourcepoint", - "d3pkae9owd2lcf.cloudfront.net": "sovrn", - "lijit.com": "sovrn", - "onscroll.com": "sovrn_viewability_solutions", - "rts.sparkstudios.com": "spark_studios", - "sparkasse.de": "sparkasse.de", - "speakpipe.com": "speakpipe", - "adviva.net": "specific_media", - "specificclick.net": "specific_media", - "specificmedia.com": "specific_media", - "spectate.com": "spectate", - "speedshiftmedia.com": "speed_shift_media", - "speedcurve.com": "speedcurve", - "admarket.entireweb.com": "speedyads", - "affiliate.entireweb.com": "speedyads", - "sa.entireweb.com": "speedyads", - "speee-ad.akamaized.net": "speee", - "sphere.com": "sphere", - "surphace.com": "sphere", - "api.spheremall.com": "spheremall", - "zdwidget3-bs.sphereup.com": "sphereup", - "static.sspicy.ru": "spicy", - "spider.ad": "spider.ad", - "metrics.spiderads.eu": "spider_ads", - "spn.ee": "spinnakr", - "embed.spokenlayer.com": "spokenlayer", - "spongecell.com": "spongecell", - "sponsorads.de": "sponsorads.de", - "sportsbetaffiliates.com.au": "sportsbet_affiliates", - "spot.im": "spot.im", - "spoteffects.net": "spoteffect", - "scdn.co": "spotify", - "spotify.com": "spotify", - "pscdn.co": "spotify", - "spotifycdn.com": "spotify", - "spotifycdn.net": "spotify", - "spotilocal.com": "spotify", - "embed.spotify.com": "spotify_embed", - "spotscenered.info": "spotscenered.info", - "spotx.tv": "spotxchange", - "spotxcdn.com": "spotxchange", - "spotxchange.com": "spotxchange", - "spoutable.com": "spoutable", - "cdn.springboardplatform.com": "springboard", - "springserve.com": "springserve", - "pixel.sprinklr.com": "sprinklr", - "stat.sputnik.ru": "sputnik", - "email-match.com": "squadata", - "squarespace.com": "squarespace.com", - "srvtrck.com": "srvtrck.com", - "srvvtrk.com": "srvvtrk.com", - "sstatic.net": "sstatic.net", - "hatena.ne.jp": "st-hatena", - "st-hatena.com": "st-hatena", - "stackadapt.com": "stackadapt", - "stackpathdns.com": "stackpathdns.com", - "stailamedia.com": "stailamedia_com", - "stalluva.pro": "stalluva.pro", - "startappservice.com": "startapp", - "hit.stat24.com": "stat24", - "adstat.4u.pl": "stat4u", - "stat.4u.pl": "stat4u", - "statcounter.com": "statcounter", - "stathat.com": "stathat", - "statisfy.net": "statisfy", - "statsy.net": "statsy.net", - "statuscake.com": "statuscake", - "statuspage.io": "statuspage.io", - "stspg-customer.com": "statuspage.io", - "stayfriends.de": "stayfriends.de", - "steelhousemedia.com": "steelhouse", - "steepto.com": "steepto.com", - "stepstone.com": "stepstone.com", - "4stats.de": "stetic", - "stetic.com": "stetic", - "stickyadstv.com": "stickyads", - "stocktwits.com": "stocktwits", - "storify.com": "storify", - "storygize.net": "storygize", - "bizsolutions.strands.com": "strands_recommender", - "strava.com": "strava", - "mailfoogae.appspot.com": "streak", - "streamotion.com.au": "streamotion", - "streamrail.com": "streamrail.com", - "streamrail.net": "streamrail.com", - "stridespark.com": "stride", - "stripcdn.com": "stripchat.com", - "stripchat.com": "stripchat.com", - "stripe.com": "stripe.com", - "stripe.network": "stripe.com", - "stripst.com": "stripst.com", - "interactivemedia.net": "stroer_digital_media", - "stroeerdigitalgroup.de": "stroer_digital_media", - "stroeerdigitalmedia.de": "stroer_digital_media", - "stroeerdp.de": "stroer_digital_media", - "stroeermediabrands.de": "stroer_digital_media", - "spklw.com": "strossle", - "sprinklecontent.com": "strossle", - "strossle.it": "strossle", - "struq.com": "struq", - "stumble-upon.com": "stumbleupon_widgets", - "stumbleupon.com": "stumbleupon_widgets", - "su.pr": "stumbleupon_widgets", - "sub2tech.com": "sub2", - "ayads.co": "sublime_skinz", - "suggest.io": "suggest.io", - "sumologic.com": "sumologic.com", - "sumo.com": "sumome", - "sumome.com": "sumome", - "sundaysky.com": "sundaysky", - "supercell.com": "supercell", - "supercellsupport.com": "supercell", - "supercounters.com": "supercounters", - "superfastcdn.com": "superfastcdn.com", - "socdm.com": "supership", - "supplyframe.com": "supplyframe", - "surfingbird.ru": "surf_by_surfingbird", - "px.surveywall-api.survata.com": "survata", - "cdn.sweettooth.io": "sweettooth", - "swiftypecdn.com": "swiftype", - "swisscom.ch": "swisscom", - "myswitchads.com": "switch_concepts", - "switchadhub.com": "switch_concepts", - "switchads.com": "switch_concepts", - "switchafrica.com": "switch_concepts", - "switch.tv": "switchtv", - "shopximity.com": "swoop", - "swoop.com": "swoop", - "analytics-cdn.sykescottages.co.uk": "sykes", - "norton.com": "symantec", - "seal.verisign.com": "symantec", - "symantec.com": "symantec", - "d.hodes.com": "symphony_talent", - "technorati.com": "synacor", - "technoratimedia.com": "synacor", - "cn.clickable.net": "syncapse", - "synergy-e.com": "synergy-e", - "sdp-campaign.de": "t-mobile", - "t-online.de": "t-mobile", - "telekom-dienste.de": "t-mobile", - "telekom.com": "t-mobile", - "telekom.de": "t-mobile", - "toi.de": "t-mobile", - "t8cdn.com": "t8cdn.com", - "tableteducation.com": "tableteducation.com", - "basebanner.com": "taboola", - "taboola.com": "taboola", - "taboolasyndication.com": "taboola", - "tacoda.net": "tacoda", - "commander1.com": "tag_commander", - "tagcommander.com": "tag_commander", - "tags.tagcade.com": "tagcade", - "taggify.net": "taggify", - "taggyad.jp": "taggy", - "levexis.com": "tagman", - "tailtarget.com": "tail_target", - "tailsweep.com": "tailsweep", - "tamedia.ch": "tamedia.ch", - "tanx.com": "tanx", - "alipcsec.com": "taobao", - "taobao.com": "taobao", - "tapad.com": "tapad", - "theblogfrog.com": "tapinfluence", - "tarafdari.com": "tarafdari", - "target2sell.com": "target_2_sell", - "trackmytarget.com": "target_circle", - "cdn.targetfuel.com": "target_fuel", - "tawk.to": "tawk", - "tbn.ru": "tbn.ru", - "tchibo-content.de": "tchibo_de", - "tchibo.de": "tchibo_de", - "tdsrmbl.net": "tdsrmbl_net", - "teads.tv": "teads", - "tealeaf.ibmcloud.com": "tealeaf", - "tealium.com": "tealium", - "tealium.hs.llnwd.net": "tealium", - "tealiumiq.com": "tealium", - "tiqcdn.com": "tealium", - "teaser.cc": "teaser.cc", - "emailretargeting.com": "tedemis", - "tracking.dsmmadvantage.com": "teletech", - "telstra.com": "telstra", - "telstra.com.au": "telstra", - "tenderapp.com": "tender", - "tensitionschoo.club": "tensitionschoo.club", - "watch.teroti.com": "teroti", - "webterren.com": "terren", - "teufel.de": "teufel.de", - "theadex.com": "the_adex", - "connect.decknetwork.net": "the_deck", - "gu-web.net": "the_guardian", - "guardianapps.co.uk": "the_guardian", - "guim.co.uk": "the_guardian", - "deepthought.online": "the_reach_group", - "reachgroup.com": "the_reach_group", - "redintelligence.net": "the_reach_group", - "thesearchagency.net": "the_search_agency", - "thesun.co.uk": "the_sun", - "w-x.co": "the_weather_company", - "weather.com": "the_weather_company", - "wfxtriggers.com": "the_weather_company", - "tmdb.org": "themoviedb", - "thinglink.com": "thinglink", - "online-metrix.net": "threatmetrix", - "tidbit.co.in": "tidbit", - "code.tidio.co": "tidio", - "widget-v4.tidiochat.com": "tidio", - "analytics.tiktok.com": "tiktok_analytics", - "optimized.by.tiller.co": "tiller", - "vip.timezonedb.com": "timezondb", - "npttech.com": "tinypass", - "tinypass.com": "tinypass", - "tisoomi-services.com": "tisoomi", - "ad.tlvmedia.com": "tlv_media", - "ads.tlvmedia.com": "tlv_media", - "tag.tlvmedia.com": "tlv_media", - "research-int.se": "tns", - "sesamestats.com": "tns", - "spring-tns.net": "tns", - "statistik-gallup.net": "tns", - "tns-cs.net": "tns", - "tns-gallup.dk": "tns", - "tomnewsupdate.info": "tomnewsupdate.info", - "tfag.de": "tomorrow_focus", - "srv.clickfuse.com": "tonefuse", - "toplist.cz": "toplist.cz", - "toponclick.com": "toponclick_com", - "topsy.com": "topsy", - "insight.torbit.com": "torbit", - "toro-tags.com": "toro", - "toroadvertising.com": "toro", - "toroadvertisingmedia.com": "toro", - "tororango.com": "tororango.com", - "i.total-media.net": "total_media", - "inq.com": "touchcommerce", - "tovarro.com": "tovarro.com", - "rialpay.com": "tp-cdn.com", - "tp-cdn.com": "tp-cdn.com", - "kiwe.io": "tracc.it", - "tracc.it": "tracc.it", - "ipnoid.com": "tracemyip", - "tracemyip.org": "tracemyip", - "d2gfdmu30u15x7.cloudfront.net": "traceview", - "tracelytics.com": "traceview", - "cdn.trackduck.com": "track_duck", - "d2zah9y47r7bi2.cloudfront.net": "trackjs", - "dl1d2m8ri9v3j.cloudfront.net": "trackjs", - "trackjs.com": "trackjs", - "conversionlab.trackset.com": "trackset_conversionlab", - "trackuity.com": "trackuity", - "adsrvr.org": "tradedesk", - "tradedoubler.com": "tradedoubler", - "tradelab.fr": "tradelab", - "tradetracker.net": "tradetracker", - "cdntrf.com": "traffective", - "traffective.com": "traffective", - "my.trafficfuel.com": "traffic_fuel", - "trafficrevenue.net": "traffic_revenue", - "trafficstars.com": "traffic_stars", - "tsyndicate.com": "traffic_stars", - "trafficbroker.com": "trafficbroker", - "trafficfabrik.com": "trafficfabrik.com", - "trafficfactory.biz": "trafficfactory", - "trafficforce.com": "trafficforce", - "traffichaus.com": "traffichaus", - "trafficjunky.net": "trafficjunky", - "traffiliate.com": "traffiliate", - "storage.trafic.ro": "trafic", - "trafmag.com": "trafmag.com", - "api.transcend.io": "transcend", - "cdn.transcend.io": "transcend", - "sync-transcend-cdn.com": "transcend", - "transcend-cdn.com": "transcend", - "transcend.io": "transcend", - "telemetry.transcend.io": "transcend_telemetry", - "backoffice.transmatico.com": "transmatic", - "travelaudience.com": "travel_audience", - "trbo.com": "trbo", - "treasuredata.com": "treasuredata", - "scanscout.com": "tremor_video", - "tremorhub.com": "tremor_video", - "tremormedia.com": "tremor_video", - "tremorvideo.com": "tremor_video", - "videohub.tv": "tremor_video", - "s.tcimg.com": "trendcounter", - "tcimg.com": "trendcounter", - "trendemon.com": "trendemon", - "exponential.com": "tribal_fusion", - "tribalfusion.com": "tribal_fusion", - "tribl.io": "triblio", - "api.temails.com": "trigger_mail_marketing", - "t.myvisitors.se": "triggerbee", - "jscache.com": "tripadvisor", - "tacdn.com": "tripadvisor", - "tamgrt.com": "tripadvisor", - "tripadvisor.co.uk": "tripadvisor", - "tripadvisor.com": "tripadvisor", - "tripadvisor.de": "tripadvisor", - "3lift.com": "triplelift", - "d3iwjrnl4m67rd.cloudfront.net": "triplelift", - "triplelift.com": "triplelift", - "static.triptease.io": "triptease", - "andomedia.com": "triton_digital", - "tritondigital.com": "triton_digital", - "revelations.trovus.co.uk": "trovus_revelations", - "trsv3.com": "trsv3.com", - "truefitcorp.com": "true_fit", - "tru.am": "trueanthem", - "adlegend.com": "trueffect", - "addoer.com": "truehits.net", - "truehits.in.th": "truehits.net", - "truehits.net": "truehits.net", - "trumba.com": "trumba", - "truoptik.com": "truoptik", - "trustarc.com": "trustarc", - "truste.com": "trustarc", - "consent.truste.com": "truste_consent", - "choices-or.truste.com": "truste_notice", - "choices.truste.com": "truste_notice", - "privacy-policy.truste.com": "truste_seal", - "trustedshops.com": "trusted_shops", - "trustev.com": "trustev", - "secure.comodo.net": "trustlogo", - "trustlogo.com": "trustlogo", - "usertrust.com": "trustlogo", - "trustpilot.com": "trustpilot", - "trustwave.com": "trustwave.com", - "tubecorporate.com": "tubecorporate", - "tubecup.org": "tubecup.org", - "tubemogul.com": "tubemogul", - "sre-perim.com": "tumblr_analytics", - "txmblr.com": "tumblr_analytics", - "platform.tumblr.com": "tumblr_buttons", - "lib.tunein.com": "tune_in", - "adagio.turboadv.com": "turbo", - "turn.com": "turn_inc.", - "ngtv.io": "turner", - "turner.com": "turner", - "warnermedia.com": "turner", - "turnsocial.com": "turnsocial", - "turnto.com": "turnto", - "tvsquared.com": "tvsquared.com", - "tweetboard.com": "tweetboard", - "tweetmeme.com": "tweetmeme", - "c4tw.net": "twenga", - "twiago.com": "twiago", - "twinedigital.go2cloud.org": "twine", - "ext-twitch.tv": "twitch.tv", - "twitch.tv": "twitch.tv", - "jtvnw.net": "twitch_cdn", - "ttvnw.net": "twitch_cdn", - "twitchcdn.net": "twitch_cdn", - "twitchsvc.net": "twitch_cdn", - "t.co": "twitter", - "twimg.com": "twitter", - "twitter.com": "twitter", - "twttr.com": "twitter", - "x.com": "twitter", - "ads-twitter.com": "twitter_ads", - "analytics.twitter.com": "twitter_analytics", - "tellapart.com": "twitter_for_business", - "syndication.twitter.com": "twitter_syndication", - "twittercounter.com": "twittercounter", - "twyn.com": "twyn", - "txxx.com": "txxx.com", - "tynt.com": "tynt", - "typeform.com": "typeform", - "typepad.com": "typepad_stats", - "typography.com": "typography.com", - "tyroodirect.com": "tyroo", - "tyroodr.com": "tyroo", - "tzetze.it": "tzetze", - "ubersetzung-app.com": "ubersetzung-app.com", - "ubuntu.com": "ubuntu", - "ubuntucompanyservices.co.za": "ubuntu", - "aralego.net": "ucfunnel", - "ucfunnel.com": "ucfunnel", - "at.ua": "ucoz", - "do.am": "ucoz", - "ucoz.net": "ucoz", - "ad-api-v01.uliza.jp": "uliza", - "api.umbel.com": "umbel", - "umebiggestern.club": "umebiggestern.club", - "unanimis.co.uk": "unanimis", - "d3pkntwtp2ukl5.cloudfront.net": "unbounce", - "t.unbounce.com": "unbounce", - "d21gpk1vhmjuf5.cloudfront.net": "unbxd", - "tracker.unbxdapi.com": "unbxd", - "under-box.com": "under-box.com", - "undercomputer.com": "undercomputer.com", - "udmserve.net": "underdog_media", - "undertone.com": "undertone", - "roitesting.com": "unica", - "unica.com": "unica", - "unister-adservices.com": "unister", - "unister-gmbh.de": "unister", - "uadx.com": "unite", - "nonstoppartner.net": "united_digital_group", - "tifbs.net": "united_internet_media_gmbh", - "ui-portal.de": "united_internet_media_gmbh", - "uimserv.net": "united_internet_media_gmbh", - "unity.com": "unity", - "unity3d.com": "unity", - "unity3dusercontent.com": "unity", - "unityads.unity3d.com": "unity_ads", - "univide.com": "univide", - "unpkg.com": "unpkg.com", - "unrulymedia.com": "unruly_media", - "src.kitcode.net": "untriel_finger_printing", - "s.clickability.com": "upland_clickability_beacon", - "uppr.de": "uppr.de", - "upravel.com": "upravel.com", - "upsellit.com": "upsellit", - "kontagent.net": "upsight", - "app.uptain.de": "uptain", - "uptolike.com": "uptolike.com", - "uptrends.com": "uptrends", - "urban-media.com": "urban-media.com", - "urbanairship.com": "urban_airship", - "mobile.usabilitytools.com": "usability_tools", - "usabilla.com": "usabilla", - "usemax.de": "usemax", - "usemaxserver.de": "usemax", - "usemessages.com": "usemessages.com", - "api.usercycle.com": "usercycle", - "userdive.com": "userdive", - "userecho.com": "userecho", - "dq4irj27fs462.cloudfront.net": "userlike.com", - "userlike-cdn-widgets.s3-eu-west-1.amazonaws.com": "userlike.com", - "userlike.com": "userlike.com", - "contactusplus.com": "userpulse", - "user-pulse.appspot.com": "userpulse", - "userpulse.com": "userpulse", - "userreplay.net": "userreplay", - "sdsbucket.s3.amazonaws.com": "userreport", - "userreport.com": "userreport", - "dtkm4pd19nw6z.cloudfront.net": "userrules", - "api.usersnap.com": "usersnap", - "d3mvnvhjmkxpjz.cloudfront.net": "usersnap", - "uservoice.com": "uservoice", - "userzoom.com": "userzoom.com", - "usocial.pro": "usocial", - "utarget.ru": "utarget", - "uuidksinc.net": "uuidksinc.net", - "v12group.com": "v12_group", - "vacaneedasap.com": "vacaneedasap.com", - "ads.brand.net": "valassis", - "vdrn.redplum.com": "valassis", - "api.searchlinks.com": "validclick", - "js.searchlinks.com": "validclick", - "vinsight.de": "valiton", - "valueclick.net": "valueclick_media", - "valuecommerce.com": "valuecommerce", - "valuedopinions.co.uk": "valued_opinions", - "buzzparadise.com": "vanksen", - "vmmpxl.com": "varick_media_management", - "vcita.com": "vcita", - "tracking.vcommission.com": "vcommission", - "vdopia.com": "vdopia", - "veinteractive.com": "ve_interactive", - "vee24.com": "vee24", - "velocecdn.com": "velocecdn.com", - "mdcn.mobi": "velti_mgage_visualize", - "velti.com": "velti_mgage_visualize", - "vendemore.com": "vendemore", - "venturead.com": "venturead.com", - "api.venyoo.ru": "venyoo", - "veoxa.com": "veoxa", - "vergic.com": "vergic.com", - "d3qxef4rp70elm.cloudfront.net": "vero", - "getvero.com": "vero", - "verticalacuity.com": "vertical_acuity", - "roi.vertical-leap.co.uk": "vertical_leap", - "cts.vresp.com": "verticalresponse", - "verticalscope.com": "verticalscope", - "ads.vertoz.com": "vertoz", - "banner.vrtzads.com": "vertoz", - "veruta.com": "veruta", - "vrvm.com": "verve_mobile", - "vgwort.de": "vg_wort", - "digitaltarget.ru": "vi", - "btg.mtvnservices.com": "viacom_tag_container", - "viafoura.com": "viafoura", - "viafoura.net": "viafoura", - "intellitxt.com": "vibrant_ads", - "vicomi.com": "vicomi.com", - "vidazoo.com": "vidazoo.com", - "module-videodesk.com": "video_desk", - "vidtok.ru": "video_potok", - "videoadex.com": "videoadex.com", - "tidaltv.com": "videology", - "videonow.ru": "videonow", - "videoplayerhub.com": "videoplayerhub.com", - "videoplaza.tv": "videoplaza", - "kweb.videostep.com": "videostep", - "content.vidgyor.com": "vidgyor", - "vidible.tv": "vidible", - "assets.vidora.com": "vidora", - "vietad.vn": "vietad", - "viglink.com": "viglink", - "vigo.one": "vigo", - "vigo.ru": "vigo", - "vimeo.com": "vimeo", - "vimeocdn.com": "vimeo", - "vindicosuite.com": "vindico_group", - "vinted.net": "vinted", - "viraladnetwork.net": "viral_ad_network", - "app.viral-loops.com": "viral_loops", - "viralgains.com": "viralgains", - "viralmint.com": "viralmint", - "virgul.com": "virgul", - "ssp.virool.com": "virool_player", - "virtusize.com": "virtusize", - "viewablemedia.net": "visible_measures", - "visiblemeasures.com": "visible_measures", - "visioncriticalpanels.com": "vision_critical", - "visitstreamer.com": "visit_streamer", - "visitortracklog.com": "visitortrack", - "visitorville.com": "visitorville", - "d2hkbi3gan6yg6.cloudfront.net": "visscore", - "myvisualiq.net": "visual_iq", - "visualrevenue.com": "visual_revenue", - "d5phz18u4wuww.cloudfront.net": "visual_website_optimizer", - "visualwebsiteoptimizer.com": "visual_website_optimizer", - "wingify.com": "visual_website_optimizer", - "vdna-assets.com": "visualdna", - "visualdna.com": "visualdna", - "visualstudio.com": "visualstudio.com", - "id-visitors.com": "visualvisitor", - "vi-tag.net": "vivalu", - "vivistats.com": "vivistats", - "vizury.com": "vizury", - "vizzit.se": "vizzit", - "cdn-vk.com": "vk.com", - "vk-analytics.com": "vk.com", - "vkuservideo.net": "vk.com", - "userapi.com": "vkontakte", - "vk.com": "vkontakte", - "vkontakte.ru": "vkontakte", - "vntsm.com": "vntsm.com", - "vodafone.de": "vodafone.de", - "voicefive.com": "voicefive", - "volusion.com": "volusion_chat", - "cwkuki.com": "voluum", - "volumtrk.com": "voluum", - "voluumtrk3.com": "voluum", - "vooxe.com": "vooxe.com", - "vorwerk.de": "vorwerk.de", - "vox-cdn.com": "vox", - "embed.voxus.tv": "voxus", - "voxus-targeting-voxusmidia.netdna-ssl.com": "voxus", - "c-dsp.vpadn.com": "vpon", - "tools.vpscash.nl": "vpscash", - "vsassets.io": "vs", - "exp-tas.com": "vscode", - "v0cdn.net": "vscode", - "vscode-cdn.net": "vscode", - "vscode-unpkg.net": "vscode", - "vtracy.de": "vtracy.de", - "liftoff.io": "vungle", - "vungle.com": "vungle", - "vuukle.com": "vuukle", - "view.vzaar.com": "vzaar", - "w3counter.com": "w3counter", - "w3roi.com": "w3roi", - "contentwidgets.net": "wahoha", - "wahoha.com": "wahoha", - "walkme.com": "walkme.com", - "wsod.com": "wall_street_on_demand", - "walmart.com": "walmart", - "wamcash.com": "wamcash", - "cdn-saveit.wanelo.com": "wanelo", - "static.warp.ly": "warp.ly", - "way2traffic.com": "way2traffic", - "wayfair.com": "wayfair_com", - "wdr.de": "wdr.de", - "web-stat.com": "web-stat", - "web.de": "web.de", - "webde.de": "web.de", - "webstat.net": "web.stat", - "ssl.webserviceaward.com": "web_service_award", - "webtraxs.com": "web_traxs", - "wipe.de": "web_wipe_analytics", - "webads.nl": "webads", - "tr.webantenna.info": "webantenna", - "webclicks24.com": "webclicks24_com", - "webclose.net": "webclose.net", - "webcollage.net": "webcollage", - "goutee.top": "webedia", - "mediaathay.org.uk": "webedia", - "wbdx.fr": "webedia", - "webeffective.keynote.com": "webeffective", - "widgets.webengage.com": "webengage", - "webgains.com": "webgains", - "webgozar.com": "webgozar", - "webgozar.ir": "webgozar", - "webhelpje.be": "webhelpje", - "webhelpje.nl": "webhelpje", - "webleads-tracker.com": "webleads_tracker", - "automation.webmecanik.com": "webmecanik", - "adrcdn.com": "weborama", - "adrcntr.com": "weborama", - "weborama.com": "weborama", - "weborama.fr": "weborama", - "webprospector.de": "webprospector", - "webstat.com": "webstat", - "webstat.se": "webstat.se", - "stat.webtrack.biz": "webtrack", - "webtraffic.no": "webtraffic", - "webtraffic.se": "webtraffic", - "d1r27qvpjiaqj3.cloudfront.net": "webtrekk", - "mateti.net": "webtrekk", - "wbtrk.net": "webtrekk", - "wcfbc.net": "webtrekk", - "webtrekk-asia.net": "webtrekk", - "webtrekk.com": "webtrekk", - "webtrekk.de": "webtrekk", - "webtrekk.net": "webtrekk", - "wt-eu02.net": "webtrekk", - "wt-safetag.com": "webtrekk", - "webtrends.com": "webtrends", - "webtrendslive.com": "webtrends", - "rd.clickshift.com": "webtrends_ads", - "web-visor.com": "webvisor", - "weebly.com": "weebly_ads", - "widget.weibo.com": "weibo_widget", - "westlotto.com": "westlotto_com", - "wetter.com": "wetter_com", - "wettercomassets.com": "wetter_com", - "whatsbroadcast.com": "whatbroadcast", - "whatsapp.com": "whatsapp", - "whatsapp.net": "whatsapp", - "whisper.onelink.me": "whisper", - "whisper.sh": "whisper", - "amung.us": "whos.amung.us", - "whoson.com": "whoson", - "api.wibbitz.com": "wibbitz", - "cdn4.wibbitz.com": "wibbitz", - "cdn.wibiya.com": "wibiya_toolbar", - "predictad.com": "widdit", - "widerplanet.com": "widerplanet", - "widespace.com": "widespace", - "widgetserver.com": "widgetbox", - "3c45d848d99.se": "wiget_media", - "wigetmedia.com": "wiget_media", - "tracker.wigzopush.com": "wigzo", - "wikia-services.com": "wikia-services.com", - "wikia-beacon.com": "wikia_beacon", - "nocookie.net": "wikia_cdn", - "wikimedia.org": "wikimedia.org", - "wikipedia.org": "wikimedia.org", - "wikiquote.org": "wikimedia.org", - "tracking.winaffiliates.com": "winaffiliates", - "maps.windows.com": "windows_maps", - "client.wns.windows.com": "windows_notifications", - "time.windows.com": "windows_time", - "windowsupdate.com": "windowsupdate", - "api.wipmania.com": "wipmania", - "col1.wiqhit.com": "wiqhit", - "wirecard.com": "wirecard", - "wirecard.de": "wirecard", - "leadlab.click": "wiredminds", - "wiredminds.com": "wiredminds", - "wiredminds.de": "wiredminds", - "adtotal.pl": "wirtualna_polska", - "wisepops.com": "wisepops", - "cdn.wishpond.net": "wishpond", - "wistia.com": "wistia", - "wistia.net": "wistia", - "parastorage.com": "wix.com", - "wix.com": "wix.com", - "public.wixab-cloud.com": "wixab", - "wixmp.com": "wixmp", - "wnzmauurgol.com": "wnzmauurgol.com", - "wonderpush.com": "wonderpush", - "woopic.com": "woopic.com", - "woopra.com": "woopra", - "pubmine.com": "wordpress_ads", - "w.org": "wordpress_stats", - "wordpress.com": "wordpress_stats", - "wp.com": "wordpress_stats", - "tracker.wordstream.com": "wordstream", - "worldnaturenet.xyz": "worldnaturenet_xyz", - "wp.pl": "wp.pl", - "wpimg.pl": "wp.pl", - "wpengine.com": "wp_engine", - "clickanalyzer.jp": "writeup_clickanalyzer", - "wurfl.io": "wurfl", - "wwwpromoter.com": "wwwpromoter", - "imgwykop.pl": "wykop", - "wykop.pl": "wykop", - "wysistat.com": "wysistat.com", - "wysistat.net": "wysistat.com", - "wywy.com": "wywy.com", - "wywyuserservice.com": "wywy.com", - "cdn.x-lift.jp": "x-lift", - "xapads.com": "xapads", - "xen-media.com": "xen-media.com", - "xfreeservice.com": "xfreeservice.com", - "xhamster.com": "xhamster", - "xhamsterlive.com": "xhamster", - "xhamsterpremium.com": "xhamster", - "xhcdn.com": "xhamster", - "huami.com": "xiaomi", - "mi-img.com": "xiaomi", - "mi.com": "xiaomi", - "miui.com": "xiaomi", - "xiaomi.com": "xiaomi", - "xiaomi.net": "xiaomi", - "xiaomiyoupin.com": "xiaomi", - "xing-share.com": "xing", - "xing.com": "xing", - "xmediaclicks.com": "xmediaclicks", - "xnxx-cdn.com": "xnxx_cdn", - "xplosion.de": "xplosion", - "xtendmedia.com": "xtend", - "xvideos-cdn.com": "xvideos_com", - "xvideos.com": "xvideos_com", - "xxxlshop.de": "xxxlshop.de", - "xxxlutz.de": "xxxlutz", - "adx.com.ru": "yabbi", - "yabbi.me": "yabbi", - "yabuka.com": "yabuka", - "tumblr.com": "yahoo", - "yahoo.com": "yahoo", - "yahooapis.com": "yahoo", - "yimg.com": "yahoo", - "oath.cloud": "yahoo", - "yahoo.net": "yahoo", - "yahooinc.com": "yahoo", - "yahoodns.net": "yahoo", - "yads.yahoo.com": "yahoo_ad_exchange", - "yieldmanager.com": "yahoo_ad_exchange", - "pr-bh.ybp.yahoo.com": "yahoo_ad_manager", - "ads.yahoo.com": "yahoo_advertising", - "adtech.yahooinc.com": "yahoo_advertising", - "analytics.yahoo.com": "yahoo_analytics", - "np.lexity.com": "yahoo_commerce_central", - "storage-yahoo.jp": "yahoo_japan_retargeting", - "yahoo.co.jp": "yahoo_japan_retargeting", - "yahooapis.jp": "yahoo_japan_retargeting", - "yimg.jp": "yahoo_japan_retargeting", - "yjtag.jp": "yahoo_japan_retargeting", - "ov.yahoo.co.jp": "yahoo_overture", - "overture.com": "yahoo_overture", - "search.yahooinc.com": "yahoo_search", - "luminate.com": "yahoo_small_business", - "pixazza.com": "yahoo_small_business", - "awaps.yandex.ru": "yandex", - "d31j93rd8oukbv.cloudfront.net": "yandex", - "webvisor.org": "yandex", - "yandex.net": "yandex", - "yandex.ru": "yandex", - "yastatic.net": "yandex", - "ya.ru": "yandex", - "yandex.by": "yandex", - "yandex.com": "yandex", - "yandex.com.tr": "yandex", - "yandex.fr": "yandex", - "yandex.kz": "yandex", - "yandex.st": "yandex.api", - "yandexadexchange.net": "yandex_adexchange", - "metabar.ru": "yandex_advisor", - "appmetrica.yandex.com": "yandex_appmetrica", - "an.webvisor.org": "yandex_direct", - "an.yandex.ru": "yandex_direct", - "bs.yandex.ru": "yandex_direct", - "mc.yandex.ru": "yandex_metrika", - "passport.yandex.ru": "yandex_passport", - "yapfiles.ru": "yapfiles.ru", - "yashi.com": "yashi", - "ad.adserverplus.com": "ybrant_media", - "player.sambaads.com": "ycontent", - "cdn.yektanet.com": "yektanet", - "fetch.yektanet.com": "yektanet", - "yengo.com": "yengo", - "yengointernational.com": "yengo", - "link.p0.com": "yesmail", - "adsrevenue.net": "yesup_advertising", - "infinityads.com": "yesup_advertising", - "momentsharing.com": "yesup_advertising", - "multipops.com": "yesup_advertising", - "onlineadultadvertising.com": "yesup_advertising", - "paypopup.com": "yesup_advertising", - "popupxxx.com": "yesup_advertising", - "xtargeting.com": "yesup_advertising", - "xxxwebtraffic.com": "yesup_advertising", - "app.yesware.com": "yesware", - "yldbt.com": "yieldbot", - "yieldify.com": "yieldify", - "yieldlab.net": "yieldlab", - "yieldlove-ad-serving.net": "yieldlove", - "yieldlove.com": "yieldlove", - "yieldmo.com": "yieldmo", - "254a.com": "yieldr", - "collect.yldr.io": "yieldr_air", - "yieldsquare.com": "yieldsquare", - "analytics-sdk.yle.fi": "yle", - "yllix.com": "yllixmedia", - "ymetrica1.com": "ymetrica1.com", - "ymzrrizntbhde.com": "ymzrrizntbhde.com", - "yoapp.s3.amazonaws.com": "yo_button", - "natpal.com": "yodle", - "analytics.yola.net": "yola_analytics", - "pixel.yola.net": "yola_analytics", - "delivery.yomedia.vn": "yomedia", - "yoochoose.net": "yoochoose.net", - "yotpo.com": "yotpo", - "yottaa.net": "yottaa", - "yottlyscript.com": "yottly", - "api.youcanbook.me": "youcanbookme", - "youcanbook.me": "youcanbookme", - "player.youku.com": "youku", - "youporn.com": "youporn", - "ypncdn.com": "youporn", - "googlevideo.com": "youtube", - "youtube-nocookie.com": "youtube", - "youtube.com": "youtube", - "ytimg.com": "youtube", - "c.ypcdn.com": "yp", - "i1.ypcdn.com": "yp", - "yellowpages.com": "yp", - "prod-js.aws.y-track.com": "ysance", - "y-track.com": "ysance", - "yume.com": "yume", - "yumenetworks.com": "yume,_inc.", - "gravityrd-services.com": "yusp", - "api.zadarma.com": "zadarma", - "zalan.do": "zalando_de", - "zalando.de": "zalando_de", - "ztat.net": "zalando_de", - "zaloapp.com": "zalo", - "zanox-affiliate.de": "zanox", - "zanox.com": "zanox", - "zanox.ws": "zanox", - "zaparena.com": "zaparena", - "zapunited.com": "zaparena", - "track.zappos.com": "zappos", - "zdassets.com": "zdassets.com", - "zebestof.com": "zebestof.com", - "zedo.com": "zedo", - "zemanta.com": "zemanta", - "zencdn.net": "zencoder", - "zendesk.com": "zendesk", - "zergnet.com": "zergnet", - "zero.kz": "zero.kz", - "app.insightgrit.com": "zeta", - "app.ubertags.com": "zeta", - "cdn.boomtrain.com": "zeta", - "events.api.boomtrain.com": "zeta", - "rfihub.com": "zeta", - "rfihub.net": "zeta", - "ru4.com": "zeta", - "xplusone.com": "zeta", - "zeusclicks.com": "zeusclicks", - "webtest.net": "ziff_davis", - "zdbb.net": "ziff_davis", - "ziffdavis.com": "ziff_davis", - "ziffdavisinternational.com": "ziff_davis", - "ziffprod.com": "ziff_davis", - "ziffstatic.com": "ziff_davis", - "analytics.ziftsolutions.com": "zift_solutions", - "zimbio.com": "zimbio.com", - "api.zippyshare.com": "zippyshare_widget", - "zmags.com": "zmags", - "zmctrack.net": "zmctrack.net", - "zog.link": "zog.link", - "js.zohostatic.eu": "zoho", - "zononi.com": "zononi.com", - "zopim.com": "zopim", - "zukxd6fkxqn.com": "zukxd6fkxqn.com", - "zwaar.net": "zwaar", - "zwaar.org": "zwaar", - "extend.tv": "zypmedia" - } + "timeUpdated": "2024-09-30T10:04:46.112Z", + "categories": { + "0": "audio_video_player", + "1": "comments", + "2": "customer_interaction", + "3": "pornvertising", + "4": "advertising", + "5": "essential", + "6": "site_analytics", + "7": "social_media", + "8": "misc", + "9": "cdn", + "10": "hosting", + "11": "unknown", + "12": "extensions", + "13": "email", + "14": "consent", + "15": "telemetry", + "101": "mobile_analytics" + }, + "trackers": { + "163": { + "name": "163", + "categoryId": 4, + "url": "http://www.163.com/", + "companyId": "163" + }, + "1000mercis": { + "name": "1000mercis", + "categoryId": 6, + "url": "http://www.1000mercis.com/", + "companyId": "1000mercis" + }, + "161media": { + "name": "Platform161", + "categoryId": 4, + "url": "https://platform161.com/", + "companyId": "platform161" + }, + "1822direkt.de": { + "name": "1822direkt.de", + "categoryId": 8, + "url": "https://www.1822direkt.de/", + "companyId": "1822direkt", + "source": "AdGuard" + }, + "1dmp.io": { + "name": "1DMP", + "categoryId": 4, + "url": "https://1dmp.io/", + "companyId": "1dmp" + }, + "1plusx": { + "name": "1plusX", + "categoryId": 6, + "url": "https://www.1plusx.com/", + "companyId": "1plusx" + }, + "1sponsor": { + "name": "1sponsor", + "categoryId": 4, + "url": "http://fr.1sponsor.com/", + "companyId": "1sponsor" + }, + "1tag": { + "name": "1tag", + "categoryId": 6, + "url": "http://www.dentsuaegisnetwork.com/", + "companyId": "dentsu_aegis_network" + }, + "1und1": { + "name": "1&1 IONOS", + "categoryId": 8, + "url": "http://www.ionos.com/", + "companyId": "1und1", + "source": "AdGuard" + }, + "24-ads.com": { + "name": "24-ADS", + "categoryId": 4, + "url": "http://www.24-ads.com/", + "companyId": "24-ads.com", + "source": "AdGuard" + }, + "24_7": { + "name": "[24]7", + "categoryId": 2, + "url": "http://www.247-inc.com/", + "companyId": "24_7" + }, + "24log": { + "name": "24log", + "categoryId": 6, + "url": "http://24log.ru/", + "companyId": "24log" + }, + "24smi": { + "name": "24SMI", + "categoryId": 8, + "url": "https://24smi.org/", + "companyId": "24smi", + "source": "AdGuard" + }, + "2leep": { + "name": "2leep", + "categoryId": 4, + "url": "http://2leep.com/", + "companyId": "2leep" + }, + "33across": { + "name": "33Across", + "categoryId": 4, + "url": "http://33across.com/", + "companyId": "33across" + }, + "3dstats": { + "name": "3DStats", + "categoryId": 6, + "url": "http://www.3dstats.com/", + "companyId": "3dstats" + }, + "3gpp": { + "name": "3GPP Network", + "categoryId": 5, + "url": "https://www.3gpp.org/", + "companyId": "3gpp", + "source": "AdGuard" + }, + "4chan": { + "name": "4Chan", + "categoryId": 8, + "url": "https://www.4chan.org/", + "companyId": "4chan", + "source": "AdGuard" + }, + "4finance_com": { + "name": "4finance", + "categoryId": 2, + "url": "https://4finance.com/", + "companyId": "4finance", + "source": "AdGuard" + }, + "4w_marketplace": { + "name": "4w Marketplace", + "categoryId": 4, + "url": "http://www.4wmarketplace.com/", + "companyId": "4w_marketplace" + }, + "500friends": { + "name": "500friends", + "categoryId": 2, + "url": "http://500friends.com/", + "companyId": "500friends" + }, + "51.la": { + "name": "51.La", + "categoryId": 6, + "url": "http://www.51.la/", + "companyId": "51.la" + }, + "5min_media": { + "name": "5min Media", + "categoryId": 0, + "url": "http://www.5min.com/", + "companyId": "verizon" + }, + "6sense": { + "name": "6Sense", + "categoryId": 6, + "url": "http://home.grepdata.com", + "companyId": "6sense" + }, + "77tracking": { + "name": "77Tracking", + "categoryId": 6, + "url": "http://www.77agency.com/", + "companyId": "77agency" + }, + "7plus": { + "name": "7plus", + "categoryId": 0, + "url": "https://7plus.com.au/", + "companyId": "seven_group_holdings", + "source": "AdGuard" + }, + "7tv.de": { + "name": "7tv.app", + "categoryId": 0, + "url": "https://www.7tv.app/", + "companyId": "7tv", + "source": "AdGuard" + }, + "888media": { + "name": "888media", + "categoryId": 4, + "url": "http://888media.net/", + "companyId": "888_media" + }, + "8digits": { + "name": "8digits", + "categoryId": 6, + "url": "http://8digits.com/", + "companyId": "8digits" + }, + "94j7afz2nr.xyz": { + "name": "94j7afz2nr.xyz", + "categoryId": 12, + "url": null, + "companyId": null + }, + "99stats": { + "name": "99stats", + "categoryId": 6, + "url": "http://www.99stats.com/", + "companyId": "99stats" + }, + "a3cloud_net": { + "name": "a3cloud.net", + "categoryId": 11, + "url": null, + "companyId": null + }, + "a8": { + "name": "A8", + "categoryId": 4, + "url": "http://www.a8.net/", + "companyId": "a8" + }, + "aaxads.com": { + "name": "Acceptable Ads Exchange", + "categoryId": 4, + "url": "https://aax.media/", + "companyId": null + }, + "ab_tasty": { + "name": "AB Tasty", + "categoryId": 6, + "url": "https://en.abtasty.com", + "companyId": "ab_tasty" + }, + "abc": { + "name": "Australian Broadcasting Corporation", + "categoryId": 8, + "url": "https://www.abc.net.au/", + "companyId": "australian_government", + "source": "AdGuard" + }, + "ablida": { + "name": "ablida", + "categoryId": 4, + "url": "https://www.ablida.de/", + "companyId": null + }, + "accelia": { + "name": "Accelia", + "categoryId": 4, + "url": "http://www.durasite.net/", + "companyId": "accelia" + }, + "accengage": { + "name": "Accengage", + "categoryId": 4, + "url": "https://www.accengage.com/", + "companyId": "accengage" + }, + "accessanalyzer": { + "name": "AccessAnalyzer", + "categoryId": 6, + "url": "http://ax.xrea.com/", + "companyId": "accessanalyzer" + }, + "accesstrade": { + "name": "AccessTrade", + "categoryId": 4, + "url": "http://accesstrade.net/", + "companyId": "accesstrade" + }, + "accord_group": { + "name": "Accord Group", + "categoryId": 4, + "url": "http://www.accordgroup.co.uk/", + "companyId": "accord_group" + }, + "accordant_media": { + "name": "Accordant Media", + "categoryId": 4, + "url": "http://www.accordantmedia.com/", + "companyId": "accordant_media" + }, + "accuen_media": { + "name": "Accuen Media", + "categoryId": 4, + "url": "http://www.accuenmedia.com/", + "companyId": "accuen_media" + }, + "acestream.net": { + "name": "ActStream", + "categoryId": 12, + "url": "http://www.acestream.org/", + "companyId": null + }, + "acint.net": { + "name": "Artificial Computation Intelligence", + "categoryId": 6, + "url": "https://www.acint.net/", + "companyId": "acint" + }, + "acloudimages": { + "name": "Acloudimages", + "categoryId": 4, + "url": "http://adsterra.com", + "companyId": "adsterra" + }, + "acpm.fr": { + "name": "ACPM", + "categoryId": 6, + "url": "http://www.acpm.fr/", + "companyId": null + }, + "acquia.com": { + "name": "Acquia", + "categoryId": 6, + "url": "https://www.acquia.com/", + "companyId": null + }, + "acrweb": { + "name": "ACRWEB", + "categoryId": 7, + "url": "http://www.ziyu.net/", + "companyId": "acrweb" + }, + "actionpay": { + "name": "actionpay", + "categoryId": 4, + "url": "http://actionpay.ru/", + "companyId": "actionpay" + }, + "active_agent": { + "name": "Active Agent", + "categoryId": 4, + "url": "http://www.active-agent.com/", + "companyId": "active_agent" + }, + "active_campaign": { + "name": "Active Campaign", + "categoryId": 6, + "url": "https://www.activecampaign.com", + "companyId": "active_campaign" + }, + "active_performance": { + "name": "Active Performance", + "categoryId": 4, + "url": "http://www.active-performance.de/", + "companyId": "active_performance" + }, + "activeconversion": { + "name": "ActiveConversion", + "categoryId": 4, + "url": "http://www.activeconversion.com/", + "companyId": "activeconversion" + }, + "activecore": { + "name": "activecore", + "categoryId": 6, + "url": "http://activecore.jp/", + "companyId": "activecore" + }, + "activemeter": { + "name": "ActiveMeter", + "categoryId": 4, + "url": "http://www.activemeter.com/", + "companyId": "activeconversion" + }, + "activengage": { + "name": "ActivEngage", + "categoryId": 2, + "url": "http://www.activengage.com", + "companyId": "activengage" + }, + "acton": { + "name": "Act-On Beacon", + "categoryId": 4, + "url": "http://www.actonsoftware.com/", + "companyId": "act-on" + }, + "acuity_ads": { + "name": "Acuity Ads", + "categoryId": 4, + "url": "http://www.acuityads.com/", + "companyId": "acuity_ads" + }, + "acxiom": { + "name": "Acxiom", + "categoryId": 4, + "url": "http://www.acxiom.com", + "companyId": "acxiom" + }, + "ad-blocker.org": { + "name": "ad-blocker.org", + "categoryId": 11, + "url": null, + "companyId": null + }, + "ad-center": { + "name": "Ad-Center", + "categoryId": 6, + "url": "http://www.ad-center.com", + "companyId": "ad-center" + }, + "ad-delivery.net": { + "name": "ad-delivery.net", + "categoryId": 11, + "url": null, + "companyId": null + }, + "ad-sys": { + "name": "Ad-Sys", + "categoryId": 4, + "url": "http://www.ad-sys.com/", + "companyId": "ad-sys" + }, + "ad.agio": { + "name": "Ad.agio", + "categoryId": 4, + "url": "http://neodatagroup.com/", + "companyId": "neodata" + }, + "ad2click": { + "name": "Ad2Click", + "categoryId": 4, + "url": "http://www.ad2click.com/", + "companyId": "ad2click_media" + }, + "ad2games": { + "name": "ad2games", + "categoryId": 4, + "url": "http://web.ad2games.com/", + "companyId": "ad2games" + }, + "ad360": { + "name": "Ad360", + "categoryId": 4, + "url": "http://ad360.vn", + "companyId": "ad360" + }, + "ad4game": { + "name": "ad4game", + "categoryId": 4, + "url": "http://www.ad4game.com/", + "companyId": "ad4game" + }, + "ad4mat": { + "name": "ad4mat", + "categoryId": 4, + "url": "http://ad4mat.info", + "companyId": "ad4mat" + }, + "ad6media": { + "name": "ad6media", + "categoryId": 4, + "url": "https://www.ad6media.fr/", + "companyId": "ad6media" + }, + "ad_decisive": { + "name": "Ad Decisive", + "categoryId": 4, + "url": "http://www.lagardere-global-advertising.com/", + "companyId": "lagardere_advertising" + }, + "ad_dynamo": { + "name": "Ad Dynamo", + "categoryId": 4, + "url": "http://www.addynamo.com/", + "companyId": "ad_dynamo" + }, + "ad_ebis": { + "name": "AD EBiS", + "categoryId": 4, + "url": "http://www.ebis.ne.jp/en/", + "companyId": "ad_ebis" + }, + "ad_lightning": { + "name": "Ad Lightning", + "categoryId": 4, + "url": "https://www.adlightning.com/", + "companyId": "ad_lightning" + }, + "ad_magnet": { + "name": "Ad Magnet", + "categoryId": 4, + "url": "http://www.admagnet.com/", + "companyId": "ad_magnet" + }, + "ad_spirit": { + "name": "Ad Spirit", + "categoryId": 4, + "url": "http://www.adspirit.de", + "companyId": "adspirit" + }, + "adac_de": { + "name": "adac.de", + "categoryId": 8, + "url": "http://adac.de/", + "companyId": null + }, + "adacado": { + "name": "Adacado", + "categoryId": 4, + "url": "http://www.adacado.com/", + "companyId": "adacado" + }, + "adadyn": { + "name": "Adadyn", + "categoryId": 4, + "url": "http://ozonemedia.com/index.html", + "companyId": "adadyn" + }, + "adality_gmbh": { + "name": "adality GmbH", + "categoryId": 4, + "url": "https://www.arvato.com/", + "companyId": "arvato" + }, + "adalliance.io": { + "name": "Ad Alliance", + "categoryId": 4, + "url": "https://www.ad-alliance.de/", + "companyId": null + }, + "adalyser.com": { + "name": "Adalyser", + "categoryId": 6, + "url": "https://www.adalyser.com/", + "companyId": "onesoon" + }, + "adaos": { + "name": "ADAOS", + "categoryId": 4, + "url": "http://www.24-interactive.com", + "companyId": "24_interactive" + }, + "adap.tv": { + "name": "Adap.tv", + "categoryId": 4, + "url": "http://www.adap.tv/", + "companyId": "verizon" + }, + "adaptiveblue_smartlinks": { + "name": "AdaptiveBlue SmartLinks", + "categoryId": 2, + "url": "http://www.adaptiveblue.com/smartlinks.html", + "companyId": "telfie" + }, + "adara_analytics": { + "name": "ADARA Analytics", + "categoryId": 4, + "url": "http://www.adaramedia.com/", + "companyId": "adara_analytics" + }, + "adasia_holdings": { + "name": "AdAsia Holdings", + "categoryId": 4, + "url": "https://adasiaholdings.com/", + "companyId": "adasia_holdings" + }, + "adbetclickin.pink": { + "name": "adbetnet", + "categoryId": 4, + "url": "http://adbetnet.com/", + "companyId": null + }, + "adbetnet.com": { + "name": "adbetnet", + "categoryId": 4, + "url": "https://adbetnet.com/", + "companyId": null + }, + "adblade.com": { + "name": "Adblade", + "categoryId": 4, + "url": "https://adblade.com/", + "companyId": "adblade" + }, + "adbooth": { + "name": "Adbooth", + "categoryId": 4, + "url": "http://www.adbooth.com/", + "companyId": "adbooth_media_group" + }, + "adbox": { + "name": "AdBox", + "categoryId": 4, + "url": "http://www.adbox.lv/", + "companyId": "adbox" + }, + "adbrain": { + "name": "Adbrain", + "categoryId": 6, + "url": "https://www.adbrain.com/", + "companyId": "adbrain" + }, + "adbrite": { + "name": "AdBrite", + "categoryId": 4, + "url": "http://www.adbrite.com/", + "companyId": "centro" + }, + "adbull": { + "name": "AdBull", + "categoryId": 4, + "url": "http://www.adbull.com/", + "companyId": "adbull" + }, + "adbutler": { + "name": "AdButler", + "categoryId": 4, + "url": "https://www.adbutler.com/d", + "companyId": "sparklit_networks" + }, + "adc_media": { + "name": "ad:C media", + "categoryId": 4, + "url": "http://www.adcmedia.de/en/", + "companyId": "ad:c_media" + }, + "adcash": { + "name": "Adcash", + "categoryId": 4, + "url": "http://www.adcash.com", + "companyId": "adcash" + }, + "adchakra": { + "name": "AdChakra", + "categoryId": 6, + "url": "http://adchakra.com/", + "companyId": "adchakra" + }, + "adchina": { + "name": "AdChina", + "categoryId": 4, + "url": "http://www.adchina.com/", + "companyId": null, + "source": "AdGuard" + }, + "adcito": { + "name": "Adcito", + "categoryId": 4, + "url": "http://adcito.com/", + "companyId": "adcito" + }, + "adclear": { + "name": "AdClear", + "categoryId": 4, + "url": "http://www.adclear.de/en/home.html", + "companyId": "adclear" + }, + "adclerks": { + "name": "Adclerks", + "categoryId": 4, + "url": "https://adclerks.com/", + "companyId": "adclerks" + }, + "adclickmedia": { + "name": "AdClickMedia", + "categoryId": 4, + "url": "http://www.adclickmedia.com/", + "companyId": "adclickmedia" + }, + "adclickzone": { + "name": "AdClickZone", + "categoryId": 4, + "url": "http://www.adclickzone.com/", + "companyId": "adclickzone" + }, + "adcloud": { + "name": "adcloud", + "categoryId": 4, + "url": "https://ad-cloud.jp", + "companyId": "adcloud" + }, + "adcolony": { + "name": "AdColony", + "categoryId": 4, + "url": "https://www.adcolony.com/history-of-adcolony/", + "companyId": "digital_turbine", + "source": "AdGuard" + }, + "adconion": { + "name": "Adconion", + "categoryId": 4, + "url": "http://www.adconion.com/", + "companyId": "singtel" + }, + "adcrowd": { + "name": "Adcrowd", + "categoryId": 4, + "url": "https://www.adcrowd.com", + "companyId": "adcrowd" + }, + "adcurve": { + "name": "AdCurve", + "categoryId": 4, + "url": "http://www.shop2market.com/", + "companyId": "adcurve" + }, + "add_to_calendar": { + "name": "Add To Calendar", + "categoryId": 2, + "url": "http://addtocalendar.com/", + "companyId": "addtocalendar" + }, + "addaptive": { + "name": "Addaptive", + "categoryId": 4, + "url": "http://www.datapointmedia.com/", + "companyId": "addaptive" + }, + "addefend": { + "name": "AdDefend", + "categoryId": 4, + "url": "https://www.addefend.com/", + "companyId": null + }, + "addfreestats": { + "name": "AddFreeStats", + "categoryId": 6, + "url": "http://www.addfreestats.com/", + "companyId": "3dstats" + }, + "addinto": { + "name": "AddInto", + "categoryId": 2, + "url": "http://www.addinto.com/", + "companyId": "addinto" + }, + "addshoppers": { + "name": "AddShoppers", + "categoryId": 7, + "url": "http://www.addshoppers.com/", + "companyId": "addshoppers" + }, + "addthis": { + "name": "AddThis", + "categoryId": 4, + "url": "http://www.addthis.com/", + "companyId": "oracle" + }, + "addvalue": { + "name": "Addvalue", + "categoryId": 6, + "url": "http://www.addvalue.de/en/", + "companyId": "addvalue.de" + }, + "addyon": { + "name": "AddyON", + "categoryId": 4, + "url": "http://www.addyon.com/homepage.php", + "companyId": "addyon" + }, + "adeasy": { + "name": "AdEasy", + "categoryId": 4, + "url": "http://www.adeasy.ru/", + "companyId": "adeasy" + }, + "adelphic": { + "name": "Adelphic", + "categoryId": 6, + "url": "http://www.adelphic.com/", + "companyId": "adelphic" + }, + "adengage": { + "name": "AdEngage", + "categoryId": 4, + "url": "http://www.adengage.com", + "companyId": "synacor" + }, + "adespresso": { + "name": "AdEspresso", + "categoryId": 4, + "url": "http://adespresso.com", + "companyId": "adespresso" + }, + "adexcite": { + "name": "AdExcite", + "categoryId": 4, + "url": "http://adexcite.com", + "companyId": "adexcite" + }, + "adextent": { + "name": "AdExtent", + "categoryId": 4, + "url": "http://www.adextent.com/", + "companyId": "adextent" + }, + "adf.ly": { + "name": "AdF.ly", + "categoryId": 4, + "url": "http://adf.ly/", + "companyId": "adf.ly" + }, + "adfalcon": { + "name": "AdFalcon", + "categoryId": 4, + "url": "http://www.adfalcon.com/", + "companyId": "adfalcon" + }, + "adfocus": { + "name": "AdFocus", + "categoryId": 4, + "url": "http://adfoc.us/", + "companyId": "adfoc.us" + }, + "adforgames": { + "name": "AdForGames", + "categoryId": 4, + "url": "http://www.adforgames.com/", + "companyId": "adforgames" + }, + "adform": { + "name": "Adform", + "categoryId": 4, + "url": "http://www.adform.com", + "companyId": "adform" + }, + "adfox": { + "name": "AdFox", + "categoryId": 4, + "url": "http://adfox.ru", + "companyId": "yandex" + }, + "adfreestyle": { + "name": "adFreestyle", + "categoryId": 4, + "url": "http://www.adfreestyle.pl/", + "companyId": "adfreestyle" + }, + "adfront": { + "name": "AdFront", + "categoryId": 4, + "url": "http://buysellads.com/", + "companyId": "buysellads.com" + }, + "adfrontiers": { + "name": "AdFrontiers", + "categoryId": 4, + "url": "http://www.adfrontiers.com/", + "companyId": "adfrontiers" + }, + "adgear": { + "name": "AdGear", + "categoryId": 4, + "url": "http://adgear.com/", + "companyId": "samsung" + }, + "adgebra": { + "name": "Adgebra", + "categoryId": 4, + "url": "https://adgebra.in/", + "companyId": "adgebra" + }, + "adgenie": { + "name": "adGENIE", + "categoryId": 4, + "url": "http://www.adgenie.co.uk/", + "companyId": "ve" + }, + "adgile": { + "name": "Adgile", + "categoryId": 4, + "url": "http://www.adgile.com/", + "companyId": "adgile_media" + }, + "adglare.net": { + "name": "Adglare", + "categoryId": 4, + "url": "https://www.adglare.com/", + "companyId": null + }, + "adglue": { + "name": "Adglue", + "categoryId": 4, + "url": "http://admans.de/de.html", + "companyId": "admans" + }, + "adgoal": { + "name": "adgoal", + "categoryId": 4, + "url": "http://www.adgoal.de/", + "companyId": "adgoal" + }, + "adgorithms": { + "name": "Adgorithms", + "categoryId": 4, + "url": "http://www.adgorithms.com/", + "companyId": "albert" + }, + "adgoto": { + "name": "ADGoto", + "categoryId": 4, + "url": "http://adgoto.com/", + "companyId": "adgoto" + }, + "adguard": { + "name": "AdGuard", + "categoryId": 8, + "url": "https://adguard.com/", + "companyId": "adguard", + "source": "AdGuard" + }, + "adguard_dns": { + "name": "AdGuard DNS", + "categoryId": 8, + "url": "https://adguard-dns.io/", + "companyId": "adguard", + "source": "AdGuard" + }, + "adguard_vpn": { + "name": "AdGuard VPN", + "categoryId": 8, + "url": "https://adguard-vpn.com/", + "companyId": "adguard", + "source": "AdGuard" + }, + "adhands": { + "name": "AdHands", + "categoryId": 4, + "url": "http://promo.adhands.ru/", + "companyId": "adhands" + }, + "adhese": { + "name": "Adhese", + "categoryId": 4, + "url": "http://adhese.com", + "companyId": "adhese" + }, + "adhitz": { + "name": "AdHitz", + "categoryId": 4, + "url": "http://www.adhitz.com/", + "companyId": "adhitz" + }, + "adhood": { + "name": "adhood", + "categoryId": 4, + "url": "http://www.adhood.com/", + "companyId": "adhood" + }, + "adify": { + "name": "Adify", + "categoryId": 4, + "url": "http://www.adify.com/", + "companyId": "cox_enterpries" + }, + "adikteev": { + "name": "Adikteev", + "categoryId": 4, + "url": "http://www.adikteev.com/", + "companyId": "adikteev" + }, + "adimpact": { + "name": "Adimpact", + "categoryId": 4, + "url": "http://www.adimpact.com/", + "companyId": "adimpact" + }, + "adinch": { + "name": "Adinch", + "categoryId": 4, + "url": "http://adinch.com/", + "companyId": "adinch" + }, + "adition": { + "name": "Adition", + "categoryId": 4, + "url": "http://en.adition.com/", + "companyId": "prosieben_sat1" + }, + "adjal": { + "name": "Adjal", + "categoryId": 4, + "url": "http://adjal.com/", + "companyId": "marketing_adjal" + }, + "adjs": { + "name": "ADJS", + "categoryId": 4, + "url": "https://github.com/widgital/adjs", + "companyId": "adjs" + }, + "adjug": { + "name": "AdJug", + "categoryId": 4, + "url": "http://www.adjug.com/", + "companyId": "adjug" + }, + "adjust": { + "name": "Adjust GmbH", + "categoryId": 101, + "url": "https://www.adjust.com/", + "companyId": "applovin", + "source": "AdGuard" + }, + "adk2": { + "name": "adk2", + "categoryId": 4, + "url": "http://www.adk2.com/", + "companyId": "adk2_plymedia" + }, + "adklip": { + "name": "adklip", + "categoryId": 4, + "url": "http://adklip.com", + "companyId": "adklip" + }, + "adknowledge": { + "name": "Adknowledge", + "categoryId": 4, + "url": "http://www.adknowledge.com/", + "companyId": "adknowledge" + }, + "adkontekst": { + "name": "Adkontekst", + "categoryId": 4, + "url": "http://www.en.adkontekst.pl/", + "companyId": "adkontekst" + }, + "adkontekst.pl": { + "name": "Adkontekst", + "categoryId": 4, + "url": "http://netsprint.eu/", + "companyId": "netsprint" + }, + "adlabs": { + "name": "AdLabs", + "categoryId": 4, + "url": "https://www.adlabs.ru/", + "companyId": "adlabs" + }, + "adlantic": { + "name": "AdLantic", + "categoryId": 4, + "url": "http://www.adlantic.nl/", + "companyId": "adlantic_online_advertising" + }, + "adlantis": { + "name": "AdLantis", + "categoryId": 4, + "url": "http://www.adlantis.jp/", + "companyId": "adlantis" + }, + "adless": { + "name": "Adless", + "categoryId": 4, + "url": "https://www.adless.io/", + "companyId": "adless" + }, + "adlive_header_bidding": { + "name": "Adlive Header Bidding", + "categoryId": 4, + "url": "http://adlive.io/", + "companyId": "adlive" + }, + "adloox": { + "name": "Adloox", + "categoryId": 4, + "url": "http://www.adloox.com", + "companyId": "adloox" + }, + "admachine": { + "name": "AdMachine", + "categoryId": 4, + "url": "https://admachine.co/", + "companyId": null + }, + "adman": { + "name": "ADMAN", + "categoryId": 4, + "url": "http://www.adman.gr/", + "companyId": "adman" + }, + "adman_media": { + "name": "ADman Media", + "categoryId": 4, + "url": "http://www.admanmedia.com/", + "companyId": "ad_man_media" + }, + "admantx.com": { + "name": "ADmantX", + "categoryId": 4, + "url": "http://www.admantx.com/", + "companyId": "expert_system_spa" + }, + "admaster": { + "name": "AdMaster", + "categoryId": 4, + "url": "http://admaster.net", + "companyId": "admaster" + }, + "admaster.cn": { + "name": "AdMaster.cn", + "categoryId": 4, + "url": "http://www.admaster.com.cn/", + "companyId": "admaster" + }, + "admatic": { + "name": "Admatic", + "categoryId": 4, + "url": "http://www.admatic.com.tr/#1page", + "companyId": "admatic" + }, + "admatrix": { + "name": "Admatrix", + "categoryId": 4, + "url": "https://admatrix.jp/login#block01", + "companyId": "admatrix" + }, + "admax": { + "name": "Admax", + "categoryId": 4, + "url": "http://www.admaxnetwork.com/index.php", + "companyId": "komli" + }, + "admaxim": { + "name": "AdMaxim", + "categoryId": 4, + "url": "http://admaxim.com/", + "companyId": "admaxim" + }, + "admaya": { + "name": "Admaya", + "categoryId": 4, + "url": "http://www.admaya.in/", + "companyId": "admaya" + }, + "admedia": { + "name": "AdMedia", + "categoryId": 4, + "url": "http://admedia.com/", + "companyId": "admedia" + }, + "admedo_com": { + "name": "Admedo", + "categoryId": 4, + "url": "http://admedo.com/", + "companyId": "admedo" + }, + "admeira.ch": { + "name": "AdMeira", + "categoryId": 4, + "url": "http://admeira.ch/", + "companyId": "admeira" + }, + "admeld": { + "name": "AdMeld", + "categoryId": 4, + "url": "http://www.admeld.com", + "companyId": "google" + }, + "admeo": { + "name": "Admeo", + "categoryId": 4, + "url": "http://admeo.ru/", + "companyId": "admeo.ru" + }, + "admeta": { + "name": "Admeta", + "categoryId": 4, + "url": "http://www.admeta.com/", + "companyId": "admeta" + }, + "admicro": { + "name": "AdMicro", + "categoryId": 4, + "url": "http://www.admicro.vn/", + "companyId": "admicro" + }, + "admitad.com": { + "name": "Admitad", + "categoryId": 4, + "url": "https://www.admitad.com/en/#", + "companyId": "admitad" + }, + "admixer": { + "name": "Admixer", + "categoryId": 4, + "url": "https://admixer.com/", + "companyId": "admixer", + "source": "AdGuard" + }, + "admixer.net": { + "name": "Admixer", + "categoryId": 4, + "url": "https://admixer.net/", + "companyId": "admixer" + }, + "admized": { + "name": "ADMIZED", + "categoryId": 8, + "url": null, + "companyId": null + }, + "admo.tv": { + "name": "Admo.tv", + "categoryId": 4, + "url": "https://admo.tv/", + "companyId": "admo.tv" + }, + "admob": { + "name": "AdMob", + "categoryId": 4, + "url": "http://www.admob.com/", + "companyId": "google" + }, + "admost": { + "name": "adMOST", + "categoryId": 4, + "url": "http://www.admost.com/", + "companyId": "admost" + }, + "admotion": { + "name": "Admotion", + "categoryId": 4, + "url": "http://www.admotionus.com/", + "companyId": "admotion" + }, + "admulti": { + "name": "ADmulti", + "categoryId": 4, + "url": "http://admulti.com", + "companyId": "admulti" + }, + "adnegah": { + "name": "Adnegah", + "categoryId": 4, + "url": "https://adnegah.net/", + "companyId": "adnegah" + }, + "adnet": { + "name": "Adnet", + "categoryId": 4, + "url": "http://www.adnet.vn/", + "companyId": "adnet" + }, + "adnet.de": { + "name": "adNET.de", + "categoryId": 4, + "url": "http://www.adnet.de", + "companyId": "adnet.de" + }, + "adnet_media": { + "name": "Adnet Media", + "categoryId": 4, + "url": "http://www.adnetmedia.lt/", + "companyId": "adnet_media" + }, + "adnetwork.net": { + "name": "AdNetwork.net", + "categoryId": 4, + "url": "http://www.adnetwork.net/", + "companyId": "adnetwork.net" + }, + "adnetworkperformance.com": { + "name": "adnetworkperformance.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "adnexio": { + "name": "AdNexio", + "categoryId": 4, + "url": "http://adnexio.com/", + "companyId": "adnexio" + }, + "adnium.com": { + "name": "Adnium", + "categoryId": 4, + "url": "https://adnium.com/", + "companyId": null + }, + "adnologies": { + "name": "Adnologies", + "categoryId": 4, + "url": "http://www.adnologies.com/", + "companyId": "adnologies_gmbh" + }, + "adnow": { + "name": "Adnow", + "categoryId": 4, + "url": "http://adnow.com/", + "companyId": "adnow" + }, + "adnymics": { + "name": "Adnymics", + "categoryId": 4, + "url": "http://adnymics.com/en/", + "companyId": "adnymics" + }, + "adobe_audience_manager": { + "name": "Adobe Audience Manager", + "categoryId": 4, + "url": "http://www.demdex.com/", + "companyId": "adobe" + }, + "adobe_developer": { + "name": "Adobe Developer", + "categoryId": 8, + "url": "https://developer.adobe.com/", + "companyId": "adobe", + "source": "AdGuard" + }, + "adobe_dynamic_media": { + "name": "Adobe Dynamic Media", + "categoryId": 4, + "url": "http://www.adobe.com/", + "companyId": "adobe" + }, + "adobe_dynamic_tag_management": { + "name": "Adobe Dynamic Tag Management", + "categoryId": 5, + "url": "https://dtm.adobe.com/sign_in", + "companyId": "adobe" + }, + "adobe_experience_cloud": { + "name": "Adobe Experience Cloud", + "categoryId": 6, + "url": "https://business.adobe.com/", + "companyId": "adobe", + "source": "AdGuard" + }, + "adobe_experience_league": { + "name": "Adobe Experience League", + "categoryId": 6, + "url": "https://experienceleague.adobe.com/", + "companyId": "adobe", + "source": "AdGuard" + }, + "adobe_login": { + "name": "Adobe Login", + "categoryId": 2, + "url": "https://www.adobe.com/", + "companyId": "adobe" + }, + "adobe_tagmanager": { + "name": "Adobe TagManager", + "categoryId": 4, + "url": "https://www.adobe.com/", + "companyId": "adobe" + }, + "adobe_test_and_target": { + "name": "Adobe Target", + "categoryId": 4, + "url": "https://www.adobe.com/marketing/target.html", + "companyId": "adobe" + }, + "adobe_typekit": { + "name": "Adobe Typekit", + "categoryId": 5, + "url": "https://www.adobe.com/", + "companyId": "adobe" + }, + "adocean": { + "name": "AdOcean", + "categoryId": 4, + "url": "http://adocean.cz/en", + "companyId": "adocean" + }, + "adometry": { + "name": "Adometry", + "categoryId": 4, + "url": "http://www.adometry.com/", + "companyId": "google" + }, + "adomik": { + "name": "Adomik", + "categoryId": 4, + "url": null, + "companyId": null + }, + "adon_network": { + "name": "AdOn Network", + "categoryId": 4, + "url": "http://www.adonnetwork.com/", + "companyId": "adon_network" + }, + "adonion": { + "name": "AdOnion", + "categoryId": 4, + "url": "http://www.adonion.com/", + "companyId": "adonion" + }, + "adonly": { + "name": "AdOnly", + "categoryId": 4, + "url": "https://gloadmarket.com/", + "companyId": "adonly" + }, + "adoperator": { + "name": "AdOperator", + "categoryId": 4, + "url": "http://www.adoperator.com/start/", + "companyId": "adoperator" + }, + "adoric": { + "name": "Adoric", + "categoryId": 6, + "url": "https://adoric.com/", + "companyId": "adoric" + }, + "adorika": { + "name": "Adorika", + "categoryId": 4, + "url": "http://www.adorika.com/", + "companyId": "adorika" + }, + "adosia": { + "name": "Adosia", + "categoryId": 4, + "url": "https://adosia.com", + "companyId": "adosia" + }, + "adotmob.com": { + "name": "Adotmob", + "categoryId": 4, + "url": "https://adotmob.com/", + "companyId": "adotmob" + }, + "adotube": { + "name": "AdoTube", + "categoryId": 4, + "url": "http://www.adotube.com", + "companyId": "exponential_interactive" + }, + "adparlor": { + "name": "AdParlor", + "categoryId": 4, + "url": "http://www.adparlor.com/", + "companyId": "fluent" + }, + "adpartner": { + "name": "adpartner", + "categoryId": 4, + "url": "http://adpartner.pro/", + "companyId": "adpartner" + }, + "adpeeps": { + "name": "Ad Peeps", + "categoryId": 4, + "url": "http://www.adpeeps.com/", + "companyId": "ad_peeps" + }, + "adperfect": { + "name": "AdPerfect", + "categoryId": 4, + "url": "http://www.adperfect.com/", + "companyId": "adperfect" + }, + "adperium": { + "name": "AdPerium", + "categoryId": 4, + "url": "http://www.adperium.com/", + "companyId": "adperium" + }, + "adpilot": { + "name": "AdPilot", + "categoryId": 4, + "url": "http://www.adpilotgroup.com/", + "companyId": "adpilot" + }, + "adplan": { + "name": "AdPlan", + "categoryId": 4, + "url": "http://www.adplan.ne.jp/", + "companyId": "adplan" + }, + "adplus": { + "name": "ADPLUS", + "categoryId": 4, + "url": "http://www.adplus.co.id/", + "companyId": "adplus" + }, + "adprofex": { + "name": "AdProfex", + "categoryId": 4, + "url": "https://adprofex.com/", + "companyId": "adprofex", + "source": "AdGuard" + }, + "adprofy": { + "name": "AdProfy", + "categoryId": 4, + "url": "http://adprofy.com/", + "companyId": "adprofy" + }, + "adpulse": { + "name": "AdPulse", + "categoryId": 4, + "url": "http://adpulse.ir/", + "companyId": "adpulse.ir" + }, + "adpv": { + "name": "Adpv", + "categoryId": 4, + "url": "http://www.adpv.com/", + "companyId": "adpv" + }, + "adreactor": { + "name": "AdReactor", + "categoryId": 4, + "url": "http://www.adreactor.com/", + "companyId": "adreactor" + }, + "adrecord": { + "name": "Adrecord", + "categoryId": 4, + "url": "http://www.adrecord.com/", + "companyId": "adrecord" + }, + "adrecover": { + "name": "AdRecover", + "categoryId": 4, + "url": "https://www.adrecover.com/", + "companyId": "adpushup" + }, + "adresult": { + "name": "ADResult", + "categoryId": 4, + "url": "http://www.adresult.jp/", + "companyId": "adresult" + }, + "adriver": { + "name": "AdRiver", + "categoryId": 4, + "url": "http://www.adriver.ru/", + "companyId": "ad_river" + }, + "adroll": { + "name": "AdRoll", + "categoryId": 4, + "url": "https://www.adroll.com/", + "companyId": "adroll" + }, + "adroll_pixel": { + "name": "AdRoll Pixel", + "categoryId": 4, + "url": "https://www.adroll.com/", + "companyId": "adroll" + }, + "adroll_roundtrip": { + "name": "AdRoll Roundtrip", + "categoryId": 4, + "url": "https://www.adroll.com/", + "companyId": "adroll" + }, + "adrom": { + "name": "adRom", + "categoryId": 4, + "url": "http://www.adrom.net/", + "companyId": null + }, + "adru.net": { + "name": "adru.net", + "categoryId": 4, + "url": "http://adru.net/", + "companyId": "adru.net" + }, + "adrunnr": { + "name": "AdRunnr", + "categoryId": 4, + "url": "https://adrunnr.com/", + "companyId": "adrunnr" + }, + "adsame": { + "name": "Adsame", + "categoryId": 4, + "url": "http://adsame.com/", + "companyId": "adsame" + }, + "adsbookie": { + "name": "AdsBookie", + "categoryId": 4, + "url": "http://adsbookie.com/", + "companyId": null + }, + "adscale": { + "name": "AdScale", + "categoryId": 4, + "url": "http://www.adscale.de/", + "companyId": "stroer" + }, + "adscience": { + "name": "Adscience", + "categoryId": 4, + "url": "http://www.adscience.nl/", + "companyId": "adscience" + }, + "adsco.re": { + "name": "Adscore", + "categoryId": 4, + "url": "https://www.adscore.com/", + "companyId": null + }, + "adsensecamp": { + "name": "AdsenseCamp", + "categoryId": 4, + "url": "http://adsensecamp.com", + "companyId": "adsensecamp" + }, + "adserverpub": { + "name": "AdServerPub", + "categoryId": 4, + "url": "http://www.adserverpub.com/", + "companyId": "adserverpub" + }, + "adservice_media": { + "name": "Adservice Media", + "categoryId": 4, + "url": "http://www.adservicemedia.com/", + "companyId": "adservice_media" + }, + "adsfactor": { + "name": "Adsfactor", + "categoryId": 4, + "url": "http://www.adsfactor.com/", + "companyId": "pixels_asia" + }, + "adside": { + "name": "AdSide", + "categoryId": 4, + "url": "http://www.adside.com/", + "companyId": "adside" + }, + "adskeeper": { + "name": "AdsKeeper", + "categoryId": 4, + "url": "http://adskeeper.co.uk/", + "companyId": "adskeeper" + }, + "adskom": { + "name": "ADSKOM", + "categoryId": 4, + "url": "http://adskom.com/", + "companyId": "adskom" + }, + "adslot": { + "name": "Adslot", + "categoryId": 4, + "url": "http://www.adslot.com/", + "companyId": "adslot" + }, + "adsnative": { + "name": "adsnative", + "categoryId": 4, + "url": "http://www.adsnative.com/", + "companyId": "adsnative" + }, + "adsniper.ru": { + "name": "AdSniper", + "categoryId": 4, + "url": "http://ad-sniper.com/", + "companyId": "adsniper" + }, + "adspeed": { + "name": "AdSpeed", + "categoryId": 4, + "url": "http://www.adspeed.com/", + "companyId": "adspeed" + }, + "adspyglass": { + "name": "AdSpyglass", + "categoryId": 4, + "url": "https://www.adspyglass.com/", + "companyId": "adspyglass" + }, + "adstage": { + "name": "AdStage", + "categoryId": 4, + "url": "http://www.adstage.io/", + "companyId": "adstage" + }, + "adstanding": { + "name": "AdStanding", + "categoryId": 4, + "url": "http://www.adstanding.com/en/", + "companyId": "adstanding" + }, + "adstars": { + "name": "Adstars", + "categoryId": 4, + "url": "http://adstars.co.id", + "companyId": "adstars" + }, + "adstir": { + "name": "adstir", + "categoryId": 4, + "url": "https://en.ad-stir.com/", + "companyId": "united_inc" + }, + "adsupply": { + "name": "AdSupply", + "categoryId": 4, + "url": "http://www.adsupply.com/", + "companyId": "adsupply" + }, + "adswizz": { + "name": "AdsWizz", + "categoryId": 4, + "url": "http://www.adswizz.com/", + "companyId": "adswizz" + }, + "adtaily": { + "name": "AdTaily", + "categoryId": 4, + "url": "http://www.adtaily.pl/", + "companyId": "adtaily" + }, + "adtarget.me": { + "name": "Adtarget.me", + "categoryId": 4, + "url": "http://www.adtarget.me/", + "companyId": "adtarget.me" + }, + "adtech": { + "name": "ADTECH", + "categoryId": 6, + "url": "http://www.adtechus.com/", + "companyId": "verizon" + }, + "adtegrity": { + "name": "Adtegrity", + "categoryId": 4, + "url": "http://www.adtegrity.com/", + "companyId": "adtegrity" + }, + "adtelligence.de": { + "name": "Adtelligence", + "categoryId": 4, + "url": "https://adtelligence.com/", + "companyId": null + }, + "adtheorent": { + "name": "Adtheorent", + "categoryId": 4, + "url": "http://adtheorent.com/", + "companyId": "adtheorant" + }, + "adthink": { + "name": "Adthink", + "categoryId": 4, + "url": "https://adthink.com/", + "companyId": "adthink" + }, + "adtiger": { + "name": "AdTiger", + "categoryId": 4, + "url": "http://www.adtiger.de/", + "companyId": "adtiger" + }, + "adtima": { + "name": "Adtima", + "categoryId": 4, + "url": "http://adtima.vn/", + "companyId": "adtima" + }, + "adtng.com": { + "name": "adtng.com", + "categoryId": 3, + "url": null, + "companyId": null + }, + "adtoma": { + "name": "Adtoma", + "categoryId": 4, + "url": "http://www.adtoma.com/", + "companyId": "adtoma" + }, + "adtr02.com": { + "name": "adtr02.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "adtraction": { + "name": "Adtraction", + "categoryId": 4, + "url": "http://adtraction.com/", + "companyId": "adtraction" + }, + "adtraxx": { + "name": "AdTraxx", + "categoryId": 4, + "url": "https://www1.adtraxx.de/", + "companyId": "adtrax" + }, + "adtriba.com": { + "name": "AdTriba", + "categoryId": 6, + "url": "https://www.adtriba.com/", + "companyId": null + }, + "adtrue": { + "name": "Adtrue", + "categoryId": 4, + "url": "http://adtrue.com/", + "companyId": "adtrue" + }, + "adtrustmedia": { + "name": "AdTrustMedia", + "categoryId": 4, + "url": "https://adtrustmedia.com/", + "companyId": "adtrustmedia" + }, + "adtube": { + "name": "AdTube", + "categoryId": 4, + "url": "http://adtube.ir/", + "companyId": "adtube" + }, + "adult_webmaster_empire": { + "name": "Adult Webmaster Empire", + "categoryId": 3, + "url": "http://www.awempire.com/", + "companyId": "adult_webmaster_empire" + }, + "adultadworld": { + "name": "AdultAdWorld", + "categoryId": 3, + "url": "http://adultadworld.com/", + "companyId": "adult_adworld" + }, + "adup-tech.com": { + "name": "AdUp Technology", + "categoryId": 4, + "url": "https://www.adup-tech.com/", + "companyId": "adup_technology" + }, + "advaction": { + "name": "Advaction", + "categoryId": 4, + "url": "http://advaction.ru/", + "companyId": "advaction" + }, + "advalo": { + "name": "Advalo", + "categoryId": 4, + "url": "https://www.advalo.com", + "companyId": "advalo" + }, + "advanced_hosters": { + "name": "Advanced Hosters", + "categoryId": 9, + "url": "https://advancedhosters.com/", + "companyId": null + }, + "advark": { + "name": "Advark", + "categoryId": 4, + "url": "https://advarkads.com/", + "companyId": "advark" + }, + "adventori": { + "name": "ADventori", + "categoryId": 8, + "url": "https://www.adventori.com/", + "companyId": "adventori" + }, + "adverline": { + "name": "Adverline", + "categoryId": 4, + "url": "http://www.adverline.com/", + "companyId": "adverline" + }, + "adversal": { + "name": "Adversal", + "categoryId": 4, + "url": "https://www.adversal.com/", + "companyId": "adversal" + }, + "adverserve": { + "name": "adverServe", + "categoryId": 4, + "url": "http://www.adverserve.com/", + "companyId": "adverserve" + }, + "adverteerdirect": { + "name": "Adverteerdirect", + "categoryId": 4, + "url": "http://www.adverteerdirect.nl/", + "companyId": "adverteerdirect" + }, + "adverticum": { + "name": "Adverticum", + "categoryId": 4, + "url": "https://adverticum.net/english/", + "companyId": "adverticum" + }, + "advertise.com": { + "name": "Advertise.com", + "categoryId": 4, + "url": "http://advertise.com/", + "companyId": "advertise.com" + }, + "advertisespace": { + "name": "AdvertiseSpace", + "categoryId": 4, + "url": "http://www.advertisespace.com/", + "companyId": "advertisespace" + }, + "advertising.com": { + "name": "Verizon Media", + "categoryId": 4, + "url": "https://www.verizonmedia.com/", + "companyId": "verizon" + }, + "advertlets": { + "name": "Advertlets", + "categoryId": 4, + "url": "http://www.advertlets.com/", + "companyId": "advertlets" + }, + "advertserve": { + "name": "AdvertServe", + "categoryId": 4, + "url": "https://secure.advertserve.com/", + "companyId": "advertserve" + }, + "advidi": { + "name": "Advidi", + "categoryId": 4, + "url": "http://advidi.com/", + "companyId": "advidi" + }, + "advmaker.ru": { + "name": "advmaker.ru", + "categoryId": 4, + "url": "http://advmaker.ru/", + "companyId": "advmaker.ru" + }, + "advolution": { + "name": "Advolution", + "categoryId": 4, + "url": "http://www.advolution.de", + "companyId": "advolution" + }, + "adwebster": { + "name": "adwebster", + "categoryId": 4, + "url": "http://adwebster.com", + "companyId": "adwebster" + }, + "adwit": { + "name": "Adwit", + "categoryId": 4, + "url": "http://www.adwitserver.com", + "companyId": "adwit" + }, + "adworx.at": { + "name": "ADworx", + "categoryId": 4, + "url": "http://www.adworx.at/", + "companyId": "ors" + }, + "adworxs.net": { + "name": "adworxs.net", + "categoryId": 4, + "url": "http://www.adworxs.net/?lang=en", + "companyId": null + }, + "adxion": { + "name": "adXion", + "categoryId": 4, + "url": "http://www.adxion.com", + "companyId": "adxion" + }, + "adxpansion": { + "name": "AdXpansion", + "categoryId": 3, + "url": "http://www.adxpansion.com/", + "companyId": "adxpansion" + }, + "adxpose": { + "name": "AdXpose", + "categoryId": 4, + "url": "http://www.adxpose.com/home.page", + "companyId": "comscore" + }, + "adxprtz.com": { + "name": "adxprtz.com", + "categoryId": 4, + "url": null, + "companyId": null + }, + "adyoulike": { + "name": "Adyoulike", + "categoryId": 4, + "url": "http://www.adyoulike.com/", + "companyId": "adyoulike" + }, + "adzerk": { + "name": "Adzerk", + "categoryId": 4, + "url": "http://adzerk.com/", + "companyId": "adzerk" + }, + "adzly": { + "name": "adzly", + "categoryId": 4, + "url": "http://www.adzly.com/", + "companyId": "adzly" + }, + "aemediatraffic": { + "name": "Aemediatraffic", + "categoryId": 6, + "url": null, + "companyId": null + }, + "aerify_media": { + "name": "Aerify Media", + "categoryId": 4, + "url": "http://aerifymedia.com/", + "companyId": "aerify_media" + }, + "aeris_weather": { + "name": "Aeris Weather", + "categoryId": 2, + "url": "https://www.aerisweather.com/", + "companyId": "aerisweather" + }, + "affectv": { + "name": "Hybrid Theory", + "categoryId": 4, + "url": "https://hybridtheory.com/", + "companyId": "affectv" + }, + "affilbox": { + "name": "Affilbox", + "categoryId": 4, + "url": "https://affilbox.com/", + "companyId": "affilbox", + "source": "AdGuard" + }, + "affiliate-b": { + "name": "Affiliate-B", + "categoryId": 4, + "url": "https://www.affiliate-b.com/", + "companyId": "affiliate_b" + }, + "affiliate4you": { + "name": "Affiliate4You", + "categoryId": 4, + "url": "http://www.affiliate4you.nl/", + "companyId": "family_blend" + }, + "affiliatebuzz": { + "name": "AffiliateBuzz", + "categoryId": 4, + "url": "http://www.affiliatebuzz.com/", + "companyId": "affiliatebuzz" + }, + "affiliatefuture": { + "name": "AffiliateFuture", + "categoryId": 4, + "url": "http://www.affiliatefuture.com", + "companyId": "affiliatefuture" + }, + "affiliatelounge": { + "name": "AffiliateLounge", + "categoryId": 4, + "url": "http://www.affiliatelounge.com/", + "companyId": "betsson_group_affiliates" + }, + "affiliation_france": { + "name": "Affiliation France", + "categoryId": 4, + "url": "http://www.affiliation-france.com/", + "companyId": "affiliation-france" + }, + "affiliator": { + "name": "Affiliator", + "categoryId": 4, + "url": "http://www.affiliator.com/", + "companyId": "affiliator" + }, + "affiliaweb": { + "name": "Affiliaweb", + "categoryId": 4, + "url": "http://affiliaweb.fr/", + "companyId": "affiliaweb" + }, + "affilinet": { + "name": "affilinet", + "categoryId": 4, + "url": "https://www.affili.net/", + "companyId": "axel_springer" + }, + "affimax": { + "name": "AffiMax", + "categoryId": 4, + "url": "https://www.affimax.de", + "companyId": "affimax" + }, + "affinity": { + "name": "Affinity", + "categoryId": 4, + "url": "http://www.affinity.com/", + "companyId": "affinity" + }, + "affinity.by": { + "name": "Affinity.by", + "categoryId": 4, + "url": "http://affinity.by", + "companyId": "affinity_digital_agency" + }, + "affiz_cpm": { + "name": "Affiz CPM", + "categoryId": 4, + "url": "http://cpm.affiz.com/home", + "companyId": "affiz_cpm" + }, + "afftrack": { + "name": "Afftrack", + "categoryId": 6, + "url": "http://www.afftrack.com/", + "companyId": "afftrack" + }, + "afgr2.com": { + "name": "afgr2.com", + "categoryId": 3, + "url": null, + "companyId": null + }, + "afilio": { + "name": "Afilio", + "categoryId": 6, + "url": "http://afilio.com.br/", + "companyId": "afilio" + }, + "afs_analystics": { + "name": "AFS Analystics", + "categoryId": 6, + "url": "https://www.afsanalytics.com/", + "companyId": "afs_analytics" + }, + "aftonbladet_ads": { + "name": "Aftonbladet Ads", + "categoryId": 4, + "url": "http://annonswebb.aftonbladet.se/", + "companyId": "aftonbladet" + }, + "aftv-serving.bid": { + "name": "aftv-serving.bid", + "categoryId": 4, + "url": null, + "companyId": null + }, + "aggregate_knowledge": { + "name": "Aggregate Knowledge", + "categoryId": 4, + "url": "http://www.aggregateknowledge.com/", + "companyId": "neustar" + }, + "agilone": { + "name": "AgilOne", + "categoryId": 6, + "url": "http://www.agilone.com/", + "companyId": "agilone" + }, + "agora": { + "name": "Agora", + "categoryId": 4, + "url": "https://www.agora.pl/", + "companyId": "agora_sa" + }, + "ahalogy": { + "name": "Ahalogy", + "categoryId": 7, + "url": "http://www.ahalogy.com/", + "companyId": "ahalogy" + }, + "ai_media_group": { + "name": "Ai Media Group", + "categoryId": 4, + "url": "http://aimediagroup.com/", + "companyId": "ai_media_group" + }, + "aidata": { + "name": "Aidata", + "categoryId": 4, + "url": "http://aidata.me/", + "companyId": "aidata" + }, + "aim4media": { + "name": "Aim4Media", + "categoryId": 4, + "url": "http://aim4media.com", + "companyId": "aim4media" + }, + "airbnb": { + "name": "Airbnb", + "categoryId": 6, + "url": "https://affiliate.withairbnb.com/", + "companyId": null + }, + "airbrake": { + "name": "Airbrake", + "categoryId": 4, + "url": "https://airbrake.io/", + "companyId": "airbrake" + }, + "airpr.com": { + "name": "AirPR", + "categoryId": 6, + "url": "https://airpr.com/", + "companyId": "airpr" + }, + "airpush": { + "name": "Airpush", + "categoryId": 4, + "url": "http://www.airpush.com/", + "companyId": "airpush" + }, + "akamai_technologies": { + "name": "Akamai Technologies", + "categoryId": 9, + "url": "https://www.akamai.com/", + "companyId": "akamai", + "source": "AdGuard" + }, + "akamoihd.net": { + "name": "akamoihd.net", + "categoryId": 12, + "url": null, + "companyId": null + }, + "akane": { + "name": "AkaNe", + "categoryId": 4, + "url": "http://akane-ad.com/", + "companyId": "akane" + }, + "akanoo": { + "name": "Akanoo", + "categoryId": 6, + "url": "http://www.akanoo.com/", + "companyId": "akanoo" + }, + "akavita": { + "name": "Akavita", + "categoryId": 4, + "url": "http://www.akavita.by/en", + "companyId": "akavita" + }, + "al_bawaba_advertising": { + "name": "Al Bawaba Advertising", + "categoryId": 4, + "url": "http://www.albawaba.com/advertising", + "companyId": "al_bawaba" + }, + "albacross": { + "name": "Albacross", + "categoryId": 4, + "url": "https://albacross.com", + "companyId": "albacross" + }, + "aldi-international.com": { + "name": "aldi-international.com", + "categoryId": 8, + "url": null, + "companyId": null + }, + "alenty": { + "name": "Alenty", + "categoryId": 4, + "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", + "companyId": "microsoft", + "source": "AdGuard" + }, + "alephd.com": { + "name": "alephd", + "categoryId": 4, + "url": "https://www.alephd.com/", + "companyId": "verizon" + }, + "alexa_metrics": { + "name": "Alexa Metrics", + "categoryId": 6, + "url": "http://www.alexa.com/", + "companyId": "amazon_associates" + }, + "alexa_traffic_rank": { + "name": "Alexa Traffic Rank", + "categoryId": 4, + "url": "http://www.alexa.com/", + "companyId": "amazon_associates" + }, + "algolia.net": { + "name": "algolia", + "categoryId": 4, + "url": "https://www.algolia.com/", + "companyId": null + }, + "algovid.com": { + "name": "algovid.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "alibaba.com": { + "name": "Alibaba", + "categoryId": 8, + "url": "http://www.alibaba.com/", + "companyId": "softbank", + "source": "AdGuard" + }, + "alibaba_cloud": { + "name": "Alibaba Cloud", + "categoryId": 10, + "url": "https://www.alibabacloud.com/", + "companyId": "softbank", + "source": "AdGuard" + }, + "alibaba_ucbrowser": { + "name": "UC Browser", + "categoryId": 8, + "url": "https://ucweb.com/", + "companyId": "softbank", + "source": "AdGuard" + }, + "alipay.com": { + "name": "Alipay", + "categoryId": 2, + "url": "https://global.alipay.com/", + "companyId": "softbank", + "source": "AdGuard" + }, + "alivechat": { + "name": "AliveChat", + "categoryId": 2, + "url": "http://www.websitealive.com/", + "companyId": "websitealive" + }, + "allegro.pl": { + "name": "Allegro", + "categoryId": 8, + "url": "https://allegro.pl", + "companyId": "allegro.pl" + }, + "allin": { + "name": "Allin", + "categoryId": 6, + "url": "http://allin.com.br/", + "companyId": "allin" + }, + "allo-pages.fr": { + "name": "Allo-Pages", + "categoryId": 2, + "url": "http://www.allo-pages.fr/", + "companyId": "links_lab" + }, + "allotraffic": { + "name": "AlloTraffic", + "categoryId": 4, + "url": "http://www.allotraffic.com/", + "companyId": "allotraffic" + }, + "allure_media": { + "name": "Allure Media", + "categoryId": 4, + "url": "http://www.alluremedia.com.au", + "companyId": "allure_media" + }, + "allyes": { + "name": "Allyes", + "categoryId": 4, + "url": "http://www.allyes.com/", + "companyId": "allyes" + }, + "alooma": { + "name": "Alooma", + "categoryId": 4, + "url": "https://www.alooma.com/", + "companyId": "alooma" + }, + "altitude_digital": { + "name": "Altitude Digital", + "categoryId": 4, + "url": "http://www.altitudedigital.com/", + "companyId": "altitude_digital" + }, + "amadesa": { + "name": "Amadesa", + "categoryId": 4, + "url": "http://www.amadesa.com/", + "companyId": "amadesa" + }, + "amap": { + "name": "Amap", + "categoryId": 2, + "url": "https://www.amap.com/", + "companyId": "softbank", + "source": "AdGuard" + }, + "amazon": { + "name": "Amazon.com", + "categoryId": 8, + "url": "https://www.amazon.com", + "companyId": "amazon_associates" + }, + "amazon_adsystem": { + "name": "Amazon Advertising", + "categoryId": 4, + "url": "https://advertising.amazon.com/", + "companyId": "amazon_associates" + }, + "amazon_associates": { + "name": "Amazon Associates", + "categoryId": 4, + "url": "http://aws.amazon.com/associates/", + "companyId": "amazon_associates" + }, + "amazon_cdn": { + "name": "Amazon CDN", + "categoryId": 9, + "url": "https://www.amazon.com", + "companyId": "amazon_associates" + }, + "amazon_cloudfront": { + "name": "Amazon CloudFront", + "categoryId": 10, + "url": "https://aws.amazon.com/cloudfront/?nc1=h_ls", + "companyId": "amazon_associates" + }, + "amazon_mobile_ads": { + "name": "Amazon Mobile Ads", + "categoryId": 4, + "url": "http://www.amazon.com/", + "companyId": "amazon_associates" + }, + "amazon_payments": { + "name": "Amazon Payments", + "categoryId": 2, + "url": "https://pay.amazon.com/", + "companyId": "amazon_associates" + }, + "amazon_video": { + "name": "Amazon Instant Video", + "categoryId": 0, + "url": "https://www.amazon.com", + "companyId": "amazon_associates" + }, + "amazon_web_services": { + "name": "Amazon Web Services", + "categoryId": 10, + "url": "https://aws.amazon.com/", + "companyId": "amazon_associates" + }, + "ambient_digital": { + "name": "Ambient Digital", + "categoryId": 4, + "url": "http://www.adnetwork.vn/", + "companyId": "ambient_digital" + }, + "amgload.net": { + "name": "amgload.net", + "categoryId": 11, + "url": null, + "companyId": null + }, + "amoad": { + "name": "AMoAd", + "categoryId": 4, + "url": "http://www.amoad.com/", + "companyId": "amoad" + }, + "amobee": { + "name": "Amobee", + "categoryId": 4, + "url": "https://www.amobee.com/", + "companyId": "singtel" + }, + "amp_platform": { + "name": "AMP Platform", + "categoryId": 4, + "url": "http://www.collective.com/", + "companyId": "collective" + }, + "amplitude": { + "name": "Amplitude", + "categoryId": 6, + "url": "https://amplitude.com/", + "companyId": "amplitude" + }, + "ampproject.org": { + "name": "AMP Project", + "categoryId": 8, + "url": "https://www.ampproject.org/", + "companyId": "google" + }, + "anametrix": { + "name": "Anametrix", + "categoryId": 6, + "url": "http://anametrix.com/", + "companyId": "anametrix" + }, + "ancestry_cdn": { + "name": "Ancestry CDN", + "categoryId": 9, + "url": "https://www.ancestry.com/", + "companyId": "ancestry" + }, + "ancora": { + "name": "Ancora", + "categoryId": 6, + "url": "http://www.ancoramediasolutions.com/", + "companyId": "ancora" + }, + "anetwork": { + "name": "Anetwork", + "categoryId": 4, + "url": "http://anetwork.ir/", + "companyId": "anetwork" + }, + "aniview.com": { + "name": "AniView", + "categoryId": 4, + "url": "https://www.aniview.com/", + "companyId": null + }, + "anonymousads": { + "name": "AnonymousAds", + "categoryId": 4, + "url": "https://a-ads.com/", + "companyId": "anonymousads" + }, + "anormal_tracker": { + "name": "Anormal Tracker", + "categoryId": 6, + "url": "http://anormal-tracker.de/", + "companyId": "anormal-tracker" + }, + "answers_cloud_service": { + "name": "Answers Cloud Service", + "categoryId": 1, + "url": "http://www.answers.com/", + "companyId": "answers.com" + }, + "ants": { + "name": "Ants", + "categoryId": 7, + "url": "http://ants.vn/en/", + "companyId": "ants" + }, + "anvato": { + "name": "Anvato", + "categoryId": 0, + "url": "https://www.anvato.com/", + "companyId": "google" + }, + "anyclip": { + "name": "AnyClip", + "categoryId": 0, + "url": "https://anyclip.com", + "companyId": "anyclip" + }, + "aol_be_on": { + "name": "AOL Be On", + "categoryId": 4, + "url": "http://beon.aolnetworks.com/", + "companyId": "verizon" + }, + "aol_cdn": { + "name": "AOL CDN", + "categoryId": 6, + "url": "https://www.verizon.com/", + "companyId": "verizon" + }, + "aol_images_cdn": { + "name": "AOL Images CDN", + "categoryId": 5, + "url": "https://www.verizon.com/", + "companyId": "verizon" + }, + "apa.at": { + "name": "Apa", + "categoryId": 8, + "url": "http://www.apa.at/Site/index.de.html", + "companyId": "apa" + }, + "apester": { + "name": "Apester", + "categoryId": 4, + "url": "http://apester.com/", + "companyId": "apester" + }, + "apicit.net": { + "name": "apicit.net", + "categoryId": 4, + "url": null, + "companyId": null + }, + "aplus_analytics": { + "name": "Aplus Analytics", + "categoryId": 6, + "url": "https://ww.deluxe.com/", + "companyId": "deluxe" + }, + "appcenter": { + "name": "Microsoft App Center", + "categoryId": 5, + "url": "https://appcenter.ms/", + "companyId": "microsoft", + "source": "AdGuard" + }, + "appcues": { + "name": "Appcues", + "categoryId": 2, + "url": "https://www.appcues.com/", + "companyId": null + }, + "appdynamics": { + "name": "AppDynamics", + "categoryId": 6, + "url": "http://www.appdynamics.com", + "companyId": "appdynamics" + }, + "appier": { + "name": "Appier", + "categoryId": 4, + "url": "http://www.appier.com/en/index.html", + "companyId": "appier" + }, + "apple": { + "name": "Apple", + "categoryId": 8, + "url": "https://www.apple.com/", + "companyId": "apple", + "source": "AdGuard" + }, + "apple_ads": { + "name": "Apple Search Ads", + "categoryId": 4, + "url": "https://searchads.apple.com/", + "companyId": "apple", + "source": "AdGuard" + }, + "applifier": { + "name": "Applifier", + "categoryId": 4, + "url": "http://www.applifier.com/", + "companyId": "applifier" + }, + "applovin": { + "name": "AppLovin", + "categoryId": 4, + "url": "https://www.applovin.com", + "companyId": "applovin" + }, + "appmetrx": { + "name": "AppMetrx", + "categoryId": 4, + "url": "http://www.engago.com", + "companyId": "engago_technologies" + }, + "appnexus": { + "name": "AppNexus", + "categoryId": 4, + "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", + "companyId": "microsoft", + "source": "AdGuard" + }, + "appsflyer": { + "name": "AppsFlyer", + "categoryId": 101, + "url": "https://www.appsflyer.com/", + "companyId": "appsflyer", + "source": "AdGuard" + }, + "apptv": { + "name": "appTV", + "categoryId": 4, + "url": "http://www.apptv.com/", + "companyId": "apptv" + }, + "apture": { + "name": "Apture", + "categoryId": 2, + "url": "http://www.apture.com/", + "companyId": "google" + }, + "arcpublishing": { + "name": "Arc Publishing", + "categoryId": 6, + "url": "https://www.arcpublishing.com/", + "companyId": "arc_publishing" + }, + "ard.de": { + "name": "ard.de", + "categoryId": 0, + "url": null, + "companyId": null + }, + "are_you_a_human": { + "name": "Are You a Human", + "categoryId": 6, + "url": "https://areyouahuman.com/", + "companyId": "distil_networks" + }, + "arkoselabs.com": { + "name": "Arkose Labs", + "categoryId": 6, + "url": "https://www.arkoselabs.com/", + "companyId": null + }, + "art19": { + "name": "Art19", + "categoryId": 4, + "url": "https://art19.com/", + "companyId": "art19" + }, + "artimedia": { + "name": "Artimedia", + "categoryId": 4, + "url": "http://arti-media.net/en/", + "companyId": "artimedia" + }, + "artlebedev.ru": { + "name": "Art.Lebedev", + "categoryId": 8, + "url": "https://www.artlebedev.ru/", + "companyId": "art.lebedev_studio" + }, + "aruba_media_marketing": { + "name": "Aruba Media Marketing", + "categoryId": 4, + "url": "http://www.arubamediamarketing.it/", + "companyId": "aruba_media_marketing" + }, + "arvato_canvas_fp": { + "name": "Arvato Canvas FP", + "categoryId": 6, + "url": "https://www.arvato.com/", + "companyId": "arvato" + }, + "asambeauty.com": { + "name": "asambeauty.com", + "categoryId": 8, + "url": "https://www.asambeauty.com/", + "companyId": null + }, + "ask.com": { + "name": "Ask.com", + "categoryId": 7, + "url": null, + "companyId": null + }, + "aspnetcdn": { + "name": "Microsoft Ajax CDN", + "categoryId": 9, + "url": "https://www.microsoft.com/", + "companyId": "microsoft" + }, + "assemblyexchange": { + "name": "Assembly Exchange", + "categoryId": 4, + "url": "https://www.medialab.la/", + "companyId": "medialab", + "source": "AdGuard" + }, + "astronomer": { + "name": "Astronomer", + "categoryId": 6, + "url": "https://www.astronomer.io", + "companyId": "astronomer" + }, + "at_internet": { + "name": "AT Internet", + "categoryId": 6, + "url": "http://www.xiti.com/", + "companyId": "at_internet" + }, + "atedra": { + "name": "Atedra", + "categoryId": 4, + "url": "http://www.atedra.com/", + "companyId": "atedra" + }, + "atg_group": { + "name": "ATG Ad Tech Group", + "categoryId": 4, + "url": "https://ad-tech-group.com/", + "companyId": null + }, + "atg_optimization": { + "name": "ATG Optimization", + "categoryId": 4, + "url": "http://www.atg.com/en/products-services/optimization/", + "companyId": "oracle" + }, + "atg_recommendations": { + "name": "ATG Recommendations", + "categoryId": 4, + "url": "http://www.atg.com/en/products-services/optimization/recommendations/", + "companyId": "oracle" + }, + "atlas": { + "name": "Atlas", + "categoryId": 4, + "url": "https://atlassolutions.com", + "companyId": "facebook" + }, + "atlas_profitbuilder": { + "name": "Atlas ProfitBuilder", + "categoryId": 4, + "url": "http://www.atlassolutions.com/", + "companyId": "atlas" + }, + "atlassian.net": { + "name": "Atlassian", + "categoryId": 2, + "url": "https://www.atlassian.com/", + "companyId": "atlassian" + }, + "atlassian_marketplace": { + "name": "Atlassian Marketplace", + "categoryId": 9, + "url": "https://marketplace.atlassian.com/", + "companyId": "atlassian" + }, + "atomz_search": { + "name": "Atomz Search", + "categoryId": 2, + "url": "http://atomz.com/", + "companyId": "atomz" + }, + "atsfi_de": { + "name": "atsfi.de", + "categoryId": 11, + "url": "http://www.axelspringer.de/en/index.html", + "companyId": "axel_springer" + }, + "attracta": { + "name": "Attracta", + "categoryId": 4, + "url": "http://www.attracta.com/", + "companyId": "attracta" + }, + "attraqt": { + "name": "Attraqt", + "categoryId": 6, + "url": "http://www.locayta.com/", + "companyId": "attraqt" + }, + "audience2media": { + "name": "Audience2Media", + "categoryId": 4, + "url": "http://www.audience2media.com/", + "companyId": "audience2media" + }, + "audience_ad_network": { + "name": "Audience Ad Network", + "categoryId": 4, + "url": "http://www.audienceadnetwork.com", + "companyId": "bridgeline_digital" + }, + "audience_science": { + "name": "Audience Science", + "categoryId": 4, + "url": "http://www.audiencescience.com/", + "companyId": "audiencescience" + }, + "audiencerate": { + "name": "AudienceRate", + "categoryId": 4, + "url": "http://www.audiencerate.com/", + "companyId": "audiencerate" + }, + "audiencesquare.com": { + "name": "Audience Square", + "categoryId": 4, + "url": "http://www.audiencesquare.fr/", + "companyId": "audience_square" + }, + "auditude": { + "name": "Auditude", + "categoryId": 0, + "url": "http://www.auditude.com/", + "companyId": "adobe" + }, + "audtd.com": { + "name": "Auditorius", + "categoryId": 4, + "url": "http://www.auditorius.ru/", + "companyId": "auditorius" + }, + "augur": { + "name": "Augur", + "categoryId": 6, + "url": "https://www.augur.io/", + "companyId": "augur" + }, + "aumago": { + "name": "Aumago", + "categoryId": 4, + "url": "http://www.aumago.com/", + "companyId": "aumago" + }, + "aurea_clicktracks": { + "name": "Aurea ClickTracks", + "categoryId": 4, + "url": "http://www.clicktracks.com/", + "companyId": "aurea" + }, + "ausgezeichnet_org": { + "name": "ausgezeichnet.org", + "categoryId": 2, + "url": "http://ausgezeichnet.org/", + "companyId": null + }, + "australia.gov": { + "name": "Australia.gov", + "categoryId": 4, + "url": "http://www.australia.gov.au/", + "companyId": "australian_government" + }, + "auth0": { + "name": "Auth0 Inc.", + "categoryId": 6, + "url": "https://auth0.com/", + "companyId": "auth0" + }, + "autoid": { + "name": "AutoID", + "categoryId": 6, + "url": "http://www.autoid.com/", + "companyId": "autoid" + }, + "autonomy": { + "name": "Autonomy", + "categoryId": 4, + "url": "http://www.optimost.com/", + "companyId": "hp" + }, + "autonomy_campaign": { + "name": "Autonomy Campaign", + "categoryId": 4, + "url": "http://www.autonomy.com/", + "companyId": "hp" + }, + "autopilothq": { + "name": "Auto Pilot", + "categoryId": 4, + "url": "https://www.autopilothq.com/", + "companyId": "autopilothq" + }, + "autoscout24.com": { + "name": "Autoscout24", + "categoryId": 8, + "url": "http://www.scout24.com/", + "companyId": "scout24" + }, + "avail": { + "name": "Avail", + "categoryId": 4, + "url": "http://avail.com", + "companyId": "richrelevance" + }, + "avanser": { + "name": "AVANSER", + "categoryId": 2, + "url": "http://www.avanser.com.au/", + "companyId": "avanser" + }, + "avant_metrics": { + "name": "Avant Metrics", + "categoryId": 6, + "url": "http://www.avantlink.com/", + "companyId": "avantlink" + }, + "avantlink": { + "name": "AvantLink", + "categoryId": 4, + "url": "http://www.avantlink.com/", + "companyId": "avantlink" + }, + "avazu_network": { + "name": "Avazu Network", + "categoryId": 4, + "url": "http://www.avazudsp.net/", + "companyId": "avazu_network" + }, + "avenseo": { + "name": "Avenseo", + "categoryId": 4, + "url": "http://avenseo.com", + "companyId": "avenseo" + }, + "avid_media": { + "name": "Avid Media", + "categoryId": 0, + "url": "http://www.avidglobalmedia.com/", + "companyId": "avid_media" + }, + "avocet": { + "name": "Avocet", + "categoryId": 8, + "url": "https://avocet.io/", + "companyId": "avocet" + }, + "aweber": { + "name": "AWeber", + "categoryId": 4, + "url": "http://www.aweber.com/", + "companyId": "aweber_communications" + }, + "awin": { + "name": "AWIN", + "categoryId": 4, + "url": "https://www.awin.com", + "companyId": "axel_springer" + }, + "axill": { + "name": "Axill", + "categoryId": 4, + "url": "http://www.axill.com/", + "companyId": "axill" + }, + "azadify": { + "name": "Azadify", + "categoryId": 4, + "url": "http://azadify.com/engage/index.php", + "companyId": "azadify" + }, + "azure": { + "name": "Microsoft Azure", + "categoryId": 10, + "url": "https://azure.microsoft.com/", + "companyId": "microsoft", + "source": "AdGuard" + }, + "azure_blob_storage": { + "name": "Azure Blob Storage", + "categoryId": 8, + "url": "https://azure.microsoft.com/en-us/products/storage/blobs", + "companyId": "microsoft", + "source": "AdGuard" + }, + "azureedge.net": { + "name": "Azure CDN", + "categoryId": 9, + "url": "https://www.microsoft.com/", + "companyId": "microsoft" + }, + "b2bcontext": { + "name": "B2BContext", + "categoryId": 4, + "url": "http://b2bcontext.ru/", + "companyId": "b2bcontext" + }, + "b2bvideo": { + "name": "B2Bvideo", + "categoryId": 4, + "url": "http://b2bvideo.ru/", + "companyId": "b2bvideo" + }, + "babator.com": { + "name": "Babator", + "categoryId": 6, + "url": "https://www.babator.com/", + "companyId": null + }, + "back_beat_media": { + "name": "Back Beat Media", + "categoryId": 4, + "url": "http://www.backbeatmedia.com", + "companyId": "backbeat_media" + }, + "backtype_widgets": { + "name": "BackType Widgets", + "categoryId": 4, + "url": "http://www.backtype.com/widgets", + "companyId": "backtype" + }, + "bahn_de": { + "name": "Deutsche Bahn", + "categoryId": 8, + "url": null, + "companyId": null + }, + "baidu_ads": { + "name": "Baidu Ads", + "categoryId": 4, + "url": "http://www.baidu.com/", + "companyId": "baidu" + }, + "baidu_static": { + "name": "Baidu Static", + "categoryId": 8, + "url": "https://www.baidu.com/", + "companyId": "baidu" + }, + "baletingo.com": { + "name": "baletingo.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "bangdom.com": { + "name": "BangBros", + "categoryId": 3, + "url": null, + "companyId": null + }, + "bankrate": { + "name": "Bankrate", + "categoryId": 4, + "url": "https://www.bankrate.com/", + "companyId": "bankrate" + }, + "banner_connect": { + "name": "Banner Connect", + "categoryId": 4, + "url": "http://www.bannerconnect.net/", + "companyId": "bannerconnect" + }, + "bannerflow.com": { + "name": "Bannerflow", + "categoryId": 4, + "url": "https://www.bannerflow.com/", + "companyId": "bannerflow" + }, + "bannerplay": { + "name": "BannerPlay", + "categoryId": 4, + "url": "http://www.bannerplay.com/", + "companyId": "bannerplay" + }, + "bannersnack": { + "name": "Bannersnack", + "categoryId": 4, + "url": "http://www.bannersnack.com/", + "companyId": "bannersnack" + }, + "barilliance": { + "name": "Barilliance", + "categoryId": 4, + "url": "http://www.barilliance.com/", + "companyId": "barilliance" + }, + "barometer": { + "name": "Barometer", + "categoryId": 2, + "url": "http://getbarometer.com/", + "companyId": "barometer" + }, + "basilic.io": { + "name": "basilic.io", + "categoryId": 6, + "url": "https://basilic.io/", + "companyId": null + }, + "batanga_network": { + "name": "Batanga Network", + "categoryId": 4, + "url": "http://www.batanganetwork.com/", + "companyId": "batanga_network" + }, + "batch_media": { + "name": "Batch Media", + "categoryId": 4, + "url": "http://batch.ba/", + "companyId": "prosieben_sat1" + }, + "bauer_media": { + "name": "Bauer Media", + "categoryId": 4, + "url": "http://www.bauermedia.com", + "companyId": "bauer_media" + }, + "baur.de": { + "name": "baur.de", + "categoryId": 8, + "url": null, + "companyId": null + }, + "baynote_observer": { + "name": "Baynote Observer", + "categoryId": 4, + "url": "http://www.baynote.com/", + "companyId": "baynote" + }, + "bazaarvoice": { + "name": "Bazaarvoice", + "categoryId": 2, + "url": "http://www.bazaarvoice.com/", + "companyId": "bazaarvoice" + }, + "bbci": { + "name": "BBC", + "categoryId": 10, + "url": "https://bbc.co.uk", + "companyId": null + }, + "bd4travel": { + "name": "bd4travel", + "categoryId": 4, + "url": "https://bd4travel.com/", + "companyId": "bd4travel" + }, + "be_opinion": { + "name": "Be Opinion", + "categoryId": 2, + "url": "http://beopinion.com/", + "companyId": "be_opinion" + }, + "beachfront": { + "name": "Beachfront Media", + "categoryId": 4, + "url": "http://beachfrontmedia.com/", + "companyId": null + }, + "beacon_ad_network": { + "name": "Beacon Ad Network", + "categoryId": 4, + "url": "http://beaconads.com/", + "companyId": "beacon_ad_network" + }, + "beampulse.com": { + "name": "BeamPulse", + "categoryId": 4, + "url": "https://en.beampulse.com/", + "companyId": null + }, + "beanstalk_data": { + "name": "Beanstalk Data", + "categoryId": 4, + "url": "http://www.beanstalkdata.com/", + "companyId": "beanstalk_data" + }, + "bebi": { + "name": "Bebi Media", + "categoryId": 4, + "url": "https://www.bebi.com/", + "companyId": "bebi_media" + }, + "beeketing.com": { + "name": "Beeketing", + "categoryId": 4, + "url": "https://beeketing.com/", + "companyId": "beeketing" + }, + "beeline.ru": { + "name": "Beeline", + "categoryId": 4, + "url": "https://moskva.beeline.ru/", + "companyId": null + }, + "beeswax": { + "name": "Beeswax", + "categoryId": 4, + "url": "http://beeswax.com/", + "companyId": "beeswax" + }, + "beezup": { + "name": "BeezUP", + "categoryId": 4, + "url": "http://www.beezup.co.uk/", + "companyId": "beezup" + }, + "begun": { + "name": "Begun", + "categoryId": 4, + "url": "http://begun.ru/", + "companyId": "begun" + }, + "behavioralengine": { + "name": "BehavioralEngine", + "categoryId": 4, + "url": "http://www.behavioralengine.com/", + "companyId": "behavioralengine" + }, + "belboon_gmbh": { + "name": "belboon GmbH", + "categoryId": 8, + "url": null, + "companyId": null + }, + "belco": { + "name": "Belco", + "categoryId": 2, + "url": "https://www.belco.io/", + "companyId": "belco" + }, + "belstat": { + "name": "BelStat", + "categoryId": 6, + "url": "http://www.belstat.com/", + "companyId": "belstat" + }, + "bemobile.ua": { + "name": "Bemobile", + "categoryId": 10, + "url": "http://bemobile.ua/en/", + "companyId": "bemobile" + }, + "bench_platform": { + "name": "Bench Platform", + "categoryId": 4, + "url": "https://benchplatform.com", + "companyId": "bench_platform" + }, + "betterttv": { + "name": "BetterTTV", + "categoryId": 7, + "url": "https://nightdev.com/betterttv/", + "companyId": "nightdev" + }, + "betweendigital.com": { + "name": "Between Digital", + "categoryId": 4, + "url": "http://betweendigital.ru/ssp", + "companyId": "between_digital" + }, + "bid.run": { + "name": "Bid Run", + "categoryId": 4, + "url": "http://bid.run/", + "companyId": "bid.run" + }, + "bidgear": { + "name": "BidGear", + "categoryId": 6, + "url": "https://bidgear.com/", + "companyId": "bidgear" + }, + "bidswitch": { + "name": "Bidswitch", + "categoryId": 4, + "url": "http://www.iponweb.com/", + "companyId": "iponweb" + }, + "bidtellect": { + "name": "Bidtellect", + "categoryId": 4, + "url": "https://www.bidtellect.com/", + "companyId": "bidtellect" + }, + "bidtheatre": { + "name": "BidTheatre", + "categoryId": 4, + "url": "http://www.bidtheatre.com/", + "companyId": "bidtheatre" + }, + "bidvertiser": { + "name": "BidVertiser", + "categoryId": 4, + "url": "http://www.bidvertiser.com/", + "companyId": "bidvertiser" + }, + "big_mobile": { + "name": "Big Mobile", + "categoryId": 4, + "url": "http://www.bigmobile.com/", + "companyId": "big_mobile" + }, + "bigcommerce.com": { + "name": "BigCommerce", + "categoryId": 6, + "url": "https://www.bigcommerce.com/", + "companyId": "bigcommerce" + }, + "bigmir.net": { + "name": "bigmir", + "categoryId": 6, + "url": "https://www.bigmir.net/", + "companyId": "bigmir-internet" + }, + "bigpoint": { + "name": "Bigpoint", + "categoryId": 8, + "url": null, + "companyId": null + }, + "bild": { + "name": "Bild.de", + "categoryId": 8, + "url": null, + "companyId": null + }, + "bilgin_pro": { + "name": "Bilgin Pro", + "categoryId": 4, + "url": "http://bilgin.pro/", + "companyId": "bilginpro" + }, + "bilin": { + "name": "Bilin", + "categoryId": 4, + "url": "http://www.bilintechnology.com/", + "companyId": "bilin" + }, + "bing_ads": { + "name": "Bing Ads", + "categoryId": 4, + "url": "https://bingads.microsoft.com/", + "companyId": "microsoft" + }, + "bing_maps": { + "name": "Bing Maps", + "categoryId": 2, + "url": "https://www.microsoft.com/", + "companyId": "microsoft" + }, + "binge": { + "name": "Binge", + "categoryId": 0, + "url": "https://binge.com.au/", + "companyId": "news_corp", + "source": "AdGuard" + }, + "binlayer": { + "name": "BinLayer", + "categoryId": 4, + "url": "http://binlayer.com/", + "companyId": "binlayer" + }, + "binotel": { + "name": "Binotel", + "categoryId": 4, + "url": "http://www.binotel.ua/", + "companyId": "binotel" + }, + "bisnode": { + "name": "Bisnode", + "categoryId": 4, + "url": "http://www.esendra.fi/", + "companyId": "bisnode" + }, + "bitcoin_miner": { + "name": "Bitcoin Miner", + "categoryId": 2, + "url": "http://www.bitcoinplus.com/", + "companyId": "bitcoin_plus" + }, + "bitly": { + "name": "Bitly", + "categoryId": 6, + "url": "https://bitly.com/", + "companyId": null + }, + "bitrix": { + "name": "Bitrix24", + "categoryId": 4, + "url": "https://www.bitrix24.com/", + "companyId": "bitrix24" + }, + "bitwarden": { + "name": "Bitwarden", + "categoryId": 8, + "url": "https://bitwarden.com/", + "companyId": "bitwarden", + "source": "AdGuard" + }, + "bizcn": { + "name": "Bizcn", + "categoryId": 4, + "url": "http://www.bizcn.com/", + "companyId": "bizcn" + }, + "blackdragon": { + "name": "BlackDragon", + "categoryId": 4, + "url": "http://www.jd.com/", + "companyId": "jing_dong" + }, + "blau.de": { + "name": "Blau", + "categoryId": 8, + "url": "https://www.blau.de/", + "companyId": null + }, + "blink_new_media": { + "name": "Blink New Media", + "categoryId": 4, + "url": "http://engagebdr.com/", + "companyId": "engage_bdr" + }, + "blis": { + "name": "Blis", + "categoryId": 6, + "url": "http://www.blis.com/index.php", + "companyId": "blis" + }, + "blogad": { + "name": "BlogAD", + "categoryId": 4, + "url": "http://www.blogad.com.tw/", + "companyId": "blogad" + }, + "blogbang": { + "name": "BlogBang", + "categoryId": 4, + "url": "http://www.blogbang.com/", + "companyId": "blogbang" + }, + "blogcatalog": { + "name": "BlogCatalog", + "categoryId": 2, + "url": "http://www.blogcatalog.com/", + "companyId": "blogcatalog" + }, + "blogcounter": { + "name": "BlogCounter", + "categoryId": 6, + "url": "http://blogcounter.com/", + "companyId": "adfire_gmbh" + }, + "blogfoster.com": { + "name": "Blogfoster", + "categoryId": 8, + "url": "http://www.blogfoster.com/", + "companyId": "blogfoster" + }, + "bloggerads": { + "name": "BloggerAds", + "categoryId": 4, + "url": "http://www.bloggerads.net/", + "companyId": "bloggerads" + }, + "blogher": { + "name": "BlogHer Ads", + "categoryId": 4, + "url": "https://www.blogher.com/", + "companyId": "penske_media_corp" + }, + "blogimg.jp": { + "name": "blogimg.jp", + "categoryId": 9, + "url": "https://line.me/", + "companyId": "line" + }, + "blogsmithmedia.com": { + "name": "blogsmithmedia.com", + "categoryId": 8, + "url": "https://www.verizon.com/", + "companyId": "verizon" + }, + "blogspot_com": { + "name": "blogspot.com", + "categoryId": 8, + "url": "http://www.google.com", + "companyId": "google" + }, + "bloomreach": { + "name": "BloomReach", + "categoryId": 4, + "url": "https://www.bloomreach.com/en", + "companyId": "bloomreach" + }, + "blue_cherry_group": { + "name": "Blue Cherry Group", + "categoryId": 4, + "url": "http://www.bluecherrygroup.com", + "companyId": "blue_cherry_group" + }, + "blue_seed": { + "name": "Blue Seed", + "categoryId": 4, + "url": "http://blueseed.tv/#/en/platform", + "companyId": "blue_seed" + }, + "blueconic.net": { + "name": "BlueConic Plugin", + "categoryId": 6, + "url": "https://www.blueconic.com/", + "companyId": "blueconic" + }, + "bluecore": { + "name": "Bluecore", + "categoryId": 4, + "url": "https://www.bluecore.com/", + "companyId": "triggermail" + }, + "bluekai": { + "name": "BlueKai", + "categoryId": 4, + "url": "http://www.bluekai.com/", + "companyId": "oracle" + }, + "bluelithium": { + "name": "Bluelithium", + "categoryId": 4, + "url": "http://www.bluelithium.com/", + "companyId": "verizon" + }, + "bluemetrix": { + "name": "Bluemetrix", + "categoryId": 4, + "url": "http://www.bluemetrix.ie/", + "companyId": "bluemetrix" + }, + "bluenewsupdate.info": { + "name": "bluenewsupdate.info", + "categoryId": 11, + "url": null, + "companyId": null + }, + "bluestreak": { + "name": "BlueStreak", + "categoryId": 4, + "url": "http://www.bluestreak.com/", + "companyId": "dentsu_aegis_network" + }, + "bluetriangle": { + "name": "Blue Triangle", + "categoryId": 6, + "url": "https://www.bluetriangle.com/", + "companyId": "blue_triangle" + }, + "bodelen.com": { + "name": "bodelen.com", + "categoryId": 4, + "url": null, + "companyId": null + }, + "bol_affiliate_program": { + "name": "BOL Affiliate Program", + "categoryId": 4, + "url": "http://www.bol.com", + "companyId": "bol.com" + }, + "bold": { + "name": "Bold", + "categoryId": 4, + "url": "https://boldcommerce.com/", + "companyId": "bold" + }, + "boldchat": { + "name": "Boldchat", + "categoryId": 2, + "url": "http://www.boldchat.com/", + "companyId": "boldchat" + }, + "boltdns.net": { + "name": "boltdns.net", + "categoryId": 11, + "url": null, + "companyId": null + }, + "bom": { + "name": "Bureau of Meteorology", + "categoryId": 9, + "url": "http://bom.gov.au/", + "companyId": "australian_government", + "source": "AdGuard" + }, + "bombora": { + "name": "Bombora", + "categoryId": 6, + "url": "http://bombora.com/", + "companyId": "bombora" + }, + "bongacams.com": { + "name": "bongacams.com", + "categoryId": 3, + "url": null, + "companyId": null + }, + "bonial": { + "name": "Bonial Connect", + "categoryId": 2, + "url": "http://www.bonial.com/", + "companyId": null + }, + "boo-box": { + "name": "boo-box", + "categoryId": 4, + "url": "http://boo-box.com/", + "companyId": "boo-box" + }, + "booking.com": { + "name": "Booking.com", + "categoryId": 8, + "url": null, + "companyId": null + }, + "boost_box": { + "name": "Boost Box", + "categoryId": 6, + "url": "http://www.boostbox.com.br/", + "companyId": "boost_box" + }, + "booster_video": { + "name": "Booster Video", + "categoryId": 0, + "url": "https://boostervideo.ru/", + "companyId": "booster_video" + }, + "bootstrap": { + "name": "Bootstrap CDN", + "categoryId": 9, + "url": "http://getbootstrap.com/", + "companyId": "bootstrap_cdn" + }, + "borrango.com": { + "name": "borrango.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "botscanner": { + "name": "BotScanner", + "categoryId": 6, + "url": "http://botscanner.com", + "companyId": "botscanner" + }, + "boudja.com": { + "name": "boudja.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "bounce_exchange": { + "name": "Bounce Exchange", + "categoryId": 4, + "url": "http://bounceexchange.com", + "companyId": "bounce_exchange" + }, + "bouncex": { + "name": "BounceX", + "categoryId": 4, + "url": "https://www.bouncex.com/", + "companyId": null + }, + "box_uk": { + "name": "Box UK", + "categoryId": 6, + "url": "http://www.clickdensity.com", + "companyId": "box_uk" + }, + "boxever": { + "name": "Boxever", + "categoryId": 4, + "url": "https://www.boxever.com/", + "companyId": "boxever" + }, + "brainient": { + "name": "Brainient", + "categoryId": 4, + "url": "http://www.brainient.com/", + "companyId": "brainient" + }, + "brainsins": { + "name": "BrainSINS", + "categoryId": 4, + "url": "http://www.brainsins.com/", + "companyId": "brainsins" + }, + "branch": { + "name": "Branch.io", + "categoryId": 101, + "url": "https://branch.io/", + "companyId": "branch_metrics_inc", + "source": "AdGuard" + }, + "branch_metrics": { + "name": "Branch", + "categoryId": 4, + "url": "https://branch.io/", + "companyId": "branch_metrics_inc" + }, + "brand_affinity": { + "name": "Brand Affinity", + "categoryId": 4, + "url": "http://brandaffinity.net/about", + "companyId": "yoonla" + }, + "brand_networks": { + "name": "Brand Networks", + "categoryId": 4, + "url": "http://www.xa.net/", + "companyId": "brand_networks" + }, + "brandmetrics.com": { + "name": "Brandmetrics.com", + "categoryId": 4, + "url": "https://www.brandmetrics.com/", + "companyId": null + }, + "brandreach": { + "name": "BrandReach", + "categoryId": 4, + "url": "http://www.brandreach.com/", + "companyId": "brandreach" + }, + "brandscreen": { + "name": "Brandscreen", + "categoryId": 4, + "url": "http://www.brandscreen.com/", + "companyId": "zenovia" + }, + "brandwire.tv": { + "name": "BrandWire", + "categoryId": 4, + "url": "https://brandwire.tv/", + "companyId": null + }, + "branica": { + "name": "Branica", + "categoryId": 4, + "url": "http://www.branica.com/", + "companyId": "branica" + }, + "braze": { + "name": "Braze, Inc.", + "categoryId": 6, + "url": "https://www.braze.com/", + "companyId": "braze", + "source": "AdGuard" + }, + "brealtime": { + "name": "EMX Digital", + "categoryId": 4, + "url": "https://emxdigital.com/", + "companyId": null + }, + "bridgetrack": { + "name": "BridgeTrack", + "categoryId": 4, + "url": "http://www.bridgetrack.com/", + "companyId": "bridgetrack" + }, + "brightcove": { + "name": "Brightcove", + "categoryId": 0, + "url": "http://www.brightcove.com/en/", + "companyId": "brightcove" + }, + "brightcove_player": { + "name": "Brightcove Player", + "categoryId": 0, + "url": "http://www.brightcove.com/en/", + "companyId": "brightcove" + }, + "brightedge": { + "name": "BrightEdge", + "categoryId": 4, + "url": "http://www.brightedge.com/", + "companyId": "brightedge" + }, + "brightfunnel": { + "name": "BrightFunnel", + "categoryId": 6, + "url": "http://www.brightfunnel.com/", + "companyId": "brightfunnel" + }, + "brightonclick.com": { + "name": "brightonclick.com", + "categoryId": 4, + "url": null, + "companyId": null + }, + "brightroll": { + "name": "BrightRoll", + "categoryId": 4, + "url": "http://www.brightroll.com/", + "companyId": "verizon" + }, + "brilig": { + "name": "Brilig", + "categoryId": 4, + "url": "http://www.brilig.com/", + "companyId": "dentsu_aegis_network" + }, + "brillen.de": { + "name": "brillen.de", + "categoryId": 8, + "url": "https://www.brillen.de/", + "companyId": null + }, + "broadstreet": { + "name": "Broadstreet", + "categoryId": 4, + "url": "http://broadstreetads.com/", + "companyId": "broadstreet" + }, + "bronto": { + "name": "Bronto", + "categoryId": 4, + "url": "http://bronto.com/", + "companyId": "bronto" + }, + "brow.si": { + "name": "Brow.si", + "categoryId": 4, + "url": "https://brow.si/", + "companyId": "brow.si" + }, + "browser-statistik": { + "name": "Browser-Statistik", + "categoryId": 6, + "url": "http://www.browser-statistik.de/", + "companyId": "browser-statistik" + }, + "browser_update": { + "name": "Browser Update", + "categoryId": 2, + "url": "http://www.browser-update.org/", + "companyId": "browser-update" + }, + "btncdn.com": { + "name": "btncdn.com", + "categoryId": 9, + "url": null, + "companyId": null + }, + "bubblestat": { + "name": "Bubblestat", + "categoryId": 4, + "url": "http://www.bubblestat.com/", + "companyId": "bubblestat" + }, + "buddy_media": { + "name": "Buddy Media", + "categoryId": 7, + "url": "http://www.salesforce.com/", + "companyId": "salesforce" + }, + "buffer_button": { + "name": "Buffer Button", + "categoryId": 7, + "url": "http://www.bufferapp.com/", + "companyId": "buffer" + }, + "bugherd.com": { + "name": "BugHerd", + "categoryId": 2, + "url": "https://bugherd.com", + "companyId": "bugherd" + }, + "bugsnag": { + "name": "Bugsnag", + "categoryId": 6, + "url": "https://bugsnag.com", + "companyId": "bugsnag" + }, + "bulkhentai.com": { + "name": "bulkhentai.com", + "categoryId": 3, + "url": null, + "companyId": null + }, + "bumlam.com": { + "name": "bumlam.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "bunchbox": { + "name": "Bunchbox", + "categoryId": 6, + "url": "https://app.bunchbox.co/login", + "companyId": "bunchbox" + }, + "burda": { + "name": "BurdaForward", + "categoryId": 4, + "url": "http://www.hubert-burda-media.com/", + "companyId": "hubert_burda_media" + }, + "burda_digital_systems": { + "name": "Burda Digital Systems", + "categoryId": 4, + "url": "http://www.hubert-burda-media.com/", + "companyId": "hubert_burda_media" + }, + "burst_media": { + "name": "Burst Media", + "categoryId": 4, + "url": "http://www.burstmedia.com/", + "companyId": "rhythmone" + }, + "burt": { + "name": "Burt", + "categoryId": 4, + "url": "http://www.burtcorp.com/", + "companyId": "burt" + }, + "businessonline_analytics": { + "name": "BusinessOnLine Analytics", + "categoryId": 6, + "url": "http://www.businessol.com/", + "companyId": "businessonline" + }, + "button": { + "name": "Button", + "categoryId": 4, + "url": "https://www.usebutton.com/", + "companyId": "button", + "source": "AdGuard" + }, + "buysellads": { + "name": "BuySellAds", + "categoryId": 4, + "url": "http://buysellads.com/", + "companyId": "buysellads.com" + }, + "buzzadexchange.com": { + "name": "buzzadexchange.com", + "categoryId": 4, + "url": null, + "companyId": null + }, + "buzzador": { + "name": "Buzzador", + "categoryId": 7, + "url": "http://www.buzzador.com", + "companyId": "buzzador" + }, + "buzzfeed": { + "name": "BuzzFeed", + "categoryId": 2, + "url": "http://www.buzzfeed.com", + "companyId": "buzzfeed" + }, + "bwbx.io": { + "name": "Bloomberg CDN", + "categoryId": 9, + "url": "https://www.bloomberg.com/", + "companyId": null + }, + "bypass": { + "name": "Bypass", + "categoryId": 4, + "url": "http://bypass.jp/", + "companyId": "united_inc" + }, + "c1_exchange": { + "name": "C1 Exchange", + "categoryId": 4, + "url": "http://c1exchange.com/", + "companyId": "c1_exchange" + }, + "c3_metrics": { + "name": "C3 Metrics", + "categoryId": 6, + "url": "http://c3metrics.com/", + "companyId": "c3_metrics" + }, + "c8_network": { + "name": "C8 Network", + "categoryId": 4, + "url": "http://c8.net.ua/", + "companyId": "c8_network" + }, + "cackle.me": { + "name": "Cackle", + "categoryId": 3, + "url": "https://cackle.me/", + "companyId": null + }, + "cadreon": { + "name": "Cadreon", + "categoryId": 4, + "url": "http://www.cadreon.com/", + "companyId": "cadreon" + }, + "call_page": { + "name": "Call Page", + "categoryId": 2, + "url": "https://www.callpage.io/", + "companyId": "call_page" + }, + "callbackhunter": { + "name": "CallbackHunter", + "categoryId": 2, + "url": "http://callbackhunter.com/main", + "companyId": "callbackhunter" + }, + "callbox": { + "name": "CallBox", + "categoryId": 2, + "url": "http://www.centuryinteractive.com", + "companyId": "callbox" + }, + "callibri": { + "name": "Callibri", + "categoryId": 4, + "url": "https://callibri.ru/", + "companyId": "callibri" + }, + "callrail": { + "name": "CallRail", + "categoryId": 2, + "url": "http://www.callrail.com/", + "companyId": "callrail" + }, + "calltracking": { + "name": "Calltracking", + "categoryId": 2, + "url": "https://calltracking.ru", + "companyId": "calltracking" + }, + "caltat.com": { + "name": "Caltat", + "categoryId": 2, + "url": "https://caltat.com/", + "companyId": null + }, + "cam-content.com": { + "name": "Cam-Content.com", + "categoryId": 3, + "url": "https://www.cam-content.com/", + "companyId": null + }, + "camakaroda.com": { + "name": "camakaroda.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "campus_explorer": { + "name": "Campus Explorer", + "categoryId": 6, + "url": "http://www.campusexplorer.com/", + "companyId": "campus_explorer" + }, + "canddi": { + "name": "CANDDI", + "categoryId": 6, + "url": "https://www.canddi.com/", + "companyId": "canddi" + }, + "canonical": { + "name": "Canonical", + "categoryId": 8, + "url": "https://canonical.com/", + "companyId": "canonical", + "source": "AdGuard" + }, + "canvas": { + "name": "Canvas", + "categoryId": 2, + "url": "https://www.canvas.net/", + "companyId": null + }, + "capitaldata": { + "name": "CapitalData", + "categoryId": 6, + "url": "https://www.capitaldata.fr/", + "companyId": "highco" + }, + "captora": { + "name": "Captora", + "categoryId": 4, + "url": "http://www.captora.com/", + "companyId": "captora" + }, + "capture_media": { + "name": "Capture Media", + "categoryId": 4, + "url": "http://capturemedia.ch/", + "companyId": "capture_media" + }, + "capturly": { + "name": "Capturly", + "categoryId": 6, + "url": "http://capturly.com/", + "companyId": "capturly" + }, + "carambola": { + "name": "Carambola", + "categoryId": 4, + "url": "http://carambo.la/", + "companyId": "carambola" + }, + "carbonads": { + "name": "Carbon Ads", + "categoryId": 4, + "url": "https://www.carbonads.net/", + "companyId": "buysellads.com" + }, + "cardinal": { + "name": "Cardinal", + "categoryId": 6, + "url": "https://www.cardinalcommerce.com/", + "companyId": "visa" + }, + "cardlytics": { + "name": "Cardlytics", + "categoryId": 6, + "url": "http://www.cardlytics.com/", + "companyId": null + }, + "carrot_quest": { + "name": "Carrot Quest", + "categoryId": 6, + "url": "http://www.carrotquest.io/", + "companyId": "carrot_quest" + }, + "cartstack": { + "name": "CartStack", + "categoryId": 2, + "url": "http://cartstack.com/", + "companyId": "cartstack" + }, + "caspion": { + "name": "Caspion", + "categoryId": 6, + "url": "http://caspion.com/", + "companyId": "caspion" + }, + "castle": { + "name": "Castle", + "categoryId": 2, + "url": "https://castle.io", + "companyId": "castle" + }, + "catchpoint": { + "name": "Catchpoint", + "categoryId": 6, + "url": "http://www.catchpoint.com/", + "companyId": "catchpoint_systems" + }, + "cbox": { + "name": "Cbox", + "categoryId": 2, + "url": "http://cbox.ws", + "companyId": "cbox" + }, + "cbs_interactive": { + "name": "CBS Interactive", + "categoryId": 0, + "url": "http://www.cbsinteractive.com/", + "companyId": "cbs_interactive" + }, + "ccm_benchmark": { + "name": "CCM Benchmark", + "categoryId": 4, + "url": "http://www.ccmbenchmark.com/", + "companyId": null + }, + "cdk_digital_marketing": { + "name": "CDK Digital Marketing", + "categoryId": 4, + "url": "http://www.cobaltgroup.com", + "companyId": "cdk_digital_marketing" + }, + "cdn-net.com": { + "name": "cdn-net.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "cdn13.com": { + "name": "cdn13.com", + "categoryId": 8, + "url": null, + "companyId": null + }, + "cdn77": { + "name": "CDN77", + "categoryId": 9, + "url": "https://www.cdn77.com/", + "companyId": null + }, + "cdnetworks.net": { + "name": "cdnetworks.net", + "categoryId": 9, + "url": "https://www.cdnetworks.com/", + "companyId": null + }, + "cdnnetwok_xyz": { + "name": "cdnnetwok.xyz", + "categoryId": 12, + "url": null, + "companyId": null + }, + "cdnondemand.org": { + "name": "cdnondemand.org", + "categoryId": 11, + "url": null, + "companyId": null + }, + "cdnsure.com": { + "name": "cdnsure.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "cdnvideo.com": { + "name": "CDNvideo", + "categoryId": 9, + "url": "https://www.cdnvideo.com/", + "companyId": "cdnvideo" + }, + "cdnwidget.com": { + "name": "cdnwidget.com", + "categoryId": 9, + "url": null, + "companyId": null + }, + "cedexis_radar": { + "name": "Cedexis Radar", + "categoryId": 6, + "url": "http://www.cedexis.com/products_radar.html", + "companyId": "cedexis" + }, + "celebrus": { + "name": "Celebrus", + "categoryId": 6, + "url": "https://www.celebrus.com/", + "companyId": "celebrus" + }, + "celtra": { + "name": "Celtra", + "categoryId": 0, + "url": "http://www.celtra.com/", + "companyId": "celtra" + }, + "cendyn": { + "name": "Cendyn", + "categoryId": 4, + "url": "http://www.cendyn.com/", + "companyId": "cendyn" + }, + "centraltag": { + "name": "CentralTag", + "categoryId": 4, + "url": "http://www.centraltag.com/", + "companyId": "centraltag" + }, + "centro": { + "name": "Centro", + "categoryId": 4, + "url": "http://centro.net/", + "companyId": "centro" + }, + "cerberus_speed-trap": { + "name": "Cerberus Speed-Trap", + "categoryId": 6, + "url": "http://cerberusip.com/", + "companyId": "cerberus" + }, + "certainsource": { + "name": "CertainSource", + "categoryId": 4, + "url": "http://www.ewaydirect.com", + "companyId": "certainsource" + }, + "certifica_metric": { + "name": "Certifica Metric", + "categoryId": 4, + "url": "http://www.comscore.com/Products_Services/Product_Index/Certifica_Metric", + "companyId": "comscore" + }, + "certona": { + "name": "Certona", + "categoryId": 4, + "url": "http://www.certona.com/products/recommendation.php", + "companyId": "certona" + }, + "chameleon": { + "name": "Chameleon", + "categoryId": 4, + "url": "http://chameleon.ad/", + "companyId": "chamaleon" + }, + "chango": { + "name": "Chango", + "categoryId": 4, + "url": "http://www.chango.com/", + "companyId": "rubicon_project" + }, + "channel_intelligence": { + "name": "Channel Intelligence", + "categoryId": 4, + "url": "http://www.channelintelligence.com/", + "companyId": "google" + }, + "channel_pilot_solutions": { + "name": "ChannelPilot Solutions", + "categoryId": 6, + "url": "https://www.channelpilot.de/", + "companyId": null + }, + "channeladvisor": { + "name": "ChannelAdvisor", + "categoryId": 4, + "url": "http://www.channeladvisor.com/", + "companyId": "channeladvisor" + }, + "channelfinder": { + "name": "ChannelFinder", + "categoryId": 4, + "url": "http://www.kpicentral.com/", + "companyId": "kaleidoscope_promotions" + }, + "chaordic": { + "name": "Chaordic", + "categoryId": 4, + "url": "https://www.chaordic.com.br/", + "companyId": "chaordic" + }, + "chartbeat": { + "name": "ChartBeat", + "categoryId": 6, + "url": "http://chartbeat.com/", + "companyId": "chartbeat" + }, + "chartboost": { + "name": "Chartboost", + "categoryId": 4, + "url": "http://chartboost.com/", + "companyId": "take-two", + "source": "AdGuard" + }, + "chaser": { + "name": "Chaser", + "categoryId": 2, + "url": "http://chaser.ru/", + "companyId": "chaser" + }, + "chat_beacon": { + "name": "Chat Beacon", + "categoryId": 2, + "url": "https://www.chatbeacon.io/", + "companyId": "chat_beacon" + }, + "chatango": { + "name": "Chatango", + "categoryId": 2, + "url": "http://www.chatango.com/", + "companyId": "chatango" + }, + "chatra": { + "name": "Chatra", + "categoryId": 2, + "url": "https://chatra.io", + "companyId": "chatra" + }, + "chaturbate.com": { + "name": "chaturbate.com", + "categoryId": 3, + "url": null, + "companyId": null + }, + "chatwing": { + "name": "ChatWing", + "categoryId": 2, + "url": "http://chatwing.com/", + "companyId": "chatwing" + }, + "checkmystats": { + "name": "CheckMyStats", + "categoryId": 4, + "url": "http://checkmystats.com.au", + "companyId": "checkmystats" + }, + "chefkoch_de": { + "name": "chefkoch.de", + "categoryId": 8, + "url": "http://chefkoch.de/", + "companyId": null + }, + "chin_media": { + "name": "Chin Media", + "categoryId": 4, + "url": "http://www.chinmedia.vn/#", + "companyId": "chin_media" + }, + "chinesean": { + "name": "ChineseAN", + "categoryId": 4, + "url": "http://www.chinesean.com/", + "companyId": "chinesean" + }, + "chitika": { + "name": "Chitika", + "categoryId": 4, + "url": "http://chitika.com/", + "companyId": "chitika" + }, + "choicestream": { + "name": "ChoiceStream", + "categoryId": 4, + "url": "http://www.choicestream.com/", + "companyId": "choicestream" + }, + "chute": { + "name": "Chute", + "categoryId": 5, + "url": "https://www.getchute.com/", + "companyId": "esw_capital" + }, + "circit": { + "name": "circIT", + "categoryId": 6, + "url": "http://www.circit.de/", + "companyId": null + }, + "circulate": { + "name": "Circulate", + "categoryId": 6, + "url": "http://circulate.com/", + "companyId": "circulate" + }, + "city_spark": { + "name": "City Spark", + "categoryId": 4, + "url": "http://www.cityspark.com/", + "companyId": "city_spark" + }, + "cityads": { + "name": "CityAds", + "categoryId": 4, + "url": "http://cityads.ru/", + "companyId": "cityads" + }, + "ciuvo.com": { + "name": "ciuvo.com", + "categoryId": 12, + "url": "https://www.ciuvo.com/", + "companyId": null + }, + "civey_widgets": { + "name": "Civey Widgets", + "categoryId": 2, + "url": "https://civey.com/", + "companyId": "civey" + }, + "civicscience.com": { + "name": "CivicScience", + "categoryId": 6, + "url": "https://civicscience.com/", + "companyId": "civicscience" + }, + "ciwebgroup": { + "name": "CIWebGroup", + "categoryId": 4, + "url": "http://www.ciwebgroup.com/", + "companyId": "ciwebgroup" + }, + "clcknads.pro": { + "name": "clcknads.pro", + "categoryId": 3, + "url": null, + "companyId": null + }, + "clear_pier": { + "name": "ClearPier", + "categoryId": 4, + "url": "http://clearpier.com/", + "companyId": "clear_pier" + }, + "clearbit.com": { + "name": "Clearbit", + "categoryId": 6, + "url": "https://clearbit.com/", + "companyId": "clearbit" + }, + "clearsale": { + "name": "clearsale", + "categoryId": 4, + "url": "https://www.clear.sale/", + "companyId": null + }, + "clearstream.tv": { + "name": "Clearstream.TV", + "categoryId": 4, + "url": "http://clearstream.tv/", + "companyId": "clearstream.tv" + }, + "clerk.io": { + "name": "Clerk.io", + "categoryId": 4, + "url": "https://clerk.io/", + "companyId": "clerk.io" + }, + "clever_push": { + "name": "Clever Push", + "categoryId": 6, + "url": "https://clevertap.com/", + "companyId": "clever_push" + }, + "clever_tap": { + "name": "CleverTap", + "categoryId": 6, + "url": "https://clevertap.com/", + "companyId": "clever_tap" + }, + "cleversite": { + "name": "Cleversite", + "categoryId": 2, + "url": "http://cleversite.ru/", + "companyId": "cleversite" + }, + "click360": { + "name": "Click360", + "categoryId": 6, + "url": "https://www.click360.io/", + "companyId": "click360" + }, + "click_and_chat": { + "name": "Click and Chat", + "categoryId": 2, + "url": "http://www.clickandchat.com/", + "companyId": "clickandchat" + }, + "click_back": { + "name": "Click Back", + "categoryId": 4, + "url": "http://www.clickback.com/", + "companyId": "clickback" + }, + "clickaider": { + "name": "ClickAider", + "categoryId": 4, + "url": "http://clickaider.com/", + "companyId": "clickaider" + }, + "clickaine": { + "name": "Clickaine", + "categoryId": 4, + "url": "https://clickaine.com/", + "companyId": "clickaine", + "source": "AdGuard" + }, + "clickbank": { + "name": "ClickBank", + "categoryId": 4, + "url": "http://www.clickbank.com/", + "companyId": "clickbank" + }, + "clickbank_proads": { + "name": "ClickBank ProAds", + "categoryId": 4, + "url": "http://www.cbproads.com/", + "companyId": "clickbank_proads" + }, + "clickbooth": { + "name": "Clickbooth", + "categoryId": 4, + "url": "http://www.clickbooth.com/", + "companyId": "clickbooth" + }, + "clickcease": { + "name": "ClickCease", + "categoryId": 2, + "url": "https://www.clickcease.com/", + "companyId": "click_cease" + }, + "clickcertain": { + "name": "ClickCertain", + "categoryId": 4, + "url": "http://www.clickcertain.com", + "companyId": "clickcertain" + }, + "clickdesk": { + "name": "ClickDesk", + "categoryId": 2, + "url": "https://www.clickdesk.com/", + "companyId": "clickdesk" + }, + "clickdimensions": { + "name": "ClickDimensions", + "categoryId": 4, + "url": "http://www.clickdimensions.com/", + "companyId": "clickdimensions" + }, + "clickequations": { + "name": "ClickEquations", + "categoryId": 4, + "url": "http://www.clickequations.com/", + "companyId": "acquisio" + }, + "clickexperts": { + "name": "ClickExperts", + "categoryId": 4, + "url": "http://clickexperts.com/corp/index.php?lang=en", + "companyId": "clickexperts" + }, + "clickforce": { + "name": "ClickForce", + "categoryId": 4, + "url": "http://www.clickforce.com.tw/", + "companyId": "clickforce" + }, + "clickinc": { + "name": "ClickInc", + "categoryId": 4, + "url": "http://www.clickinc.com", + "companyId": "clickinc" + }, + "clickintext": { + "name": "ClickInText", + "categoryId": 4, + "url": "http://www.clickintext.com/", + "companyId": "clickintext" + }, + "clickky": { + "name": "Clickky", + "categoryId": 4, + "url": "http://www.clickky.biz/", + "companyId": "clickky" + }, + "clickmeter": { + "name": "ClickMeter", + "categoryId": 4, + "url": "http://www.clickmeter.com", + "companyId": "clickmeter" + }, + "clickonometrics": { + "name": "Clickonometrics", + "categoryId": 4, + "url": "http://clickonometrics.pl/", + "companyId": "clickonometrics" + }, + "clickpoint": { + "name": "Clickpoint", + "categoryId": 4, + "url": "http://clickpoint.com/", + "companyId": "clickpoint" + }, + "clickprotector": { + "name": "ClickProtector", + "categoryId": 6, + "url": "http://www.clickprotector.com/", + "companyId": "clickprotector" + }, + "clickreport": { + "name": "ClickReport", + "categoryId": 6, + "url": "http://clickreport.com/", + "companyId": "clickreport" + }, + "clicks_thru_networks": { + "name": "Clicks Thru Networks", + "categoryId": 4, + "url": "http://www.clicksthrunetwork.com/", + "companyId": "clicksthrunetwork" + }, + "clicksor": { + "name": "Clicksor", + "categoryId": 4, + "url": "http://clicksor.com/", + "companyId": "clicksor" + }, + "clicktale": { + "name": "ClickTale", + "categoryId": 6, + "url": "http://www.clicktale.com/", + "companyId": "clicktale" + }, + "clicktripz": { + "name": "ClickTripz", + "categoryId": 4, + "url": "https://www.clicktripz.com", + "companyId": "clicktripz" + }, + "clickwinks": { + "name": "Clickwinks", + "categoryId": 4, + "url": "http://www.clickwinks.com/", + "companyId": "clickwinks" + }, + "clicky": { + "name": "Clicky", + "categoryId": 6, + "url": "http://getclicky.com/", + "companyId": "clicky" + }, + "clickyab": { + "name": "Clickyab", + "categoryId": 4, + "url": "https://www.clickyab.com/", + "companyId": "clickyab" + }, + "clicmanager": { + "name": "ClicManager", + "categoryId": 4, + "url": "http://www.clicmanager.fr/", + "companyId": "clicmanager" + }, + "clip_syndicate": { + "name": "Clip Syndicate", + "categoryId": 4, + "url": "http://www.clipsyndicate.com/", + "companyId": "clip_syndicate" + }, + "clixgalore": { + "name": "clixGalore", + "categoryId": 4, + "url": "http://www.clixgalore.com/", + "companyId": "clixgalore" + }, + "clixmetrix": { + "name": "ClixMetrix", + "categoryId": 4, + "url": "http://www.clixmetrix.com/", + "companyId": "clixmedia" + }, + "clixsense": { + "name": "ClixSense", + "categoryId": 4, + "url": "http://www.clixsense.com/", + "companyId": "clixsense" + }, + "cloud-media.fr": { + "name": "CloudMedia", + "categoryId": 4, + "url": "https://cloudmedia.fr/", + "companyId": null + }, + "cloudflare": { + "name": "CloudFlare", + "categoryId": 9, + "url": "https://www.cloudflare.com/", + "companyId": "cloudflare" + }, + "cloudimage.io": { + "name": "Cloudimage.io", + "categoryId": 9, + "url": "https://www.cloudimage.io/en/home", + "companyId": "scaleflex_sas" + }, + "cloudinary": { + "name": "Cloudinary", + "categoryId": 9, + "url": "https://cloudinary.com/", + "companyId": null + }, + "clove_network": { + "name": "Clove Network", + "categoryId": 4, + "url": "http://www.clovenetwork.com/", + "companyId": "clove_network" + }, + "clustrmaps": { + "name": "ClustrMaps", + "categoryId": 4, + "url": "http://www.clustrmaps.com/", + "companyId": "clustrmaps" + }, + "cnbc": { + "name": "CNBC", + "categoryId": 8, + "url": "https://www.cnbc.com/", + "companyId": "nbcuniversal" + }, + "cnetcontent.com": { + "name": "Cnetcontent", + "categoryId": 8, + "url": "http://cnetcontent.com/", + "companyId": "cbs_interactive" + }, + "cnstats": { + "name": "CNStats", + "categoryId": 6, + "url": "http://cnstats.ru/", + "companyId": "cnstats" + }, + "cnzz.com": { + "name": "Umeng", + "categoryId": 6, + "url": "http://www.umeng.com/", + "companyId": "umeng" + }, + "coadvertise": { + "name": "COADVERTISE", + "categoryId": 4, + "url": "http://www.coadvertise.com/", + "companyId": "coadvertise" + }, + "cobrowser": { + "name": "CoBrowser", + "categoryId": 2, + "url": "https://www.cobrowser.net/", + "companyId": "cobrowser.net" + }, + "codeonclick.com": { + "name": "codeonclick.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "cogocast": { + "name": "CogoCast", + "categoryId": 4, + "url": "http://www.cogocast.com", + "companyId": "cogocast" + }, + "coin_have": { + "name": "Coin Have", + "categoryId": 4, + "url": "https://coin-have.com/", + "companyId": "coin_have" + }, + "coin_traffic": { + "name": "Coin Traffic", + "categoryId": 2, + "url": "https://cointraffic.io/", + "companyId": "coin_traffic" + }, + "coinhive": { + "name": "Coinhive", + "categoryId": 8, + "url": "https://coinhive.com/", + "companyId": "coinhive" + }, + "coinurl": { + "name": "CoinURL", + "categoryId": 4, + "url": "https://coinurl.com/", + "companyId": "coinurl" + }, + "coll1onf.com": { + "name": "coll1onf.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "coll2onf.com": { + "name": "coll2onf.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "collarity": { + "name": "Collarity", + "categoryId": 4, + "url": "http://www.collarity.com/", + "companyId": "collarity" + }, + "columbia_online": { + "name": "Columbia Online", + "categoryId": 4, + "url": "https://www.colombiaonline.com/", + "companyId": "columbia_online" + }, + "combotag": { + "name": "ComboTag", + "categoryId": 4, + "url": "https://www.combotag.com/", + "companyId": null + }, + "comcast_technology_solutions": { + "name": "Comcast Technology Solutions", + "categoryId": 0, + "url": "https://www.comcasttechnologysolutions.com/", + "companyId": "comcast_technology_solutions" + }, + "comm100": { + "name": "Comm100", + "categoryId": 2, + "url": "http://www.comm100.com/", + "companyId": "comm100" + }, + "commerce_sciences": { + "name": "Commerce Sciences", + "categoryId": 4, + "url": "http://commercesciences.com/", + "companyId": "commerce_sciences" + }, + "commercehub": { + "name": "CommerceHub", + "categoryId": 4, + "url": "http://www.mercent.com/", + "companyId": "commercehub" + }, + "commercialvalue.org": { + "name": "commercialvalue.org", + "categoryId": 11, + "url": null, + "companyId": null + }, + "commission_junction": { + "name": "CJ Affiliate", + "categoryId": 4, + "url": "http://www.cj.com/", + "companyId": "conversant" + }, + "communicator_corp": { + "name": "Communicator Corp", + "categoryId": 4, + "url": "http://www.communicatorcorp.com/", + "companyId": "communicator_corp" + }, + "communigator": { + "name": "CommuniGator", + "categoryId": 6, + "url": "http://www.wowanalytics.co.uk/", + "companyId": "communigator" + }, + "competexl": { + "name": "CompeteXL", + "categoryId": 6, + "url": "http://www.compete.com/help/s12", + "companyId": "wpp" + }, + "complex_media_network": { + "name": "Complex Media", + "categoryId": 4, + "url": "https://www.complex.com/", + "companyId": "verizon" + }, + "comprigo": { + "name": "comprigo", + "categoryId": 12, + "url": "https://www.comprigo.com/", + "companyId": null + }, + "comscore": { + "name": "ComScore, Inc.", + "categoryId": 6, + "url": "https://www.comscore.com/", + "companyId": "comscore" + }, + "conative.de": { + "name": "CoNative", + "categoryId": 4, + "url": "http://www.conative.de/", + "companyId": null + }, + "condenastdigital.com": { + "name": "Condé Nast Digital", + "categoryId": 8, + "url": "http://www.condenast.com/", + "companyId": "conde_nast" + }, + "conduit": { + "name": "Conduit", + "categoryId": 4, + "url": "http://www.conduit.com/", + "companyId": "conduit" + }, + "confirmit": { + "name": "Confirmit", + "categoryId": 4, + "url": "http://confirmit.com/", + "companyId": "confirmit" + }, + "congstar.de": { + "name": "congstar.de", + "categoryId": 4, + "url": null, + "companyId": null + }, + "connatix.com": { + "name": "Connatix", + "categoryId": 4, + "url": "https://connatix.com/", + "companyId": "connatix" + }, + "connectad": { + "name": "ConnectAd", + "categoryId": 4, + "url": "https://connectad.io/", + "companyId": "connectad" + }, + "connecto": { + "name": "Connecto", + "categoryId": 6, + "url": "http://www.connecto.io/", + "companyId": "connecto" + }, + "connexity": { + "name": "Connexity", + "categoryId": 4, + "url": "http://www.connexity.com", + "companyId": "shopzilla" + }, + "connextra": { + "name": "Connextra", + "categoryId": 4, + "url": "http://connextra.com/", + "companyId": "connextra" + }, + "constant_contact": { + "name": "Constant Contact", + "categoryId": 4, + "url": "http://www.constantcontact.com/index.jsp", + "companyId": "constant_contact" + }, + "consumable": { + "name": "Consumable", + "categoryId": 4, + "url": "http://consumable.com/index.html", + "companyId": "giftconnect" + }, + "contact_at_once": { + "name": "Contact At Once!", + "categoryId": 2, + "url": "http://www.contactatonce.com/", + "companyId": "contact_at_once!" + }, + "contact_impact": { + "name": "Contact Impact", + "categoryId": 4, + "url": "https://www.contactimpact.de/", + "companyId": "axel_springer" + }, + "contactme": { + "name": "ContactMe", + "categoryId": 4, + "url": "http://www.contactme.com", + "companyId": "contactme" + }, + "contaxe": { + "name": "Contaxe", + "categoryId": 5, + "url": "http://www.contaxe.com/", + "companyId": "contaxe" + }, + "content.ad": { + "name": "Content.ad", + "categoryId": 4, + "url": "https://www.content.ad/", + "companyId": "content.ad" + }, + "content_insights": { + "name": "Content Insights", + "categoryId": 6, + "url": "https://contentinsights.com/", + "companyId": "content_insights" + }, + "contentexchange.me": { + "name": "Content Exchange", + "categoryId": 6, + "url": "https://www.contentexchange.me/", + "companyId": "i.r.v." + }, + "contentful_gmbh": { + "name": "Contentful GmbH", + "categoryId": 9, + "url": "https://www.contentful.com/", + "companyId": "contentful_gmbh" + }, + "contentpass": { + "name": "ContentPass", + "categoryId": 6, + "url": "https://www.contentpass.de/", + "companyId": "contentpass" + }, + "contentsquare.net": { + "name": "ContentSquare", + "categoryId": 4, + "url": "https://www.contentsquare.com/", + "companyId": "content_square" + }, + "contentwrx": { + "name": "Contentwrx", + "categoryId": 6, + "url": "http://contentwrx.com/", + "companyId": "contentwrx" + }, + "context": { + "name": "C|ON|TEXT", + "categoryId": 4, + "url": "http://c-on-text.com", + "companyId": "c_on_text" + }, + "context.ad": { + "name": "Context.ad", + "categoryId": 4, + "url": "http://contextad.pl/", + "companyId": "context.ad" + }, + "continum_net": { + "name": "continum.net", + "categoryId": 10, + "url": "http://continum.net/", + "companyId": null + }, + "contribusource": { + "name": "Contribusource", + "categoryId": 4, + "url": "https://www.contribusource.com/", + "companyId": "contribusource" + }, + "convergetrack": { + "name": "ConvergeTrack", + "categoryId": 6, + "url": "http://www.convergedirect.com/technology/convergetrack.shtml", + "companyId": "convergedirect" + }, + "conversant": { + "name": "Conversant", + "categoryId": 4, + "url": "https://www.conversantmedia.eu/", + "companyId": "conversant" + }, + "conversio": { + "name": "CM Commerce", + "categoryId": 6, + "url": "https://cm-commerce.com/", + "companyId": "conversio" + }, + "conversion_logic": { + "name": "Conversion Logic", + "categoryId": 6, + "url": "http://www.conversionlogic.com/", + "companyId": "conversion_logic" + }, + "conversionruler": { + "name": "ConversionRuler", + "categoryId": 4, + "url": "http://www.conversionruler.com/", + "companyId": "market_ruler" + }, + "conversions_box": { + "name": "Conversions Box", + "categoryId": 7, + "url": "http://www.conversionsbox.com/", + "companyId": "conversions_box" + }, + "conversions_on_demand": { + "name": "Conversions On Demand", + "categoryId": 5, + "url": "https://www.conversionsondemand.com/", + "companyId": "conversions_on_demand" + }, + "conversive": { + "name": "Conversive", + "categoryId": 4, + "url": "http://www.conversive.nl/", + "companyId": "conversive" + }, + "convert": { + "name": "Convert", + "categoryId": 6, + "url": "https://www.convert.com/", + "companyId": "convert" + }, + "convertfox": { + "name": "ConvertFox", + "categoryId": 2, + "url": "https://convertfox.com/", + "companyId": "convertfox" + }, + "convertro": { + "name": "Convertro", + "categoryId": 4, + "url": "http://www.convertro.com/", + "companyId": "verizon" + }, + "conviva": { + "name": "Conviva", + "categoryId": 6, + "url": "http://www.conviva.com/", + "companyId": "conviva" + }, + "cookie_consent": { + "name": "Cookie Consent", + "categoryId": 5, + "url": "https://silktide.com/", + "companyId": "silktide" + }, + "cookie_script": { + "name": "Cookie Script", + "categoryId": 5, + "url": "https://cookie-script.com/", + "companyId": "cookie_script" + }, + "cookiebot": { + "name": "Cookiebot", + "categoryId": 5, + "url": "https://www.cookiebot.com/en/", + "companyId": "cybot" + }, + "cookieq": { + "name": "CookieQ", + "categoryId": 5, + "url": "http://cookieq.com/CookieQ", + "companyId": "baycloud" + }, + "cooliris": { + "name": "Cooliris", + "categoryId": 2, + "url": "http://www.cooliris.com", + "companyId": "cooliris" + }, + "copacet": { + "name": "Copacet", + "categoryId": 4, + "url": "http://copacet.com/", + "companyId": "copacet" + }, + "coreaudience": { + "name": "CoreAudience", + "categoryId": 4, + "url": "http://www.redaril.com/", + "companyId": "hearst" + }, + "coremotives": { + "name": "CoreMotives", + "categoryId": 4, + "url": "http://coremotives.com/", + "companyId": "coremotives" + }, + "coull": { + "name": "Coull", + "categoryId": 4, + "url": "http://coull.com/", + "companyId": "coull" + }, + "cpm_rocket": { + "name": "CPM Rocket", + "categoryId": 4, + "url": "http://www.cpmrocket.com/", + "companyId": "cpm_rocket" + }, + "cpmprofit": { + "name": "CPMProfit", + "categoryId": 4, + "url": "http://www.cpmprofit.com/", + "companyId": "cpmprofit" + }, + "cpmstar": { + "name": "CPMStar", + "categoryId": 4, + "url": "http://www.cpmstar.com", + "companyId": "cpmstar" + }, + "cpx.to": { + "name": "Captify", + "categoryId": 4, + "url": "https://www.captify.co.uk/", + "companyId": "captify" + }, + "cq_counter": { + "name": "CQ Counter", + "categoryId": 6, + "url": "http://www.cqcounter.com/", + "companyId": "cq_counter" + }, + "cqq5id8n.com": { + "name": "cqq5id8n.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "cquotient.com": { + "name": "CQuotient", + "categoryId": 6, + "url": "https://www.demandware.com/#cquotient", + "companyId": "salesforce" + }, + "craftkeys": { + "name": "CraftKeys", + "categoryId": 4, + "url": "http://craftkeys.com/", + "companyId": "craftkeys" + }, + "crakmedia_network": { + "name": "Crakmedia Network", + "categoryId": 4, + "url": "http://crakmedia.com/", + "companyId": "crakmedia_network" + }, + "crankyads": { + "name": "CrankyAds", + "categoryId": 4, + "url": "http://www.crankyads.com", + "companyId": "crankyads" + }, + "crashlytics": { + "name": "Crashlytics", + "categoryId": 101, + "url": "https://crashlytics.com/", + "companyId": "google", + "source": "AdGuard" + }, + "crazy_egg": { + "name": "Crazy Egg", + "categoryId": 6, + "url": "http://crazyegg.com/", + "companyId": "crazy_egg" + }, + "creafi": { + "name": "Creafi", + "categoryId": 4, + "url": "http://www.creafi.com/en/home/", + "companyId": "crazy4media" + }, + "createjs": { + "name": "CreateJS", + "categoryId": 9, + "url": "https://createjs.com/", + "companyId": null + }, + "creative_commons": { + "name": "Creative Commons", + "categoryId": 8, + "url": "https://creativecommons.org/", + "companyId": "creative_commons_corp" + }, + "crimsonhexagon_com": { + "name": "Brandwatch", + "categoryId": 6, + "url": "https://www.brandwatch.com/", + "companyId": "brandwatch" + }, + "crimtan": { + "name": "Crimtan", + "categoryId": 4, + "url": "http://www.crimtan.com/", + "companyId": "crimtan" + }, + "crisp": { + "name": "Crisp", + "categoryId": 2, + "url": "https://crisp.chat/", + "companyId": "crisp" + }, + "criteo": { + "name": "Criteo", + "categoryId": 4, + "url": "http://www.criteo.com/", + "companyId": "criteo" + }, + "crm4d": { + "name": "CRM4D", + "categoryId": 6, + "url": "https://crm4d.com/", + "companyId": "crm4d" + }, + "crossengage": { + "name": "CrossEngage", + "categoryId": 6, + "url": "https://www.crossengage.io/", + "companyId": "crossengage" + }, + "crosspixel": { + "name": "Cross Pixel", + "categoryId": 4, + "url": "http://crosspixel.net/", + "companyId": "cross_pixel" + }, + "crosssell.info": { + "name": "econda Cross Sell", + "categoryId": 4, + "url": "https://www.econda.de/en/solutions/personalization/cross-sell/", + "companyId": "econda" + }, + "crossss": { + "name": "Crossss", + "categoryId": 4, + "url": "http://crossss.ru/", + "companyId": "crossss" + }, + "crowd_ignite": { + "name": "Crowd Ignite", + "categoryId": 4, + "url": "http://get.crowdignite.com/", + "companyId": "gorilla_nation_media" + }, + "crowd_science": { + "name": "Crowd Science", + "categoryId": 4, + "url": "http://www.crowdscience.com/", + "companyId": "crowd_science" + }, + "crowdprocess": { + "name": "CrowdProcess", + "categoryId": 2, + "url": "https://crowdprocess.com", + "companyId": "crowdprocess" + }, + "crowdynews": { + "name": "Crowdynews", + "categoryId": 7, + "url": "http://www.crowdynews.com/", + "companyId": "crowdynews" + }, + "crownpeak": { + "name": "Crownpeak", + "categoryId": 5, + "url": "https://www.crownpeak.com/", + "companyId": "crownpeak" + }, + "cryptoloot_miner": { + "name": "CryptoLoot Miner", + "categoryId": 4, + "url": "https://crypto-loot.com/", + "companyId": "cryptoloot" + }, + "ctnetwork": { + "name": "CTnetwork", + "categoryId": 4, + "url": "http://ctnetwork.hu/", + "companyId": "ctnetwork" + }, + "ctrlshift": { + "name": "CtrlShift", + "categoryId": 4, + "url": "http://www.adzcentral.com/", + "companyId": "ctrlshift" + }, + "cubed": { + "name": "Cubed", + "categoryId": 6, + "url": "http://withcubed.com/", + "companyId": "cubed_attribution" + }, + "cuelinks": { + "name": "CueLinks", + "categoryId": 4, + "url": "http://www.cuelinks.com/", + "companyId": "cuelinks" + }, + "cup_interactive": { + "name": "Cup Interactive", + "categoryId": 4, + "url": "http://www.cupinteractive.com/", + "companyId": "cup_interactive" + }, + "curse.com": { + "name": "Curse", + "categoryId": 8, + "url": "https://www.curse.com/", + "companyId": "amazon_associates" + }, + "cursecdn.com": { + "name": "Curse CDN", + "categoryId": 9, + "url": "https://www.curse.com/", + "companyId": "amazon_associates" + }, + "customer.io": { + "name": "Customer.io", + "categoryId": 2, + "url": "http://www.customer.io/", + "companyId": "customer.io" + }, + "customerly": { + "name": "Customerly", + "categoryId": 2, + "url": "https://www.customerly.io/", + "companyId": "customerly" + }, + "cxense": { + "name": "cXense", + "categoryId": 4, + "url": "http://www.cxense.com/", + "companyId": "cxense" + }, + "cxo.name": { + "name": "Chip Analytics", + "categoryId": 6, + "url": "http://www.chip.de/", + "companyId": null + }, + "cyber_wing": { + "name": "Cyber Wing", + "categoryId": 4, + "url": "http://www.cyberwing.co.jp/", + "companyId": "cyberwing" + }, + "cybersource": { + "name": "CyberSource", + "categoryId": 6, + "url": "https://www.cybersource.com/en-gb.html", + "companyId": "visa" + }, + "cygnus": { + "name": "Cygnus", + "categoryId": 4, + "url": "http://www.cygnus.com/", + "companyId": "cygnus" + }, + "da-ads.com": { + "name": "da-ads.com", + "categoryId": 4, + "url": null, + "companyId": null + }, + "dailymail.co.uk": { + "name": "Daily Mail", + "categoryId": 8, + "url": "http://www.dailymail.co.uk/home/index.html", + "companyId": "dmg_media" + }, + "dailymotion": { + "name": "Dailymotion", + "categoryId": 8, + "url": "https://vivendi.com/", + "companyId": "vivendi" + }, + "dailymotion_advertising": { + "name": "Dailymotion Advertising", + "categoryId": 4, + "url": "http://advertising.dailymotion.com/", + "companyId": "vivendi" + }, + "daisycon": { + "name": "Daisycon", + "categoryId": 4, + "url": "http://www.daisycon.com", + "companyId": "daisycon" + }, + "dantrack.net": { + "name": "DANtrack", + "categoryId": 4, + "url": "http://media.dantrack.net/privacy/", + "companyId": "dentsu_aegis_network" + }, + "darwin_marketing": { + "name": "Darwin Marketing", + "categoryId": 4, + "url": "http://www.darwinmarketing.com/", + "companyId": "darwin_marketing" + }, + "dashboard_ad": { + "name": "Dashboard Ad", + "categoryId": 4, + "url": "http://www.dashboardad.com/", + "companyId": "premium_access" + }, + "datacaciques.com": { + "name": "DataCaciques", + "categoryId": 6, + "url": "http://www.datacaciques.com/", + "companyId": null + }, + "datacoral": { + "name": "Datacoral", + "categoryId": 4, + "url": "https://datacoral.com/", + "companyId": "datacoral" + }, + "datacrushers": { + "name": "Datacrushers", + "categoryId": 6, + "url": "https://www.datacrushers.com/", + "companyId": "datacrushers" + }, + "datadome": { + "name": "DataDome", + "categoryId": 6, + "url": "https://datadome.co/", + "companyId": "datadome" + }, + "datalicious_datacollector": { + "name": "Datalicious DataCollector", + "categoryId": 6, + "url": "http://www.datalicious.com/", + "companyId": "datalicious" + }, + "datalicious_supertag": { + "name": "Datalicious SuperTag", + "categoryId": 5, + "url": "http://www.datalicious.com/", + "companyId": "datalicious" + }, + "datalogix": { + "name": "Datalogix", + "categoryId": 4, + "url": "https://www.oracle.com/corporate/acquisitions/datalogix/", + "companyId": "oracle" + }, + "datamind.ru": { + "name": "DataMind", + "categoryId": 4, + "url": "http://datamind.ru/", + "companyId": "datamind" + }, + "datatables": { + "name": "DataTables", + "categoryId": 2, + "url": "https://datatables.net/", + "companyId": null + }, + "datawrkz": { + "name": "Datawrkz", + "categoryId": 4, + "url": "http://datawrkz.com/", + "companyId": "datawrkz" + }, + "dataxpand": { + "name": "Dataxpand", + "categoryId": 4, + "url": "http://dataxpand.com/", + "companyId": "dataxpand" + }, + "dataxu": { + "name": "DataXu", + "categoryId": 4, + "url": "http://www.dataxu.com/", + "companyId": "dataxu" + }, + "datds.net": { + "name": "datds.net", + "categoryId": 12, + "url": null, + "companyId": null + }, + "datonics": { + "name": "Datonics", + "categoryId": 4, + "url": "http://datonics.com/", + "companyId": "almondnet" + }, + "datran": { + "name": "Pulsepoint", + "categoryId": 4, + "url": "https://www.pulsepoint.com/", + "companyId": "pulsepoint_ad_exchange" + }, + "davebestdeals.com": { + "name": "davebestdeals.com", + "categoryId": 12, + "url": null, + "companyId": null + }, + "dawandastatic.com": { + "name": "Dawanda CDN", + "categoryId": 8, + "url": "https://dawanda.com/", + "companyId": null + }, + "dc_stormiq": { + "name": "DC StormIQ", + "categoryId": 4, + "url": "http://www.dc-storm.com/", + "companyId": "dc_storm" + }, + "dcbap.com": { + "name": "dcbap.com", + "categoryId": 12, + "url": null, + "companyId": null + }, + "dcmn.com": { + "name": "DCMN", + "categoryId": 4, + "url": "https://www.dcmn.com/", + "companyId": null + }, + "de_persgroep": { + "name": "De Persgroep", + "categoryId": 4, + "url": "https://www.persgroep.nl", + "companyId": "de_persgroep" + }, + "deadline_funnel": { + "name": "Deadline Funnel", + "categoryId": 6, + "url": "https://deadlinefunnel.com/", + "companyId": "deadline_funnel" + }, + "dealer.com": { + "name": "Dealer.com", + "categoryId": 6, + "url": "http://www.dealer.com/", + "companyId": "dealer.com" + }, + "decibel_insight": { + "name": "Decibel Insight", + "categoryId": 6, + "url": "https://www.decibelinsight.com/", + "companyId": "decibel_insight" + }, + "dedicated_media": { + "name": "Dedicated Media", + "categoryId": 4, + "url": "http://www.dedicatedmedia.com/", + "companyId": "dedicated_media" + }, + "deep.bi": { + "name": "Deep.BI", + "categoryId": 6, + "url": "http://www.deep.bi/#", + "companyId": "deep.bi" + }, + "deepintent.com": { + "name": "DeepIntent", + "categoryId": 4, + "url": "https://www.deepintent.com/", + "companyId": "deep_intent" + }, + "defpush.com": { + "name": "defpush.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "deichmann.com": { + "name": "deichmann.com", + "categoryId": 4, + "url": null, + "companyId": null + }, + "delacon": { + "name": "Delacon", + "categoryId": 6, + "url": "http://www.delacon.com.au/", + "companyId": "delacon" + }, + "delivr": { + "name": "Delivr", + "categoryId": 6, + "url": "http://www.percentmobile.com/", + "companyId": "delivr" + }, + "delta_projects": { + "name": "Delta Projects", + "categoryId": 4, + "url": "http://www.adaction.se/", + "companyId": "delta_projects" + }, + "deluxe": { + "name": "Deluxe", + "categoryId": 6, + "url": "https://ww.deluxe.com/", + "companyId": "deluxe" + }, + "delve_networks": { + "name": "Delve Networks", + "categoryId": 7, + "url": "http://www.delvenetworks.com/", + "companyId": "limelight_networks" + }, + "demandbase": { + "name": "Demandbase", + "categoryId": 4, + "url": "http://www.demandbase.com/", + "companyId": "demandbase" + }, + "demandmedia": { + "name": "DemandMedia", + "categoryId": 4, + "url": "http://www.demandmedia.com", + "companyId": "leaf_group" + }, + "deqwas": { + "name": "Deqwas", + "categoryId": 6, + "url": "http://www.deqwas.com/", + "companyId": "deqwas" + }, + "devatics": { + "name": "Devatics", + "categoryId": 2, + "url": "http://www.devatics.co.uk/", + "companyId": "devatics" + }, + "developer_media": { + "name": "Developer Media", + "categoryId": 4, + "url": "http://www.developermedia.com/", + "companyId": "developer_media" + }, + "deviantart.net": { + "name": "deviantart.net", + "categoryId": 8, + "url": null, + "companyId": null + }, + "dex_platform": { + "name": "DEX Platform", + "categoryId": 4, + "url": "http://blueadvertise.com/", + "companyId": "dex_platform" + }, + "dgm": { + "name": "dgm", + "categoryId": 4, + "url": "http://www.dgm-au.com/", + "companyId": "apd" + }, + "dialogtech": { + "name": "Dialogtech", + "categoryId": 6, + "url": "https://www.dialogtech.com/", + "companyId": "dialogtech" + }, + "dianomi": { + "name": "Dianomi", + "categoryId": 4, + "url": "http://www.dianomi.com/cms/", + "companyId": "dianomi" + }, + "didit_blizzard": { + "name": "Didit Blizzard", + "categoryId": 4, + "url": "http://www.didit.com/blizzard", + "companyId": "didit" + }, + "didit_maestro": { + "name": "Didit Maestro", + "categoryId": 4, + "url": "http://www.didit.com/maestro", + "companyId": "didit" + }, + "didomi": { + "name": "Didomi", + "categoryId": 5, + "url": "https://www.didomi.io/en/", + "companyId": "didomi" + }, + "digg_widget": { + "name": "Digg Widget", + "categoryId": 2, + "url": "http://digg.com/apple/Digg_Widget", + "companyId": "buysellads.com" + }, + "digicert_trust_seal": { + "name": "Digicert Trust Seal", + "categoryId": 5, + "url": "http://www.digicert.com/", + "companyId": "digicert" + }, + "digidip": { + "name": "Digidip", + "categoryId": 4, + "url": "http://www.digidip.net/", + "companyId": "digidip" + }, + "digiglitz": { + "name": "Digiglitz", + "categoryId": 6, + "url": "http://www.digiglitz.com/", + "companyId": "digiglitz" + }, + "digilant": { + "name": "Digilant", + "categoryId": 4, + "url": "https://www.digilant.com/", + "companyId": "digilant" + }, + "digioh": { + "name": "Digioh", + "categoryId": 4, + "url": "https://digioh.com/", + "companyId": null + }, + "digital.gov": { + "name": "Digital.gov", + "categoryId": 6, + "url": "https://digital.gov/", + "companyId": "us_government" + }, + "digital_control_room": { + "name": "Digital Control Room", + "categoryId": 5, + "url": "http://www.cookiereports.com/", + "companyId": "digital_control_room" + }, + "digital_nomads": { + "name": "Digital Nomads", + "categoryId": 4, + "url": "http://dnomads.net/", + "companyId": null + }, + "digital_remedy": { + "name": "Digital Remedy", + "categoryId": 4, + "url": "https://www.digitalremedy.com/", + "companyId": "digital_remedy" + }, + "digital_river": { + "name": "Digital River", + "categoryId": 4, + "url": "http://corporate.digitalriver.com", + "companyId": "digital_river" + }, + "digital_window": { + "name": "Digital Window", + "categoryId": 4, + "url": "http://www.digitalwindow.com/", + "companyId": "axel_springer" + }, + "digiteka": { + "name": "Digiteka", + "categoryId": 4, + "url": "http://digiteka.com/", + "companyId": "digiteka" + }, + "digitrust": { + "name": "DigiTrust", + "categoryId": 4, + "url": "http://www.digitru.st/", + "companyId": "iab" + }, + "dihitt_badge": { + "name": "diHITT Badge", + "categoryId": 7, + "url": "http://www.dihitt.com.br/", + "companyId": "dihitt" + }, + "dimml": { + "name": "DimML", + "categoryId": 8, + "url": null, + "companyId": null + }, + "direct_keyword_link": { + "name": "Direct Keyword Link", + "categoryId": 4, + "url": "http://www.keywordsconnect.com/", + "companyId": "direct_keyword_link" + }, + "directadvert": { + "name": "Direct/ADVERT", + "categoryId": 4, + "url": "http://www.directadvert.ru/", + "companyId": "directadvert" + }, + "directrev": { + "name": "DirectREV", + "categoryId": 4, + "url": "http://www.directrev.com/", + "companyId": "directrev" + }, + "discord": { + "name": "Discord", + "categoryId": 2, + "url": "https://discordapp.com/", + "companyId": null + }, + "disneyplus": { + "name": "Disney+", + "categoryId": 0, + "url": "https://www.disneyplus.com/", + "companyId": "disney", + "source": "AdGuard" + }, + "disneystreaming": { + "name": "Disney Streaming", + "categoryId": 0, + "url": "https://press.disneyplus.com", + "companyId": "disney", + "source": "AdGuard" + }, + "display_block": { + "name": "display block", + "categoryId": 4, + "url": "https://www.displayblock.com/", + "companyId": "display_block" + }, + "disqus": { + "name": "Disqus", + "categoryId": 1, + "url": "https://disqus.com/", + "companyId": "zeta" + }, + "disqus_ads": { + "name": "Disqus Ads", + "categoryId": 4, + "url": "https://disqusads.com/", + "companyId": "zeta" + }, + "distil_tag": { + "name": "Distil Networks", + "categoryId": 5, + "url": "https://www.distilnetworks.com/", + "companyId": "distil_networks" + }, + "districtm.io": { + "name": "district m", + "categoryId": 4, + "url": "https://districtm.net/", + "companyId": "district_m" + }, + "distroscale": { + "name": "Distroscale", + "categoryId": 6, + "url": "http://www.distroscale.com/", + "companyId": "distroscale" + }, + "div.show": { + "name": "div.show", + "categoryId": 12, + "url": null, + "companyId": null + }, + "diva": { + "name": "DiVa", + "categoryId": 6, + "url": "http://www.vertriebsassistent.de/", + "companyId": "diva" + }, + "divvit": { + "name": "Divvit", + "categoryId": 6, + "url": "https://www.divvit.com/", + "companyId": "divvit" + }, + "dm2": { + "name": "DM2", + "categoryId": 4, + "url": "http://digitalmediamanagement.com/", + "companyId": "digital_media_management" + }, + "dmg_media": { + "name": "DMG Media", + "categoryId": 8, + "url": "https://www.dmgmedia.co.uk/", + "companyId": "dmgt" + }, + "dmm": { + "name": "DMM", + "categoryId": 3, + "url": "http://www.dmm.co.jp", + "companyId": "dmm.r18" + }, + "dmwd": { + "name": "DMWD", + "categoryId": 8, + "url": null, + "companyId": null + }, + "dockvine": { + "name": "dockvine", + "categoryId": 2, + "url": "https://www.dockvine.com", + "companyId": "dockvine" + }, + "docler": { + "name": "Docler", + "categoryId": 0, + "url": "https://www.doclerholding.com/en/about/companies/33/", + "companyId": "docler_ip" + }, + "dogannet": { + "name": "Dogannet", + "categoryId": 4, + "url": "http://s.dogannet.tv/", + "companyId": "dogannet" + }, + "domainglass": { + "name": "Domain Glass", + "categoryId": 8, + "url": "https://domain.glass/", + "companyId": "domainglass", + "source": "AdGuard" + }, + "domodomain": { + "name": "DomoDomain", + "categoryId": 6, + "url": "http://www.domodomain.com/", + "companyId": "intelligencefocus" + }, + "donationtools": { + "name": "iRobinHood", + "categoryId": 12, + "url": "http://www.irobinhood.org", + "companyId": null + }, + "doofinder.com": { + "name": "doofinder", + "categoryId": 2, + "url": "https://www.doofinder.com/", + "companyId": null + }, + "doorbell.io": { + "name": "Doorbell.io", + "categoryId": 5, + "url": "https://doorbell.io/", + "companyId": "doorbell.io" + }, + "dotandmedia": { + "name": "DotAndMedia", + "categoryId": 4, + "url": "http://www.dotandmedia.com", + "companyId": "dotandmedia" + }, + "dotmailer": { + "name": "dotMailer", + "categoryId": 2, + "url": "http://www.dotdigitalgroup.com/", + "companyId": "dotdigital_group" + }, + "dotmetrics.net": { + "name": "Dotmetrics", + "categoryId": 6, + "url": "https://dotmetrics.net/", + "companyId": null + }, + "dotomi": { + "name": "Dotomi", + "categoryId": 4, + "url": "http://www.dotomi.com/", + "companyId": "conversant" + }, + "double.net": { + "name": "Double.net", + "categoryId": 4, + "url": "http://double.net/en/", + "companyId": "double.net" + }, + "doubleclick": { + "name": "DoubleClick", + "categoryId": 4, + "url": "http://www.doubleclick.com", + "companyId": "google" + }, + "doubleclick_ad_buyer": { + "name": "DoubleClick Ad Exchange-Buyer", + "categoryId": 4, + "url": "http://www.google.com", + "companyId": "google" + }, + "doubleclick_bid_manager": { + "name": "DoubleClick Bid Manager", + "categoryId": 4, + "url": "http://www.invitemedia.com", + "companyId": "google" + }, + "doubleclick_floodlight": { + "name": "DoubleClick Floodlight", + "categoryId": 4, + "url": "http://www.google.com/support/dfa/partner/bin/topic.py?topic=23943", + "companyId": "google" + }, + "doubleclick_spotlight": { + "name": "DoubleClick Spotlight", + "categoryId": 4, + "url": "http://www.doubleclick.com/products/richmedia", + "companyId": "google" + }, + "doubleclick_video_stats": { + "name": "Doubleclick Video Stats", + "categoryId": 4, + "url": "http://www.google.com", + "companyId": "google" + }, + "doublepimp": { + "name": "DoublePimp", + "categoryId": 3, + "url": "http://www.doublepimp.com/", + "companyId": "doublepimp" + }, + "doubleverify": { + "name": "DoubleVerify", + "categoryId": 4, + "url": "http://www.doubleverify.com/", + "companyId": "doubleverify" + }, + "dratio": { + "name": "Dratio", + "categoryId": 6, + "url": "http://www.dratio.com/", + "companyId": "dratio" + }, + "drawbridge": { + "name": "Drawbridge", + "categoryId": 4, + "url": "http://www.drawbrid.ge/", + "companyId": "drawbridge" + }, + "dreame_tech": { + "name": "Dreame Technology", + "categoryId": 8, + "url": "https://www.dreame.tech/", + "companyId": "xiaomi", + "source": "AdGuard" + }, + "dreamlab.pl": { + "name": "DreamLab.pl", + "categoryId": 4, + "url": "https://www.dreamlab.pl/", + "companyId": "onet.pl" + }, + "drift": { + "name": "Drift", + "categoryId": 2, + "url": "https://www.drift.com/", + "companyId": "drift" + }, + "drip": { + "name": "Drip", + "categoryId": 2, + "url": "https://www.getdrip.com", + "companyId": "drip" + }, + "dropbox.com": { + "name": "Dropbox", + "categoryId": 2, + "url": "https://www.dropbox.com/", + "companyId": null + }, + "dsnr_media_group": { + "name": "DSNR Media Group", + "categoryId": 4, + "url": "http://www.dsnrmg.com/", + "companyId": "dsnr_media_group" + }, + "dsp_rambler": { + "name": "Rambler DSP", + "categoryId": 4, + "url": "http://dsp.rambler.ru/", + "companyId": "rambler" + }, + "dstillery": { + "name": "Dstillery", + "categoryId": 4, + "url": "https://dstillery.com/", + "companyId": "dstillery" + }, + "dtscout.com": { + "name": "DTScout", + "categoryId": 4, + "url": "http://www.dtscout.com/", + "companyId": "dtscout" + }, + "dudamobile": { + "name": "DudaMobile", + "categoryId": 4, + "url": "https://www.dudamobile.com/", + "companyId": "dudamobile" + }, + "dun_and_bradstreet": { + "name": "Dun and Bradstreet", + "categoryId": 6, + "url": "http://www.dnb.com/#", + "companyId": "dun_&_bradstreet" + }, + "dwstat.cn": { + "name": "dwstat.cn", + "categoryId": 6, + "url": "http://www.dwstat.cn/", + "companyId": "dwstat" + }, + "dynad": { + "name": "DynAd", + "categoryId": 4, + "url": "http://dynad.net/", + "companyId": "dynad" + }, + "dynadmic": { + "name": "DynAdmic", + "categoryId": 4, + "url": null, + "companyId": null + }, + "dynamic_1001_gmbh": { + "name": "Dynamic 1001 GmbH", + "categoryId": 8, + "url": null, + "companyId": null + }, + "dynamic_logic": { + "name": "Dynamic Logic", + "categoryId": 4, + "url": "http://www.dynamiclogic.com/", + "companyId": "millward_brown" + }, + "dynamic_yield": { + "name": "Dynamic Yield", + "categoryId": 5, + "url": "https://www.dynamicyield.com/", + "companyId": "dynamic_yield" + }, + "dynamic_yield_analytics": { + "name": "Dynamic Yield Analytics", + "categoryId": 6, + "url": "http://www.dynamicyield.com/", + "companyId": "dynamic_yield" + }, + "dynata": { + "name": "Dynata", + "categoryId": 4, + "url": "http://hottraffic.nl/en", + "companyId": "dynata" + }, + "dynatrace.com": { + "name": "Dynatrace", + "categoryId": 6, + "url": "https://www.dynatrace.com/", + "companyId": "thoma_bravo" + }, + "dyncdn.me": { + "name": "dyncdn.me", + "categoryId": 11, + "url": null, + "companyId": null + }, + "e-planning": { + "name": "e-planning", + "categoryId": 4, + "url": "http://www.e-planning.net/", + "companyId": "e-planning" + }, + "eadv": { + "name": "eADV", + "categoryId": 4, + "url": "http://eadv.it/", + "companyId": "eadv" + }, + "eanalyzer.de": { + "name": "eanalyzer.de", + "categoryId": 11, + "url": null, + "companyId": null + }, + "early_birds": { + "name": "Early Birds", + "categoryId": 4, + "url": "http://www.early-birds.fr/", + "companyId": "early_birds" + }, + "earnify": { + "name": "Earnify", + "categoryId": 4, + "url": "https://www.earnify.com/", + "companyId": "earnify" + }, + "earnify_tracker": { + "name": "Earnify Tracker", + "categoryId": 6, + "url": "https://www.earnify.com/", + "companyId": "earnify" + }, + "easyads": { + "name": "EasyAds", + "categoryId": 4, + "url": "https://easyads.bg/", + "companyId": "easyads" + }, + "easylist_club": { + "name": "easylist.club", + "categoryId": 11, + "url": null, + "companyId": null + }, + "ebay": { + "name": "eBay Stats", + "categoryId": 4, + "url": "https://partnernetwork.ebay.com/", + "companyId": "ebay_partner_network" + }, + "ebay_korea": { + "name": "eBay Korea", + "categoryId": 4, + "url": "http://www.ebay.com/", + "companyId": "ebay" + }, + "ebay_partner_network": { + "name": "eBay Partner Network", + "categoryId": 4, + "url": "https://www.ebaypartnernetwork.com/files/hub/en-US/index.html", + "companyId": "ebay_partner_network" + }, + "ebuzzing": { + "name": "eBuzzing", + "categoryId": 4, + "url": "http://www.ebuzzing.com/", + "companyId": "ebuzzing" + }, + "echo": { + "name": "Echo", + "categoryId": 4, + "url": "http://js-kit.com/", + "companyId": "echo" + }, + "eclick": { + "name": "eClick", + "categoryId": 4, + "url": "http://eclick.vn", + "companyId": "eclick" + }, + "econda": { + "name": "Econda", + "categoryId": 6, + "url": "http://www.econda.de/", + "companyId": "econda" + }, + "ecotag": { + "name": "ecotag", + "categoryId": 4, + "url": "http://www.eco-tag.jp/", + "companyId": "ecotag" + }, + "edgio": { + "name": "Edgio", + "categoryId": 9, + "url": "https://edg.io/", + "companyId": "edgio", + "source": "AdGuard" + }, + "edigitalresearch": { + "name": "eDigitalResearch", + "categoryId": 4, + "url": "http://www.edigitalresearch.com/", + "companyId": "edigitalresearch" + }, + "effective_measure": { + "name": "Effective Measure", + "categoryId": 4, + "url": "http://www.effectivemeasure.com/", + "companyId": "effective_measure" + }, + "effiliation": { + "name": "Effiliation", + "categoryId": 4, + "url": "http://www.effiliation.com/", + "companyId": "effiliation" + }, + "egain": { + "name": "eGain", + "categoryId": 2, + "url": "http://www.egain.com/", + "companyId": "egain" + }, + "egain_analytics": { + "name": "eGain Analytics", + "categoryId": 6, + "url": "http://www.egain.com/", + "companyId": "egain" + }, + "ehi-siegel_de": { + "name": "ehi-siegel.de", + "categoryId": 2, + "url": "http://ehi-siegel.de/", + "companyId": null + }, + "ekmpinpoint": { + "name": "ekmPinPoint", + "categoryId": 6, + "url": "http://ekmpinpoint.com/", + "companyId": "ekmpinpoint" + }, + "ekomi": { + "name": "eKomi", + "categoryId": 1, + "url": "http://www.ekomi.co.uk", + "companyId": "ekomi" + }, + "elastic_ad": { + "name": "Elastic Ad", + "categoryId": 4, + "url": "http://www.elasticad.com", + "companyId": "elastic_ad" + }, + "elastic_beanstalk": { + "name": "Elastic Beanstalk", + "categoryId": 6, + "url": "http://www.amazon.com/", + "companyId": "amazon_associates" + }, + "electronic_arts": { + "name": "Electronic Arts", + "categoryId": 2, + "url": "https://www.ea.com/", + "companyId": "electronic_arts", + "source": "AdGuard" + }, + "element": { + "name": "Element", + "categoryId": 7, + "url": "https://element.io/", + "companyId": "element", + "source": "AdGuard" + }, + "elicit": { + "name": "elicit", + "categoryId": 4, + "url": "http://www.elicitsearch.com/", + "companyId": "elicit" + }, + "eloqua": { + "name": "Eloqua", + "categoryId": 4, + "url": "http://www.eloqua.com/", + "companyId": "oracle" + }, + "eluxer_net": { + "name": "eluxer.net", + "categoryId": 12, + "url": null, + "companyId": null + }, + "email_aptitude": { + "name": "Email Aptitude", + "categoryId": 4, + "url": "http://www.emailaptitude.com/", + "companyId": "email_aptitude" + }, + "email_attitude": { + "name": "Email Attitude", + "categoryId": 4, + "url": "http://us.email-attitude.com/Default.aspx", + "companyId": "1000mercis" + }, + "emarketeer": { + "name": "emarketeer", + "categoryId": 4, + "url": "http://www.emarketeer.com/", + "companyId": "emarketeer" + }, + "embed.ly": { + "name": "Embedly", + "categoryId": 6, + "url": "http://embed.ly/", + "companyId": "medium" + }, + "emediate": { + "name": "Emediate", + "categoryId": 4, + "url": "http://www.emediate.biz/", + "companyId": "cxense" + }, + "emetriq": { + "name": "emetriq", + "categoryId": 4, + "url": "http://www.emetriq.com", + "companyId": "emetriq" + }, + "emma": { + "name": "Emma", + "categoryId": 4, + "url": "http://myemma.com/", + "companyId": "emma" + }, + "emnet": { + "name": "eMnet", + "categoryId": 4, + "url": "http://www.emnet.co.kr", + "companyId": "emnet" + }, + "empathy": { + "name": "Empathy", + "categoryId": 4, + "url": "http://www.colbenson.com", + "companyId": "empathy" + }, + "emsmobile.de": { + "name": "EMS Mobile", + "categoryId": 8, + "url": "http://www.emsmobile.com/", + "companyId": null + }, + "encore_metrics": { + "name": "Encore Metrics", + "categoryId": 4, + "url": "http://sitecompass.com", + "companyId": "flashtalking" + }, + "enecto_analytics": { + "name": "Enecto Analytics", + "categoryId": 6, + "url": "http://www.enecto.com/en/", + "companyId": "enecto" + }, + "engage_sciences": { + "name": "Engage Sciences", + "categoryId": 6, + "url": "http://www.engagesciences.com/", + "companyId": "engagesciences" + }, + "engageya_widget": { + "name": "Engageya Widget", + "categoryId": 4, + "url": "http://www.engageya.com/home/", + "companyId": "engageya" + }, + "engagio": { + "name": "Engagio", + "categoryId": 6, + "url": "https://www.engagio.com/", + "companyId": "engagio" + }, + "engineseeker": { + "name": "EngineSeeker", + "categoryId": 4, + "url": "http://www.engineseeker.com/", + "companyId": "engineseeker" + }, + "enquisite": { + "name": "Enquisite", + "categoryId": 4, + "url": "http://www.enquisite.com/", + "companyId": "inboundwriter" + }, + "enreach": { + "name": "Enreach", + "categoryId": 4, + "url": "https://enreach.me/", + "companyId": "enreach" + }, + "ensemble": { + "name": "Ensemble", + "categoryId": 4, + "url": "http://www.tumri.com", + "companyId": "ensemble" + }, + "ensighten": { + "name": "Ensighten", + "categoryId": 5, + "url": "http://www.ensighten.com", + "companyId": "ensighten" + }, + "envolve": { + "name": "Envolve", + "categoryId": 2, + "url": "https://www.envolve.com/", + "companyId": "envolve" + }, + "envybox": { + "name": "Envybox", + "categoryId": 2, + "url": "https://envybox.io/", + "companyId": "envybox" + }, + "eperflex": { + "name": "Eperflex", + "categoryId": 4, + "url": "https://eperflex.com/", + "companyId": "ividence" + }, + "epic_game_ads": { + "name": "Epic Game Ads", + "categoryId": 4, + "url": "http://www.epicgameads.com/", + "companyId": "epic_game_ads" + }, + "epic_marketplace": { + "name": "Epic Marketplace", + "categoryId": 4, + "url": "http://www.trafficmarketplace.com/", + "companyId": "epic_advertising" + }, + "epom": { + "name": "Epom", + "categoryId": 4, + "url": "http://epom.com/", + "companyId": "epom" + }, + "epoq": { + "name": "epoq", + "categoryId": 2, + "url": "http://www.epoq.de/", + "companyId": "epoq" + }, + "eprice": { + "name": "ePrice", + "categoryId": 4, + "url": "http://banzaiadv.it/", + "companyId": "eprice" + }, + "eproof": { + "name": "eProof", + "categoryId": 6, + "url": "http://www.eproof.com/", + "companyId": "eproof" + }, + "eqs_group": { + "name": "EQS Group", + "categoryId": 6, + "url": "https://www.eqs.com/", + "companyId": "eqs_group" + }, + "eqworks": { + "name": "EQWorks", + "categoryId": 4, + "url": "http://eqads.com", + "companyId": "eq_works" + }, + "eroadvertising": { + "name": "EroAdvertising", + "categoryId": 3, + "url": "http://www.ero-advertising.com/", + "companyId": "ero_advertising" + }, + "errorception": { + "name": "Errorception", + "categoryId": 6, + "url": "http://errorception.com/", + "companyId": "errorception" + }, + "eshopcomp.com": { + "name": "eshopcomp.com", + "categoryId": 12, + "url": null, + "companyId": null + }, + "espn_cdn": { + "name": "ESPN CDN", + "categoryId": 9, + "url": "http://www.espn.com/", + "companyId": "disney" + }, + "esprit.de": { + "name": "esprit.de", + "categoryId": 8, + "url": null, + "companyId": null + }, + "estat": { + "name": "eStat", + "categoryId": 6, + "url": "http://www.mediametrie-estat.com/", + "companyId": "mediametrie" + }, + "etag": { + "name": "etag", + "categoryId": 4, + "url": "http://etagdigital.com.br/", + "companyId": "etag" + }, + "etahub.com": { + "name": "etahub.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "etarget": { + "name": "Etarget", + "categoryId": 4, + "url": "http://etargetnet.com/", + "companyId": "etarget" + }, + "ethnio": { + "name": "Ethnio", + "categoryId": 4, + "url": "http://ethn.io/", + "companyId": "ethnio" + }, + "etology": { + "name": "Etology", + "categoryId": 4, + "url": "http://www.etology.com", + "companyId": "etology" + }, + "etp": { + "name": "ETP", + "categoryId": 6, + "url": "https://www.etpgroup.com", + "companyId": "etp" + }, + "etracker": { + "name": "etracker", + "categoryId": 6, + "url": "http://www.etracker.com/en/", + "companyId": "etracker_gmbh" + }, + "etrigue": { + "name": "eTrigue", + "categoryId": 4, + "url": "http://www.etrigue.com/", + "companyId": "etrigue" + }, + "etsystatic": { + "name": "Etsy CDN", + "categoryId": 9, + "url": "https://www.etsy.com/", + "companyId": "etsy" + }, + "eulerian": { + "name": "Eulerian", + "categoryId": 6, + "url": "https://www.eulerian.com/", + "companyId": "eulerian" + }, + "euroads": { + "name": "Euroads", + "categoryId": 4, + "url": "http://euroads.com/en/", + "companyId": "euroads" + }, + "europecash": { + "name": "Europecash", + "categoryId": 4, + "url": "https://www.europacash.com/", + "companyId": "europacash" + }, + "euroweb_counter": { + "name": "Euroweb Counter", + "categoryId": 4, + "url": "http://www.euroweb.de/", + "companyId": "euroweb" + }, + "evergage.com": { + "name": "Evergage", + "categoryId": 2, + "url": "https://www.evergage.com", + "companyId": "evergage" + }, + "everstring": { + "name": "Everstring", + "categoryId": 6, + "url": "http://www.everstring.com/", + "companyId": "everstring" + }, + "everyday_health": { + "name": "Everyday Health", + "categoryId": 7, + "url": "http://www.everydayhealth.com/", + "companyId": "everyday_health" + }, + "evidon": { + "name": "Evidon", + "categoryId": 5, + "url": "https://www.evidon.com/", + "companyId": "crownpeak" + }, + "evisit_analyst": { + "name": "eVisit Analyst", + "categoryId": 4, + "url": "http://www.evisitanalyst.com", + "companyId": "evisit_analyst" + }, + "exact_drive": { + "name": "Exact Drive", + "categoryId": 4, + "url": "http://www.exactdrive.com/", + "companyId": "exact_drive" + }, + "exactag": { + "name": "Exactag", + "categoryId": 6, + "url": "http://www.exactag.com", + "companyId": "exactag" + }, + "exelate": { + "name": "eXelate", + "categoryId": 4, + "url": "http://www.exelate.com/", + "companyId": "nielsen" + }, + "exitjunction": { + "name": "ExitJunction", + "categoryId": 4, + "url": "https://secure.exitjunction.com", + "companyId": "exitjunction" + }, + "exoclick": { + "name": "ExoClick", + "categoryId": 3, + "url": "http://exoclick.com/", + "companyId": "exoclick" + }, + "exoticads.com": { + "name": "exoticads", + "categoryId": 3, + "url": "https://exoticads.com/welcome/", + "companyId": null + }, + "expedia": { + "name": "Expedia", + "categoryId": 8, + "url": "https://www.trvl-px.com/", + "companyId": "iac_apps" + }, + "experian": { + "name": "Experian", + "categoryId": 8, + "url": "https://www.experian.com/", + "companyId": "experian_inc" + }, + "experian_marketing_services": { + "name": "Experian Marketing Services", + "categoryId": 4, + "url": "http://www.experian.com/", + "companyId": "experian_inc" + }, + "expo-max": { + "name": "expo-MAX", + "categoryId": 4, + "url": "http://expo-max.com/", + "companyId": "expo-max" + }, + "expose_box": { + "name": "Expose Box", + "categoryId": 4, + "url": "http://www.exposebox.com/", + "companyId": "expose_box" + }, + "expose_box_widgets": { + "name": "Expose Box Widgets", + "categoryId": 2, + "url": "http://www.exposebox.com/", + "companyId": "expose_box" + }, + "express.co.uk": { + "name": "express.co.uk", + "categoryId": 8, + "url": "https://www.express.co.uk/", + "companyId": null + }, + "expressvpn": { + "name": "ExpressVPN", + "categoryId": 2, + "url": "https://www.expressvpn.com/", + "companyId": "expressvpn" + }, + "extreme_tracker": { + "name": "eXTReMe Tracker", + "categoryId": 6, + "url": "http://www.extremetracking.com/", + "companyId": "extreme_digital" + }, + "eye_newton": { + "name": "Eye Newton", + "categoryId": 2, + "url": "http://eyenewton.ru/", + "companyId": "eyenewton" + }, + "eyeota": { + "name": "Eyeota", + "categoryId": 4, + "url": "http://www.eyeota.com/", + "companyId": "eyeota" + }, + "eyereturnmarketing": { + "name": "Eyereturn Marketing", + "categoryId": 4, + "url": "https://eyereturnmarketing.com/", + "companyId": "torstar_corp" + }, + "eyeview": { + "name": "Eyeview", + "categoryId": 4, + "url": "http://www.eyeviewdigital.com/", + "companyId": "eyeview" + }, + "ezakus": { + "name": "Ezakus", + "categoryId": 4, + "url": "http://www.ezakus.com/", + "companyId": "np6" + }, + "f11-ads.com": { + "name": "Factor Eleven", + "categoryId": 4, + "url": null, + "companyId": null + }, + "facebook": { + "name": "Facebook", + "categoryId": 4, + "url": "https://www.facebook.com", + "companyId": "meta", + "source": "AdGuard" + }, + "facebook_audience": { + "name": "Facebook Audience Network", + "categoryId": 4, + "url": "https://www.facebook.com/business/products/audience-network", + "companyId": "meta", + "source": "AdGuard" + }, + "facebook_beacon": { + "name": "Facebook Beacon", + "categoryId": 7, + "url": "http://www.facebook.com/beacon/faq.php", + "companyId": "meta", + "source": "AdGuard" + }, + "facebook_cdn": { + "name": "Facebook CDN", + "categoryId": 9, + "url": "https://www.facebook.com", + "companyId": "meta", + "source": "AdGuard" + }, + "facebook_connect": { + "name": "Facebook Connect", + "categoryId": 6, + "url": "https://developers.facebook.com/connect.php", + "companyId": "meta", + "source": "AdGuard" + }, + "facebook_conversion_tracking": { + "name": "Facebook Conversion Tracking", + "categoryId": 4, + "url": "http://www.facebook.com/", + "companyId": "meta", + "source": "AdGuard" + }, + "facebook_custom_audience": { + "name": "Facebook Custom Audience", + "categoryId": 4, + "url": "https://www.facebook.com", + "companyId": "meta", + "source": "AdGuard" + }, + "facebook_graph": { + "name": "Facebook Social Graph", + "categoryId": 7, + "url": "https://developers.facebook.com/docs/reference/api/", + "companyId": "meta", + "source": "AdGuard" + }, + "facebook_impressions": { + "name": "Facebook Impressions", + "categoryId": 4, + "url": "https://www.facebook.com/", + "companyId": "meta", + "source": "AdGuard" + }, + "facebook_social_plugins": { + "name": "Facebook Social Plugins", + "categoryId": 7, + "url": "https://developers.facebook.com/plugins", + "companyId": "meta", + "source": "AdGuard" + }, + "facetz.dca": { + "name": "Facetz.DCA", + "categoryId": 4, + "url": "http://facetz.net", + "companyId": "dca" + }, + "facilitate_digital": { + "name": "Facilitate Digital", + "categoryId": 4, + "url": "http://www.facilitatedigital.com/", + "companyId": "adslot" + }, + "faktor.io": { + "name": "faktor.io", + "categoryId": 6, + "url": "https://faktor.io/", + "companyId": "faktor.io" + }, + "fancy_widget": { + "name": "Fancy Widget", + "categoryId": 7, + "url": "http://www.thefancy.com/", + "companyId": "fancy" + }, + "fanplayr": { + "name": "Fanplayr", + "categoryId": 4, + "url": "http://www.fanplayr.com/", + "companyId": "fanplayr" + }, + "fap.to": { + "name": "Imagefap", + "categoryId": 8, + "url": null, + "companyId": null + }, + "farlight_pte_ltd": { + "name": "Farlight Pte Ltd.", + "categoryId": 8, + "url": "https://farlightgames.com/", + "companyId": "farlight", + "source": "AdGuard" + }, + "fastly_insights": { + "name": "Fastly Insights", + "categoryId": 6, + "url": "https://insights.fastlylabs.com/", + "companyId": "fastly" + }, + "fastlylb.net": { + "name": "Fastly", + "categoryId": 9, + "url": "https://www.fastly.com/", + "companyId": "fastly" + }, + "fastpic.ru": { + "name": "FastPic", + "categoryId": 10, + "url": "http://fastpic.ru/", + "companyId": "fastpic" + }, + "federated_media": { + "name": "Federated Media", + "categoryId": 4, + "url": "http://www.federatedmedia.net/", + "companyId": "hyfn" + }, + "feedbackify": { + "name": "Feedbackify", + "categoryId": 2, + "url": "http://www.feedbackify.com/", + "companyId": "feedbackify" + }, + "feedburner.com": { + "name": "FeedBurner", + "categoryId": 4, + "url": "https://feedburner.com", + "companyId": "google" + }, + "feedify": { + "name": "Feedify", + "categoryId": 7, + "url": "http://feedify.de/", + "companyId": "feedify" + }, + "feedjit": { + "name": "Feedjit", + "categoryId": 4, + "url": "http://feedjit.com/", + "companyId": "feedjit" + }, + "feedperfect": { + "name": "FeedPerfect", + "categoryId": 4, + "url": "http://www.feedperfect.com/", + "companyId": "feedperfect" + }, + "feedsportal": { + "name": "Feedsportal", + "categoryId": 4, + "url": "http://www.mediafed.com/", + "companyId": "mediafed" + }, + "feefo": { + "name": "Feefo", + "categoryId": 2, + "url": "http://www.feefo.com/web/en/us/", + "companyId": "feefo" + }, + "fidelity_media": { + "name": "Fidelity Media", + "categoryId": 4, + "url": "http://fidelity-media.com/", + "companyId": "fidelity_media" + }, + "fiksu": { + "name": "Fiksu", + "categoryId": 4, + "url": "https://fiksu.com/", + "companyId": "noosphere" + }, + "filament.io": { + "name": "Filament.io", + "categoryId": 4, + "url": "http://sharethis.com/", + "companyId": "sharethis" + }, + "fileserve": { + "name": "FileServe", + "categoryId": 10, + "url": "http://fileserve.com/", + "companyId": "fileserve" + }, + "financeads": { + "name": "FinanceADs", + "categoryId": 4, + "url": "https://www.financeads.net/", + "companyId": "financeads_gmbh_&_co._kg" + }, + "financial_content": { + "name": "Financial Content", + "categoryId": 4, + "url": "http://www.financialcontent.com", + "companyId": "financial_content" + }, + "findizer.fr": { + "name": "Findizer", + "categoryId": 8, + "url": "http://www.findizer.fr/", + "companyId": null + }, + "findologic.com": { + "name": "Findologic", + "categoryId": 2, + "url": "https://www.findologic.com/", + "companyId": "findologic" + }, + "firebase": { + "name": "Firebase", + "categoryId": 101, + "url": "https://firebase.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "firebaseio.com": { + "name": "Firebase", + "categoryId": 8, + "url": "https://firebase.google.com/", + "companyId": "google" + }, + "first_impression": { + "name": "First Impression", + "categoryId": 4, + "url": "http://www.firstimpression.io", + "companyId": "first_impression" + }, + "fit_analytics": { + "name": "Fit Analytics", + "categoryId": 6, + "url": "http://www.fitanalytics.com/", + "companyId": "fit_analytics" + }, + "fivetran": { + "name": "Fivetran", + "categoryId": 6, + "url": "https://fivetran.com/", + "companyId": "fivetran" + }, + "flag_ads": { + "name": "Flag Ads", + "categoryId": 4, + "url": "http://www.flagads.net/", + "companyId": "flag_ads" + }, + "flag_counter": { + "name": "Flag Counter", + "categoryId": 4, + "url": "http://flagcounter.com/", + "companyId": "flag_counter" + }, + "flash": { + "name": "Flash", + "categoryId": 0, + "url": "https://flashnews.com.au/", + "companyId": "news_corp", + "source": "AdGuard" + }, + "flashtalking": { + "name": "Flashtalking", + "categoryId": 4, + "url": "http://www.flashtalking.com/", + "companyId": "flashtalking" + }, + "flattr_button": { + "name": "Flattr Button", + "categoryId": 7, + "url": "http://flattr.com/", + "companyId": "flattr" + }, + "flexoffers": { + "name": "FlexOffers", + "categoryId": 4, + "url": "http://www.flexoffers.com/", + "companyId": "flexoffers.com" + }, + "flickr_badge": { + "name": "Flickr Badge", + "categoryId": 7, + "url": "http://www.flickr.com/", + "companyId": "smugmug" + }, + "flipboard": { + "name": "Flipboard", + "categoryId": 6, + "url": "http://www.flipboard.com/", + "companyId": "flipboard" + }, + "flite": { + "name": "Flite", + "categoryId": 4, + "url": "http://www.flite.com/", + "companyId": "flite" + }, + "flixcdn.com": { + "name": "flixcdn.com", + "categoryId": 9, + "url": null, + "companyId": null + }, + "flixmedia": { + "name": "Flixmedia", + "categoryId": 8, + "url": "https://flixmedia.eu", + "companyId": "flixmedia" + }, + "flocktory.com": { + "name": "Flocktory", + "categoryId": 6, + "url": "https://www.flocktory.com/", + "companyId": "flocktory" + }, + "flowplayer": { + "name": "Flowplayer", + "categoryId": 4, + "url": "https://flowplayer.org/", + "companyId": "flowplayer" + }, + "fluct": { + "name": "Fluct", + "categoryId": 4, + "url": "https://corp.fluct.jp/", + "companyId": "fluct" + }, + "fluent": { + "name": "Fluent", + "categoryId": 4, + "url": "http://www.fluentco.com/", + "companyId": "fluent" + }, + "fluid": { + "name": "Fluid", + "categoryId": 4, + "url": "http://www.8thbridge.com/", + "companyId": "fluid" + }, + "fluidads": { + "name": "FluidAds", + "categoryId": 4, + "url": "http://www.fluidads.co/", + "companyId": "fluidads" + }, + "fluidsurveys": { + "name": "FluidSurveys", + "categoryId": 2, + "url": "http://fluidsurveys.com/", + "companyId": "fluidware" + }, + "flurry": { + "name": "Flurry", + "categoryId": 101, + "url": "http://www.flurry.com/", + "companyId": "apollo_global_management", + "source": "AdGuard" + }, + "flxone": { + "name": "FLXONE", + "categoryId": 4, + "url": "http://www.flxone.com/", + "companyId": "flxone" + }, + "flyertown": { + "name": "Flyertown", + "categoryId": 6, + "url": "http://www.flyertown.ca/", + "companyId": "flyertown" + }, + "fmadserving": { + "name": "FMAdserving", + "categoryId": 4, + "url": "http://www.fmadserving.dk/", + "companyId": "fm_adserving" + }, + "fonbet": { + "name": "Fonbet", + "categoryId": 6, + "url": "https://www.fonbet.ru", + "companyId": "fonbet" + }, + "fonecta": { + "name": "Fonecta", + "categoryId": 2, + "url": "http://www.fonecta.com/", + "companyId": "fonecta" + }, + "fontawesome_com": { + "name": "fontawesome.com", + "categoryId": 9, + "url": "http://fontawesome.com/", + "companyId": null + }, + "foodie_blogroll": { + "name": "Foodie Blogroll", + "categoryId": 7, + "url": "http://www.foodieblogroll.com", + "companyId": "foodie_blogroll" + }, + "footprint": { + "name": "Footprint", + "categoryId": 4, + "url": "http://www.footprintlive.com/", + "companyId": "opentracker" + }, + "footprintdns.com": { + "name": "Footprint DNS", + "categoryId": 11, + "url": "https://www.microsoft.com/", + "companyId": "microsoft" + }, + "forcetrac": { + "name": "ForceTrac", + "categoryId": 2, + "url": "http://www.forcetrac.com/", + "companyId": "force_marketing" + }, + "forensiq": { + "name": "Forensiq", + "categoryId": 4, + "url": "http://www.cpadetective.com/", + "companyId": "impact" + }, + "foresee": { + "name": "ForeSee", + "categoryId": 5, + "url": "https://www.foresee.com/", + "companyId": "foresee_results" + }, + "formisimo": { + "name": "Formisimo", + "categoryId": 4, + "url": "https://www.formisimo.com/", + "companyId": "formisimo" + }, + "forter": { + "name": "Forter", + "categoryId": 4, + "url": "https://www.forter.com/", + "companyId": "forter" + }, + "fortlachanhecksof.info": { + "name": "fortlachanhecksof.info", + "categoryId": 11, + "url": null, + "companyId": null + }, + "foursquare_widget": { + "name": "Foursquare Widget", + "categoryId": 4, + "url": "https://foursquare.com/", + "companyId": "foursquare" + }, + "fout.jp": { + "name": "FreakOut", + "categoryId": 4, + "url": "https://www.fout.co.jp/", + "companyId": "freakout" + }, + "fox_audience_network": { + "name": "Fox Audience Network", + "categoryId": 4, + "url": "https://publishers.foxaudiencenetwork.com/", + "companyId": "fox_audience_network" + }, + "fox_sports": { + "name": "Fox Sports", + "categoryId": 0, + "url": "https://foxsports.com.au/", + "companyId": "news_corp", + "source": "AdGuard" + }, + "foxnews_static": { + "name": "Fox News CDN", + "categoryId": 9, + "url": "http://www.foxnews.com/", + "companyId": "fox_news" + }, + "foxpush": { + "name": "FoxPush", + "categoryId": 4, + "url": "https://www.foxpush.com/", + "companyId": "foxpush" + }, + "foxtel": { + "name": "Foxtel", + "categoryId": 0, + "url": "https://foxtel.com.au/", + "companyId": "news_corp", + "source": "AdGuard" + }, + "foxydeal_com": { + "name": "foxydeal.com", + "categoryId": 12, + "url": "https://www.foxydeal.de", + "companyId": null + }, + "fraudlogix": { + "name": "FraudLogix", + "categoryId": 4, + "url": "https://www.fraudlogix.com/", + "companyId": null + }, + "free_counter": { + "name": "Free Counter", + "categoryId": 6, + "url": "http://www.statcounterfree.com/", + "companyId": "free_counter" + }, + "free_online_users": { + "name": "Free Online Users", + "categoryId": 6, + "url": "http://www.freeonlineusers.com", + "companyId": "free_online_users" + }, + "free_pagerank": { + "name": "Free PageRank", + "categoryId": 6, + "url": "http://www.free-pagerank.com/", + "companyId": "free_pagerank" + }, + "freedom_mortgage": { + "name": "Freedom Mortgage", + "categoryId": 6, + "url": "https://www.freedommortgage.com/", + "companyId": "freedom_mortgage" + }, + "freegeoip_net": { + "name": "freegeoip.net", + "categoryId": 6, + "url": "http://freegeoip.net/", + "companyId": null + }, + "freenet_de": { + "name": "freenet.de", + "categoryId": 4, + "url": "http://freenet.de/", + "companyId": "debitel" + }, + "freeview": { + "name": "Freeview", + "categoryId": 0, + "url": "https://freeview.com.au/", + "companyId": "freeview", + "source": "AdGuard" + }, + "freewheel": { + "name": "FreeWheel", + "categoryId": 4, + "url": "http://www.freewheel.tv/", + "companyId": "comcast" + }, + "fresh8": { + "name": "Fresh8", + "categoryId": 6, + "url": "http://fresh8gaming.com/", + "companyId": "fresh_8_gaming" + }, + "freshdesk": { + "name": "Freshdesk", + "categoryId": 2, + "url": "http://www.freshdesk.com", + "companyId": "freshdesk" + }, + "freshplum": { + "name": "Freshplum", + "categoryId": 4, + "url": "https://freshplum.com/", + "companyId": "freshplum" + }, + "friendbuy": { + "name": "FriendBuy", + "categoryId": 6, + "url": "https://www.friendbuy.com", + "companyId": "friendbuy" + }, + "friendfeed": { + "name": "FriendFeed", + "categoryId": 7, + "url": "http://friendfeed.com/", + "companyId": "facebook" + }, + "friendfinder_network": { + "name": "FriendFinder Network", + "categoryId": 3, + "url": "http://www.ffn.com/", + "companyId": "friendfinder_networks" + }, + "frosmo_optimizer": { + "name": "Frosmo Optimizer", + "categoryId": 4, + "url": "http://frosmo.com/", + "companyId": "frosmo" + }, + "fruitflan": { + "name": "FruitFlan", + "categoryId": 4, + "url": "http://flan-tech.com/", + "companyId": "keytiles" + }, + "fstrk.net": { + "name": "24metrics Fraudshield", + "categoryId": 6, + "url": "https://24metrics.com/", + "companyId": "24metrics" + }, + "fuelx": { + "name": "FuelX", + "categoryId": 4, + "url": "http://fuelx.com/", + "companyId": "fuelx" + }, + "fullstory": { + "name": "FullStory", + "categoryId": 6, + "url": "http://fullstory.com", + "companyId": "fullstory" + }, + "funnelytics": { + "name": "Funnelytics", + "categoryId": 6, + "url": "https://funnelytics.io/", + "companyId": "funnelytics" + }, + "fyber": { + "name": "Fyber", + "categoryId": 4, + "url": "https://www.fyber.com/", + "companyId": "fyber" + }, + "ga_audiences": { + "name": "GA Audiences", + "categoryId": 6, + "url": "http://www.google.com", + "companyId": "google" + }, + "game_advertising_online": { + "name": "Game Advertising Online", + "categoryId": 4, + "url": "http://www.game-advertising-online.com/", + "companyId": "game_advertising_online" + }, + "gameanalytics": { + "name": "GameAnalytics", + "categoryId": 101, + "url": "https://gameanalytics.com/", + "companyId": "mobvista", + "source": "AdGuard" + }, + "gamedistribution.com": { + "name": "Gamedistribution.com", + "categoryId": 8, + "url": "http://gamedistribution.com/", + "companyId": null + }, + "gamerdna": { + "name": "gamerDNA", + "categoryId": 7, + "url": "http://www.gamerdnamedia.com/", + "companyId": "gamerdna_media" + }, + "gannett": { + "name": "Gannett Media", + "categoryId": 0, + "url": "https://www.gannett.com/", + "companyId": "gannett_digital_media_network" + }, + "gaug.es": { + "name": "Gaug.es", + "categoryId": 6, + "url": "http://get.gaug.es/", + "companyId": "euroweb" + }, + "gazprom-media_digital": { + "name": "Gazprom-Media Digital", + "categoryId": 0, + "url": "http://www.gpm-digital.com/", + "companyId": "gazprom-media_digital" + }, + "gb-world": { + "name": "GB-World", + "categoryId": 7, + "url": "http://www.gb-world.net/", + "companyId": "gb-world" + }, + "gdeslon": { + "name": "GdeSlon", + "categoryId": 4, + "url": "http://www.gdeslon.ru/", + "companyId": "gdeslon" + }, + "gdm_digital": { + "name": "GDM Digital", + "categoryId": 4, + "url": "http://www.gdmdigital.com/", + "companyId": "ve_interactive" + }, + "geeen": { + "name": "Geeen", + "categoryId": 6, + "url": "https://www.geeen.co.jp/", + "companyId": "geeen" + }, + "gemius": { + "name": "Gemius", + "categoryId": 4, + "url": "http://www.gemius.com", + "companyId": "gemius_sa" + }, + "generaltracking_de": { + "name": "generaltracking.de", + "categoryId": 11, + "url": null, + "companyId": null + }, + "genesis": { + "name": "Genesis", + "categoryId": 4, + "url": "http://genesismedia.com/", + "companyId": "genesis_media" + }, + "geniee": { + "name": "GENIEE", + "categoryId": 4, + "url": "http://geniee.co.jp/", + "companyId": null + }, + "genius": { + "name": "Genius", + "categoryId": 6, + "url": "http://www.genius.com/", + "companyId": "genius" + }, + "genoo": { + "name": "Genoo", + "categoryId": 4, + "url": "http://www.genoo.com/", + "companyId": "genoo" + }, + "geoads": { + "name": "GeoAds", + "categoryId": 4, + "url": "http://www.geoads.com", + "companyId": "geoads" + }, + "geolify": { + "name": "Geolify", + "categoryId": 4, + "url": "http://geolify.com/", + "companyId": "geolify" + }, + "geoplugin": { + "name": "geoPlugin", + "categoryId": 6, + "url": "http://www.geoplugin.com/", + "companyId": "geoplugin" + }, + "geotrust": { + "name": "GeoTrust", + "categoryId": 5, + "url": "http://www.geotrust.com/", + "companyId": "symantec" + }, + "geovisite": { + "name": "Geovisite", + "categoryId": 6, + "url": "http://www.geovisite.com/", + "companyId": "geovisite" + }, + "gestionpub": { + "name": "GestionPub", + "categoryId": 4, + "url": "http://www.gestionpub.com/", + "companyId": "gestionpub" + }, + "get_response": { + "name": "Get Response", + "categoryId": 2, + "url": "https://www.getresponse.com/?marketing_gv=v2", + "companyId": "getresponse" + }, + "get_site_control": { + "name": "Get Site Control", + "categoryId": 4, + "url": "https://getsitecontrol.com/", + "companyId": "getsitecontrol" + }, + "getconversion": { + "name": "GetConversion", + "categoryId": 2, + "url": "http://www.getconversion.net/", + "companyId": "getconversion" + }, + "getglue": { + "name": "GetGlue", + "categoryId": 0, + "url": "http://getglue.com", + "companyId": "telfie" + }, + "getintent": { + "name": "GetIntent", + "categoryId": 4, + "url": "http://www.getintent.com/", + "companyId": "getintent" + }, + "getkudos": { + "name": "GetKudos", + "categoryId": 1, + "url": "https://www.getkudos.me/", + "companyId": "zendesk" + }, + "getmyad": { + "name": "GetMyAd", + "categoryId": 4, + "url": "http://yottos.com", + "companyId": "yottos" + }, + "getsatisfaction": { + "name": "GetSatisfaction", + "categoryId": 1, + "url": "http://getsatisfaction.com/", + "companyId": "get_satisfaction" + }, + "gettyimages": { + "name": "Getty Images", + "categoryId": 8, + "url": "https://www.gettyimages.com/", + "companyId": null + }, + "gfk": { + "name": "GfK", + "categoryId": 4, + "url": "http://nurago.com/", + "companyId": "gfk_nurago" + }, + "gfycat.com": { + "name": "gfycat", + "categoryId": 7, + "url": "https://gfycat.com/", + "companyId": null + }, + "giant_realm": { + "name": "Giant Realm", + "categoryId": 4, + "url": "http://corp.giantrealm.com/", + "companyId": "giant_realm" + }, + "giantmedia": { + "name": "GiantMedia", + "categoryId": 4, + "url": "http://giantmedia.com/", + "companyId": "adknowledge" + }, + "giga": { + "name": "Giga", + "categoryId": 4, + "url": "https://gigaonclick.com", + "companyId": "giga" + }, + "gigya": { + "name": "Gigya", + "categoryId": 6, + "url": "https://www.sap.com/index.html", + "companyId": "sap" + }, + "gigya_beacon": { + "name": "Gigya Beacon", + "categoryId": 2, + "url": "http://www.gigya.com", + "companyId": "sap" + }, + "gigya_socialize": { + "name": "Gigya Socialize", + "categoryId": 2, + "url": "http://www.gigya.com", + "companyId": "sap" + }, + "gigya_toolbar": { + "name": "Gigya Toolbar", + "categoryId": 2, + "url": "http://www.gigya.com/", + "companyId": "sap" + }, + "giosg": { + "name": "Giosg", + "categoryId": 6, + "url": "https://www.giosg.com/", + "companyId": "giosg" + }, + "giphy.com": { + "name": "Giphy", + "categoryId": 7, + "url": "https://giphy.com/", + "companyId": null + }, + "giraff.io": { + "name": "Giraff.io", + "categoryId": 4, + "url": "https://www.giraff.io/", + "companyId": null + }, + "github": { + "name": "GitHub, Inc.", + "categoryId": 2, + "url": "https://github.com/", + "companyId": "microsoft", + "source": "AdGuard" + }, + "github_apps": { + "name": "GitHub Apps", + "categoryId": 2, + "url": "https://github.com/", + "companyId": "github" + }, + "github_pages": { + "name": "Github Pages", + "categoryId": 10, + "url": "https://pages.github.com/", + "companyId": "github" + }, + "gittigidiyor_affiliate_program": { + "name": "GittiGidiyor Affiliate Program", + "categoryId": 4, + "url": "http://www.ebay.com/", + "companyId": "ebay" + }, + "gittip": { + "name": "Gittip", + "categoryId": 2, + "url": "https://www.gittip.com/", + "companyId": "gittip" + }, + "glad_cube": { + "name": "Glad Cube", + "categoryId": 6, + "url": "http://www.glad-cube.com/", + "companyId": "glad_cube_inc." + }, + "glganltcs.space": { + "name": "glganltcs.space", + "categoryId": 12, + "url": null, + "companyId": null + }, + "global_web_index": { + "name": "GlobalWebIndex", + "categoryId": 6, + "url": "https://www.globalwebindex.com/", + "companyId": "global_web_index" + }, + "globalnotifier.com": { + "name": "globalnotifier.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "globalsign": { + "name": "GlobalSign", + "categoryId": 8, + "url": null, + "companyId": null + }, + "globaltakeoff": { + "name": "GlobalTakeoff", + "categoryId": 4, + "url": "http://www.globaltakeoff.net/", + "companyId": "globaltakeoff" + }, + "glomex.com": { + "name": "Glomex", + "categoryId": 0, + "url": "https://www.glomex.com/", + "companyId": "glomex" + }, + "glotgrx.com": { + "name": "glotgrx.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "gm_delivery": { + "name": "GM Delivery", + "categoryId": 4, + "url": "http://a.gmdelivery.com/", + "companyId": "gm_delivery" + }, + "gmail": { + "name": "Gmail", + "categoryId": 13, + "url": "https://mail.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "gmo": { + "name": "GMO", + "categoryId": 4, + "url": "https://www.gmo.media/", + "companyId": "gmo_media" + }, + "gmx_net": { + "name": "gmx.net", + "categoryId": 8, + "url": null, + "companyId": null + }, + "go.com": { + "name": "go.com", + "categoryId": 8, + "url": "go.com", + "companyId": "disney" + }, + "godaddy_affiliate_program": { + "name": "GoDaddy Affiliate Program", + "categoryId": 4, + "url": "http://www.godaddy.com/", + "companyId": "godaddy" + }, + "godaddy_site_analytics": { + "name": "GoDaddy Site Analytics", + "categoryId": 6, + "url": "https://www.godaddy.com/gdshop/hosting/stats_", + "companyId": "godaddy" + }, + "godaddy_site_seal": { + "name": "GoDaddy Site Seal", + "categoryId": 5, + "url": "http://www.godaddy.com/", + "companyId": "godaddy" + }, + "godatafeed": { + "name": "GoDataFeed", + "categoryId": 6, + "url": "http://www.godatafeed.com", + "companyId": "godatafeed" + }, + "goingup": { + "name": "GoingUp", + "categoryId": 6, + "url": "http://www.goingup.com/", + "companyId": "goingup" + }, + "gomez": { + "name": "Gomez", + "categoryId": 6, + "url": "http://www.gomez.com/", + "companyId": "dynatrace" + }, + "goodadvert": { + "name": "GoodADVERT", + "categoryId": 4, + "url": "http://goodadvert.ru/", + "companyId": "goodadvert" + }, + "google": { + "name": "Google", + "categoryId": 4, + "url": "https://www.google.com/", + "companyId": "google" + }, + "google_ads_measurement": { + "name": "Google Ads Measurement", + "categoryId": 4, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_adsense": { + "name": "Google Adsense", + "categoryId": 4, + "url": "https://www.google.com/adsense/", + "companyId": "google" + }, + "google_adservices": { + "name": "Google AdServices", + "categoryId": 4, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_adwords_conversion": { + "name": "Google AdWords Conversion", + "categoryId": 4, + "url": "https://adwords.google.com/", + "companyId": "google" + }, + "google_adwords_user_lists": { + "name": "Google Adwords User Lists", + "categoryId": 4, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_analytics": { + "name": "Google Analytics", + "categoryId": 6, + "url": "http://www.google.com/analytics/", + "companyId": "google" + }, + "google_appspot": { + "name": "Google Appspot", + "categoryId": 10, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_auth": { + "name": "Google Auth", + "categoryId": 2, + "url": "https://myaccount.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "google_beacons": { + "name": "Google Beacons", + "categoryId": 6, + "url": "https://google.xyz", + "companyId": "google" + }, + "google_chat": { + "name": "Google Chat", + "categoryId": 7, + "url": "https://mail.google.com/chat/", + "companyId": "google", + "source": "AdGuard" + }, + "google_cloud_platform": { + "name": "Google Cloud Platform", + "categoryId": 10, + "url": "https://cloud.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "google_cloud_storage": { + "name": "Google Cloud Storage", + "categoryId": 10, + "url": "https://cloud.google.com/storage/", + "companyId": "google", + "source": "AdGuard" + }, + "google_custom_search": { + "name": "Google Custom Search Ads", + "categoryId": 4, + "url": "https://developers.google.com/custom-search-ads/", + "companyId": "google" + }, + "google_custom_search_engine": { + "name": "Google Programmable Search Engine", + "categoryId": 5, + "url": "https://programmablesearchengine.google.com/about/", + "companyId": "google" + }, + "google_dns": { + "name": "Google DNS", + "categoryId": 10, + "url": "hhttps://dns.google/", + "companyId": "google", + "source": "AdGuard" + }, + "google_domains": { + "name": "Google Domains", + "categoryId": 10, + "url": "https://domains.google/", + "companyId": "google", + "source": "AdGuard" + }, + "google_edge": { + "name": "Google Edge CDN", + "categoryId": 9, + "url": "https://peering.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "google_email": { + "name": "Google Email", + "categoryId": 13, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_fonts": { + "name": "Google Fonts", + "categoryId": 9, + "url": "https://fonts.google.com/", + "companyId": "google" + }, + "google_hosted": { + "name": "Google Hosted", + "categoryId": 10, + "url": "https://workspace.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "google_ima": { + "name": "Google IMA", + "categoryId": 4, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_location": { + "name": "Google Location", + "categoryId": 8, + "url": "https://patents.google.com/patent/WO2007025143A1/", + "companyId": "google", + "source": "AdGuard" + }, + "google_maps": { + "name": "Google Maps", + "categoryId": 2, + "url": "https://www.google.com/maps/", + "companyId": "google", + "source": "AdGuard" + }, + "google_marketing": { + "name": "Google Marketing", + "categoryId": 6, + "url": "https://marketingplatform.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "google_meet": { + "name": "Google Meet", + "categoryId": 2, + "url": "https://meet.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "google_photos": { + "name": "Google Photos", + "categoryId": 9, + "url": "https://photos.google.com/", + "companyId": "google" + }, + "google_pingback": { + "name": "Google Pingback", + "categoryId": 4, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_play": { + "name": "Google Play", + "categoryId": 8, + "url": "https://play.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "google_plus": { + "name": "Google+ Platform", + "categoryId": 7, + "url": "http://www.google.com/+1/button/", + "companyId": "google" + }, + "google_publisher_tags": { + "name": "Google Publisher Tags", + "categoryId": 6, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_remarketing": { + "name": "Google Dynamic Remarketing", + "categoryId": 4, + "url": "http://adwords.google.com/", + "companyId": "google" + }, + "google_safeframe": { + "name": "Google Safeframe", + "categoryId": 4, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_servers": { + "name": "Google Servers", + "categoryId": 8, + "url": "https://support.google.com/faqs/answer/174717?hl=en", + "companyId": "google" + }, + "google_shopping_reviews": { + "name": "Google Shopping Reviews", + "categoryId": 2, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_syndication": { + "name": "Google Syndication", + "categoryId": 4, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_tag_manager": { + "name": "Google Tag Manager", + "categoryId": 5, + "url": "https://marketingplatform.google.com/about/tag-manager/", + "companyId": "google" + }, + "google_translate": { + "name": "Google Translate", + "categoryId": 2, + "url": "https://translate.google.com/manager", + "companyId": "google" + }, + "google_travel_adds": { + "name": "Google Travel Adds", + "categoryId": 4, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_trust_services": { + "name": "Google Trust Services", + "categoryId": 5, + "url": "https://pki.goog/", + "companyId": "google", + "source": "AdGuard" + }, + "google_trusted_stores": { + "name": "Google Trusted Stores", + "categoryId": 6, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_users": { + "name": "Google User Content", + "categoryId": 9, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_voice": { + "name": "Google Voice", + "categoryId": 2, + "url": "https://voice.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "google_website_optimizer": { + "name": "Google Website Optimizer", + "categoryId": 6, + "url": "https://www.google.com/analytics/siteopt/prev", + "companyId": "google" + }, + "google_widgets": { + "name": "Google Widgets", + "categoryId": 2, + "url": "http://www.google.com", + "companyId": "google" + }, + "google_workspace": { + "name": "Google Workspace", + "categoryId": 2, + "url": "https://workspace.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "googleapis.com": { + "name": "Google APIs", + "categoryId": 9, + "url": "https://www.googleapis.com/", + "companyId": "google" + }, + "goooal": { + "name": "Goooal", + "categoryId": 6, + "url": "http://mailchimp.com/", + "companyId": "mailchimp" + }, + "gorilla_nation": { + "name": "Gorilla Nation", + "categoryId": 4, + "url": "http://www.gorillanationmedia.com", + "companyId": "gorilla_nation_media" + }, + "gosquared": { + "name": "GoSquared", + "categoryId": 6, + "url": "http://www.gosquared.com/livestats/", + "companyId": "gosquared" + }, + "gostats": { + "name": "GoStats", + "categoryId": 6, + "url": "http://gostats.com/", + "companyId": "gostats" + }, + "govmetric": { + "name": "GovMetric", + "categoryId": 6, + "url": "http://www.govmetric.com/", + "companyId": "govmetric" + }, + "grabo_affiliate": { + "name": "Grabo Affiliate", + "categoryId": 4, + "url": "http://grabo.bg/", + "companyId": "grabo_media" + }, + "grandslammedia": { + "name": "GrandSlamMedia", + "categoryId": 4, + "url": "http://www.grandslammedia.com/", + "companyId": "grand_slam_media" + }, + "granify": { + "name": "Granify", + "categoryId": 6, + "url": "http://granify.com/", + "companyId": "granify" + }, + "grapeshot": { + "name": "Grapeshot", + "categoryId": 4, + "url": "https://www.grapeshot.com/", + "companyId": "oracle" + }, + "graph_comment": { + "name": "Graph Comment", + "categoryId": 5, + "url": "https://graphcomment.com/en/", + "companyId": "graph_comment" + }, + "gravatar": { + "name": "Gravatar", + "categoryId": 7, + "url": "http://en.gravatar.com/", + "companyId": "automattic" + }, + "gravitec": { + "name": "Gravitec", + "categoryId": 6, + "url": "https://gravitec.net/", + "companyId": "gravitec" + }, + "gravity_insights": { + "name": "Gravity Insights", + "categoryId": 6, + "url": "http://www.gravity.com/", + "companyId": "verizon" + }, + "greatviews.de": { + "name": "GreatViews", + "categoryId": 4, + "url": "http://greatviews.de/", + "companyId": "parship" + }, + "green_and_red": { + "name": "Green and Red", + "categoryId": 4, + "url": "http://www.green-red.com/", + "companyId": "green_&_red_technologies" + }, + "green_certified_site": { + "name": "Green Certified Site", + "categoryId": 2, + "url": "http://www.advenity.com/", + "companyId": "advenity" + }, + "green_story": { + "name": "Green Story", + "categoryId": 6, + "url": "https://greenstory.ca/", + "companyId": "green_story" + }, + "greentube.com": { + "name": "Greentube Internet Entertainment Solutions", + "categoryId": 7, + "url": "https://www.greentube.com/", + "companyId": null + }, + "greystripe": { + "name": "Greystripe", + "categoryId": 4, + "url": "http://www.greystripe.com/", + "companyId": "conversant" + }, + "groove": { + "name": "Groove", + "categoryId": 2, + "url": "http://www.groovehq.com/", + "companyId": "groove_networks" + }, + "groovinads": { + "name": "GroovinAds", + "categoryId": 4, + "url": "http://www.groovinads.com/en", + "companyId": "groovinads" + }, + "groundtruth": { + "name": "GroundTruth", + "categoryId": 4, + "url": "http://www.groundtruth.com/", + "companyId": "groundtruth" + }, + "groupm_server": { + "name": "GroupM Server", + "categoryId": 4, + "url": "http://www.groupm.com/", + "companyId": "wpp" + }, + "gsi_media": { + "name": "GSI Media", + "categoryId": 4, + "url": "http://gsimedia.net", + "companyId": "gsi_media_network" + }, + "gstatic": { + "name": "Google Static", + "categoryId": 9, + "url": "http://www.google.com", + "companyId": "google" + }, + "gtop": { + "name": "GTop", + "categoryId": 6, + "url": "http://www.gtopstats.com", + "companyId": "gtopstats" + }, + "gugaboo": { + "name": "Gugaboo", + "categoryId": 4, + "url": "https://www.gubagoo.com/", + "companyId": "gubagoo" + }, + "guj.de": { + "name": "Gruner + Jahr", + "categoryId": 4, + "url": "https://www.guj.de/", + "companyId": "gruner_jahr_ag" + }, + "gujems": { + "name": "G+J e|MS", + "categoryId": 4, + "url": "http://www.gujmedia.de/", + "companyId": "gruner_jahr_ag" + }, + "gumgum": { + "name": "gumgum", + "categoryId": 4, + "url": "http://gumgum.com/", + "companyId": "gumgum" + }, + "gumroad": { + "name": "Gumroad", + "categoryId": 7, + "url": "https://gumroad.com/", + "companyId": "gumroad" + }, + "gunggo": { + "name": "Gunggo", + "categoryId": 4, + "url": "http://www.gunggo.com/", + "companyId": "gunggo" + }, + "h12_ads": { + "name": "H12 Ads", + "categoryId": 4, + "url": "http://www.h12-media.com/", + "companyId": "h12_media_ads" + }, + "hacker_news_button": { + "name": "Hacker News Button", + "categoryId": 7, + "url": "http://news.ycombinator.com/", + "companyId": "hacker_news" + }, + "haendlerbund.de": { + "name": "Händlerbund", + "categoryId": 2, + "url": "https://www.haendlerbund.de/en", + "companyId": null + }, + "halogen_network": { + "name": "Halogen Network", + "categoryId": 7, + "url": "http://www.halogennetwork.com/", + "companyId": "social_chorus" + }, + "happy_fox_chat": { + "name": "Happy Fox Chat", + "categoryId": 2, + "url": "https://happyfoxchat.com/", + "companyId": "happy_fox_chat" + }, + "harren_media": { + "name": "Harren Media", + "categoryId": 4, + "url": "http://www.harrenmedia.com/index.html", + "companyId": "harren_media" + }, + "hatchbuck": { + "name": "Hatchbuck", + "categoryId": 6, + "url": "http://www.hatchbuck.com/", + "companyId": "hatchbuck" + }, + "head_hunter": { + "name": "Head Hunter", + "categoryId": 6, + "url": "https://hh.ru/", + "companyId": "head_hunter" + }, + "healte.de": { + "name": "healte.de", + "categoryId": 11, + "url": null, + "companyId": null + }, + "heap": { + "name": "Heap", + "categoryId": 6, + "url": "https://heapanalytics.com/", + "companyId": "heap" + }, + "heatmap": { + "name": "Heatmap", + "categoryId": 6, + "url": "https://heatmap.me/", + "companyId": "heatmap" + }, + "heimspiel": { + "name": "HEIM:SPIEL Medien GmbH", + "categoryId": 8, + "url": "http://www.heimspiel.de", + "companyId": null + }, + "hello_bar": { + "name": "Hello Bar", + "categoryId": 7, + "url": "https://www.hellobar.com/", + "companyId": "crazy_egg" + }, + "hellosociety": { + "name": "HelloSociety", + "categoryId": 6, + "url": "http://hellosociety.com", + "companyId": "hellosociety" + }, + "here": { + "name": "HERE", + "categoryId": 8, + "url": "https://www.here.com/", + "companyId": null + }, + "heroku": { + "name": "Heroku", + "categoryId": 10, + "url": null, + "companyId": null + }, + "heureka-widget": { + "name": "Heureka-Widget", + "categoryId": 4, + "url": "https://www.heurekashopping.cz/", + "companyId": "heureka" + }, + "heybubble": { + "name": "HeyBubble", + "categoryId": 2, + "url": "https://www.heybubble.com/", + "companyId": "heybubble" + }, + "heyos": { + "name": "Heyos", + "categoryId": 4, + "url": "http://www.heyos.com/", + "companyId": "heyos" + }, + "hi-media_performance": { + "name": "Hi-Media Performance", + "categoryId": 4, + "url": "http://www.hi-mediaperformance.co.uk/", + "companyId": "hi-media_performance" + }, + "hiconversion": { + "name": "HiConversion", + "categoryId": 4, + "url": "http://www.hiconversion.com", + "companyId": "hiconversion" + }, + "highwebmedia.com": { + "name": "highwebmedia.com", + "categoryId": 3, + "url": null, + "companyId": null + }, + "highwinds": { + "name": "Highwinds", + "categoryId": 6, + "url": "https://www.highwinds.com/", + "companyId": "highwinds" + }, + "hiiir": { + "name": "Hiiir", + "categoryId": 4, + "url": "http://adpower.hiiir.com/", + "companyId": "hiiir" + }, + "hiro": { + "name": "HIRO", + "categoryId": 4, + "url": "http://www.hiro-media.com/", + "companyId": "hiro_media" + }, + "histats": { + "name": "Histats", + "categoryId": 4, + "url": "http://www.histats.com/", + "companyId": "histats" + }, + "hit-parade": { + "name": "Hit-Parade", + "categoryId": 4, + "url": "http://www.hit-parade.com/", + "companyId": "hit-parade" + }, + "hit.ua": { + "name": "HIT.UA", + "categoryId": 4, + "url": "http://hit.ua/", + "companyId": "hit.ua" + }, + "hitslink": { + "name": "HitsLink", + "categoryId": 4, + "url": "http://www.hitslink.com/", + "companyId": "net_applications" + }, + "hitsniffer": { + "name": "HitSniffer", + "categoryId": 4, + "url": "http://hitsniffer.com/", + "companyId": "hit_sniffer" + }, + "hittail": { + "name": "HitTail", + "categoryId": 4, + "url": "http://www.hittail.com/", + "companyId": "hittail" + }, + "hivedx.com": { + "name": "hiveDX", + "categoryId": 4, + "url": "https://www.hivedx.com/", + "companyId": null + }, + "hiveworks": { + "name": "Hive Networks", + "categoryId": 4, + "url": "https://hiveworkscomics.com/", + "companyId": "hive_works" + }, + "hockeyapp": { + "name": "HockeyApp", + "categoryId": 101, + "url": "https://hockeyapp.net/", + "companyId": "microsoft", + "source": "AdGuard" + }, + "hoholikik.club": { + "name": "hoholikik.club", + "categoryId": 12, + "url": null, + "companyId": null + }, + "hola_player": { + "name": "Hola Player", + "categoryId": 0, + "url": "https://holacdn.com/", + "companyId": "hola_cdn" + }, + "homeaway": { + "name": "HomeAway", + "categoryId": 8, + "url": null, + "companyId": null + }, + "honeybadger": { + "name": "Honeybadger", + "categoryId": 6, + "url": "https://www.honeybadger.io/", + "companyId": "honeybadger" + }, + "hooklogic": { + "name": "HookLogic", + "categoryId": 4, + "url": "http://hooklogic.com/", + "companyId": "criteo" + }, + "hop-cube": { + "name": "Hop-Cube", + "categoryId": 4, + "url": "http://www.hop-cube.com/", + "companyId": "hop-cube" + }, + "hotdogsandads.com": { + "name": "hotdogsandads.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "hotjar": { + "name": "Hotjar", + "categoryId": 6, + "url": "http://www.hotjar.com/", + "companyId": "hotjar" + }, + "hotkeys": { + "name": "HotKeys", + "categoryId": 4, + "url": "http://www.demandmedia.com/", + "companyId": "leaf_group" + }, + "hotlog.ru": { + "name": "HotLog", + "categoryId": 4, + "url": "https://hotlog.ru/", + "companyId": "hotlog" + }, + "hotwords": { + "name": "HOTWords", + "categoryId": 4, + "url": "http://hotwords.com/", + "companyId": "hotwords" + }, + "howtank.com": { + "name": "howtank", + "categoryId": 7, + "url": "https://www.howtank.com/", + "companyId": null + }, + "hqentertainmentnetwork.com": { + "name": "HQ Entertainment Network", + "categoryId": 4, + "url": "https://hqentertainmentnetwork.com/", + "companyId": null + }, + "hsoub": { + "name": "Hsoub", + "categoryId": 4, + "url": "http://www.hsoub.com/", + "companyId": "hsoub" + }, + "hstrck.com": { + "name": "HEIM:SPIEL Medien GmbH", + "categoryId": 8, + "url": "https://www.heimspiel.de/", + "companyId": null + }, + "httpool": { + "name": "HTTPool", + "categoryId": 4, + "url": "http://www.httpool.com/", + "companyId": "httpool" + }, + "hubrus": { + "name": "HUBRUS", + "categoryId": 4, + "url": "http://www.hubrus.com/", + "companyId": "hubrus" + }, + "hubspot": { + "name": "HubSpot", + "categoryId": 6, + "url": "http://www.hubspot.com/", + "companyId": "hubspot" + }, + "hubspot_forms": { + "name": "HubSpot Forms", + "categoryId": 2, + "url": "http://www.hubspot.com", + "companyId": "hubspot" + }, + "hubvisor.io": { + "name": "Hubvisor", + "categoryId": 4, + "url": "https://hubvisor.io/", + "companyId": null + }, + "hucksterbot": { + "name": "HucksterBot", + "categoryId": 4, + "url": "http://hucksterbot.ru/", + "companyId": "hucksterbot" + }, + "hupso": { + "name": "Hupso", + "categoryId": 7, + "url": "http://www.hupso.com/", + "companyId": "hupso" + }, + "hurra_tracker": { + "name": "Hurra Tracker", + "categoryId": 4, + "url": "http://www.hurra.com/en/", + "companyId": "hurra_communications" + }, + "hybrid.ai": { + "name": "Hybrid.ai", + "categoryId": 4, + "url": "https://hybrid.ai/", + "companyId": "hybrid_adtech" + }, + "hype_exchange": { + "name": "Hype Exchange", + "categoryId": 4, + "url": "http://www.hypeexchange.com/", + "companyId": "hype_exchange" + }, + "hypercomments": { + "name": "HyperComments", + "categoryId": 1, + "url": "http://www.hypercomments.com/", + "companyId": "hypercomments" + }, + "hyves_widgets": { + "name": "Hyves Widgets", + "categoryId": 4, + "url": "http://www.hyves.nl/", + "companyId": "hyves" + }, + "hyvyd": { + "name": "Hyvyd GmbH", + "categoryId": 8, + "url": null, + "companyId": null + }, + "i-behavior": { + "name": "i-Behavior", + "categoryId": 4, + "url": "http://www.i-behavior.com/", + "companyId": "kbm_group" + }, + "i-mobile": { + "name": "i-mobile", + "categoryId": 4, + "url": "https://www2.i-mobile.co.jp/en/index.aspx", + "companyId": "i-mobile" + }, + "i.ua": { + "name": "i.ua", + "categoryId": 4, + "url": "http://www.i.ua/", + "companyId": "i.ua" + }, + "i10c.net": { + "name": "i10c.net", + "categoryId": 11, + "url": null, + "companyId": null + }, + "i2i.jp": { + "name": "i2i.jp", + "categoryId": 6, + "url": "http://www.i2i.jp/", + "companyId": "i2i.jp" + }, + "iab_consent": { + "name": "IAB Consent", + "categoryId": 5, + "url": "https://iabtechlab.com/standards/gdpr-transparency-and-consent-framework/", + "companyId": "iab" + }, + "iadvize": { + "name": "iAdvize", + "categoryId": 2, + "url": "http://www.iadvize.com/", + "companyId": "iadvize" + }, + "ibm_customer_experience": { + "name": "IBM Digital Analytics", + "categoryId": 6, + "url": "http://www.coremetrics.com/", + "companyId": "ibm" + }, + "icerocket_tracker": { + "name": "IceRocket Tracker", + "categoryId": 7, + "url": "http://tracker.icerocket.com/", + "companyId": "meltwater_icerocket" + }, + "icf_technology": { + "name": "ICF Technology", + "categoryId": 2, + "url": "http://www.icftechnology.com/", + "companyId": null + }, + "iclick": { + "name": "iClick", + "categoryId": 4, + "url": "http://optimix.asia/", + "companyId": "iclick_interactive" + }, + "icrossing": { + "name": "iCrossing", + "categoryId": 4, + "url": "http://www.icrossing.com/", + "companyId": "hearst" + }, + "icstats": { + "name": "ICStats", + "categoryId": 6, + "url": "http://www.icstats.nl/", + "companyId": "icstats" + }, + "icuazeczpeoohx.com": { + "name": "icuazeczpeoohx.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "id-news.net": { + "name": "Ippen Digital", + "categoryId": 4, + "url": "https://www.ippen-digital.de/", + "companyId": null + }, + "id_services": { + "name": "ID Services", + "categoryId": 6, + "url": "https://id.services/", + "companyId": "id_services" + }, + "ideal_media": { + "name": "Ideal Media", + "categoryId": 4, + "url": "http://idealmedia.com/", + "companyId": "ideal_media" + }, + "idealo_com": { + "name": "idealo.com", + "categoryId": 4, + "url": "http://idealo.com/", + "companyId": null + }, + "identrust": { + "name": "IdenTrust, Inc.", + "categoryId": 5, + "url": "https://identrust.com/", + "companyId": "identrust", + "source": "AdGuard" + }, + "ideoclick": { + "name": "IdeoClick", + "categoryId": 4, + "url": "http://ideoclick.com", + "companyId": "ideoclick" + }, + "idio": { + "name": "Idio", + "categoryId": 4, + "url": "https://www.idio.ai/", + "companyId": "idio" + }, + "ie8eamus.com": { + "name": "ie8eamus.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "ientry": { + "name": "iEntry", + "categoryId": 4, + "url": "http://www.ientry.com/", + "companyId": "ientry" + }, + "iflychat": { + "name": "iFlyChat", + "categoryId": 2, + "url": "https://iflychat.com/", + "companyId": "iflychat" + }, + "ignitionone": { + "name": "IgnitionOne", + "categoryId": 6, + "url": "https://www.ignitionone.com/", + "companyId": "zeta" + }, + "igodigital": { + "name": "iGoDigital", + "categoryId": 2, + "url": "http://igodigital.com/", + "companyId": "salesforce" + }, + "ihs_markit": { + "name": "IHS Markit", + "categoryId": 6, + "url": "https://ihsmarkit.com/index.html", + "companyId": "ihs" + }, + "ihs_markit_online_shopper_insigh": { + "name": "IHS Markit Online Shopper Insigh", + "categoryId": 6, + "url": "http://www.visicogn.com/vcu.htm", + "companyId": "ihs" + }, + "ihvmcqojoj.com": { + "name": "ihvmcqojoj.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "iias.eu": { + "name": "Insight Image", + "categoryId": 3, + "url": "http://insightimage.com/", + "companyId": null + }, + "ijento": { + "name": "iJento", + "categoryId": 6, + "url": "http://www.ijento.com/", + "companyId": "ijento" + }, + "imad": { + "name": "imad", + "categoryId": 4, + "url": "http://www.imad.co.kr/", + "companyId": "i'mad_republic" + }, + "image_advantage": { + "name": "Image Advantage", + "categoryId": 4, + "url": "http://www.worthathousandwords.com/", + "companyId": "image_advantage" + }, + "image_space_media": { + "name": "Image Space Media", + "categoryId": 4, + "url": "http://www.imagespacemedia.com/", + "companyId": "image_space_media" + }, + "imgix.net": { + "name": "ImgIX", + "categoryId": 9, + "url": "https://www.imgix.com/", + "companyId": null + }, + "imgur": { + "name": "Imgur", + "categoryId": 8, + "url": "https://imgur.com/", + "companyId": "medialab", + "source": "AdGuard" + }, + "imho_vi": { + "name": "imho vi", + "categoryId": 4, + "url": "http://www.imho.ru", + "companyId": "imho" + }, + "immanalytics": { + "name": "Immanalytics", + "categoryId": 2, + "url": "https://www.roku.com/", + "companyId": "roku" + }, + "immobilienscout24_de": { + "name": "immobilienscout24.de", + "categoryId": 8, + "url": "http://www.scout24.com/", + "companyId": "scout24" + }, + "imonomy": { + "name": "imonomy", + "categoryId": 6, + "url": "http://imonomy.com/", + "companyId": "imonomy" + }, + "impact_radius": { + "name": "Impact Radius", + "categoryId": 5, + "url": "http://www.impactradius.com/", + "companyId": "impact_radius" + }, + "impresiones_web": { + "name": "Impresiones Web", + "categoryId": 4, + "url": "http://www.iw-advertising.com/", + "companyId": "impresiones_web" + }, + "improve_digital": { + "name": "Improve Digital", + "categoryId": 4, + "url": "http://www.improvedigital.com/", + "companyId": "improve_digital" + }, + "improvely": { + "name": "Improvely", + "categoryId": 6, + "url": "https://www.improvely.com/", + "companyId": "awio_web_services" + }, + "inbenta": { + "name": "Inbenta", + "categoryId": 6, + "url": "https://www.inbenta.com/en/", + "companyId": "inbenta" + }, + "inboxsdk.com": { + "name": "Inbox SDK", + "categoryId": 8, + "url": "https://www.inboxsdk.com/", + "companyId": null + }, + "indeed": { + "name": "Indeed", + "categoryId": 4, + "url": "http://www.indeed.com/", + "companyId": "indeed" + }, + "index_exchange": { + "name": "Index Exchange", + "categoryId": 4, + "url": "http://www.casalemedia.com/", + "companyId": "index_exchange" + }, + "indieclick": { + "name": "IndieClick", + "categoryId": 4, + "url": "http://www.indieclick.com/", + "companyId": "leaf_group" + }, + "industry_brains": { + "name": "Industry Brains", + "categoryId": 4, + "url": "http://www.industrybrains.com/", + "companyId": "industrybrains" + }, + "infectious_media": { + "name": "Impression Desk", + "categoryId": 4, + "url": "https://impressiondesk.com/", + "companyId": "infectious_media" + }, + "infinite_analytics": { + "name": "Infinite Analytics", + "categoryId": 6, + "url": "http://infiniteanalytics.com/products/", + "companyId": "infinite_analytics" + }, + "infinity_tracking": { + "name": "Infinity Tracking", + "categoryId": 6, + "url": "http://www.infinity-tracking.com", + "companyId": "infinity_tracking" + }, + "influads": { + "name": "InfluAds", + "categoryId": 4, + "url": "http://www.influads.com/", + "companyId": "influads" + }, + "infolinks": { + "name": "InfoLinks", + "categoryId": 4, + "url": "http://www.infolinks.com/", + "companyId": "infolinks" + }, + "infonline": { + "name": "INFOnline", + "categoryId": 6, + "url": "http://www.infonline.de/", + "companyId": "infonline" + }, + "informer_technologies": { + "name": "Informer Technologies", + "categoryId": 6, + "url": "http://www.informer.com/", + "companyId": "informer_technologies" + }, + "infusionsoft": { + "name": "Infusionsoft by Keap", + "categoryId": 4, + "url": "https://keap.com/", + "companyId": "infusionsoft" + }, + "innity": { + "name": "Innity", + "categoryId": 4, + "url": "http://www.innity.com/", + "companyId": "innity" + }, + "innogames.de": { + "name": "InnoGames", + "categoryId": 8, + "url": "https://www.innogames.com/", + "companyId": null + }, + "innovid": { + "name": "Innovid", + "categoryId": 4, + "url": "https://www.innovid.com/", + "companyId": "innovid" + }, + "inside": { + "name": "inside", + "categoryId": 7, + "url": "http://www.inside.tm/", + "companyId": "powerfront" + }, + "insider": { + "name": "Insider", + "categoryId": 6, + "url": "http://useinsider.com/", + "companyId": "insider" + }, + "insightexpress": { + "name": "InsightExpress", + "categoryId": 6, + "url": "https://www.millwardbrowndigital.com/", + "companyId": "millward_brown" + }, + "inskin_media": { + "name": "InSkin Media", + "categoryId": 4, + "url": "http://www.inskinmedia.com/", + "companyId": "inskin_media" + }, + "inspectlet": { + "name": "Inspectlet", + "categoryId": 6, + "url": "https://www.inspectlet.com/", + "companyId": "inspectlet" + }, + "inspsearchapi.com": { + "name": "Infospace Search", + "categoryId": 4, + "url": "http://infospace.com/", + "companyId": "system1" + }, + "instagram_com": { + "name": "Instagram", + "categoryId": 8, + "url": "https://www.facebook.com/", + "companyId": "meta", + "source": "AdGuard" + }, + "instant_check_mate": { + "name": "Instant Check Mate", + "categoryId": 2, + "url": "https://www.instantcheckmate.com/", + "companyId": "instant_check_mate" + }, + "instart_logic": { + "name": "Instart Logic", + "categoryId": 4, + "url": "https://www.instartlogic.com/", + "companyId": "instart_logic_inc" + }, + "insticator": { + "name": "Insticator", + "categoryId": 4, + "url": "https://www.insticator.com/landingpage", + "companyId": "insticator" + }, + "instinctive": { + "name": "Instinctive", + "categoryId": 4, + "url": "https://instinctive.io/", + "companyId": "instinctive" + }, + "intango": { + "name": "Intango", + "categoryId": 4, + "url": "https://intango.com/", + "companyId": "intango" + }, + "integral_ad_science": { + "name": "Integral Ad Science", + "categoryId": 4, + "url": "https://integralads.com/", + "companyId": "integral_ad_science" + }, + "integral_marketing": { + "name": "Integral Marketing", + "categoryId": 4, + "url": "http://integral-marketing.com/", + "companyId": "integral_marketing" + }, + "intelliad": { + "name": "intelliAd", + "categoryId": 6, + "url": "http://www.intelliad.de/", + "companyId": "intelliad" + }, + "intelligencefocus": { + "name": "IntelligenceFocus", + "categoryId": 6, + "url": "http://www.intelligencefocus.com", + "companyId": "intelligencefocus" + }, + "intelligent_reach": { + "name": "Intelligent Reach", + "categoryId": 4, + "url": "http://www.intelligentreach.com/", + "companyId": "intelligent_reach" + }, + "intense_debate": { + "name": "Intense Debate", + "categoryId": 2, + "url": "http://intensedebate.com/", + "companyId": "automattic" + }, + "intent_iq": { + "name": "Intent IQ", + "categoryId": 4, + "url": "http://datonics.com/", + "companyId": "almondnet" + }, + "intent_media": { + "name": "Intent", + "categoryId": 4, + "url": "https://intent.com/", + "companyId": "intent_media" + }, + "intercom": { + "name": "Intercom", + "categoryId": 2, + "url": "http://intercom.io/", + "companyId": "intercom" + }, + "interedy.info": { + "name": "interedy.info", + "categoryId": 11, + "url": null, + "companyId": null + }, + "intergi": { + "name": "Intergi", + "categoryId": 4, + "url": "http://www.intergi.com/", + "companyId": "intergi_entertainment" + }, + "intermarkets.net": { + "name": "Intermarkets", + "categoryId": 4, + "url": "http://intermarkets.net/", + "companyId": "intermarkets" + }, + "intermundo_media": { + "name": "InterMundo Media", + "categoryId": 4, + "url": "http://intermundomedia.com/", + "companyId": "intermundo_media" + }, + "internet_billboard": { + "name": "Internet BillBoard", + "categoryId": 4, + "url": "http://www.ibillboard.com/en/", + "companyId": "internet_billboard" + }, + "internetaudioads": { + "name": "InternetAudioAds", + "categoryId": 0, + "url": "http://www.internetaudioads.com/", + "companyId": "internetaudioads" + }, + "internetbrands": { + "name": "InternetBrands", + "categoryId": 7, + "url": "http://www.internetbrands.com/", + "companyId": "internet_brands" + }, + "interpolls": { + "name": "Interpolls", + "categoryId": 4, + "url": "http://www.interpolls.com/", + "companyId": "interpolls" + }, + "interyield": { + "name": "Interyield", + "categoryId": 4, + "url": "http://www.advertise.com/publisher-solutions/", + "companyId": "advertise.com" + }, + "intilery": { + "name": "Intilery", + "categoryId": 6, + "url": "http://www.intilery.com", + "companyId": "intilery" + }, + "intimate_merger": { + "name": "Intimate Merger", + "categoryId": 6, + "url": "https://corp.intimatemerger.com/", + "companyId": "intimate_merger" + }, + "investingchannel": { + "name": "Investing Channel", + "categoryId": 8, + "url": "http://www.investingchannel.com/", + "companyId": "investingchannel" + }, + "inviziads": { + "name": "InviziAds", + "categoryId": 4, + "url": "http://www.inviziads.com", + "companyId": "inviziads" + }, + "invoca": { + "name": "Invoca", + "categoryId": 4, + "url": "http://www.invoca.com/", + "companyId": "invoca" + }, + "invodo": { + "name": "Invodo", + "categoryId": 6, + "url": "http://www.invodo.com/", + "companyId": "invodo" + }, + "ionicframework.com": { + "name": "Ionic", + "categoryId": 8, + "url": "https://ionicframework.com/", + "companyId": null + }, + "iotec": { + "name": "iotec", + "categoryId": 4, + "url": "https://www.iotecglobal.com/", + "companyId": "iotec" + }, + "iovation": { + "name": "iovation", + "categoryId": 5, + "url": "http://www.iovation.com/", + "companyId": "iovation" + }, + "ip-label": { + "name": "ip-label", + "categoryId": 6, + "url": "http://www.ip-label.co.uk/", + "companyId": "ip-label" + }, + "ip_targeting": { + "name": "IP Targeting", + "categoryId": 6, + "url": "https://www.iptargeting.com/", + "companyId": "el_toro" + }, + "ip_tracker": { + "name": "IP Tracker", + "categoryId": 6, + "url": "http://www.ip-tracker.org/", + "companyId": "ip_tracker" + }, + "iperceptions": { + "name": "iPerceptions", + "categoryId": 2, + "url": "http://www.iperceptions.com/", + "companyId": "iperceptions" + }, + "ipfingerprint": { + "name": "IPFingerprint", + "categoryId": 6, + "url": "http://www.ipfingerprint.com/", + "companyId": "ipfingerprint" + }, + "ipg_mediabrands": { + "name": "IPG Mediabrands", + "categoryId": 4, + "url": "https://www.ipgmediabrands.com/", + "companyId": "ipg_mediabrands" + }, + "ipify": { + "name": "ipify", + "categoryId": 8, + "url": "https://www.ipify.org/", + "companyId": null + }, + "ipinfo": { + "name": "Ipinfo", + "categoryId": 2, + "url": "https://ipinfo.io/", + "companyId": "ipinfo.io" + }, + "iplogger": { + "name": "IPLogger", + "categoryId": 6, + "url": "http://iplogger.ru/", + "companyId": "iplogger" + }, + "iprom": { + "name": "iprom", + "categoryId": 4, + "url": "http://www.iprom.si/", + "companyId": "iprom" + }, + "ipromote": { + "name": "iPromote", + "categoryId": 4, + "url": "http://www.ipromote.com/", + "companyId": "ipromote" + }, + "iprospect": { + "name": "iProspect", + "categoryId": 4, + "url": "http://www.iprospect.com/", + "companyId": "dentsu_aegis_network" + }, + "iqiyi": { + "name": "iQiyi", + "categoryId": 0, + "url": "https://www.iqiyi.com/", + "companyId": "iqiyi", + "source": "AdGuard" + }, + "ironsource": { + "name": "ironSource Ltd.", + "categoryId": 4, + "url": "https://www.is.com", + "companyId": "unity", + "source": "AdGuard" + }, + "isocket": { + "name": "isocket", + "categoryId": 4, + "url": "http://www.isocket.com/", + "companyId": "rubicon_project" + }, + "isolarcloud": { + "name": "iSolarCloud", + "categoryId": 6, + "url": "https://isolarcloud.com/", + "companyId": "sungrow", + "source": "AdGuard" + }, + "ispot.tv": { + "name": "iSpot.tv", + "categoryId": 4, + "url": "https://www.ispot.tv/", + "companyId": null + }, + "itineraire.info": { + "name": "itineraire.info", + "categoryId": 2, + "url": "https://www.itineraire.info/", + "companyId": null + }, + "itunes_link_maker": { + "name": "iTunes Link Maker", + "categoryId": 4, + "url": "https://www.apple.com/", + "companyId": "apple" + }, + "ity.im": { + "name": "ity.im", + "categoryId": 4, + "url": "http://ity.im/", + "companyId": "ity.im" + }, + "iubenda.com": { + "name": "iubenda", + "categoryId": 5, + "url": "https://www.iubenda.com/", + "companyId": "iubenda" + }, + "ivcbrasil.org.br": { + "name": "IVC Brasil", + "categoryId": 6, + "url": "https://ivcbrasil.org.br/#/home", + "companyId": null + }, + "ividence": { + "name": "Ividence", + "categoryId": 4, + "url": "https://www.ividence.com/home/", + "companyId": "sien" + }, + "iwiw_widgets": { + "name": "iWiW Widgets", + "categoryId": 2, + "url": "http://iwiw.hu", + "companyId": "iwiw" + }, + "ixi_digital": { + "name": "IXI Digital", + "categoryId": 4, + "url": "http://www.equifax.com/home/en_us", + "companyId": "equifax" + }, + "ixquick.com": { + "name": "ixquick", + "categoryId": 8, + "url": "https://www.ixquick.com/", + "companyId": "startpage" + }, + "izooto": { + "name": "iZooto", + "categoryId": 6, + "url": "https://www.izooto.com/", + "companyId": "izooto" + }, + "j-list_affiliate_program": { + "name": "J-List Affiliate Program", + "categoryId": 4, + "url": "http://www.jlist.com/page/affiliates.html", + "companyId": "j-list" + }, + "jaco": { + "name": "Jaco", + "categoryId": 6, + "url": "https://www.walkme.com/", + "companyId": "walkme" + }, + "janrain": { + "name": "Janrain", + "categoryId": 6, + "url": "http://www.janrain.com/", + "companyId": "akamai" + }, + "jeeng": { + "name": "Jeeng", + "categoryId": 4, + "url": "https://jeeng.com/", + "companyId": "jeeng" + }, + "jeeng_widgets": { + "name": "Jeeng Widgets", + "categoryId": 4, + "url": "https://jeeng.com/", + "companyId": "jeeng" + }, + "jet_interactive": { + "name": "Jet Interactive", + "categoryId": 6, + "url": "http://www.jetinteractive.com.au/", + "companyId": "jet_interactive" + }, + "jetlore": { + "name": "Jetlore", + "categoryId": 6, + "url": "http://www.jetlore.com/", + "companyId": "jetlore" + }, + "jetpack": { + "name": "Jetpack", + "categoryId": 6, + "url": "https://jetpack.com/", + "companyId": "automattic" + }, + "jetpack_digital": { + "name": "Jetpack Digital", + "categoryId": 6, + "url": "http://www.jetpack.com/", + "companyId": "jetpack_digital" + }, + "jimdo.com": { + "name": "jimdo.com", + "categoryId": 10, + "url": null, + "companyId": null + }, + "jink": { + "name": "Jink", + "categoryId": 4, + "url": "http://www.jink.de/", + "companyId": "jink" + }, + "jirafe": { + "name": "Jirafe", + "categoryId": 6, + "url": "http://jirafe.com/", + "companyId": "jirafe" + }, + "jivochat": { + "name": "JivoSite", + "categoryId": 2, + "url": "https://www.jivochat.com/", + "companyId": "jivochat" + }, + "jivox": { + "name": "Jivox", + "categoryId": 4, + "url": "http://www.jivox.com/", + "companyId": "jivox" + }, + "jobs_2_careers": { + "name": "Jobs 2 Careers", + "categoryId": 4, + "url": "http://www.jobs2careers.com/", + "companyId": "jobs_2_careers" + }, + "joinhoney": { + "name": "Honey", + "categoryId": 8, + "url": "https://www.joinhoney.com/", + "companyId": null + }, + "jornaya": { + "name": "Jornaya", + "categoryId": 6, + "url": "http://leadid.com/", + "companyId": "jornaya" + }, + "jquery": { + "name": "jQuery", + "categoryId": 9, + "url": "https://jquery.org/", + "companyId": "js_foundation" + }, + "js_communications": { + "name": "JS Communications", + "categoryId": 4, + "url": "http://www.jssearch.net/", + "companyId": "js_communications" + }, + "jsdelivr": { + "name": "jsDelivr", + "categoryId": 9, + "url": "https://www.jsdelivr.com/", + "companyId": null + }, + "jse_coin": { + "name": "JSE Coin", + "categoryId": 4, + "url": "https://jsecoin.com/", + "companyId": "jse_coin" + }, + "jsuol.com.br": { + "name": "jsuol.com.br", + "categoryId": 4, + "url": null, + "companyId": null + }, + "juggcash": { + "name": "JuggCash", + "categoryId": 3, + "url": "http://www.juggcash.com", + "companyId": "juggcash" + }, + "juiceadv": { + "name": "JuiceADV", + "categoryId": 4, + "url": "http://juiceadv.com/", + "companyId": "juiceadv" + }, + "juicyads": { + "name": "JuicyAds", + "categoryId": 3, + "url": "http://www.juicyads.com/", + "companyId": "juicyads" + }, + "jumplead": { + "name": "Jumplead", + "categoryId": 6, + "url": "https://jumplead.com/", + "companyId": "jumplead" + }, + "jumpstart_tagging_solutions": { + "name": "Jumpstart Tagging Solutions", + "categoryId": 6, + "url": "http://www.hearst.com/", + "companyId": "hearst" + }, + "jumptap": { + "name": "Jumptap", + "categoryId": 4, + "url": "http://www.jumptap.com/", + "companyId": "verizon" + }, + "jumptime": { + "name": "JumpTime", + "categoryId": 6, + "url": "http://www.jumptime.com/", + "companyId": "openx" + }, + "just_answer": { + "name": "Just Answer", + "categoryId": 2, + "url": "https://www.justanswer.com/", + "companyId": "just_answer" + }, + "just_premium": { + "name": "Just Premium", + "categoryId": 4, + "url": "http://justpremium.com/", + "companyId": "just_premium" + }, + "just_relevant": { + "name": "Just Relevant", + "categoryId": 4, + "url": "http://www.justrelevant.com/", + "companyId": "just_relevant" + }, + "jvc.gg": { + "name": "Jeuxvideo CDN", + "categoryId": 9, + "url": "http://www.jeuxvideo.com/", + "companyId": null + }, + "jw_player": { + "name": "JW Player", + "categoryId": 0, + "url": "https://www.jwplayer.com/", + "companyId": "jw_player" + }, + "jw_player_ad_solutions": { + "name": "JW Player Ad Solutions", + "categoryId": 4, + "url": "http://www.longtailvideo.com/adsolution/", + "companyId": "jw_player" + }, + "kaeufersiegel.de": { + "name": "Käufersiegel", + "categoryId": 2, + "url": "https://www.kaeufersiegel.de/", + "companyId": null + }, + "kairion.de": { + "name": "kairion", + "categoryId": 4, + "url": "https://kairion.de/", + "companyId": "prosieben_sat1" + }, + "kaloo.ga": { + "name": "Kalooga", + "categoryId": 4, + "url": "https://www.kalooga.com/", + "companyId": "kalooga" + }, + "kalooga_widget": { + "name": "Kalooga Widget", + "categoryId": 4, + "url": "http://kalooga.com/", + "companyId": "kalooga" + }, + "kaltura": { + "name": "Kaltura", + "categoryId": 0, + "url": "http://corp.kaltura.com/", + "companyId": "kaltura" + }, + "kameleoon": { + "name": "Kameleoon", + "categoryId": 6, + "url": "http://www.kameleoon.com/", + "companyId": "kameleoon" + }, + "kampyle": { + "name": "Medallia", + "categoryId": 2, + "url": "http://www.kampyle.com/", + "companyId": "medallia" + }, + "kanoodle": { + "name": "Kanoodle", + "categoryId": 4, + "url": "http://www.kanoodle.com/", + "companyId": "kanoodle" + }, + "kantar_media": { + "name": "Kantar Media", + "categoryId": 4, + "url": "https://www.kantarmedia.com/", + "companyId": "wpp" + }, + "karambasecurity": { + "name": "Karamba Security", + "categoryId": 8, + "url": "https://karambasecurity.com/", + "companyId": "karambasecurity", + "source": "AdGuard" + }, + "kargo": { + "name": "Kargo", + "categoryId": 4, + "url": "http://www.kargo.com/", + "companyId": "kargo" + }, + "kaspersky-labs.com": { + "name": "Kaspersky Labs", + "categoryId": 12, + "url": "https://www.kaspersky.com/", + "companyId": "AO Kaspersky Lab" + }, + "kataweb.it": { + "name": "KataWeb", + "categoryId": 4, + "url": "http://www.kataweb.it/", + "companyId": null + }, + "katchup": { + "name": "Katchup", + "categoryId": 4, + "url": "http://www.katchup.fr/", + "companyId": "katchup" + }, + "kauli": { + "name": "Kauli", + "categoryId": 4, + "url": "http://kau.li/", + "companyId": "kauli" + }, + "kavanga": { + "name": "Kavanga", + "categoryId": 4, + "url": "http://kavanga.ru/", + "companyId": "kavanga" + }, + "kayo_sports": { + "name": "Kayo Sports", + "categoryId": 0, + "url": "https://kayosports.com.au/", + "companyId": "news_corp", + "source": "AdGuard" + }, + "keen_io": { + "name": "Keen IO", + "categoryId": 6, + "url": "https://keen.io", + "companyId": "keen_io" + }, + "kelkoo": { + "name": "Kelkoo", + "categoryId": 4, + "url": "http://www.kelkoo.com/", + "companyId": "kelkoo" + }, + "kenshoo": { + "name": "Kenshoo", + "categoryId": 6, + "url": "http://www.kenshoo.com/", + "companyId": "kenshoo" + }, + "keymetric": { + "name": "KeyMetric", + "categoryId": 6, + "url": "http://keymetric.net/", + "companyId": "keymetric" + }, + "keytiles": { + "name": "Keytiles", + "categoryId": 6, + "url": "http://keytiles.com/", + "companyId": "keytiles" + }, + "keywee": { + "name": "Keywee", + "categoryId": 6, + "url": "https://keywee.co/", + "companyId": "keywee" + }, + "keywordmax": { + "name": "KeywordMax", + "categoryId": 4, + "url": "http://www.keywordmax.com/", + "companyId": "digital_river" + }, + "khoros": { + "name": "Khoros", + "categoryId": 7, + "url": "http://www.massrelevance.com/", + "companyId": "khoros" + }, + "khzbeucrltin.com": { + "name": "khzbeucrltin.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "kickfactory": { + "name": "Kickfactory", + "categoryId": 4, + "url": "https://kickfactory.com/", + "companyId": "kickfactory" + }, + "kickfire": { + "name": "Kickfire", + "categoryId": 4, + "url": "http://www.visistat.com/", + "companyId": "kickfire" + }, + "kik": { + "name": "Kik", + "categoryId": 7, + "url": "https://kik.com/", + "companyId": "medialab", + "source": "AdGuard" + }, + "king.com": { + "name": "King.com", + "categoryId": 4, + "url": "http://www.king.com/", + "companyId": "king.com" + }, + "king_com": { + "name": "King.com", + "categoryId": 8, + "url": "https://king.com/", + "companyId": "activision_blizzard" + }, + "kinja.com": { + "name": "Kinja", + "categoryId": 6, + "url": "https://kinja.com/", + "companyId": "gizmodo" + }, + "kiosked": { + "name": "Kiosked", + "categoryId": 4, + "url": "http://www.kiosked.com/", + "companyId": "kiosked" + }, + "kissmetrics.com": { + "name": "Kissmetrics", + "categoryId": 6, + "url": "https://www.kissmetrics.com/", + "companyId": "kissmetrics" + }, + "kitara_media": { + "name": "Kitara Media", + "categoryId": 4, + "url": "http://www.kitaramedia.com/", + "companyId": "kitara_media" + }, + "kixer": { + "name": "Kixer", + "categoryId": 4, + "url": "http://www.kixer.com", + "companyId": "kixer" + }, + "klarna.com": { + "name": "Klarna", + "categoryId": 2, + "url": "https://www.klarna.com/", + "companyId": null + }, + "klaviyo": { + "name": "Klaviyo", + "categoryId": 6, + "url": "https://www.klaviyo.com/", + "companyId": "klaviyo" + }, + "klikki": { + "name": "Klikki", + "categoryId": 4, + "url": "http://www.klikki.com/", + "companyId": "klikki" + }, + "kliksaya": { + "name": "KlikSaya", + "categoryId": 4, + "url": "http://www.kliksaya.com", + "companyId": "kliksaya" + }, + "kmeleo": { + "name": "Kméléo", + "categoryId": 4, + "url": "http://www.6peo.com/", + "companyId": "6peo" + }, + "knoopstat": { + "name": "Knoopstat", + "categoryId": 6, + "url": "http://www.knoopstat.nl", + "companyId": "knoopstat" + }, + "knotch": { + "name": "Knotch", + "categoryId": 2, + "url": "http://knotch.it", + "companyId": "knotch" + }, + "komoona": { + "name": "Komoona", + "categoryId": 4, + "url": "http://www.komoona.com/", + "companyId": "komoona" + }, + "kontera_contentlink": { + "name": "Kontera ContentLink", + "categoryId": 4, + "url": "http://www.kontera.com/", + "companyId": "singtel" + }, + "kontextr": { + "name": "Kontextr", + "categoryId": 4, + "url": "https://www.kontextr.com/", + "companyId": "kontext" + }, + "kontextua": { + "name": "Kontextua", + "categoryId": 4, + "url": "http://www.kontextua.com/", + "companyId": "kontextua" + }, + "korrelate": { + "name": "Korrelate", + "categoryId": 4, + "url": "http://korrelate.com/", + "companyId": "korrelate" + }, + "kortx": { + "name": "Kortx", + "categoryId": 6, + "url": "http://www.kortx.io/", + "companyId": "kortx" + }, + "kount": { + "name": "Kount", + "categoryId": 6, + "url": "https://kount.com/", + "companyId": null + }, + "krux_digital": { + "name": "Salesforce DMP", + "categoryId": 4, + "url": "https://www.salesforce.com/products/marketing-cloud/data-management/?mc=DMP", + "companyId": "salesforce" + }, + "kupona": { + "name": "Kupona", + "categoryId": 4, + "url": "http://www.kupona-media.de/en/retargeting-and-performance-media-width-kupona", + "companyId": "kupona" + }, + "kxcdn.com": { + "name": "Keycdn", + "categoryId": 9, + "url": "https://www.keycdn.com/", + "companyId": null + }, + "kyto": { + "name": "Kyto", + "categoryId": 6, + "url": "https://www.kyto.com/", + "companyId": "kyto" + }, + "ladsp.com": { + "name": "Logicad", + "categoryId": 4, + "url": "https://www.logicad.com/", + "companyId": "logicad" + }, + "lanista_concepts": { + "name": "Lanista Concepts", + "categoryId": 4, + "url": "http://lanistaconcepts.com/", + "companyId": "lanista_concepts" + }, + "latimes": { + "name": "Los Angeles Times", + "categoryId": 8, + "url": "http://www.latimes.com/", + "companyId": "latimes" + }, + "launch_darkly": { + "name": "Launch Darkly", + "categoryId": 5, + "url": "https://launchdarkly.com/index.html", + "companyId": "launch_darkly" + }, + "launchbit": { + "name": "LaunchBit", + "categoryId": 4, + "url": "https://www.launchbit.com/", + "companyId": "launchbit" + }, + "launchpad": { + "name": "Launchpad", + "categoryId": 8, + "url": "https://launchpad.net/", + "companyId": "canonical", + "source": "AdGuard" + }, + "layer-ad.org": { + "name": "Layer-ADS.net", + "categoryId": 4, + "url": "http://layer-ads.net/", + "companyId": null + }, + "lazada": { + "name": "Lazada", + "categoryId": 4, + "url": "https://www.lazada.com/", + "companyId": "lazada" + }, + "lcx_digital": { + "name": "LCX Digital", + "categoryId": 4, + "url": "http://www.lcx.com/", + "companyId": "lcx_digital" + }, + "le_monde.fr": { + "name": "Le Monde.fr", + "categoryId": 8, + "url": "http://www.lemonde.fr/", + "companyId": "le_monde.fr" + }, + "lead_liaison": { + "name": "Lead Liaison", + "categoryId": 6, + "url": "https://www.leadliaison.com", + "companyId": "lead_liaison" + }, + "leadback": { + "name": "Leadback", + "categoryId": 6, + "url": "http://leadback.ru/?utm_source=leadback_widget&utm_medium=eas-balt.ru&utm_campaign=self_ad", + "companyId": "leadback" + }, + "leaddyno": { + "name": "LeadDyno", + "categoryId": 4, + "url": "http://www.leaddyno.com", + "companyId": "leaddyno" + }, + "leadforensics": { + "name": "LeadForensics", + "categoryId": 4, + "url": "http://www.leadforensics.com/", + "companyId": "lead_forensics" + }, + "leadgenic": { + "name": "LeadGENIC", + "categoryId": 4, + "url": "https://leadgenic.com/", + "companyId": "leadgenic" + }, + "leadhit": { + "name": "LeadHit", + "categoryId": 2, + "url": "http://leadhit.ru/", + "companyId": "leadhit" + }, + "leadin": { + "name": "Leadin", + "categoryId": 6, + "url": "https://www.hubspot.com/", + "companyId": "hubspot" + }, + "leading_reports": { + "name": "Leading Reports", + "categoryId": 4, + "url": "https://www.leadingreports.de/", + "companyId": "leading_reports" + }, + "leadinspector": { + "name": "LeadInspector", + "categoryId": 6, + "url": "https://www.leadinspector.de/", + "companyId": "leadinspector" + }, + "leadlander": { + "name": "LeadLander", + "categoryId": 6, + "url": "http://www.leadlander.com/", + "companyId": "leadlander" + }, + "leadlife": { + "name": "LeadLife", + "categoryId": 2, + "url": "http://leadlife.com/", + "companyId": "leadlife" + }, + "leadpages": { + "name": "Leadpages", + "categoryId": 6, + "url": "https://www.leadpages.net/", + "companyId": "leadpages" + }, + "leadplace": { + "name": "LeadPlace", + "categoryId": 6, + "url": "https://temelio.com", + "companyId": "leadplace" + }, + "leads_by_web.com": { + "name": "Leads by Web.com", + "categoryId": 4, + "url": "http://www.leadsbyweb.com", + "companyId": "web.com_group" + }, + "leadscoreapp": { + "name": "LeadScoreApp", + "categoryId": 2, + "url": "http://leadscoreapp.com", + "companyId": "leadscoreapp" + }, + "leadsius": { + "name": "Leadsius", + "categoryId": 4, + "url": "http://www.leadsius.com/", + "companyId": "leadsius" + }, + "leady": { + "name": "Leady", + "categoryId": 4, + "url": "http://www.leady.cz/", + "companyId": "leady" + }, + "leiki": { + "name": "Leiki", + "categoryId": 4, + "url": "http://www.leiki.com", + "companyId": "leiki" + }, + "lengow": { + "name": "Lengow", + "categoryId": 4, + "url": "http://www.lengow.com/", + "companyId": "lengow" + }, + "lenmit.com": { + "name": "lenmit.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "lentainform.com": { + "name": "lentainform.com", + "categoryId": 8, + "url": "https://www.lentainform.com/", + "companyId": null + }, + "lenua.de": { + "name": "Lenua System", + "categoryId": 4, + "url": "http://lenua.de/", + "companyId": "synatix" + }, + "let_reach": { + "name": "Let Reach", + "categoryId": 2, + "url": "https://letreach.com/", + "companyId": "let_reach" + }, + "lets_encrypt": { + "name": "Let's Encrypt", + "categoryId": 5, + "url": "https://letsencrypt.org/", + "companyId": "isrg", + "source": "AdGuard" + }, + "letv": { + "name": "LeTV", + "categoryId": 6, + "url": "http://www.le.com/", + "companyId": "letv" + }, + "level3_communications": { + "name": "Level 3 Communications, Inc.", + "categoryId": 8, + "url": "http://www.level3.com/en/", + "companyId": "level3_communications" + }, + "lgads": { + "name": "LG Ad Solutions", + "categoryId": 4, + "url": "https://lgads.tv/", + "companyId": "lgcorp", + "source": "AdGuard" + }, + "lgtv": { + "name": "LG TV", + "categoryId": 8, + "url": "https://www.lg.com/", + "companyId": "lgcorp", + "source": "AdGuard" + }, + "licensebuttons.net": { + "name": "licensebuttons.net", + "categoryId": 9, + "url": "https://licensebuttons.net/", + "companyId": null + }, + "lifestreet_media": { + "name": "LifeStreet Media", + "categoryId": 4, + "url": "http://lifestreetmedia.com/", + "companyId": "lifestreet_media" + }, + "ligatus": { + "name": "Ligatus", + "categoryId": 4, + "url": "http://www.ligatus.com/", + "companyId": "outbrain" + }, + "limk": { + "name": "Limk", + "categoryId": 4, + "url": "https://limk.com/", + "companyId": "limk" + }, + "line_apps": { + "name": "Line", + "categoryId": 6, + "url": "https://line.me/en-US/", + "companyId": "line" + }, + "linezing": { + "name": "LineZing", + "categoryId": 4, + "url": "http://www.linezing.com/", + "companyId": "linezing" + }, + "linkbucks": { + "name": "Linkbucks", + "categoryId": 4, + "url": "http://www.linkbucks.com/", + "companyId": "linkbucks" + }, + "linkconnector": { + "name": "LinkConnector", + "categoryId": 4, + "url": "http://www.linkconnector.com", + "companyId": "linkconnector" + }, + "linkedin": { + "name": "LinkedIn", + "categoryId": 8, + "url": "https://www.linkedin.com/", + "companyId": "microsoft" + }, + "linkedin_ads": { + "name": "LinkedIn Ads", + "categoryId": 4, + "url": "http://www.linkedin.com/", + "companyId": "microsoft" + }, + "linkedin_analytics": { + "name": "LinkedIn Analytics", + "categoryId": 6, + "url": "https://www.microsoft.com/", + "companyId": "microsoft" + }, + "linkedin_marketing_solutions": { + "name": "LinkedIn Marketing Solutions", + "categoryId": 4, + "url": "https://business.linkedin.com/marketing-solutions", + "companyId": "microsoft" + }, + "linkedin_widgets": { + "name": "LinkedIn Widgets", + "categoryId": 7, + "url": "https://www.linkedin.com", + "companyId": "microsoft" + }, + "linker": { + "name": "Linker", + "categoryId": 4, + "url": "https://linker.hr/", + "companyId": "linker" + }, + "linkprice": { + "name": "LinkPrice", + "categoryId": 4, + "url": "http://www.linkprice.com/", + "companyId": "linkprice" + }, + "linkpulse": { + "name": "Linkpulse", + "categoryId": 6, + "url": "http://www.linkpulse.com/", + "companyId": "linkpulse" + }, + "linksalpha": { + "name": "LinksAlpha", + "categoryId": 7, + "url": "http://www.linksalpha.com", + "companyId": "linksalpha" + }, + "linksmart": { + "name": "LinkSmart", + "categoryId": 4, + "url": "http://www.linksmart.com/", + "companyId": "sovrn" + }, + "linkstorm": { + "name": "Linkstorm", + "categoryId": 2, + "url": "http://www.linkstorms.com/", + "companyId": "linkstorm" + }, + "linksynergy.com": { + "name": "Rakuten LinkShare", + "categoryId": 4, + "url": "https://rakutenmarketing.com/affiliate", + "companyId": "rakuten" + }, + "linkup": { + "name": "LinkUp", + "categoryId": 6, + "url": "http://www.linkup.com/", + "companyId": "linkup" + }, + "linkwise": { + "name": "Linkwise", + "categoryId": 4, + "url": "http://linkwi.se/global-en/", + "companyId": "linkwise" + }, + "linkwithin": { + "name": "LinkWithin", + "categoryId": 7, + "url": "http://www.linkwithin.com/", + "companyId": "linkwithin" + }, + "liquidm_technology_gmbh": { + "name": "LiquidM Technology GmbH", + "categoryId": 4, + "url": "https://liquidm.com/", + "companyId": "liquidm" + }, + "liqwid": { + "name": "Liqwid", + "categoryId": 4, + "url": "https://liqwid.com/", + "companyId": "liqwid" + }, + "list.ru": { + "name": "Rating@Mail.Ru", + "categoryId": 7, + "url": "http://list.ru/", + "companyId": "megafon" + }, + "listrak": { + "name": "Listrak", + "categoryId": 2, + "url": "http://www.listrak.com/", + "companyId": "listrak" + }, + "live2support": { + "name": "Live2Support", + "categoryId": 2, + "url": "http://www.live2support.com/", + "companyId": "live2support" + }, + "live800": { + "name": "Live800", + "categoryId": 2, + "url": "http://live800.com", + "companyId": "live800" + }, + "live_agent": { + "name": "Live Agent", + "categoryId": 2, + "url": "https://www.ladesk.com/", + "companyId": "liveagent" + }, + "live_help_now": { + "name": "Live Help Now", + "categoryId": 2, + "url": "http://www.livehelpnow.net/", + "companyId": "live_help_now" + }, + "live_intent": { + "name": "Live Intent", + "categoryId": 6, + "url": "http://www.liveintent.com/", + "companyId": "liveintent" + }, + "live_journal": { + "name": "Live Journal", + "categoryId": 6, + "url": "http://www.livejournal.com/", + "companyId": "livejournal" + }, + "liveadexchanger.com": { + "name": "liveadexchanger.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "livechat": { + "name": "LiveChat", + "categoryId": 2, + "url": "http://www.livechatinc.com", + "companyId": "livechat" + }, + "livechatnow": { + "name": "LiveChatNow", + "categoryId": 2, + "url": "http://www.livechatnow.com/", + "companyId": "livechatnow!" + }, + "liveclicker": { + "name": "Liveclicker", + "categoryId": 2, + "url": "http://www.liveclicker.com", + "companyId": "liveclicker" + }, + "livecounter": { + "name": "Livecounter", + "categoryId": 6, + "url": "http://www.livecounter.dk/", + "companyId": "livecounter" + }, + "livefyre": { + "name": "Livefyre", + "categoryId": 1, + "url": "http://www.livefyre.com/", + "companyId": "adobe" + }, + "liveinternet": { + "name": "LiveInternet", + "categoryId": 1, + "url": "http://www.liveinternet.ru/", + "companyId": "liveinternet" + }, + "liveperson": { + "name": "LivePerson", + "categoryId": 2, + "url": "http://www.liveperson.com/", + "companyId": "liveperson" + }, + "liveramp": { + "name": "LiveRamp", + "categoryId": 4, + "url": "https://liveramp.com/", + "companyId": "acxiom" + }, + "livere": { + "name": "LiveRe", + "categoryId": 7, + "url": "http://www.livere.com/", + "companyId": "livere" + }, + "livesportmedia.eu": { + "name": "Livesport Media", + "categoryId": 8, + "url": "http://www.livesportmedia.eu/", + "companyId": null + }, + "livestream": { + "name": "Livestream", + "categoryId": 0, + "url": "http://vimeo.com/", + "companyId": "vimeo" + }, + "livetex.ru": { + "name": "LiveTex", + "categoryId": 2, + "url": "https://livetex.ru/", + "companyId": "livetex" + }, + "lkqd": { + "name": "LKQD", + "categoryId": 4, + "url": "http://www.lkqd.com/", + "companyId": "nexstar" + }, + "loadbee.com": { + "name": "Loadbee", + "categoryId": 4, + "url": "https://company.loadbee.com/de/loadbee-home", + "companyId": null + }, + "loadercdn.com": { + "name": "loadercdn.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "loadsource.org": { + "name": "loadsource.org", + "categoryId": 11, + "url": null, + "companyId": null + }, + "localytics": { + "name": "Localytics", + "categoryId": 101, + "url": "https://uplandsoftware.com/localytics/", + "companyId": "upland", + "source": "AdGuard" + }, + "lockerdome": { + "name": "LockerDome", + "categoryId": 7, + "url": "https://lockerdome.com", + "companyId": "lockerdome" + }, + "lockerz_share": { + "name": "AddToAny", + "categoryId": 7, + "url": "http://www.addtoany.com/", + "companyId": "addtoany" + }, + "logan_media": { + "name": "Logan Media", + "categoryId": 6, + "url": "http://loganmedia.mobi/", + "companyId": "logan_media" + }, + "logdna": { + "name": "LogDNA", + "categoryId": 4, + "url": "http://www.answerbook.com/", + "companyId": "logdna" + }, + "loggly": { + "name": "Loggly", + "categoryId": 6, + "url": "http://loggly.com/", + "companyId": "loggly" + }, + "logly": { + "name": "logly", + "categoryId": 6, + "url": "http://logly.co.jp/", + "companyId": "logly" + }, + "logsss.com": { + "name": "logsss.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "lomadee": { + "name": "Lomadee", + "categoryId": 4, + "url": "http://lomadee.com", + "companyId": "lomadee" + }, + "longtail_video_analytics": { + "name": "JW Player Analytics", + "categoryId": 4, + "url": "http://www.longtailvideo.com/", + "companyId": "jw_player" + }, + "loomia": { + "name": "Loomia", + "categoryId": 4, + "url": "http://www.loomia.com/", + "companyId": "loomia" + }, + "loop11": { + "name": "Loop11", + "categoryId": 6, + "url": "https://360i.com/", + "companyId": "360i" + }, + "loopfuse_oneview": { + "name": "LoopFuse OneView", + "categoryId": 4, + "url": "http://www.loopfuse.com/", + "companyId": "loopfuse" + }, + "lotame": { + "name": "Lotame", + "categoryId": 4, + "url": "http://www.lotame.com/", + "companyId": "lotame" + }, + "lottex_inc": { + "name": "vidcpm.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "lucid": { + "name": "Lucid", + "categoryId": 4, + "url": "https://luc.id/", + "companyId": "luc.id" + }, + "lucid_media": { + "name": "Lucid Media", + "categoryId": 4, + "url": "http://www.lucidmedia.com/", + "companyId": "singtel" + }, + "lucini": { + "name": "Lucini", + "categoryId": 4, + "url": "http://www.lucinilucini.com/", + "companyId": "lucini_&_lucini_communications" + }, + "lucky_orange": { + "name": "Lucky Orange", + "categoryId": 6, + "url": "http://www.luckyorange.com/", + "companyId": "lucky_orange" + }, + "luckypushh.com": { + "name": "luckypushh.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "lxr100": { + "name": "LXR100", + "categoryId": 4, + "url": "http://www.netelixir.com/lxr100_PPC_management_tool.html", + "companyId": "netelixir" + }, + "lynchpin_analytics": { + "name": "Lynchpin Analytics", + "categoryId": 4, + "url": "http://www.lynchpin.com/", + "companyId": "lynchpin_analytics" + }, + "lytics": { + "name": "Lytics", + "categoryId": 6, + "url": "https://www.lytics.com/", + "companyId": "lytics" + }, + "lyuoaxruaqdo.com": { + "name": "lyuoaxruaqdo.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "m-pathy": { + "name": "m-pathy", + "categoryId": 4, + "url": "http://www.m-pathy.com/", + "companyId": "m-pathy" + }, + "m._p._newmedia": { + "name": "M. P. NEWMEDIA", + "categoryId": 4, + "url": "http://www.mp-newmedia.com/", + "companyId": "sticky" + }, + "m4n": { + "name": "M4N", + "categoryId": 4, + "url": "http://www.zanox.com/us/", + "companyId": "axel_springer" + }, + "mad_ads_media": { + "name": "Mad Ads Media", + "categoryId": 4, + "url": "http://www.madadsmedia.com/", + "companyId": "mad_ads_media" + }, + "madeleine.de": { + "name": "madeleine.de", + "categoryId": 4, + "url": null, + "companyId": null + }, + "madison_logic": { + "name": "Madison Logic", + "categoryId": 4, + "url": "http://www.madisonlogic.com/", + "companyId": "madison_logic" + }, + "madnet": { + "name": "MADNET", + "categoryId": 4, + "url": "http://madnet.ru/en", + "companyId": "madnet" + }, + "mads": { + "name": "MADS", + "categoryId": 4, + "url": "http://www.mads.com/", + "companyId": "mads" + }, + "magna_advertise": { + "name": "Magna Advertise", + "categoryId": 4, + "url": "http://magna.ru/", + "companyId": "magna_advertise" + }, + "magnetic": { + "name": "Magnetic", + "categoryId": 4, + "url": "http://www.magnetic.is", + "companyId": "magnetic" + }, + "magnetise_group": { + "name": "Magnetise Group", + "categoryId": 4, + "url": "http://magnetisegroup.com/", + "companyId": "magnetise_group" + }, + "magnify360": { + "name": "Magnify360", + "categoryId": 6, + "url": "http://www.magnify360.com/", + "companyId": "magnify360" + }, + "magnuum.com": { + "name": "magnuum.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "mail.ru_banner": { + "name": "Mail.Ru Banner Network", + "categoryId": 4, + "url": "http://mail.ru/", + "companyId": "vk", + "source": "AdGuard" + }, + "mail.ru_counter": { + "name": "Mail.Ru Counter", + "categoryId": 2, + "url": "http://mail.ru/", + "companyId": "vk", + "source": "AdGuard" + }, + "mail.ru_group": { + "name": "Mail.Ru Group", + "categoryId": 7, + "url": "http://mail.ru/", + "companyId": "vk", + "source": "AdGuard" + }, + "mailchimp_tracking": { + "name": "MailChimp Tracking", + "categoryId": 4, + "url": "http://mailchimp.com/", + "companyId": "mailchimp" + }, + "mailerlite.com": { + "name": "Mailerlite", + "categoryId": 10, + "url": "https://www.mailerlite.com/", + "companyId": "mailerlite" + }, + "mailtrack.io": { + "name": "MailTrack.io", + "categoryId": 4, + "url": "https://mailtrack.io", + "companyId": "mailtrack" + }, + "mainadv": { + "name": "mainADV", + "categoryId": 4, + "url": "http://www.mainadv.com/", + "companyId": "mainadv" + }, + "makazi": { + "name": "Makazi", + "categoryId": 4, + "url": "http://www.makazi.com/en/", + "companyId": "makazi_group" + }, + "makeappdev.xyz": { + "name": "makeappdev.xyz", + "categoryId": 12, + "url": null, + "companyId": null + }, + "makesource.cool": { + "name": "makesource.cool", + "categoryId": 11, + "url": null, + "companyId": null + }, + "mango": { + "name": "Mango", + "categoryId": 4, + "url": "https://www.mango-office.ru/", + "companyId": "mango_office" + }, + "manycontacts": { + "name": "ManyContacts", + "categoryId": 4, + "url": "https://www.manycontacts.com/", + "companyId": "manycontacts" + }, + "mapandroute.de": { + "name": "Map and Route", + "categoryId": 2, + "url": "http://www.mapandroute.de/", + "companyId": null + }, + "mapbox": { + "name": "Mapbox", + "categoryId": 2, + "url": "https://www.mapbox.com/", + "companyId": null + }, + "maploco": { + "name": "MapLoco", + "categoryId": 4, + "url": "http://www.maploco.com/", + "companyId": "maploco" + }, + "marchex": { + "name": "Marchex", + "categoryId": 4, + "url": "http://www.industrybrains.com/", + "companyId": "marchex" + }, + "marimedia": { + "name": "Marimedia", + "categoryId": 4, + "url": "http://www.marimedia.net/", + "companyId": "tremor_video" + }, + "marin_search_marketer": { + "name": "Marin Search Marketer", + "categoryId": 4, + "url": "http://www.marinsoftware.com/", + "companyId": "marin_software" + }, + "mark_+_mini": { + "name": "Mark & Mini", + "categoryId": 4, + "url": "http://www.markandmini.com/index.cfm", + "companyId": "edm_group" + }, + "market_thunder": { + "name": "Market Thunder", + "categoryId": 4, + "url": "https://www.makethunder.com/", + "companyId": "market_thunder" + }, + "marketgid": { + "name": "MarketGid", + "categoryId": 4, + "url": "http://www.mgid.com/", + "companyId": "marketgid_usa" + }, + "marketing_automation": { + "name": "Marketing Automation", + "categoryId": 4, + "url": "https://en.frodx.com", + "companyId": "frodx" + }, + "marketo": { + "name": "Marketo", + "categoryId": 4, + "url": "http://www.marketo.com/", + "companyId": "marketo" + }, + "markmonitor": { + "name": "MarkMonitor", + "categoryId": 4, + "url": "https://www.markmonitor.com/", + "companyId": "markmonitor", + "source": "AdGuard" + }, + "marktest": { + "name": "Marktest", + "categoryId": 4, + "url": "http://www.marktest.com/", + "companyId": "marktest_group" + }, + "marshadow.io": { + "name": "marshadow.io", + "categoryId": 4, + "url": null, + "companyId": null + }, + "martini_media": { + "name": "Martini Media", + "categoryId": 4, + "url": "http://martinimediainc.com/", + "companyId": "martini_media" + }, + "maru-edu": { + "name": "Maru-EDU", + "categoryId": 2, + "url": "https://www.maruedr.com", + "companyId": "maruedr" + }, + "marvellous_machine": { + "name": "Marvellous Machine", + "categoryId": 6, + "url": "https://www.marvellousmachine.net/", + "companyId": "marvellous_machine" + }, + "master_banner_network": { + "name": "Master Banner Network", + "categoryId": 4, + "url": "http://www.mbn.com.ua/", + "companyId": "master_banner_network" + }, + "mastertarget": { + "name": "MasterTarget", + "categoryId": 4, + "url": "http://mastertarget.ru/", + "companyId": "mastertarget" + }, + "matelso": { + "name": "Matelso", + "categoryId": 6, + "url": "https://www.matelso.de", + "companyId": "matelso" + }, + "mather_analytics": { + "name": "Mather Analytics", + "categoryId": 6, + "url": "https://www.mathereconomics.com/", + "companyId": "mather_economics" + }, + "mathjax.org": { + "name": "MathJax", + "categoryId": 9, + "url": "https://www.mathjax.org/", + "companyId": null + }, + "matiro": { + "name": "Matiro", + "categoryId": 6, + "url": "http://matiro.com/", + "companyId": "matiro" + }, + "matomo": { + "name": "Matomo", + "categoryId": 6, + "url": "https://matomo.org/s", + "companyId": "matomo" + }, + "matomy_market": { + "name": "Matomy Market", + "categoryId": 4, + "url": "http://www.matomymarket.com/", + "companyId": "matomy_media" + }, + "matrix": { + "name": "Matrix", + "categoryId": 5, + "url": "https://matrix.org/", + "companyId": "matrix", + "source": "AdGuard" + }, + "maxbounty": { + "name": "MaxBounty", + "categoryId": 5, + "url": "http://www.maxbounty.com/", + "companyId": "maxbounty" + }, + "maxcdn": { + "name": "MaxCDN", + "categoryId": 9, + "url": "https://www.maxcdn.com/", + "companyId": null + }, + "maxlab": { + "name": "Maxlab", + "categoryId": 4, + "url": "http://maxlab.ru", + "companyId": "maxlab" + }, + "maxmind": { + "name": "MaxMind", + "categoryId": 4, + "url": "http://www.maxmind.com/", + "companyId": "maxmind" + }, + "maxonclick_com": { + "name": "maxonclick.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "maxpoint_interactive": { + "name": "MaxPoint Interactive", + "categoryId": 4, + "url": "http://www.maxpointinteractive.com/", + "companyId": "maxpoint_interactive" + }, + "maxymiser": { + "name": "Oracle Maxymiser", + "categoryId": 4, + "url": "https://www.oracle.com/marketingcloud/products/testing-and-optimization/index.html", + "companyId": "oracle" + }, + "mbr_targeting": { + "name": "mbr targeting", + "categoryId": 4, + "url": "https://mbr-targeting.com/", + "companyId": "stroer" + }, + "mbuy": { + "name": "MBuy", + "categoryId": 4, + "url": "http://www.adbuyer.com/", + "companyId": "mbuy" + }, + "mcabi": { + "name": "mCabi", + "categoryId": 4, + "url": "https://mcabi.mcloudglobal.com/#", + "companyId": "mcabi" + }, + "mcafee_secure": { + "name": "McAfee Secure", + "categoryId": 5, + "url": "http://www.mcafeesecure.com/us/", + "companyId": "mcafee" + }, + "mconet": { + "name": "MCOnet", + "categoryId": 4, + "url": "http://mconet.biz/", + "companyId": "mconet" + }, + "mdotlabs": { + "name": "MdotLabs", + "categoryId": 4, + "url": "http://www.mdotlabs.com/", + "companyId": "comscore" + }, + "media-clic": { + "name": "Media-clic", + "categoryId": 4, + "url": "http://www.media-clic.com/", + "companyId": "media-click" + }, + "media-imdb.com": { + "name": "IMDB CDN", + "categoryId": 9, + "url": "https://www.imdb.com/", + "companyId": "amazon_associates" + }, + "media.net": { + "name": "Media.net", + "categoryId": 4, + "url": "http://www.media.net/", + "companyId": "media.net" + }, + "media_impact": { + "name": "Media Impact", + "categoryId": 4, + "url": "https://mediaimpact.de/index.html", + "companyId": "media_impact" + }, + "media_innovation_group": { + "name": "Xaxis", + "categoryId": 4, + "url": "https://www.xaxis.com/", + "companyId": "media_innovation_group" + }, + "media_today": { + "name": "Media Today", + "categoryId": 4, + "url": "http://mediatoday.ru/", + "companyId": "media_today" + }, + "mediaad": { + "name": "MediaAd", + "categoryId": 4, + "url": "https://mediaad.org", + "companyId": "mediaad" + }, + "mediaglu": { + "name": "MediaGlu", + "categoryId": 4, + "url": "https://www.mediaglu.com/", + "companyId": "microsoft", + "source": "AdGuard" + }, + "mediahub": { + "name": "MediaHub", + "categoryId": 4, + "url": "http://www.mediahub.com/", + "companyId": "mediahub" + }, + "medialab": { + "name": "MediaLab.AI Inc.", + "categoryId": 8, + "url": "https://medialab.la/", + "companyId": "medialab", + "source": "AdGuard" + }, + "medialand": { + "name": "Medialand", + "categoryId": 4, + "url": "http://medialand.ru", + "companyId": "medialand" + }, + "medialead": { + "name": "Medialead", + "categoryId": 4, + "url": "https://www.medialead.de/", + "companyId": "the_reach_group" + }, + "mediamath": { + "name": "MediaMath", + "categoryId": 4, + "url": "http://www.mediamath.com/", + "companyId": "mediamath" + }, + "mediametrics": { + "name": "Mediametrics", + "categoryId": 7, + "url": "http://mediametrics.ru", + "companyId": "mediametrics" + }, + "median": { + "name": "Median", + "categoryId": 4, + "url": "http://median.hu", + "companyId": "median" + }, + "mediapass": { + "name": "MediaPass", + "categoryId": 4, + "url": "http://www.mediapass.com/", + "companyId": "mediapass" + }, + "mediapost_communications": { + "name": "Mediapost Communications", + "categoryId": 6, + "url": "https://vrm.mediapostcommunication.net/", + "companyId": "mediapost_communications" + }, + "mediarithmics.com": { + "name": "Mediarithmics", + "categoryId": 4, + "url": "http://www.mediarithmics.com/en/", + "companyId": "mediarithmics" + }, + "mediascope": { + "name": "Mediascope", + "categoryId": 6, + "url": "http://mediascope.net/", + "companyId": "mediascope" + }, + "mediashakers": { + "name": "MediaShakers", + "categoryId": 4, + "url": "http://www.mediashakers.com/", + "companyId": "mediashakers" + }, + "mediashift": { + "name": "MediaShift", + "categoryId": 4, + "url": "http://www.mediashift.com/", + "companyId": "mediashift" + }, + "mediator.media": { + "name": "Mediator", + "categoryId": 6, + "url": "https://mediator.media/", + "companyId": "mycom_bv" + }, + "mediav": { + "name": "MediaV", + "categoryId": 4, + "url": "https://www.mediav.com/", + "companyId": "mediav" + }, + "mediawhiz": { + "name": "Mediawhiz", + "categoryId": 4, + "url": "http://www.mediawhiz.com/", + "companyId": "matomy_media" + }, + "medigo": { + "name": "Medigo", + "categoryId": 4, + "url": "https://www.mediego.com/en/", + "companyId": "mediego" + }, + "medley": { + "name": "Medley", + "categoryId": 4, + "url": "http://medley.com/", + "companyId": "friendfinder_networks" + }, + "medyanet": { + "name": "MedyaNet", + "categoryId": 4, + "url": "http://www.medyanet.com.tr/", + "companyId": "medyanet" + }, + "meebo_bar": { + "name": "Meebo Bar", + "categoryId": 7, + "url": "http://bar.meebo.com/", + "companyId": "google" + }, + "meetrics": { + "name": "Meetrics", + "categoryId": 4, + "url": "http://www.meetrics.de/", + "companyId": "meetrics" + }, + "megaindex": { + "name": "MegaIndex", + "categoryId": 4, + "url": "http://www.megaindex.ru", + "companyId": "megaindex" + }, + "meganz": { + "name": "Mega Ltd.", + "categoryId": 8, + "url": "https://mega.io/", + "companyId": "meganz", + "source": "AdGuard" + }, + "mein-bmi.com": { + "name": "mein-bmi.com", + "categoryId": 12, + "url": "https://www.mein-bmi.com/", + "companyId": null + }, + "melissa": { + "name": "Melissa", + "categoryId": 6, + "url": "https://www.melissa.com/", + "companyId": "melissa_global_intelligence" + }, + "melt": { + "name": "Melt", + "categoryId": 4, + "url": "http://meltdsp.com/", + "companyId": "melt" + }, + "menlo": { + "name": "Menlo", + "categoryId": 4, + "url": "http://www.menlotechnologies.cn/", + "companyId": "menlotechnologies" + }, + "mentad": { + "name": "MentAd", + "categoryId": 4, + "url": "http://www.mentad.com/", + "companyId": "mentad" + }, + "mercado": { + "name": "Mercado", + "categoryId": 4, + "url": "https://www.mercadolivre.com.br/", + "companyId": "mercado_livre" + }, + "merchantadvantage": { + "name": "MerchantAdvantage", + "categoryId": 4, + "url": "http://www.merchantadvantage.com/channelmanagement.cfm", + "companyId": "merchantadvantage" + }, + "merchenta": { + "name": "Merchenta", + "categoryId": 4, + "url": "http://www.merchenta.com/", + "companyId": "merchenta" + }, + "mercury_media": { + "name": "Mercury Media", + "categoryId": 4, + "url": "http://trackingsoft.com/", + "companyId": "mercury_media" + }, + "merkle_research": { + "name": "Merkle Research", + "categoryId": 6, + "url": "http://www.dentsuaegisnetwork.com/", + "companyId": "dentsu_aegis_network" + }, + "merkle_rkg": { + "name": "Merkle RKG", + "categoryId": 6, + "url": "https://www.merkleinc.com/what-we-do/digital-agency-services/rkg-now-fully-integrated-merkle", + "companyId": "dentsu_aegis_network" + }, + "messenger.com": { + "name": "Facebook Messenger", + "categoryId": 7, + "url": "https://messenger.com", + "companyId": "facebook" + }, + "meta_network": { + "name": "Meta Network", + "categoryId": 7, + "url": "http://www.metanetwork.com/", + "companyId": "meta_network" + }, + "metaffiliation.com": { + "name": "Netaffiliation", + "categoryId": 4, + "url": "http://netaffiliation.com/", + "companyId": "kwanko" + }, + "metapeople": { + "name": "Metapeople", + "categoryId": 4, + "url": "http://www.metapeople.com/us/", + "companyId": "metapeople" + }, + "metrigo": { + "name": "Metrigo", + "categoryId": 4, + "url": "http://metrigo.com/", + "companyId": "metrigo" + }, + "metriweb": { + "name": "MetriWeb", + "categoryId": 4, + "url": "http://www.metriware.be/", + "companyId": "metriware" + }, + "miaozhen": { + "name": "Miaozhen", + "categoryId": 4, + "url": "http://miaozhen.com/en/index.html", + "companyId": "miaozhen" + }, + "microad": { + "name": "MicroAd", + "categoryId": 4, + "url": "https://www.microad.co.jp/", + "companyId": "microad" + }, + "microsoft": { + "name": "Microsoft Services", + "categoryId": 8, + "url": "http://www.microsoft.com/", + "companyId": "microsoft" + }, + "microsoft_adcenter_conversion": { + "name": "Microsoft adCenter Conversion", + "categoryId": 4, + "url": "https://adcenter.microsoft.com/", + "companyId": "microsoft" + }, + "microsoft_analytics": { + "name": "Microsoft Analytics", + "categoryId": 4, + "url": "https://adcenter.microsoft.com", + "companyId": "microsoft" + }, + "microsoft_clarity": { + "name": "Microsoft Clarity", + "categoryId": 6, + "url": "https://clarity.microsoft.com/", + "companyId": "microsoft" + }, + "mindset_media": { + "name": "Mindset Media", + "categoryId": 4, + "url": "http://www.mindset-media.com/", + "companyId": "google" + }, + "mindspark": { + "name": "Mindspark", + "categoryId": 6, + "url": "http://www.mindspark.com/", + "companyId": "iac_apps" + }, + "mindviz_tracker": { + "name": "MindViz Tracker", + "categoryId": 4, + "url": "http://mvtracker.com/", + "companyId": "mindviz" + }, + "minewhat": { + "name": "MineWhat", + "categoryId": 4, + "url": "http://www.minewhat.com", + "companyId": "minewhat" + }, + "mints_app": { + "name": "Mints App", + "categoryId": 2, + "url": "https://mintsapp.io/", + "companyId": "mints_app" + }, + "minute.ly": { + "name": "minute.ly", + "categoryId": 0, + "url": "http://minute.ly/", + "companyId": "minute.ly" + }, + "minute.ly_video": { + "name": "minute.ly video", + "categoryId": 0, + "url": "http://minute.ly/", + "companyId": "minute.ly" + }, + "mirando": { + "name": "Mirando", + "categoryId": 4, + "url": "http://mirando.de", + "companyId": "mirando" + }, + "mirtesen.ru": { + "name": "mirtesen.ru", + "categoryId": 7, + "url": "https://mirtesen.ru/", + "companyId": null + }, + "mister_bell": { + "name": "Mister Bell", + "categoryId": 4, + "url": "http://misterbell.fr/", + "companyId": "mister_bell" + }, + "mixi": { + "name": "mixi", + "categoryId": 7, + "url": "http://mixi.jp/", + "companyId": "mixi" + }, + "mixpanel": { + "name": "Mixpanel", + "categoryId": 6, + "url": "http://mixpanel.com/", + "companyId": "mixpanel" + }, + "mixpo": { + "name": "Mixpo", + "categoryId": 4, + "url": "http://dynamicvideoad.mixpo.com/", + "companyId": "mixpo" + }, + "mluvii": { + "name": "Mluvii", + "categoryId": 2, + "url": "https://www.mluvii.com", + "companyId": "mluvii" + }, + "mncdn.com": { + "name": "MediaNova CDN", + "categoryId": 9, + "url": "https://www.medianova.com/", + "companyId": null + }, + "moat": { + "name": "Moat", + "categoryId": 4, + "url": "http://www.moat.com/", + "companyId": "oracle" + }, + "mobicow": { + "name": "Mobicow", + "categoryId": 4, + "url": "http://www.mobicow.com/", + "companyId": "mobicow" + }, + "mobify": { + "name": "Mobify", + "categoryId": 4, + "url": "http://www.mobify.com/", + "companyId": "mobify" + }, + "mobtrks.com": { + "name": "mobtrks.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "mocean_mobile": { + "name": "mOcean Mobile", + "categoryId": 4, + "url": "http://www.moceanmobile.com/", + "companyId": "pubmatic" + }, + "mochapp": { + "name": "MoChapp", + "categoryId": 2, + "url": "http://www.mochapp.com/", + "companyId": "mochapp" + }, + "modern_impact": { + "name": "Modern Impact", + "categoryId": 4, + "url": "http://www.modernimpact.com/", + "companyId": "modern_impact" + }, + "modernus": { + "name": "Modernus", + "categoryId": 6, + "url": "http://www.modernus.is", + "companyId": "modernus" + }, + "modulepush.com": { + "name": "modulepush.com", + "categoryId": 4, + "url": null, + "companyId": null + }, + "mogo_interactive": { + "name": "Mogo Interactive", + "categoryId": 4, + "url": "http://www.mogomarketing.com/", + "companyId": "mogo_interactive" + }, + "mokono_analytics": { + "name": "Mokono Analytics", + "categoryId": 4, + "url": "http://www.populis.com", + "companyId": "populis" + }, + "monero_miner": { + "name": "Monero Miner", + "categoryId": 8, + "url": "http://devappgrant.space/", + "companyId": null + }, + "monetate": { + "name": "Monetate", + "categoryId": 6, + "url": "http://monetate.com", + "companyId": "monetate" + }, + "monetize_me": { + "name": "Monetize Me", + "categoryId": 4, + "url": "http://www.monetize-me.com/", + "companyId": "monetize_me" + }, + "moneytizer": { + "name": "Moneytizer", + "categoryId": 4, + "url": "https://www.themoneytizer.com/", + "companyId": "the_moneytizer" + }, + "mongoose_metrics": { + "name": "Mongoose Metrics", + "categoryId": 4, + "url": "http://www.mongoosemetrics.com/", + "companyId": "mongoose_metrics" + }, + "monitis": { + "name": "Monitis", + "categoryId": 6, + "url": "http://www.monitis.com/", + "companyId": "monitis" + }, + "monitus": { + "name": "Monitus", + "categoryId": 6, + "url": "http://www.monitus.net/", + "companyId": "monitus" + }, + "monotype_gmbh": { + "name": "Monotype GmbH", + "categoryId": 9, + "url": "http://www.monotype.com/", + "companyId": "monotype" + }, + "monotype_imaging": { + "name": "Fonts.com Store", + "categoryId": 2, + "url": "https://www.fonts.com/", + "companyId": "monotype" + }, + "monsido": { + "name": "Monsido", + "categoryId": 6, + "url": "https://monsido.com/", + "companyId": "monsido" + }, + "monster_advertising": { + "name": "Monster Advertising", + "categoryId": 4, + "url": "http://www.monster.com/", + "companyId": "monster_worldwide" + }, + "mooxar": { + "name": "Mooxar", + "categoryId": 4, + "url": "http://mooxar.com/", + "companyId": "mooxar" + }, + "mopinion.com": { + "name": "Mopinion", + "categoryId": 2, + "url": "https://mopinion.com/", + "companyId": "mopinion" + }, + "mopub": { + "name": "MoPub", + "categoryId": 4, + "url": "https://www.mopub.com/", + "companyId": "twitter" + }, + "more_communication": { + "name": "More Communication", + "categoryId": 4, + "url": "http://www.more-com.co.jp/", + "companyId": "more_communication" + }, + "moreads": { + "name": "moreAds", + "categoryId": 4, + "url": "https://www.moras.jp", + "companyId": "moreads" + }, + "motigo_webstats": { + "name": "Motigo Webstats", + "categoryId": 7, + "url": "http://webstats.motigo.com/", + "companyId": "motigo" + }, + "motionpoint": { + "name": "MotionPoint", + "categoryId": 6, + "url": "http://www.motionpoint.com/", + "companyId": "motionpoint_corporation" + }, + "mouseflow": { + "name": "Mouseflow", + "categoryId": 6, + "url": "http://mouseflow.com/", + "companyId": "mouseflow" + }, + "mousestats": { + "name": "MouseStats", + "categoryId": 4, + "url": "http://www.mousestats.com/", + "companyId": "mousestats" + }, + "mousetrace": { + "name": "MouseTrace", + "categoryId": 6, + "url": "http://www.mousetrace.com/", + "companyId": "mousetrace" + }, + "mov.ad": { + "name": "Mov.ad ", + "categoryId": 8, + "url": null, + "companyId": null + }, + "movable_ink": { + "name": "Movable Ink", + "categoryId": 2, + "url": "https://movableink.com/", + "companyId": "movable_ink" + }, + "movable_media": { + "name": "Movable Media", + "categoryId": 4, + "url": "http://www.movablemedia.com/", + "companyId": "movable_media" + }, + "moz": { + "name": "Moz", + "categoryId": 8, + "url": "https://moz.com/", + "companyId": null + }, + "mozilla": { + "name": "Mozilla Foundation", + "categoryId": 8, + "url": "https://www.mozilla.org/", + "companyId": "mozilla", + "source": "AdGuard" + }, + "mozoo": { + "name": "MoZoo", + "categoryId": 4, + "url": "http://mozoo.com/", + "companyId": "mozoo" + }, + "mrp": { + "name": "MRP", + "categoryId": 4, + "url": "https://www.mrpfd.com/", + "companyId": "mrp" + }, + "mrpdata": { + "name": "MRP", + "categoryId": 6, + "url": "http://mrpdata.com/Account/Login?ReturnUrl=%2F", + "companyId": "fifth_story" + }, + "mrskincash": { + "name": "MrSkinCash", + "categoryId": 3, + "url": "http://mrskincash.com/", + "companyId": "mrskincash.com" + }, + "msedge": { + "name": "Microsoft Edge", + "categoryId": 8, + "url": "https://www.microsoft.com/en-us/edge", + "companyId": "microsoft", + "source": "AdGuard" + }, + "msn": { + "name": "Microsoft Network", + "categoryId": 8, + "url": "https://www.microsoft.com/", + "companyId": "microsoft" + }, + "muscula": { + "name": "Muscula", + "categoryId": 4, + "url": "https://www.universe-surf.de/", + "companyId": "universe_surf" + }, + "mux_inc": { + "name": "Mux", + "categoryId": 0, + "url": "https://mux.com/", + "companyId": "mux_inc" + }, + "mybloglog": { + "name": "MyBlogLog", + "categoryId": 7, + "url": "http://www.mybloglog.com/", + "companyId": "verizon" + }, + "mybuys": { + "name": "MyBuys", + "categoryId": 4, + "url": "http://www.mybuys.com/", + "companyId": "magnetic" + }, + "mycdn.me": { + "name": "Mail.Ru CDN", + "categoryId": 9, + "url": "https://corp.megafon.com/", + "companyId": "megafon" + }, + "mycliplister.com": { + "name": "Cliplister", + "categoryId": 2, + "url": "https://www.cliplister.com/", + "companyId": null + }, + "mycounter.ua": { + "name": "MyCounter.ua", + "categoryId": 6, + "url": "http://mycounter.ua", + "companyId": "mycounter.ua" + }, + "myfonts": { + "name": "MyFonts", + "categoryId": 6, + "url": "http://www.myfonts.com/", + "companyId": "myfonts" + }, + "myfonts_counter": { + "name": "MyFonts", + "categoryId": 6, + "url": "http://www.myfonts.com/", + "companyId": "myfonts" + }, + "mypagerank": { + "name": "MyPagerank", + "categoryId": 6, + "url": "http://www.mypagerank.net/", + "companyId": "mypagerank" + }, + "mystat": { + "name": "MyStat", + "categoryId": 7, + "url": "http://mystat.hu/", + "companyId": "myst_statistics" + }, + "mythings": { + "name": "myThings", + "categoryId": 4, + "url": "http://www.mythings.com/", + "companyId": "mythings" + }, + "mytop_counter": { + "name": "Mytop Counter", + "categoryId": 7, + "url": "http://mytop-in.net/", + "companyId": "mytop-in" + }, + "nab": { + "name": "National Australia Bank", + "categoryId": 8, + "url": "https://www.nab.com.au/", + "companyId": "nab", + "source": "AdGuard" + }, + "nakanohito.jp": { + "name": "Nakanohito", + "categoryId": 4, + "url": "http://nakanohito.jp/", + "companyId": "userinsight" + }, + "namogoo": { + "name": "Namoogoo", + "categoryId": 4, + "url": "https://www.namogoo.com/", + "companyId": null + }, + "nanigans": { + "name": "Nanigans", + "categoryId": 4, + "url": "http://www.nanigans.com/", + "companyId": "nanigans" + }, + "nano_interactive": { + "name": "Nano Interactive", + "categoryId": 4, + "url": "http://www.nanointeractive.com/home/de", + "companyId": "nano_interactive" + }, + "nanorep": { + "name": "nanoRep", + "categoryId": 2, + "url": "http://www.nanorep.com/", + "companyId": "logmein" + }, + "narando": { + "name": "Narando", + "categoryId": 0, + "url": "https://narando.com/", + "companyId": "narando" + }, + "narrativ": { + "name": "Narrativ", + "categoryId": 4, + "url": "https://narrativ.com/", + "companyId": "narrativ" + }, + "narrative_io": { + "name": "Narrative", + "categoryId": 6, + "url": "http://www.narrative.io/", + "companyId": "narrative.io" + }, + "natimatica": { + "name": "Natimatica", + "categoryId": 4, + "url": "http://natimatica.com/", + "companyId": "natimatica" + }, + "nativeads.com": { + "name": "native ads", + "categoryId": 4, + "url": "https://nativeads.com/", + "companyId": null + }, + "nativeroll": { + "name": "Nativeroll", + "categoryId": 0, + "url": "http://nativeroll.tv/", + "companyId": "native_roll" + }, + "nativo": { + "name": "Nativo", + "categoryId": 4, + "url": "http://www.nativo.net/", + "companyId": "nativo" + }, + "navegg_dmp": { + "name": "Navegg", + "categoryId": 6, + "url": "https://www.navegg.com/en/", + "companyId": "navegg" + }, + "naver.com": { + "name": "Naver", + "categoryId": 4, + "url": "https://www.naver.com/", + "companyId": "naver" + }, + "naver_search": { + "name": "Naver Search", + "categoryId": 2, + "url": "http://www.naver.com/", + "companyId": "naver" + }, + "nbc_news": { + "name": "NBC News", + "categoryId": 8, + "url": "https://www.nbcnews.com/", + "companyId": null + }, + "ncol": { + "name": "NCOL", + "categoryId": 4, + "url": "http://www.ncol.com/", + "companyId": "ncol" + }, + "needle": { + "name": "Needle", + "categoryId": 2, + "url": "http://www.needle.com", + "companyId": "needle" + }, + "nekudo.com": { + "name": "Nekudo", + "categoryId": 2, + "url": "https://nekudo.com/", + "companyId": "nekudo" + }, + "neodata": { + "name": "Neodata", + "categoryId": 4, + "url": "http://neodatagroup.com/", + "companyId": "neodata" + }, + "neory": { + "name": "NEORY ", + "categoryId": 4, + "url": "https://www.neory.com/", + "companyId": "neory" + }, + "nerfherdersolo_com": { + "name": "nerfherdersolo.com", + "categoryId": 8, + "url": null, + "companyId": null + }, + "net-metrix": { + "name": "NET-Metrix", + "categoryId": 6, + "url": "http://www.net-metrix.ch/", + "companyId": "net-metrix" + }, + "net-results": { + "name": "Net-Results", + "categoryId": 4, + "url": "http://www.net-results.com/", + "companyId": "net-results" + }, + "net_avenir": { + "name": "Net Avenir", + "categoryId": 4, + "url": "http://www.netavenir.com/", + "companyId": "net_avenir" + }, + "net_communities": { + "name": "Net Communities", + "categoryId": 4, + "url": "http://www.netcommunities.com/", + "companyId": "net_communities" + }, + "net_visibility": { + "name": "NET Visibility", + "categoryId": 4, + "url": "http://www.netvisibility.co.uk", + "companyId": "net_visibility" + }, + "netbiscuits": { + "name": "Netbiscuits", + "categoryId": 6, + "url": "http://www.netbiscuits.net/", + "companyId": "netbiscuits" + }, + "netbooster_group": { + "name": "NetBooster Group", + "categoryId": 4, + "url": "http://www.netbooster.com/", + "companyId": "netbooster_group" + }, + "netflix": { + "name": "Netflix", + "categoryId": 0, + "url": "https://www.netflix.com/", + "companyId": "netflix", + "source": "AdGuard" + }, + "netify": { + "name": "Netify", + "categoryId": 8, + "url": "https://www.netify.ai/", + "companyId": "netify", + "source": "AdGuard" + }, + "netletix": { + "name": "Netletix", + "categoryId": 4, + "url": "http://www.netletix.com//", + "companyId": "ip_de" + }, + "netminers": { + "name": "Netminers", + "categoryId": 6, + "url": "http://netminers.dk/", + "companyId": "netminers" + }, + "netmining": { + "name": "Netmining", + "categoryId": 4, + "url": "http://www.netmining.com/", + "companyId": "zeta" + }, + "netmonitor": { + "name": "NetMonitor", + "categoryId": 6, + "url": "http://www.netmanager.net/en/", + "companyId": "netmonitor" + }, + "netratings_sitecensus": { + "name": "NetRatings SiteCensus", + "categoryId": 4, + "url": "http://www.nielsen-online.com/intlpage.html", + "companyId": "nielsen" + }, + "netrk.net": { + "name": "nfxTrack", + "categoryId": 6, + "url": "https://netrk.net/", + "companyId": "netzeffekt" + }, + "netseer": { + "name": "NetSeer", + "categoryId": 4, + "url": "http://www.netseer.com/", + "companyId": "netseer" + }, + "netshelter": { + "name": "NetShelter", + "categoryId": 4, + "url": "http://www.netshelter.net/", + "companyId": "netshelter" + }, + "netsprint_audience": { + "name": "Netsprint Audience", + "categoryId": 6, + "url": "http://audience.netsprint.eu/", + "companyId": "netsprint" + }, + "networkedblogs": { + "name": "NetworkedBlogs", + "categoryId": 7, + "url": "http://w.networkedblogs.com/", + "companyId": "networkedblogs" + }, + "neustar_adadvisor": { + "name": "Neustar AdAdvisor", + "categoryId": 4, + "url": "http://www.targusinfo.com/", + "companyId": "neustar" + }, + "new_relic": { + "name": "New Relic", + "categoryId": 6, + "url": "http://newrelic.com/", + "companyId": "new_relic" + }, + "newscgp.com": { + "name": "News Connect", + "categoryId": 4, + "url": "https://newscorp.com/", + "companyId": "news_corp" + }, + "newsmax": { + "name": "Newsmax", + "categoryId": 4, + "url": "http://www.newsmax.com/", + "companyId": "newsmax" + }, + "newstogram": { + "name": "Newstogram", + "categoryId": 4, + "url": "http://www.newstogram.com/", + "companyId": "dailyme" + }, + "newsupdatedir.info": { + "name": "newsupdatedir.info", + "categoryId": 11, + "url": null, + "companyId": null + }, + "newsupdatewe.info": { + "name": "newsupdatewe.info", + "categoryId": 12, + "url": null, + "companyId": null + }, + "newtention": { + "name": "Newtention", + "categoryId": 4, + "url": "http://www.newtention.de/", + "companyId": "next_audience" + }, + "nexage": { + "name": "Nexage", + "categoryId": 4, + "url": "http://www.nexage.com/", + "companyId": "verizon" + }, + "nexeps.com": { + "name": "neXeps", + "categoryId": 4, + "url": "http://nexeps.com/", + "companyId": null + }, + "next_performance": { + "name": "Next Performance", + "categoryId": 4, + "url": "http://www.nextperformance.com/", + "companyId": "nextperf" + }, + "next_user": { + "name": "Next User", + "categoryId": 4, + "url": "https://www.nextuser.com/", + "companyId": "next_user" + }, + "nextag_roi_optimizer": { + "name": "Nextag ROI Optimizer", + "categoryId": 4, + "url": "http://www.nextag.com/", + "companyId": "nextag" + }, + "nextclick": { + "name": "Nextclick", + "categoryId": 4, + "url": "http://nextclick.pl/", + "companyId": "leadbullet" + }, + "nextstat": { + "name": "NextSTAT", + "categoryId": 6, + "url": "http://www.nextstat.com/", + "companyId": "nextstat" + }, + "neytiv": { + "name": "Neytiv", + "categoryId": 6, + "url": "http://neytiv.com/", + "companyId": "neytiv" + }, + "ngage_inc.": { + "name": "NGage INC.", + "categoryId": 6, + "url": "https://www.nginx.com/", + "companyId": "nginx" + }, + "nice264.com": { + "name": "Nice264", + "categoryId": 0, + "url": "http://nice264.com/", + "companyId": null + }, + "nimblecommerce": { + "name": "NimbleCommerce", + "categoryId": 4, + "url": "http://www.nimblecommerce.com/", + "companyId": "nimblecommerce" + }, + "nine_direct_digital": { + "name": "Nine Digital Direct", + "categoryId": 4, + "url": "https://ninedigitaldirect.com.au/", + "companyId": "nine_entertainment", + "source": "AdGuard" + }, + "ninja_access_analysis": { + "name": "Ninja Access Analysis", + "categoryId": 6, + "url": "http://www.ninja.co.jp/analysis/", + "companyId": "samurai_factory" + }, + "nirror": { + "name": "Nirror", + "categoryId": 6, + "url": "https://www.nirror.com/", + "companyId": "nirror" + }, + "nitropay": { + "name": "NitroPay", + "categoryId": 4, + "url": "https://nitropay.com/", + "companyId": "gg_software" + }, + "nk.pl_widgets": { + "name": "NK.pl Widgets", + "categoryId": 4, + "url": "http://nk.pl", + "companyId": "nk.pl" + }, + "noaa.gov": { + "name": "National Oceanic and Atmospheric Administration", + "categoryId": 8, + "url": "https://noaa.gov/", + "companyId": null + }, + "noddus": { + "name": "Noddus", + "categoryId": 4, + "url": "https://www.enterprise.noddus.com/", + "companyId": "noddus" + }, + "nolix": { + "name": "Nolix", + "categoryId": 4, + "url": "http://nolix.ru/", + "companyId": "nolix" + }, + "nonli": { + "name": "Nonli", + "categoryId": 4, + "url": "https://www.nonli.com/", + "companyId": "nonli", + "source": "AdGuard" + }, + "nonstop_consulting": { + "name": "Resolution Media", + "categoryId": 4, + "url": "https://resolutionmedia.com/", + "companyId": "resolution_media" + }, + "noop.style": { + "name": "noop.style", + "categoryId": 11, + "url": null, + "companyId": null + }, + "nosto.com": { + "name": "nosto", + "categoryId": 6, + "url": "http://www.nosto.com/", + "companyId": null + }, + "notify": { + "name": "Notify", + "categoryId": 4, + "url": "http://notify.ag/en/", + "companyId": null + }, + "notifyfox": { + "name": "Notifyfox", + "categoryId": 6, + "url": "https://notifyfox.com/", + "companyId": "notifyfox" + }, + "notion": { + "name": "Notion", + "categoryId": 8, + "url": "https://www.notion.so/", + "companyId": "notion", + "source": "AdGuard" + }, + "now_interact": { + "name": "Now Interact", + "categoryId": 6, + "url": "http://nowinteract.com/", + "companyId": "now_interact" + }, + "npario": { + "name": "nPario", + "categoryId": 6, + "url": "http://npario.com/", + "companyId": "npario" + }, + "nplexmedia": { + "name": "nPlexMedia", + "categoryId": 4, + "url": "http://www.nplexmedia.com/", + "companyId": "nplexmedia" + }, + "nrelate": { + "name": "nRelate", + "categoryId": 2, + "url": "http://nrelate.com/", + "companyId": "iac_apps" + }, + "ns8": { + "name": "NS8", + "categoryId": 4, + "url": "https://www.ns8.com/", + "companyId": null + }, + "nt.vc": { + "name": "Next Tuesday GmbH", + "categoryId": 8, + "url": "http://www.nexttuesday.de/", + "companyId": null + }, + "ntent": { + "name": "NTENT", + "categoryId": 4, + "url": "http://www.verticalsearchworks.com", + "companyId": "ntent" + }, + "ntppool": { + "name": "Network Time Protocol", + "categoryId": 5, + "url": "https://ntp.org/", + "companyId": "network_time_foundation", + "source": "AdGuard" + }, + "nttcom_online_marketing_solutions": { + "name": "NTTCom Online Marketing Solutions", + "categoryId": 6, + "url": "http://www.digitalforest.co.jp/", + "companyId": "nttcom_online_marketing_solutions" + }, + "nuffnang": { + "name": "Nuffnang", + "categoryId": 4, + "url": "http://nuffnang.com/", + "companyId": "nuffnang" + }, + "nugg.ad": { + "name": "Nugg.Ad", + "categoryId": 4, + "url": "http://www.nugg.ad/", + "companyId": "nugg.ad" + }, + "nui_media": { + "name": "NUI Media", + "categoryId": 4, + "url": "http://adjuggler.com/", + "companyId": "nui_media" + }, + "numbers.md": { + "name": "Numbers.md", + "categoryId": 6, + "url": "https://numbers.md/", + "companyId": "numbers.md" + }, + "numerator": { + "name": "Numerator", + "categoryId": 5, + "url": "http://www.channeliq.com/", + "companyId": "numerator" + }, + "ny_times_tagx": { + "name": "NY Times TagX", + "categoryId": 6, + "url": "https://www.nytimes.com/", + "companyId": "the_new_york_times" + }, + "nyacampwk.com": { + "name": "nyacampwk.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "nyetm2mkch.com": { + "name": "nyetm2mkch.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "nyt.com": { + "name": "The New York Times", + "categoryId": 8, + "url": "https://www.nytimes.com/", + "companyId": "the_new_york_times" + }, + "o12zs3u2n.com": { + "name": "o12zs3u2n.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "o2.pl": { + "name": "o2.pl", + "categoryId": 8, + "url": "https://www.o2.pl/", + "companyId": "o2.pl" + }, + "o2online.de": { + "name": "o2online.de", + "categoryId": 8, + "url": "https://www.o2online.de/", + "companyId": null + }, + "oath_inc": { + "name": "Oath", + "categoryId": 8, + "url": "https://www.oath.com/", + "companyId": "verizon" + }, + "observer": { + "name": "Observer", + "categoryId": 4, + "url": "http://www.observerapp.com", + "companyId": "observer" + }, + "ocioso": { + "name": "Ocioso", + "categoryId": 7, + "url": "http://ocioso.com.br/", + "companyId": "ocioso" + }, + "oclasrv.com": { + "name": "oclasrv.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "octapi.net": { + "name": "octapi.net", + "categoryId": 11, + "url": null, + "companyId": null + }, + "octavius": { + "name": "Octavius", + "categoryId": 4, + "url": "http://octavius.rocks/", + "companyId": "octavius" + }, + "office.com": { + "name": "office.com", + "categoryId": 8, + "url": "https://www.microsoft.com/", + "companyId": "microsoft" + }, + "office.net": { + "name": "office.net", + "categoryId": 8, + "url": "https://www.microsoft.com/", + "companyId": "microsoft" + }, + "office365.com": { + "name": "office365.com", + "categoryId": 8, + "url": "https://www.microsoft.com/", + "companyId": "microsoft" + }, + "oghub.io": { + "name": "OG Hub", + "categoryId": 11, + "url": null, + "companyId": null + }, + "oh_my_stats": { + "name": "Oh My Stats", + "categoryId": 6, + "url": "https://ohmystats.com/", + "companyId": "oh_my_stats" + }, + "ohana_advertising_network": { + "name": "Ohana Advertising Network", + "categoryId": 4, + "url": "http://adohana.com/", + "companyId": "ohana_advertising_network" + }, + "olapic": { + "name": "Olapic", + "categoryId": 4, + "url": "https://www.olapic.com/", + "companyId": "olapic" + }, + "olark": { + "name": "Olark", + "categoryId": 2, + "url": "http://www.olark.com/", + "companyId": "olark" + }, + "olx-st.com": { + "name": "OLX", + "categoryId": 8, + "url": "http://www.olx.com/", + "companyId": null + }, + "omarsys.com": { + "name": "Omarsys", + "categoryId": 4, + "url": "http://omarsys.com/", + "companyId": "xcaliber" + }, + "ometria": { + "name": "Ometria", + "categoryId": 4, + "url": "http://www.ometria.com/", + "companyId": "ometria" + }, + "omg": { + "name": "OMG", + "categoryId": 7, + "url": "http://uk.omgpm.com/", + "companyId": "optimise_media" + }, + "omniconvert.com": { + "name": "Omniconvert", + "categoryId": 4, + "url": "https://www.omniconvert.com/", + "companyId": "omniconvert" + }, + "omniscienta": { + "name": "Omniscienta", + "categoryId": 4, + "url": "http://www.omniscienta.com/", + "companyId": null + }, + "oms": { + "name": "OMS", + "categoryId": 4, + "url": "http://oms.eu/", + "companyId": null + }, + "onaudience": { + "name": "OnAudience", + "categoryId": 4, + "url": "http://www.onaudience.com/", + "companyId": "cloud_technologies" + }, + "oneall": { + "name": "Oneall", + "categoryId": 7, + "url": "http://www.oneall.com/", + "companyId": "oneall" + }, + "onefeed": { + "name": "Onefeed", + "categoryId": 6, + "url": "http://www.onefeed.co.uk", + "companyId": "onefeed" + }, + "onesignal": { + "name": "OneSignal", + "categoryId": 5, + "url": "https://onesignal.com/", + "companyId": "onesignal" + }, + "onestat": { + "name": "OneStat", + "categoryId": 6, + "url": "http://www.onestat.com/", + "companyId": "onestat_international_b.v." + }, + "onet.pl": { + "name": "onet", + "categoryId": 8, + "url": "https://www.onet.pl/", + "companyId": null + }, + "onetag": { + "name": "OneTag", + "categoryId": 4, + "url": "https://www.onetag.com/", + "companyId": "onetag" + }, + "onetrust": { + "name": "OneTrust", + "categoryId": 5, + "url": "https://www.onetrust.com/", + "companyId": "onetrust" + }, + "onfocus.io": { + "name": "OnFocus", + "categoryId": 4, + "url": "http://onfocus.io/", + "companyId": "onfocus" + }, + "onlinewebstat": { + "name": "Onlinewebstat", + "categoryId": 6, + "url": "http://www.onlinewebstats.com/index.php?lang=en", + "companyId": "onlinewebstat" + }, + "onswipe": { + "name": "Onswipe", + "categoryId": 4, + "url": "http://www.onswipe.com/", + "companyId": "onswipe" + }, + "onthe.io": { + "name": "OnThe.io", + "categoryId": 6, + "url": "https://t.onthe.io/media", + "companyId": "onthe.io" + }, + "ontraport_autopilot": { + "name": "Ontraport Autopilot", + "categoryId": 4, + "url": "http://www.moon-ray.com/", + "companyId": "ontraport" + }, + "ooyala.com": { + "name": "Ooyala Player", + "categoryId": 0, + "url": "https://www.ooyala.com/", + "companyId": "telstra" + }, + "ooyala_analytics": { + "name": "Ooyala Analytics", + "categoryId": 6, + "url": "https://www.telstraglobal.com/", + "companyId": "telstra" + }, + "open_adexchange": { + "name": "Open AdExchange", + "categoryId": 4, + "url": "http://openadex.dk/", + "companyId": "open_adexchange" + }, + "open_adstream": { + "name": "Open Adstream", + "categoryId": 4, + "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", + "companyId": "microsoft", + "source": "AdGuard" + }, + "open_share_count": { + "name": "Open Share Count", + "categoryId": 4, + "url": "http://opensharecount.com/", + "companyId": "open_share_count" + }, + "openai": { + "name": "OpenAI", + "categoryId": 8, + "url": "https://openai.com/", + "companyId": "openai", + "source": "AdGuard" + }, + "openload": { + "name": "Openload", + "categoryId": 9, + "url": "https://openload.co/", + "companyId": null + }, + "openstat": { + "name": "OpenStat", + "categoryId": 6, + "url": "https://www.openstat.ru/", + "companyId": "openstat" + }, + "opentracker": { + "name": "Opentracker", + "categoryId": 6, + "url": "http://www.opentracker.net/", + "companyId": "opentracker" + }, + "openwebanalytics": { + "name": "Open Web Analytics", + "categoryId": 6, + "url": "http://www.openwebanalytics.com/", + "companyId": "open_web_analytics" + }, + "openx": { + "name": "OpenX", + "categoryId": 4, + "url": "https://www.openx.com", + "companyId": "openx" + }, + "operative_media": { + "name": "Operative Media", + "categoryId": 4, + "url": "http://www.operative.com/", + "companyId": "operative_media" + }, + "opinary": { + "name": "Opinary", + "categoryId": 2, + "url": "http://opinary.com/", + "companyId": "opinary" + }, + "opinionbar": { + "name": "OpinionBar", + "categoryId": 2, + "url": "http://www.metrixlab.com", + "companyId": "metrixlab" + }, + "oplytic": { + "name": "Oplytic", + "categoryId": 6, + "url": "http://www.oplytic.com", + "companyId": "oplytic" + }, + "oppo": { + "name": "OPPO", + "categoryId": 101, + "url": "https://www.oppo.com/", + "companyId": "bbk", + "source": "AdGuard" + }, + "opta.net": { + "name": "Opta", + "categoryId": 6, + "url": "http://www.optasports.de/", + "companyId": "opta_sports" + }, + "optaim": { + "name": "OptAim", + "categoryId": 4, + "url": "http://optaim.com/", + "companyId": "optaim" + }, + "optanaon": { + "name": "Optanaon by OneTrust", + "categoryId": 5, + "url": "https://www.cookielaw.org/", + "companyId": "onetrust" + }, + "optify": { + "name": "Optify", + "categoryId": 4, + "url": "http://www.optify.net", + "companyId": "optify" + }, + "optimatic": { + "name": "Optimatic", + "categoryId": 0, + "url": "http://www.optimatic.com/", + "companyId": "optimatic" + }, + "optimax_media_delivery": { + "name": "Optimax Media Delivery", + "categoryId": 4, + "url": "http://optmd.com/", + "companyId": "optimax_media_delivery" + }, + "optimicdn.com": { + "name": "OptimiCDN", + "categoryId": 9, + "url": "https://en.optimicdn.com/", + "companyId": null + }, + "optimizely": { + "name": "Optimizely", + "categoryId": 6, + "url": "https://www.optimizely.com/", + "companyId": "optimizely" + }, + "optimizely_error_log": { + "name": "Optimizely Error Log", + "categoryId": 6, + "url": "https://www.optimizely.com/", + "companyId": "optimizely" + }, + "optimizely_geo_targeting": { + "name": "Optimizely Geographical Targeting", + "categoryId": 6, + "url": "https://www.optimizely.com/", + "companyId": "optimizely" + }, + "optimizely_logging": { + "name": "Optimizely Logging", + "categoryId": 6, + "url": "https://www.optimizely.com/", + "companyId": "optimizely" + }, + "optimonk": { + "name": "Optimonk", + "categoryId": 6, + "url": "https://www.optimonk.com/", + "companyId": "optimonk" + }, + "optinmonster": { + "name": "OptInMonster", + "categoryId": 2, + "url": "https://optinmonster.com/", + "companyId": "optinmonster" + }, + "optinproject.com": { + "name": "OptinProject", + "categoryId": 4, + "url": "https://www.optincollect.com/en", + "companyId": "optincollect" + }, + "optomaton": { + "name": "Optomaton", + "categoryId": 4, + "url": "http://www.optomaton.com/", + "companyId": "ve" + }, + "ora.tv": { + "name": "Ora.TV", + "categoryId": 4, + "url": "http://www.ora.tv/", + "companyId": "ora.tv" + }, + "oracle_infinity": { + "name": "Oracle Infinity Behavioral Intelligence", + "categoryId": 6, + "url": "https://www.oracle.com/au/cx/marketing/digital-intelligence/", + "companyId": "oracle", + "source": "AdGuard" + }, + "oracle_live_help": { + "name": "Oracle Live Help", + "categoryId": 2, + "url": "http://www.oracle.com/us/products/applications/atg/live-help-on-demand/index.html", + "companyId": "oracle" + }, + "oracle_rightnow": { + "name": "Oracle RightNow", + "categoryId": 8, + "url": "http://www.oracle.com/", + "companyId": "oracle" + }, + "orange": { + "name": "Orange", + "categoryId": 4, + "url": "http://www.orange.co.uk/", + "companyId": "orange_mobile" + }, + "orange142": { + "name": "Orange142", + "categoryId": 4, + "url": "http://www.orange142.com/", + "companyId": "orange142" + }, + "orange_france": { + "name": "Orange France", + "categoryId": 8, + "url": "https://www.orange.fr/", + "companyId": "orange_france" + }, + "orangesoda": { + "name": "OrangeSoda", + "categoryId": 4, + "url": "http://www.orangesoda.com/", + "companyId": "orangesoda" + }, + "orc_international": { + "name": "ORC International", + "categoryId": 4, + "url": "https://orcinternational.com/", + "companyId": "engine_group" + }, + "order_groove": { + "name": "Order Groove", + "categoryId": 4, + "url": "http://ordergroove.com/", + "companyId": "order_groove" + }, + "orel_site": { + "name": "Orel Site", + "categoryId": 2, + "url": "https://www.orelsite.ru/", + "companyId": "orel_site" + }, + "otclick": { + "name": "otClick", + "categoryId": 4, + "url": "http://otclick-adv.ru/", + "companyId": "otclick" + }, + "othersearch.info": { + "name": "FlowSurf", + "categoryId": 8, + "url": null, + "companyId": null + }, + "otm-r.com": { + "name": "OTM", + "categoryId": 4, + "url": "http://otm-r.com/", + "companyId": null + }, + "otto.de": { + "name": "Otto Group", + "categoryId": 8, + "url": null, + "companyId": null + }, + "outbrain": { + "name": "Outbrain", + "categoryId": 4, + "url": "https://www.outbrain.com/", + "companyId": "outbrain" + }, + "outbrain_amplify": { + "name": "Outbrain Amplify", + "categoryId": 4, + "url": "http://www.outbrain.com/", + "companyId": "outbrain" + }, + "outbrain_analytics": { + "name": "Outbrain Analytics", + "categoryId": 6, + "url": "http://www.outbrain.com/", + "companyId": "outbrain" + }, + "outbrain_logger": { + "name": "Outbrain Logger", + "categoryId": 4, + "url": "http://www.outbrain.com/", + "companyId": "outbrain" + }, + "outbrain_pixel": { + "name": "Outbrain Pixel", + "categoryId": 4, + "url": "http://www.outbrain.com/", + "companyId": "outbrain" + }, + "outbrain_utilities": { + "name": "Outbrain Utilities", + "categoryId": 6, + "url": "http://www.outbrain.com/", + "companyId": "outbrain" + }, + "outbrain_widgets": { + "name": "Outbrain Widgets", + "categoryId": 4, + "url": "http://www.outbrain.com/", + "companyId": "outbrain" + }, + "outlook": { + "name": "Microsoft Outlook", + "categoryId": 13, + "url": "https://outlook.live.com/", + "companyId": "microsoft", + "source": "AdGuard" + }, + "overheat.it": { + "name": "overheat", + "categoryId": 6, + "url": "https://overheat.io/", + "companyId": null + }, + "owa": { + "name": "OWA", + "categoryId": 6, + "url": "http://oewa.at/", + "companyId": "the_austrian_web_analysis" + }, + "owneriq": { + "name": "OwnerIQ", + "categoryId": 4, + "url": "http://www.owneriq.com/", + "companyId": "owneriq" + }, + "ownpage": { + "name": "Ownpage", + "categoryId": 2, + "url": "http://www.ownpage.fr/index.en.html", + "companyId": null + }, + "owox.com": { + "name": "OWOX", + "categoryId": 6, + "url": "https://www.owox.com/", + "companyId": "owox_inc" + }, + "oxamedia": { + "name": "OxaMedia", + "categoryId": 2, + "url": "http://www.oxamedia.com/", + "companyId": "oxamedia" + }, + "oxomi.com": { + "name": "Oxomi", + "categoryId": 4, + "url": "https://oxomi.com/", + "companyId": null + }, + "oztam": { + "name": "OzTAM", + "categoryId": 8, + "url": "https://oztam.com.au/", + "companyId": "oztam", + "source": "AdGuard" + }, + "pageanalytics.space": { + "name": "pageanalytics.space", + "categoryId": 11, + "url": null, + "companyId": null + }, + "pagefair": { + "name": "PageFair", + "categoryId": 2, + "url": "https://pagefair.com/", + "companyId": "blockthrough" + }, + "pagescience": { + "name": "PageScience", + "categoryId": 4, + "url": "http://www.precisionhealthmedia.com/index.html", + "companyId": "pagescience" + }, + "paid-to-promote": { + "name": "Paid-To-Promote", + "categoryId": 4, + "url": "http://www.paid-to-promote.net/", + "companyId": "paid-to-promote" + }, + "paperg": { + "name": "PaperG", + "categoryId": 4, + "url": "http://www.paperg.com/", + "companyId": "paperg" + }, + "pardot": { + "name": "Pardot", + "categoryId": 6, + "url": "http://www.pardot.com/", + "companyId": "pardot" + }, + "parsely": { + "name": "Parse.ly", + "categoryId": 6, + "url": "https://www.parse.ly/", + "companyId": "parse.ly" + }, + "partner-ads": { + "name": "Partner-Ads", + "categoryId": 4, + "url": "http://www.partner-ads.com/", + "companyId": "partner-ads" + }, + "passionfruit": { + "name": "Passionfruit", + "categoryId": 4, + "url": "http://passionfruitads.com/", + "companyId": "passionfruit" + }, + "pathful": { + "name": "Pathful", + "categoryId": 6, + "url": "http://www.pathful.com/", + "companyId": "pathful" + }, + "pay-hit": { + "name": "Pay-Hit", + "categoryId": 4, + "url": "http://pay-hit.com/", + "companyId": "pay-hit" + }, + "payclick": { + "name": "PayClick", + "categoryId": 4, + "url": "http://payclick.it/", + "companyId": "payclick" + }, + "paykickstart": { + "name": "PayKickstart", + "categoryId": 6, + "url": "https://paykickstart.com/", + "companyId": "paykickstart" + }, + "paypal": { + "name": "PayPal", + "categoryId": 2, + "url": "https://www.paypal.com", + "companyId": "ebay" + }, + "pcvark.com": { + "name": "pcvark.com", + "categoryId": 11, + "url": "https://pcvark.com/", + "companyId": null + }, + "peer39": { + "name": "Peer39", + "categoryId": 4, + "url": "http://www.peer39.com/", + "companyId": "peer39" + }, + "peer5.com": { + "name": "Peer5", + "categoryId": 9, + "url": "https://www.peer5.com/", + "companyId": "peer5" + }, + "peerius": { + "name": "Peerius", + "categoryId": 2, + "url": "http://www.peerius.com/", + "companyId": "peerius" + }, + "pendo.io": { + "name": "pendo", + "categoryId": 6, + "url": "https://www.pendo.io/", + "companyId": null + }, + "pepper.com": { + "name": "Pepper", + "categoryId": 4, + "url": "https://www.pepper.com/", + "companyId": "6minutes" + }, + "pepperjam": { + "name": "Pepperjam", + "categoryId": 4, + "url": "http://www.pepperjam.com", + "companyId": "pepperjam" + }, + "pepsia": { + "name": "Pepsia", + "categoryId": 6, + "url": "http://pepsia.com/en/", + "companyId": "pepsia" + }, + "perfdrive.com": { + "name": "perfdrive.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "perfect_audience": { + "name": "Perfect Audience", + "categoryId": 4, + "url": "https://www.perfectaudience.com/", + "companyId": "perfect_audience" + }, + "perfect_market": { + "name": "Perfect Market", + "categoryId": 4, + "url": "http://perfectmarket.com/", + "companyId": "perfect_market" + }, + "perfops": { + "name": "PerfOps", + "categoryId": 6, + "url": "https://perfops.net/", + "companyId": "perfops", + "source": "AdGuard" + }, + "perform_group": { + "name": "Perform Group", + "categoryId": 5, + "url": "http://www.performgroup.co.uk/", + "companyId": "perform_group" + }, + "performable": { + "name": "Performable", + "categoryId": 6, + "url": "http://www.performable.com/", + "companyId": "hubspot" + }, + "performancing_metrics": { + "name": "Performancing Metrics", + "categoryId": 6, + "url": "http://pmetrics.performancing.com", + "companyId": "performancing" + }, + "performax": { + "name": "Performax", + "categoryId": 4, + "url": "https://www.performax.cz/", + "companyId": "performax" + }, + "perimeterx.net": { + "name": "Perimeterx", + "categoryId": 6, + "url": "https://www.perimeterx.com/", + "companyId": null + }, + "permutive": { + "name": "Permutive", + "categoryId": 4, + "url": "http://permutive.com/", + "companyId": "permutive" + }, + "persgroep": { + "name": "De Persgroep", + "categoryId": 4, + "url": "https://www.persgroep.be/", + "companyId": "de_persgroep" + }, + "persianstat": { + "name": "PersianStat", + "categoryId": 6, + "url": "http://www.persianstat.com", + "companyId": "persianstat" + }, + "persio": { + "name": "Persio", + "categoryId": 4, + "url": "http://www.pers.io/", + "companyId": "pers.io" + }, + "personyze": { + "name": "Personyze", + "categoryId": 2, + "url": "http://personyze.com/", + "companyId": "personyze" + }, + "petametrics": { + "name": "LiftIgniter", + "categoryId": 2, + "url": "https://www.liftigniter.com/", + "companyId": "liftigniter" + }, + "pheedo": { + "name": "Pheedo", + "categoryId": 4, + "url": "http://pheedo.com/", + "companyId": "pheedo" + }, + "phonalytics": { + "name": "Phonalytics", + "categoryId": 2, + "url": "http://www.phonalytics.com/", + "companyId": "phonalytics" + }, + "phunware": { + "name": "Phunware", + "categoryId": 4, + "url": "https://www.phunware.com", + "companyId": "phunware" + }, + "piguiqproxy.com": { + "name": "piguiqproxy.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "pilot": { + "name": "Pilot", + "categoryId": 6, + "url": "http://www.pilot.de/en/home.html", + "companyId": "pilot_gmbh" + }, + "pingdom": { + "name": "Pingdom", + "categoryId": 6, + "url": "https://www.pingdom.com/", + "companyId": "pingdom" + }, + "pinterest": { + "name": "Pinterest", + "categoryId": 7, + "url": "http://pinterest.com/", + "companyId": "pinterest" + }, + "pinterest_conversion_tracker": { + "name": "Pinterest Conversion Tracker", + "categoryId": 6, + "url": "http://pinterest.com/", + "companyId": "pinterest" + }, + "pipz": { + "name": "Pipz", + "categoryId": 4, + "url": "https://pipz.com/br/", + "companyId": "pipz_automation" + }, + "piwik": { + "name": "Tombstone (Matomo/Piwik before the split)", + "categoryId": 6, + "url": "http://piwik.org/", + "companyId": "matomo" + }, + "piwik_pro_analytics_suite": { + "name": "Piwik PRO Analytics Suite", + "categoryId": 6, + "url": "https://piwik.pro/", + "companyId": "piwik_pro" + }, + "pixalate": { + "name": "Pixalate", + "categoryId": 4, + "url": "http://www.pixalate.com/", + "companyId": "pixalate" + }, + "pixel_union": { + "name": "Pixel Union", + "categoryId": 4, + "url": "https://www.pixelunion.net/", + "companyId": "pixel_union" + }, + "pixfuture": { + "name": "PixFuture", + "categoryId": 4, + "url": "http://www.pixfuture.com", + "companyId": "pixfuture" + }, + "piximedia": { + "name": "Piximedia", + "categoryId": 4, + "url": "http://www.piximedia.com/piximedia?en", + "companyId": "piximedia" + }, + "pizzaandads_com": { + "name": "pizzaandads.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "placester": { + "name": "Placester", + "categoryId": 4, + "url": "https://placester.com/", + "companyId": "placester" + }, + "pladform.ru": { + "name": "Pladform", + "categoryId": 4, + "url": "https://distribution.pladform.ru/", + "companyId": "pladform" + }, + "plan.net_experience_cloud": { + "name": "Plan.net Experience Cloud", + "categoryId": 6, + "url": "https://www.serviceplan.com/", + "companyId": "serviceplan" + }, + "platform360": { + "name": "Platform360", + "categoryId": 4, + "url": "http://www.platform360.co/#home", + "companyId": null + }, + "platformone": { + "name": "Platform One", + "categoryId": 4, + "url": "https://www.platform-one.co.jp/", + "companyId": "daconsortium" + }, + "play_by_mamba": { + "name": "Play by Mamba", + "categoryId": 4, + "url": "http://play.mamba.ru/", + "companyId": "mamba" + }, + "playbuzz.com": { + "name": "Playbuzz", + "categoryId": 2, + "url": "https://www.playbuzz.com/", + "companyId": "playbuzz" + }, + "plenty_of_fish": { + "name": "Plenty Of Fish", + "categoryId": 6, + "url": "http://www.pof.com/", + "companyId": "plentyoffish" + }, + "plex": { + "name": "Plex", + "categoryId": 0, + "url": "https://www.plex.tv/", + "companyId": "plex", + "source": "AdGuard" + }, + "plex_metrics": { + "name": "Plex Metrics", + "categoryId": 6, + "url": "https://www.plex.tv/", + "companyId": "plex" + }, + "plista": { + "name": "Plista", + "categoryId": 4, + "url": "http://www.plista.com", + "companyId": "plista" + }, + "plugrush": { + "name": "PlugRush", + "categoryId": 4, + "url": "http://www.plugrush.com/", + "companyId": "plugrush" + }, + "pluso.ru": { + "name": "Pluso", + "categoryId": 7, + "url": "https://share.pluso.ru/", + "companyId": "pluso" + }, + "plutusads": { + "name": "Plutusads", + "categoryId": 4, + "url": "http://plutusads.com", + "companyId": "plutusads" + }, + "pmddby.com": { + "name": "pmddby.com", + "categoryId": 12, + "url": null, + "companyId": null + }, + "pnamic.com": { + "name": "pnamic.com", + "categoryId": 12, + "url": null, + "companyId": null + }, + "po.st": { + "name": "Po.st", + "categoryId": 7, + "url": "https://www.po.st/", + "companyId": "rythmone" + }, + "pocket": { + "name": "Pocket", + "categoryId": 6, + "url": "http://getpocket.com/", + "companyId": "pocket" + }, + "pocketcents": { + "name": "PocketCents", + "categoryId": 4, + "url": "http://pocketcents.com/", + "companyId": "pocketcents" + }, + "pointific": { + "name": "Pointific", + "categoryId": 6, + "url": "http://www.pontiflex.com/", + "companyId": "pontiflex" + }, + "pointroll": { + "name": "PointRoll", + "categoryId": 4, + "url": "http://www.pointroll.com/", + "companyId": "gannett_digital_media_network" + }, + "poirreleast.club": { + "name": "poirreleast.club", + "categoryId": 11, + "url": null, + "companyId": null + }, + "polar.me": { + "name": "Polar", + "categoryId": 4, + "url": "https://polar.me/", + "companyId": "polar_inc" + }, + "polldaddy": { + "name": "Polldaddy", + "categoryId": 2, + "url": "http://polldaddy.com/", + "companyId": "automattic" + }, + "polyad": { + "name": "PolyAd", + "categoryId": 4, + "url": "http://polyad.net", + "companyId": "polyad" + }, + "polyfill.io": { + "name": "Polyfill", + "categoryId": 8, + "url": "https://polyfill.io/", + "companyId": "polyfill.io" + }, + "popads": { + "name": "PopAds", + "categoryId": 4, + "url": "https://www.popads.net/", + "companyId": "popads" + }, + "popcash": { + "name": "Popcash", + "categoryId": 4, + "url": "http://popcash.net/", + "companyId": "popcash_network" + }, + "popcorn_metrics": { + "name": "Popcorn Metrics", + "categoryId": 6, + "url": "https://www.popcornmetrics.com/", + "companyId": "popcorn_metrics" + }, + "popin.cc": { + "name": "popIn", + "categoryId": 7, + "url": "https://www.popin.cc/", + "companyId": "popin" + }, + "popmyads": { + "name": "PopMyAds", + "categoryId": 4, + "url": "http://popmyads.com/", + "companyId": "popmyads" + }, + "poponclick": { + "name": "PopOnClick", + "categoryId": 4, + "url": "http://poponclick.com", + "companyId": "poponclick" + }, + "populis": { + "name": "Populis", + "categoryId": 4, + "url": "http://www.populis.com", + "companyId": "populis" + }, + "pornhub": { + "name": "PornHub", + "categoryId": 3, + "url": "https://www.pornhub.com/", + "companyId": "pornhub" + }, + "pornwave": { + "name": "Pornwave", + "categoryId": 3, + "url": "http://pornwave.com", + "companyId": "pornwave.com" + }, + "porta_brazil": { + "name": "Porta Brazil", + "categoryId": 4, + "url": "http://brasil.gov.br/", + "companyId": "portal_brazil" + }, + "post_affiliate_pro": { + "name": "Post Affiliate Pro", + "categoryId": 4, + "url": "http://www.qualityunit.com/", + "companyId": "qualityunit" + }, + "powerlinks": { + "name": "PowerLinks", + "categoryId": 4, + "url": "http://www.powerlinks.com/", + "companyId": "powerlinks" + }, + "powerreviews": { + "name": "PowerReviews", + "categoryId": 2, + "url": "http://www.powerreviews.com/", + "companyId": "powerreviews" + }, + "powr.io": { + "name": "POWr", + "categoryId": 6, + "url": "https://www.powr.io/", + "companyId": "powr" + }, + "pozvonim": { + "name": "Pozvonim", + "categoryId": 4, + "url": "https://pozvonim.com/", + "companyId": "pozvonim" + }, + "prebid": { + "name": "Prebid", + "categoryId": 4, + "url": "http://prebid.org/", + "companyId": null + }, + "precisionclick": { + "name": "PrecisionClick", + "categoryId": 4, + "url": "http://www.precisionclick.com/", + "companyId": "precisionclick" + }, + "predicta": { + "name": "Predicta", + "categoryId": 4, + "url": "http://predicta.com.br/", + "companyId": "predicta" + }, + "premonix": { + "name": "Premonix", + "categoryId": 4, + "url": "http://www.premonix.com/", + "companyId": "premonix" + }, + "press": { + "name": "Press+", + "categoryId": 4, + "url": "http://www.mypressplus.com/", + "companyId": "press+" + }, + "pressly": { + "name": "Pressly", + "categoryId": 4, + "url": "https://www.pressly.com/", + "companyId": "pressly" + }, + "pricegrabber": { + "name": "PriceGrabber", + "categoryId": 4, + "url": "http://www.pricegrabber.com", + "companyId": "pricegrabber" + }, + "pricespider": { + "name": "Pricespider", + "categoryId": 4, + "url": "http://www.pricespider.com/", + "companyId": "price_spider" + }, + "prismamediadigital.com": { + "name": "Prisma Media Digital", + "categoryId": 4, + "url": "http://www.pmdrecrute.com/", + "companyId": "prisma_media_digital" + }, + "privy.com": { + "name": "Privy", + "categoryId": 2, + "url": "https://privy.com/", + "companyId": "privy" + }, + "proclivity": { + "name": "Proclivity", + "categoryId": 4, + "url": "http://www.proclivitysystems.com/", + "companyId": "proclivity_media" + }, + "prodperfect": { + "name": "ProdPerfect", + "categoryId": 6, + "url": "https://prodperfect.com/", + "companyId": "prodperfect" + }, + "productsup": { + "name": "ProductsUp", + "categoryId": 4, + "url": "https://productsup.io/", + "companyId": "productsup" + }, + "profiliad": { + "name": "Profiliad", + "categoryId": 6, + "url": "http://profiliad.com/", + "companyId": "profiliad" + }, + "profitshare": { + "name": "Profitshare", + "categoryId": 6, + "url": "https://profitshare.ro/", + "companyId": "profitshare" + }, + "proformics": { + "name": "Proformics", + "categoryId": 6, + "url": "http://proformics.com/", + "companyId": "proformics_digital" + }, + "programattik": { + "name": "Programattik", + "categoryId": 4, + "url": "http://www.programattik.com/", + "companyId": "ttnet" + }, + "project_wonderful": { + "name": "Project Wonderful", + "categoryId": 4, + "url": "http://www.projectwonderful.com/", + "companyId": "project_wonderful" + }, + "propel_marketing": { + "name": "Propel Marketing", + "categoryId": 4, + "url": "http://propelmarketing.com/", + "companyId": "propel_marketing" + }, + "propeller_ads": { + "name": "Propeller Ads", + "categoryId": 4, + "url": "http://www.propellerads.com/", + "companyId": "propeller_ads" + }, + "propermedia": { + "name": "Proper Media", + "categoryId": 4, + "url": "https://proper.io/", + "companyId": "propermedia" + }, + "props": { + "name": "Props", + "categoryId": 4, + "url": "http://props.id/", + "companyId": "props" + }, + "propvideo_net": { + "name": "propvideo.net", + "categoryId": 11, + "url": null, + "companyId": null + }, + "prospecteye": { + "name": "ProspectEye", + "categoryId": 4, + "url": "https://www.prospecteye.com/", + "companyId": "prospecteye" + }, + "prosperent": { + "name": "Prosperent", + "categoryId": 4, + "url": "http://prosperent.com", + "companyId": "prosperent" + }, + "prostor": { + "name": "Prostor", + "categoryId": 4, + "url": "http://prostor-lite.ru/", + "companyId": "prostor" + }, + "provide_support": { + "name": "Provide Support", + "categoryId": 2, + "url": "http://www.providesupport.com/", + "companyId": "provide_support" + }, + "proximic": { + "name": "Proximic", + "categoryId": 4, + "url": "http://www.proximic.com/", + "companyId": "proximic" + }, + "proxistore.com": { + "name": "Proxistore", + "categoryId": 4, + "url": "https://www.proxistore.com/", + "companyId": "proxistore" + }, + "pscp.tv": { + "name": "Periscope", + "categoryId": 7, + "url": "https://www.pscp.tv/", + "companyId": "periscope" + }, + "pstatic.net": { + "name": "Naver CDN", + "categoryId": 9, + "url": "https://www.naver.com/", + "companyId": "naver" + }, + "psyma": { + "name": "Psyma", + "categoryId": 4, + "url": "http://www.psyma.com/", + "companyId": "psyma" + }, + "pt_engine": { + "name": "Pt engine", + "categoryId": 6, + "url": "http://www.ptengine.jp/", + "companyId": "pt_engine" + }, + "pub-fit": { + "name": "Pub-Fit", + "categoryId": 4, + "url": "http://www.pub-fit.com/", + "companyId": "pub-fit" + }, + "pub.network": { + "name": "pub.network", + "categoryId": 4, + "url": null, + "companyId": null + }, + "pubble": { + "name": "Pubble", + "categoryId": 2, + "url": "http://www.pubble.co/", + "companyId": "pubble" + }, + "pubdirecte": { + "name": "Pubdirecte", + "categoryId": 4, + "url": "http://www.pubdirecte.com/", + "companyId": "pubdirecte" + }, + "pubgears": { + "name": "PubGears", + "categoryId": 4, + "url": "http://pubgears.com/", + "companyId": "pubgears" + }, + "public_ideas": { + "name": "Public Ideas", + "categoryId": 4, + "url": "http://www.publicidees.co.uk/", + "companyId": "public-idees" + }, + "publicidad.net": { + "name": "Publicidad.net", + "categoryId": 4, + "url": "http://www.en.publicidad.net/", + "companyId": "publicidad.net" + }, + "publir": { + "name": "Publir", + "categoryId": 4, + "url": "http://www.publir.com", + "companyId": "publir" + }, + "pubmatic": { + "name": "PubMatic", + "categoryId": 4, + "url": "http://www.pubmatic.com/", + "companyId": "pubmatic" + }, + "pubnub.com": { + "name": "PubNub", + "categoryId": 8, + "url": "https://www.pubnub.com/", + "companyId": null + }, + "puboclic": { + "name": "Puboclic", + "categoryId": 4, + "url": "http://www.puboclic.com/", + "companyId": "puboclic" + }, + "pulpix.com": { + "name": "Pulpix", + "categoryId": 4, + "url": "https://www.pulpix.com/", + "companyId": "adyoulike" + }, + "pulpo_media": { + "name": "Pulpo Media", + "categoryId": 4, + "url": "http://www.pulpomedia.com/home.html", + "companyId": "pulpo_media" + }, + "pulse360": { + "name": "Pulse360", + "categoryId": 4, + "url": "http://www.pulse360.com", + "companyId": "pulse360" + }, + "pulse_insights": { + "name": "Pulse Insights", + "categoryId": 6, + "url": "http://pulseinsights.com/", + "companyId": "pulse_insights" + }, + "pulsepoint": { + "name": "PulsePoint", + "categoryId": 4, + "url": "http://www.contextweb.com/", + "companyId": "pulsepoint_ad_exchange" + }, + "punchtab": { + "name": "PunchTab", + "categoryId": 4, + "url": "http://www.punchtab.com/", + "companyId": "punchtab" + }, + "purch": { + "name": "Purch", + "categoryId": 4, + "url": "http://www.purch.com/", + "companyId": "purch" + }, + "pure_chat": { + "name": "Pure Chat", + "categoryId": 2, + "url": "https://www.purechat.com", + "companyId": "pure_chat" + }, + "pureprofile": { + "name": "Pureprofile", + "categoryId": 6, + "url": "https://www.pureprofile.com/us/", + "companyId": "pureprofile" + }, + "purlive": { + "name": "PurLive", + "categoryId": 4, + "url": "http://www.purlive.com/", + "companyId": "purlive" + }, + "puserving.com": { + "name": "puserving.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "push.world": { + "name": "Push.world", + "categoryId": 2, + "url": "https://push.world/en", + "companyId": "push.world" + }, + "push_engage": { + "name": "Push Engage", + "categoryId": 2, + "url": "https://www.pushengage.com/", + "companyId": "push_engage" + }, + "pushame.com": { + "name": "pushame.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "pushbullet": { + "name": "Pushbullet", + "categoryId": 2, + "url": "https://www.pushbullet.com/", + "companyId": "pushbullet" + }, + "pushcrew": { + "name": "VWO Engage", + "categoryId": 2, + "url": "https://vwo.com/engage/", + "companyId": "wingify" + }, + "pusher.com": { + "name": "Pusher", + "categoryId": 6, + "url": "https://pusher.com/", + "companyId": null + }, + "pushnative.com": { + "name": "pushnative.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "pushnews": { + "name": "Pushnews", + "categoryId": 4, + "url": "https://www.pushnews.eu/", + "companyId": "pushnews" + }, + "pushno.com": { + "name": "pushno.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "pushwhy.com": { + "name": "pushwhy.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "pushwoosh.com": { + "name": "Pushwoosh", + "categoryId": 2, + "url": "https://www.pushwoosh.com/", + "companyId": "pushwoosh" + }, + "pvclouds.com": { + "name": "pvclouds.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "q1media": { + "name": "Q1Media", + "categoryId": 4, + "url": "http://q1media.com/", + "companyId": "q1media" + }, + "q_division": { + "name": "Q-Division", + "categoryId": 4, + "url": "https://q-division.de/", + "companyId": null + }, + "qbaka": { + "name": "Qbaka", + "categoryId": 6, + "url": "https://qbaka.com/", + "companyId": "qbaka" + }, + "qcri_analytics": { + "name": "QCRI Analytics", + "categoryId": 6, + "url": "http://qcri.org/", + "companyId": "qatar_computing_research_institute" + }, + "qeado": { + "name": "Qeado", + "categoryId": 6, + "url": "https://www.qeado.com/", + "companyId": "qeado" + }, + "qihoo_360": { + "name": "Qihoo 360", + "categoryId": 6, + "url": "https://www.360totalsecurity.com/en/", + "companyId": "qihoo_360_technology" + }, + "qq.com": { + "name": "QQ International", + "categoryId": 2, + "url": "https://www.qq.com/", + "companyId": "tencent", + "source": "AdGuard" + }, + "qrius": { + "name": "Qrius", + "categoryId": 7, + "url": "http://www.qrius.me/", + "companyId": "mediafed" + }, + "qualaroo": { + "name": "Qualaroo", + "categoryId": 6, + "url": null, + "companyId": null + }, + "qualcomm": { + "name": "Qualcomm", + "categoryId": 8, + "url": "https://www.qualcomm.com/", + "companyId": "qualcomm", + "source": "AdGuard" + }, + "qualcomm_location_service": { + "name": "Qualcomm Location Service", + "categoryId": 15, + "url": "https://www.qualcomm.com/site/privacy/services", + "companyId": "qualcomm", + "source": "AdGuard" + }, + "qualia": { + "name": "Qualia", + "categoryId": 4, + "url": "http://www.bluecava.com/", + "companyId": "qualia" + }, + "qualtrics": { + "name": "Qualtrics", + "categoryId": 6, + "url": "http://www.qualtrics.com/", + "companyId": "qualtrics" + }, + "quantcast": { + "name": "Quantcast", + "categoryId": 4, + "url": "http://www.quantcast.com/", + "companyId": "quantcast" + }, + "quantcount": { + "name": "Quantcount", + "categoryId": 6, + "url": "http://www.quantcast.com", + "companyId": "quantcast" + }, + "quantum_metric": { + "name": "Quantum Metric", + "categoryId": 6, + "url": "https://www.quantummetric.com/", + "companyId": "quantum_metric" + }, + "quartic.pl": { + "name": "Quartic", + "categoryId": 6, + "url": "https://www.quarticon.com/", + "companyId": "quarticon" + }, + "qubit": { + "name": "Qubit Opentag", + "categoryId": 6, + "url": "http://www.qubit.com/", + "companyId": "qubit" + }, + "questback": { + "name": "Questback", + "categoryId": 2, + "url": "http://www1.questback.com/", + "companyId": "questback" + }, + "queue-it": { + "name": "Queue-it", + "categoryId": 6, + "url": "https://queue-it.com/", + "companyId": null + }, + "quick-counter.net": { + "name": "Quick-counter.net", + "categoryId": 6, + "url": "http://www.quick-counter.net/", + "companyId": "quick-counter.net" + }, + "quigo_adsonar": { + "name": "Quigo AdSonar", + "categoryId": 4, + "url": "http://www.quigo.com", + "companyId": "verizon" + }, + "quinstreet": { + "name": "QuinStreet", + "categoryId": 4, + "url": "http://www.quinstreet.com/", + "companyId": "quinstreet" + }, + "quintelligence": { + "name": "Quintelligence", + "categoryId": 6, + "url": "http://www.quintelligence.com/", + "companyId": "quintelligence" + }, + "quisma": { + "name": "Quisma", + "categoryId": 4, + "url": "http://www.quisma.com/en/", + "companyId": "wpp" + }, + "quora.com": { + "name": "Quora", + "categoryId": 7, + "url": "https://quora.com/", + "companyId": null + }, + "r_advertising": { + "name": "R-Advertising", + "categoryId": 4, + "url": "http://www.r-advertising.com/", + "companyId": "r-advertising" + }, + "rackcdn.com": { + "name": "Rackspace", + "categoryId": 9, + "url": "https://www.rackspace.com/", + "companyId": null + }, + "radarurl": { + "name": "RadarURL", + "categoryId": 6, + "url": "http://radarurl.com/", + "companyId": "radarurl" + }, + "radial": { + "name": "Radial", + "categoryId": 4, + "url": "http://www.clearsaleing.com/", + "companyId": "radial" + }, + "radiumone": { + "name": "RadiumOne", + "categoryId": 4, + "url": "http://www.radiumone.com/index.html", + "companyId": "rythmone" + }, + "raisenow": { + "name": "RaiseNow", + "categoryId": 6, + "url": "https://www.raisenow.com/de", + "companyId": "raisenow" + }, + "rakuten_display": { + "name": "Rakuten Display", + "categoryId": 4, + "url": "https://rakutenmarketing.com/display", + "companyId": "rakuten" + }, + "rakuten_globalmarket": { + "name": "Rakuten", + "categoryId": 4, + "url": "https://www.rakuten.co.jp/", + "companyId": "rakuten" + }, + "rakuten_widget": { + "name": "Rakuten Widget", + "categoryId": 4, + "url": "http://global.rakuten.com/corp/", + "companyId": "rakuten" + }, + "rambler": { + "name": "Rambler", + "categoryId": 6, + "url": "https://www.rambler.ru/", + "companyId": "rambler" + }, + "rambler_count": { + "name": "Rambler Count", + "categoryId": 2, + "url": "http://www.rambler.ru/", + "companyId": "rambler" + }, + "rambler_widget": { + "name": "Rambler Widget", + "categoryId": 2, + "url": "http://www.rambler.ru/", + "companyId": "rambler" + }, + "rapidspike": { + "name": "RapidSpike", + "categoryId": 6, + "url": "https://www.rapidspike.com", + "companyId": "rapidspike" + }, + "ravelin": { + "name": "Ravelin", + "categoryId": 6, + "url": "https://www.ravelin.com/", + "companyId": null + }, + "rawgit": { + "name": "RawGit", + "categoryId": 9, + "url": "http://rawgit.com/", + "companyId": null + }, + "raygun": { + "name": "Raygun", + "categoryId": 4, + "url": "https://raygun.com/", + "companyId": "raygun" + }, + "rbc_counter": { + "name": "RBC Counter", + "categoryId": 6, + "url": "http://www.rbc.ru/", + "companyId": "rbc_group" + }, + "rcs.it": { + "name": "RCS", + "categoryId": 4, + "url": "http://www.rcsmediagroup.it/", + "companyId": "rcs" + }, + "rd_station": { + "name": "RD Station", + "categoryId": 6, + "url": "http://www.rdstation.com/en/", + "companyId": "rd_station" + }, + "rea_group": { + "name": "REA Group Ltd.", + "categoryId": 4, + "url": "https://www.rea-group.com/", + "companyId": "news_corp", + "source": "AdGuard" + }, + "reachforce": { + "name": "ReachForce", + "categoryId": 6, + "url": "http://www.reachforce.com/", + "companyId": "reachforce" + }, + "reachjunction": { + "name": "ReachJunction", + "categoryId": 4, + "url": "http://www.reachjunction.com/", + "companyId": "reachjunction" + }, + "reachlocal": { + "name": "ReachLocal", + "categoryId": 4, + "url": "http://www.reachlocal.com/", + "companyId": "reachlocal" + }, + "reactful": { + "name": "Reactful", + "categoryId": 4, + "url": "http://www.reactful.com/", + "companyId": "reactful" + }, + "reactivpub": { + "name": "Reactivpub", + "categoryId": 6, + "url": "http://www.reactivpub.com/", + "companyId": "r-advertising" + }, + "reactx": { + "name": "ReactX", + "categoryId": 4, + "url": "http://home.skinected.com", + "companyId": "reactx" + }, + "readerboard": { + "name": "ReaderBoard", + "categoryId": 7, + "url": "http://www.readrboard.com", + "companyId": "centre_phi" + }, + "readme": { + "name": "ReadMe", + "categoryId": 6, + "url": "https://readme.com/", + "companyId": "readme" + }, + "readspeaker.com": { + "name": "ReadSpeaker", + "categoryId": 2, + "url": "https://www.readspeaker.com/", + "companyId": null + }, + "realclick": { + "name": "RealClick", + "categoryId": 4, + "url": "http://www.realclick.co.kr/", + "companyId": "realclick" + }, + "realestate.com.au": { + "name": "realestate.com.au Pty Limited", + "categoryId": 4, + "url": "https://www.realestate.com.au/", + "companyId": "news_corp", + "source": "AdGuard" + }, + "realperson.de": { + "name": "Realperson Chat", + "categoryId": 2, + "url": "http://www.optimise-it.de/", + "companyId": "optimise_it" + }, + "realtime": { + "name": "Realtime", + "categoryId": 2, + "url": "http://www.realtime.co/", + "companyId": "realtime" + }, + "realytics": { + "name": "Realytics", + "categoryId": 6, + "url": "https://www.realytics.io/", + "companyId": "realytics" + }, + "rebel_mouse": { + "name": "Rebel Mouse", + "categoryId": 6, + "url": "https://www.rebelmouse.com/", + "companyId": "rebelmouse" + }, + "recaptcha": { + "name": "reCAPTCHA", + "categoryId": 8, + "url": "https://www.google.com/recaptcha/about/", + "companyId": "google", + "source": "AdGuard" + }, + "recettes.net": { + "name": "Recettes.net", + "categoryId": 8, + "url": "http://www.recettes.net/", + "companyId": "recettes.net" + }, + "recopick": { + "name": "RecoPick", + "categoryId": 4, + "url": "https://recopick.com/", + "companyId": "recopick" + }, + "recreativ": { + "name": "Recreativ", + "categoryId": 4, + "url": "http://recreativ.ru/", + "companyId": "recreativ" + }, + "recruitics": { + "name": "Recruitics", + "categoryId": 6, + "url": "http://recruitics.com/", + "companyId": "recruitics" + }, + "red_ventures": { + "name": "Red Ventures", + "categoryId": 6, + "url": "https://www.redventures.com/", + "companyId": "red_ventures" + }, + "redblue_de": { + "name": "redblue", + "categoryId": 6, + "url": "https://www.redblue.de/", + "companyId": null + }, + "redcdn.pl": { + "name": "redGalaxy CDN", + "categoryId": 9, + "url": "http://www.atendesoftware.pl/", + "companyId": "atende_software" + }, + "reddit": { + "name": "Reddit", + "categoryId": 7, + "url": "https://www.reddit.com", + "companyId": "advance", + "source": "AdGuard" + }, + "redhelper": { + "name": "RedHelper", + "categoryId": 2, + "url": "http://redhelper.com/", + "companyId": "redhelper" + }, + "redlotus": { + "name": "RedLotus", + "categoryId": 4, + "url": "http://triggit.com/", + "companyId": "redlotus" + }, + "redtram": { + "name": "RedTram", + "categoryId": 4, + "url": "http://www.redtram.com/", + "companyId": "redtram" + }, + "redtube.com": { + "name": "redtube.com", + "categoryId": 9, + "url": null, + "companyId": null + }, + "redux_media": { + "name": "Redux Media", + "categoryId": 4, + "url": "http://reduxmedia.com/", + "companyId": "redux_media" + }, + "reed_business_information": { + "name": "Reed Business Information", + "categoryId": 6, + "url": "http://www.reedbusiness.com/", + "companyId": "andera_partners" + }, + "reembed.com": { + "name": "reEmbed", + "categoryId": 0, + "url": "https://www.reembed.com/", + "companyId": "reembed" + }, + "reevoo.com": { + "name": "Reevoo", + "categoryId": 4, + "url": "https://www.reevoo.com/en/", + "companyId": "reevoo" + }, + "refericon": { + "name": "Refericon", + "categoryId": 4, + "url": "https://refericon.pl/#", + "companyId": "refericon" + }, + "referlocal": { + "name": "ReferLocal", + "categoryId": 4, + "url": "http://referlocal.com/", + "companyId": "referlocal" + }, + "refersion": { + "name": "Refersion", + "categoryId": 4, + "url": "https://www.refersion.com/", + "companyId": "refersion" + }, + "refined_labs": { + "name": "Refined Labs", + "categoryId": 4, + "url": "http://www.refinedlabs.com", + "companyId": "refined_labs" + }, + "reflektion": { + "name": "Reflektion", + "categoryId": 4, + "url": "http://", + "companyId": "reflektion" + }, + "reformal": { + "name": "Reformal", + "categoryId": 2, + "url": "http://reformal.ru/", + "companyId": "reformal" + }, + "reinvigorate": { + "name": "Reinvigorate", + "categoryId": 6, + "url": "http://www.reinvigorate.net/", + "companyId": "media_temple" + }, + "rekko": { + "name": "Rekko", + "categoryId": 4, + "url": "http://convert.us/", + "companyId": "rekko" + }, + "reklam_store": { + "name": "Reklam Store", + "categoryId": 4, + "url": "http://www.reklamstore.com", + "companyId": "reklam_store" + }, + "reklamport": { + "name": "Reklamport", + "categoryId": 4, + "url": "http://www.reklamport.com/", + "companyId": "reklamport" + }, + "reklamz": { + "name": "ReklamZ", + "categoryId": 4, + "url": "http://www.reklamz.com/", + "companyId": "reklamz" + }, + "rekmob": { + "name": "Rekmob", + "categoryId": 4, + "url": "https://www.rekmob.com/", + "companyId": "rekmob" + }, + "relap": { + "name": "Relap", + "categoryId": 4, + "url": "https://relap.io/", + "companyId": "relap" + }, + "relay42": { + "name": "Relay42", + "categoryId": 5, + "url": "http://synovite.com", + "companyId": "relay42" + }, + "relestar": { + "name": "Relestar", + "categoryId": 6, + "url": "https://relestar.com/", + "companyId": "relestar" + }, + "relevant4.com": { + "name": "relevant4 GmbH", + "categoryId": 8, + "url": "https://www.relevant4.com/", + "companyId": null + }, + "remintrex": { + "name": "Remintrex", + "categoryId": 4, + "url": "http://www.remintrex.com/", + "companyId": null + }, + "remove.video": { + "name": "remove.video", + "categoryId": 12, + "url": null, + "companyId": null + }, + "repost.us": { + "name": "Repost.us", + "categoryId": 4, + "url": "http://www.freerangecontent.com/", + "companyId": "repost" + }, + "republer.com": { + "name": "Republer", + "categoryId": 4, + "url": "http://republer.com/", + "companyId": "republer" + }, + "res-meter": { + "name": "Res-meter", + "categoryId": 6, + "url": "http://respublica.al/res-meter", + "companyId": "respublica" + }, + "research_now": { + "name": "Research Now", + "categoryId": 4, + "url": "http://www.researchnow.com/", + "companyId": "research_now" + }, + "resonate_networks": { + "name": "Resonate Networks", + "categoryId": 4, + "url": "http://www.resonatenetworks.com/", + "companyId": "resonate" + }, + "respond": { + "name": "Respond", + "categoryId": 4, + "url": "http://respondhq.com/", + "companyId": "respond" + }, + "responsetap": { + "name": "ResponseTap", + "categoryId": 4, + "url": "http://www.adinsight.eu/", + "companyId": "responsetap" + }, + "result_links": { + "name": "Result Links", + "categoryId": 4, + "url": "http://www.resultlinks.com/", + "companyId": "result_links" + }, + "resultspage.com": { + "name": "SLI Systems", + "categoryId": 6, + "url": "https://www.sli-systems.com/", + "companyId": "sli_systems" + }, + "retailrocket.net": { + "name": "Retail Rocket", + "categoryId": 4, + "url": "https://retailrocket.net/", + "companyId": "retail_rocket" + }, + "retarget_app": { + "name": "Retarget App", + "categoryId": 4, + "url": "https://retargetapp.com/", + "companyId": "retargetapp" + }, + "retargeter_beacon": { + "name": "ReTargeter Beacon", + "categoryId": 4, + "url": "http://www.retargeter.com/", + "companyId": "retargeter" + }, + "retargeting.cl": { + "name": "Retargeting.cl", + "categoryId": 4, + "url": "http://retargeting.cl/", + "companyId": "retargeting" + }, + "retention_science": { + "name": "Retention Science", + "categoryId": 4, + "url": "http://retentionscience.com/", + "companyId": "retention_science" + }, + "reuters_media": { + "name": "Reuters media", + "categoryId": 9, + "url": "https://reuters.com", + "companyId": null + }, + "revcontent": { + "name": "RevContent", + "categoryId": 4, + "url": "https://www.revcontent.com/", + "companyId": "revcontent" + }, + "reve_marketing": { + "name": "Reve Marketing", + "categoryId": 4, + "url": "http://tellafriend.socialtwist.com/", + "companyId": "reve_marketing" + }, + "revenue": { + "name": "Revenue", + "categoryId": 4, + "url": "https://revenue.com/", + "companyId": "revenue" + }, + "revenuehits": { + "name": "RevenueHits", + "categoryId": 4, + "url": "http://www.revenuehits.com/", + "companyId": "revenuehits" + }, + "revenuemantra": { + "name": "RevenueMantra", + "categoryId": 4, + "url": "http://www.revenuemantra.com/", + "companyId": "revenuemantra" + }, + "revive_adserver": { + "name": "Revive Adserver", + "categoryId": 4, + "url": "https://www.revive-adserver.com/", + "companyId": "revive_adserver" + }, + "revolver_maps": { + "name": "Revolver Maps", + "categoryId": 6, + "url": "http://www.revolvermaps.com/", + "companyId": "revolver_maps" + }, + "revresponse": { + "name": "RevResponse", + "categoryId": 4, + "url": "http://www.netline.com/", + "companyId": "netline" + }, + "rewords": { + "name": "ReWords", + "categoryId": 4, + "url": "http://www.rewords.pl/", + "companyId": "rewords" + }, + "rhythmone": { + "name": "RhythmOne", + "categoryId": 4, + "url": "http://www.adconductor.com/", + "companyId": "rhythmone" + }, + "rhythmone_beacon": { + "name": "Rhythmone Beacon", + "categoryId": 4, + "url": "https://www.rhythmone.com/", + "companyId": "rythmone" + }, + "ria.ru": { + "name": "ria.ru", + "categoryId": 8, + "url": "https://ria.ru/", + "companyId": null + }, + "rich_media_banner_network": { + "name": "Rich Media Banner Network", + "categoryId": 4, + "url": "http://rmbn.ru/", + "companyId": "rich_media_banner_network" + }, + "richrelevance": { + "name": "RichRelevance", + "categoryId": 2, + "url": "http://www.richrelevance.com/", + "companyId": "richrelevance" + }, + "ringier.ch": { + "name": "Ringier", + "categoryId": 6, + "url": "http://ringier.ch/en", + "companyId": "ringier" + }, + "rio_seo": { + "name": "Rio SEO", + "categoryId": 7, + "url": "http://www.meteorsolutions.com", + "companyId": "rio_seo" + }, + "riskfield.com": { + "name": "Riskified", + "categoryId": 2, + "url": "https://www.riskified.com/", + "companyId": "riskfield" + }, + "rncdn3.com": { + "name": "Reflected Networks", + "categoryId": 9, + "url": "http://www.rncdn3.com/", + "companyId": null + }, + "ro2.biz": { + "name": "Ro2.biz", + "categoryId": 4, + "url": "http://ro2.biz/index.php?r=adikku", + "companyId": "ro2.biz" + }, + "roblox": { + "name": "Roblox", + "categoryId": 8, + "url": "https://www.roblox.com/", + "companyId": null + }, + "rockerbox": { + "name": "Rockerbox", + "categoryId": 6, + "url": "https://www.rockerbox.com/privacy", + "companyId": "rockerbox" + }, + "rocket.ia": { + "name": "Rocket.ia", + "categoryId": 4, + "url": "https://rocket.la/", + "companyId": "rocket.la" + }, + "roi_trax": { + "name": "ROI trax", + "categoryId": 4, + "url": "http://www.oneupweb.com/", + "companyId": "oneupweb" + }, + "roistat": { + "name": "Roistat", + "categoryId": 6, + "url": "https://roistat.com", + "companyId": "roistat" + }, + "rollad": { + "name": "Rollad", + "categoryId": 4, + "url": "http://rollad.ru", + "companyId": "rollad" + }, + "rollbar": { + "name": "Rollbar", + "categoryId": 6, + "url": "http://www.rollbar.com/", + "companyId": "rollbar" + }, + "roost": { + "name": "Roost", + "categoryId": 6, + "url": "http://roost.me/", + "companyId": "roost" + }, + "rooster": { + "name": "Rooster", + "categoryId": 6, + "url": "http://www.getrooster.com/", + "companyId": "rooster" + }, + "roq.ad": { + "name": "Roq.ad", + "categoryId": 4, + "url": "https://www.roq.ad/", + "companyId": "roq.ad" + }, + "rotaban": { + "name": "RotaBan", + "categoryId": 4, + "url": "http://www.rotaban.ru/", + "companyId": "rotaban" + }, + "routenplaner-karten.com": { + "name": "Routenplaner Karten", + "categoryId": 2, + "url": "https://www.routenplaner-karten.com/", + "companyId": null + }, + "rovion": { + "name": "Rovion", + "categoryId": 4, + "url": "http://www.rovion.com/", + "companyId": "rovion" + }, + "rsspump": { + "name": "RSSPump", + "categoryId": 2, + "url": "http://www.rsspump.com", + "companyId": "rsspump" + }, + "rtb_house": { + "name": "RTB House", + "categoryId": 4, + "url": "http://en.adpilot.com/", + "companyId": "rtb_house" + }, + "rtblab": { + "name": "RTBmarkt", + "categoryId": 4, + "url": "http://www.rtbmarkt.de/en/home/", + "companyId": "rtbmarkt" + }, + "rtbsuperhub.com": { + "name": "rtbsuperhub.com", + "categoryId": 4, + "url": null, + "companyId": null + }, + "rtl_group": { + "name": "RTL Group", + "categoryId": 8, + "url": "http://www.rtlgroup.com/www/htm/home.aspx", + "companyId": "rtl_group" + }, + "rtmark.net": { + "name": "Advertising Technologies Ltd", + "categoryId": 4, + "url": "http://rtmark.net/", + "companyId": "big_wall_vision" + }, + "rubicon": { + "name": "Rubicon", + "categoryId": 4, + "url": "http://rubiconproject.com/", + "companyId": "rubicon_project" + }, + "ruhrgebiet": { + "name": "Ruhrgebiet", + "categoryId": 4, + "url": "https://www.ruhrgebiet-onlineservices.de/", + "companyId": "ruhrgebiet" + }, + "rummycircle": { + "name": "RummyCircle", + "categoryId": 4, + "url": "https://www.rummycircle.com/", + "companyId": "rummycircle" + }, + "run": { + "name": "RUN", + "categoryId": 4, + "url": "http://www.rundsp.com/", + "companyId": "run" + }, + "runative": { + "name": "Runative", + "categoryId": 4, + "url": "https://runative.com/", + "companyId": null + }, + "rune": { + "name": "Rune", + "categoryId": 6, + "url": "http://www.secretrune.com/", + "companyId": "rune_inc." + }, + "runmewivel.com": { + "name": "runmewivel.com", + "categoryId": 10, + "url": null, + "companyId": null + }, + "rythmxchange": { + "name": "Rythmxchange", + "categoryId": 0, + "url": "https://www.rhythmone.com/", + "companyId": "rythmone" + }, + "s24_com": { + "name": "Shopping24 internet group", + "categoryId": 4, + "url": "https://www.s24.com/", + "companyId": null + }, + "s3xified.com": { + "name": "s3xified.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "sabavision": { + "name": "SabaVision", + "categoryId": 4, + "url": "http://www.sabavision.com/en/", + "companyId": "sabavision" + }, + "sagemetrics": { + "name": "SageMetrics", + "categoryId": 4, + "url": "http://www.sagemetrics.com", + "companyId": "ipmg" + }, + "sailthru_horizon": { + "name": "Sailthru Horizon", + "categoryId": 4, + "url": "https://www.sailthru.com", + "companyId": "sailthru" + }, + "salecycle": { + "name": "SaleCycle", + "categoryId": 4, + "url": "http://www.salecycle.com/", + "companyId": "salecycle" + }, + "sales_feed": { + "name": "Sales Feed", + "categoryId": 4, + "url": "https://www.salesfeed.com/", + "companyId": "sales_feed" + }, + "sales_manago": { + "name": "SALESmanago", + "categoryId": 6, + "url": "https://www.salesmanago.com/", + "companyId": "sales_manago" + }, + "salesforce.com": { + "name": "Salesforce", + "categoryId": 4, + "url": "https://www.salesforce.com/eu/", + "companyId": "salesforce" + }, + "salesforce_live_agent": { + "name": "Salesforce Live Agent", + "categoryId": 2, + "url": "http://www.salesforce.com/", + "companyId": "salesforce" + }, + "salesfusion": { + "name": "SalesFUSION", + "categoryId": 4, + "url": "http://salesfusion.com/", + "companyId": "salesfusion" + }, + "salespider_media": { + "name": "SaleSpider Media", + "categoryId": 4, + "url": "http://salespidermedia.com/", + "companyId": "salespider_media" + }, + "salesviewer": { + "name": "SalesViewer", + "categoryId": 6, + "url": "https://www.salesviewer.com/", + "companyId": "salesviewer" + }, + "samba.tv": { + "name": "Samba TV", + "categoryId": 4, + "url": "https://samba.tv/", + "companyId": "samba_tv" + }, + "samsung": { + "name": "Samsung", + "categoryId": 8, + "url": "https://www.samsung.com/", + "companyId": "samsung", + "source": "AdGuard" + }, + "samsungads": { + "name": "Samsung Ads", + "categoryId": 4, + "url": "https://www.samsung.com/business/samsungads/", + "companyId": "samsung", + "source": "AdGuard" + }, + "samsungapps": { + "name": "Samsung Apps", + "categoryId": 101, + "url": "https://www.samsung.com/au/apps/", + "companyId": "samsung", + "source": "AdGuard" + }, + "samsungmobile": { + "name": "Samsung Mobile", + "categoryId": 101, + "url": "https://www.samsung.com/mobile/", + "companyId": "samsung", + "source": "AdGuard" + }, + "samsungpush": { + "name": "Samsung Push", + "categoryId": 8, + "url": null, + "companyId": "samsung", + "source": "AdGuard" + }, + "samsungsds": { + "name": "Samsung SDS", + "categoryId": 10, + "url": "https://www.samsungsds.com/", + "companyId": "samsung", + "source": "AdGuard" + }, + "samsungtv": { + "name": "Samsung TV", + "categoryId": 15, + "url": "https://www.samsung.com/au/tvs/", + "companyId": "samsung", + "source": "AdGuard" + }, + "sanoma.fi": { + "name": "Sanoma", + "categoryId": 4, + "url": "https://sanoma.com/", + "companyId": "sanoma" + }, + "sap_crm": { + "name": "SAP CRM", + "categoryId": 6, + "url": "https://www.sap.com/products/crm.html", + "companyId": "sap" + }, + "sap_sales_cloud": { + "name": "SAP Sales Cloud", + "categoryId": 2, + "url": "http://leadforce1.com/", + "companyId": "sap" + }, + "sap_xm": { + "name": "SAP Exchange Media", + "categoryId": 4, + "url": "http://sapexchange.media/", + "companyId": null + }, + "sape.ru": { + "name": "Sape", + "categoryId": 6, + "url": "https://www.sape.ru/en", + "companyId": "sape" + }, + "sapo_ads": { + "name": "SAPO Ads", + "categoryId": 4, + "url": "http://www.sapo.pt/", + "companyId": "sapo" + }, + "sas": { + "name": "SAS", + "categoryId": 6, + "url": "http://www.sas.com/", + "companyId": "sas" + }, + "say.ac": { + "name": "Say.ac", + "categoryId": 4, + "url": "http://say.ac", + "companyId": "say.ac" + }, + "say_media": { + "name": "Say Media", + "categoryId": 4, + "url": "http://www.saymedia.com/", + "companyId": "say_media" + }, + "sayyac": { + "name": "Sayyac", + "categoryId": 6, + "url": "http://www.sayyac.com/", + "companyId": "sayyac" + }, + "scarabresearch": { + "name": "Scarab Research", + "categoryId": 4, + "url": "https://www.scarabresearch.com/", + "companyId": "emarsys" + }, + "schibsted": { + "name": "Schibsted Media Group", + "categoryId": 8, + "url": "http://www.schibsted.com/", + "companyId": "schibsted_asa" + }, + "schneevonmorgen.com": { + "name": "Schnee von Morgen", + "categoryId": 0, + "url": "http://www.schneevonmorgen.com/", + "companyId": null + }, + "scoota": { + "name": "Scoota", + "categoryId": 4, + "url": "http://scoota.com/", + "companyId": "rockabox" + }, + "scorecard_research_beacon": { + "name": "ScoreCard Research Beacon", + "categoryId": 6, + "url": "https://www.scorecardresearch.com/", + "companyId": "comscore" + }, + "scout_analytics": { + "name": "Scout Analytics", + "categoryId": 4, + "url": "http://scoutanalytics.com/", + "companyId": "scout_analytics" + }, + "scribblelive": { + "name": "ScribbleLive", + "categoryId": 8, + "url": null, + "companyId": null + }, + "scribol": { + "name": "Scribol", + "categoryId": 4, + "url": "http://scribol.com/", + "companyId": "scribol" + }, + "scripps_analytics": { + "name": "Scripps Analytics", + "categoryId": 6, + "url": "http://www.scrippsnetworksinteractive.com/", + "companyId": "scripps_networks" + }, + "scroll": { + "name": "Scroll", + "categoryId": 5, + "url": "https://scroll.com/", + "companyId": "scroll" + }, + "scupio": { + "name": "Scupio", + "categoryId": 4, + "url": "http://ad.scupio.com/", + "companyId": "bridgewell" + }, + "search123": { + "name": "Search123", + "categoryId": 4, + "url": "http://www.search123.com/", + "companyId": "search123" + }, + "searchforce": { + "name": "SearchForce", + "categoryId": 4, + "url": "http://www.searchforce.com/", + "companyId": "searchforce" + }, + "searchignite": { + "name": "SearchIgnite", + "categoryId": 4, + "url": "https://searchignite.com/", + "companyId": "zeta" + }, + "searchrev": { + "name": "SearchRev", + "categoryId": 4, + "url": "http://www.searchrev.com/", + "companyId": "searchrev" + }, + "second_media": { + "name": "Second Media", + "categoryId": 4, + "url": "http://www.secondmedia.com/", + "companyId": "second_media" + }, + "sectigo": { + "name": "Sectigo Limited", + "categoryId": 5, + "url": "https://www.sectigo.com", + "companyId": "sectigo", + "source": "AdGuard" + }, + "securedtouch": { + "name": "SecuredTouch", + "categoryId": 6, + "url": "https://www.securedtouch.com/", + "companyId": null + }, + "securedvisit": { + "name": "SecuredVisit", + "categoryId": 4, + "url": "http://securedvisit.com/", + "companyId": "securedvisit" + }, + "seeding_alliance": { + "name": "Seeding Alliance", + "categoryId": 4, + "url": "http://seeding-alliance.de", + "companyId": "stroer" + }, + "seedtag.com": { + "name": "Seedtag", + "categoryId": 4, + "url": "https://www.seedtag.com/en/", + "companyId": "seedtag" + }, + "seevolution": { + "name": "SeeVolution", + "categoryId": 6, + "url": "http://www.seevolution.com", + "companyId": "seevolution" + }, + "segment": { + "name": "Segment", + "categoryId": 6, + "url": "https://segment.io/", + "companyId": "segment" + }, + "segmento": { + "name": "Segmento", + "categoryId": 4, + "url": "https://segmento.ru/en", + "companyId": "segmento" + }, + "segmint": { + "name": "Segmint", + "categoryId": 6, + "url": "http://www.segmint.com/", + "companyId": "segmint" + }, + "sekindo": { + "name": "Sekindo", + "categoryId": 4, + "url": "http://www.sekindo.com/", + "companyId": "sekindo" + }, + "sellpoints": { + "name": "Sellpoints", + "categoryId": 4, + "url": "https://www.sellpoints.com/", + "companyId": "sellpoints" + }, + "semantiqo.com": { + "name": "Semantiqo", + "categoryId": 4, + "url": "https://semantiqo.com/", + "companyId": null + }, + "semasio": { + "name": "Semasio", + "categoryId": 4, + "url": "http://semasio.com/", + "companyId": "semasio" + }, + "semilo": { + "name": "Semilo", + "categoryId": 4, + "url": "http://www.semilo.nl/", + "companyId": "semilo" + }, + "semknox.com": { + "name": "SEMKNOX GmbH", + "categoryId": 5, + "url": "https://semknox.com/", + "companyId": null + }, + "sendinblue": { + "name": "sendinblue", + "categoryId": 4, + "url": "https://fr.sendinblue.com/", + "companyId": "sendinblue" + }, + "sendpulse.com": { + "name": "SendPulse", + "categoryId": 3, + "url": "https://sendpulse.com/", + "companyId": null + }, + "sendsay": { + "name": "Sendsay", + "categoryId": 2, + "url": "https://sendsay.ru", + "companyId": "sendsay" + }, + "sense_digital": { + "name": "Sense Digital", + "categoryId": 6, + "url": "http://sensedigital.in/", + "companyId": "sense_digital" + }, + "sensors_data": { + "name": "Sensors Data", + "categoryId": 6, + "url": "https://www.sensorsdata.cn/", + "companyId": "sensors_data" + }, + "sentifi.com": { + "name": "Sentifi", + "categoryId": 6, + "url": "https://sentifi.com/", + "companyId": "sentifi" + }, + "sentry": { + "name": "Sentry", + "categoryId": 6, + "url": "https://sentry.io/", + "companyId": "sentry" + }, + "sepyra": { + "name": "Sepyra", + "categoryId": 4, + "url": "http://sepyra.com/", + "companyId": "sepyra" + }, + "sessioncam": { + "name": "SessionCam", + "categoryId": 6, + "url": "http://www.sessioncam.com/", + "companyId": "sessioncam" + }, + "sessionly": { + "name": "Sessionly", + "categoryId": 2, + "url": "https://www.sessionly.io/", + "companyId": "sessionly" + }, + "sevenone_media": { + "name": "SevenOne Media", + "categoryId": 4, + "url": null, + "companyId": null + }, + "sexadnetwork": { + "name": "SexAdNetwork", + "categoryId": 3, + "url": "http://www.sexadnetwork.com/", + "companyId": "sexadnetwork" + }, + "sexinyourcity": { + "name": "SexInYourCity", + "categoryId": 3, + "url": "http://www.sexinyourcity.com/", + "companyId": "sexinyourcity" + }, + "sextracker": { + "name": "SexTracker", + "categoryId": 3, + "url": "http://webmasters.sextracker.com/", + "companyId": "sextracker" + }, + "sexypartners.net": { + "name": "sexypartners.net", + "categoryId": 3, + "url": null, + "companyId": null + }, + "seznam": { + "name": "Seznam", + "categoryId": 6, + "url": "https://onas.seznam.cz/cz/", + "companyId": "seznam" + }, + "shareaholic": { + "name": "Shareaholic", + "categoryId": 6, + "url": "hhttps://www.shareaholic.com/", + "companyId": "shareaholic" + }, + "shareasale": { + "name": "ShareASale", + "categoryId": 4, + "url": "http://www.shareasale.com/", + "companyId": "shareasale" + }, + "sharecompany": { + "name": "ShareCompany", + "categoryId": 2, + "url": "http://sharecompany.nl", + "companyId": "sharecompany" + }, + "sharepoint": { + "name": "SharePoint", + "categoryId": 8, + "url": "https://www.microsoft.com/microsoft-365/sharepoint/collaboration", + "companyId": "microsoft", + "source": "AdGuard" + }, + "sharethis": { + "name": "ShareThis", + "categoryId": 4, + "url": "http://sharethis.com/", + "companyId": "sharethis" + }, + "sharethrough": { + "name": "ShareThrough", + "categoryId": 4, + "url": "http://www.sharethrough.com/", + "companyId": "sharethrough" + }, + "sharpspring": { + "name": "Sharpspring", + "categoryId": 6, + "url": "https://sharpspring.com/", + "companyId": "sharpspring" + }, + "sheego.de": { + "name": "sheego.de", + "categoryId": 8, + "url": null, + "companyId": null + }, + "sheerid": { + "name": "SheerID", + "categoryId": 4, + "url": "http://www.sheerid.com/", + "companyId": "sheerid" + }, + "shinystat": { + "name": "ShinyStat", + "categoryId": 6, + "url": "http://www.shinystat.com/", + "companyId": "shinystat" + }, + "shop_target": { + "name": "Shop Target", + "categoryId": 4, + "url": "http://shoptarget.com.br/", + "companyId": "shopback" + }, + "shopauskunft.de": { + "name": "ShopAuskunft.de", + "categoryId": 2, + "url": "https://shopauskunft.de/", + "companyId": null + }, + "shopgate.com": { + "name": "Shopgate", + "categoryId": 2, + "url": "https://www.shopgate.com/", + "companyId": null + }, + "shopify": { + "name": "Shopify Inc.", + "categoryId": 2, + "url": "https://www.shopify.com/", + "companyId": "shopify", + "source": "AdGuard" + }, + "shopify_stats": { + "name": "Shopify Stats", + "categoryId": 6, + "url": "http://www.shopify.com/", + "companyId": "shopify", + "source": "AdGuard" + }, + "shopifycdn.com": { + "name": "Shopify CDN", + "categoryId": 9, + "url": "https://www.shopify.com/", + "companyId": "shopify" + }, + "shopifycloud.com": { + "name": "Shopify Cloud", + "categoryId": 2, + "url": "https://www.shopify.com/", + "companyId": "shopify" + }, + "shopper_approved": { + "name": "Shopper Approved", + "categoryId": 2, + "url": "http://www.shopperapproved.com", + "companyId": "shopper_approved" + }, + "shopping_com": { + "name": "Shopping.com", + "categoryId": 4, + "url": "https://partnernetwork.ebay.com/", + "companyId": "ebay_partner_network" + }, + "shopping_flux": { + "name": "Shopping Flux", + "categoryId": 6, + "url": "http://www.shopping-flux.com/", + "companyId": "shopping_flux" + }, + "shoprunner": { + "name": "ShopRunner", + "categoryId": 2, + "url": "https://www.shoprunner.com", + "companyId": "shoprunner" + }, + "shopsocially": { + "name": "ShopSocially", + "categoryId": 2, + "url": "http://shopsocially.com/", + "companyId": "shopsocially" + }, + "shopzilla": { + "name": "Shopzilla", + "categoryId": 4, + "url": "http://www.shopzilla.com/", + "companyId": "shopzilla" + }, + "shortnews": { + "name": "ShortNews.de", + "categoryId": 8, + "url": "http://www.shortnews.de/#", + "companyId": null + }, + "showrss": { + "name": "showRSS", + "categoryId": 8, + "url": "https://showrss.info/", + "companyId": "showrss", + "source": "AdGuard" + }, + "shrink": { + "name": "Shrink", + "categoryId": 2, + "url": "http://shink.in/", + "companyId": "shrink.in" + }, + "shutterstock": { + "name": "Shutterstock", + "categoryId": 8, + "url": "https://www.shutterstock.com/", + "companyId": "shutterstock_inc" + }, + "siblesectiveal.club": { + "name": "siblesectiveal.club", + "categoryId": 11, + "url": null, + "companyId": null + }, + "sidecar": { + "name": "Sidecar", + "categoryId": 6, + "url": "http://hello.getsidecar.com/", + "companyId": "sidecar" + }, + "sift_science": { + "name": "Sift Science", + "categoryId": 6, + "url": "https://siftscience.com/", + "companyId": "sift_science" + }, + "signal": { + "name": "Signal", + "categoryId": 5, + "url": "https://www.signal.co/", + "companyId": "signal_digital" + }, + "signifyd": { + "name": "Signifyd", + "categoryId": 6, + "url": "https://www.signifyd.com/", + "companyId": "signifyd" + }, + "silverpop": { + "name": "Silverpop", + "categoryId": 2, + "url": "http://www.silverpop.com/", + "companyId": "ibm" + }, + "similardeals.net": { + "name": "SimilarDeals", + "categoryId": 8, + "url": "http://www.similardeals.net/", + "companyId": null + }, + "similarweb": { + "name": "SimilarWeb", + "categoryId": 6, + "url": "https://www.similarweb.com/", + "companyId": "similarweb", + "source": "AdGuard" + }, + "simplereach": { + "name": "SimpleReach", + "categoryId": 6, + "url": "https://www.nativo.com/simplereach", + "companyId": "nativo" + }, + "simpli.fi": { + "name": "Simpli.fi", + "categoryId": 4, + "url": "http://www.simpli.fi", + "companyId": "simpli.fi" + }, + "sina": { + "name": "Sina", + "categoryId": 6, + "url": "http://www.sina.com/", + "companyId": "sina" + }, + "sina_cdn": { + "name": "Sina CDN", + "categoryId": 9, + "url": "https://www.sina.com.cn/", + "companyId": "sina" + }, + "singlefeed": { + "name": "SingleFeed", + "categoryId": 4, + "url": "https://www.singlefeed.com/", + "companyId": "singlefeed" + }, + "sirdata": { + "name": "Sirdata", + "categoryId": 6, + "url": "http://www.sirdata.com/home/", + "companyId": "sirdata" + }, + "site24x7": { + "name": "Site24x7", + "categoryId": 6, + "url": "https://www.site24x7.com/", + "companyId": "zoho_corp" + }, + "site_booster": { + "name": "Site Booster", + "categoryId": 7, + "url": "https://sitebooster.com/", + "companyId": "site_booster" + }, + "site_stratos": { + "name": "Site Stratos", + "categoryId": 4, + "url": "http://www.infocube.co.jp/", + "companyId": "infocube" + }, + "siteapps": { + "name": "SiteApps", + "categoryId": 2, + "url": "http://siteapps.com", + "companyId": "siteapps" + }, + "sitebro": { + "name": "SiteBro", + "categoryId": 6, + "url": "http://www.sitebro.net/", + "companyId": "sitebro" + }, + "siteheart": { + "name": "SiteHeart", + "categoryId": 2, + "url": "http://siteheart.com/", + "companyId": "siteheart" + }, + "siteimprove": { + "name": "Siteimprove", + "categoryId": 6, + "url": "http://siteimprove.com", + "companyId": "siteimprove" + }, + "siteimprove_analytics": { + "name": "SiteImprove Analytics", + "categoryId": 6, + "url": "http://siteimprove.com", + "companyId": "siteimprove" + }, + "sitelabweb.com": { + "name": "sitelabweb.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "sitemeter": { + "name": "SiteMeter", + "categoryId": 6, + "url": "http://www.sitemeter.com/", + "companyId": "sitemeter,_inc." + }, + "sitescout": { + "name": "SiteScout by Centro", + "categoryId": 4, + "url": "http://www.sitescout.com", + "companyId": "centro" + }, + "sitetag": { + "name": "SiteTag", + "categoryId": 2, + "url": "http://www.sitetag.us/", + "companyId": "sitetag" + }, + "sitewit": { + "name": "SiteWit", + "categoryId": 4, + "url": "http://www.sitewit.com/", + "companyId": "sitewit" + }, + "six_apart_advertising": { + "name": "Six Apart Advertising", + "categoryId": 4, + "url": "http://www.sixapart.com/advertising/", + "companyId": "six_apart" + }, + "sixt-neuwagen.de": { + "name": "sixt-neuwagen.de", + "categoryId": 8, + "url": null, + "companyId": null + }, + "skadtec.com": { + "name": "GP One GmbH", + "categoryId": 6, + "url": "http://www.gp-one.com/", + "companyId": null + }, + "skimlinks": { + "name": "SkimLinks", + "categoryId": 4, + "url": "http://www.skimlinks.com/", + "companyId": "skimlinks" + }, + "skroutz": { + "name": "Skroutz", + "categoryId": 6, + "url": "https://www.skroutz.gr/", + "companyId": "skroutz" + }, + "skyglue": { + "name": "SkyGlue", + "categoryId": 6, + "url": "http://www.skyglue.com/", + "companyId": "skyglue_technology" + }, + "skype": { + "name": "Skype", + "categoryId": 2, + "url": "http://www.skype.com", + "companyId": "microsoft" + }, + "skysa": { + "name": "Skysa", + "categoryId": 2, + "url": "http://www.skysa.com/", + "companyId": "skysa" + }, + "skyscnr.com": { + "name": "Skyscanner CDN", + "categoryId": 9, + "url": "https://www.skyscanner.net/", + "companyId": null + }, + "slack": { + "name": "Slack", + "categoryId": 8, + "url": "https://www.slack.com/", + "companyId": "salesforce", + "source": "AdGuard" + }, + "slashdot_widget": { + "name": "Slashdot Widget", + "categoryId": 2, + "url": "http://slashdot.org", + "companyId": "slashdot" + }, + "sleeknote": { + "name": "Sleeknote", + "categoryId": 2, + "url": "https://sleeknote.com/", + "companyId": "sleeknote" + }, + "sli_systems": { + "name": "SLI Systems", + "categoryId": 2, + "url": "http://www.sli-systems.com", + "companyId": "sli_systems" + }, + "slice_factory": { + "name": "Slice Factory", + "categoryId": 2, + "url": "http://www.slicefactory.com/", + "companyId": "slice_factory" + }, + "slimcutmedia": { + "name": "SlimCutMedia", + "categoryId": 6, + "url": "http://www.slimcutmedia.com/", + "companyId": "slimcutmedia" + }, + "slingpic": { + "name": "Slingpic", + "categoryId": 4, + "url": "http://slingpic.com/", + "companyId": "affectv" + }, + "smaato": { + "name": "Smaato", + "categoryId": 4, + "url": "http://www.smaato.com/", + "companyId": "smaato" + }, + "smart4ads": { + "name": "smart4ads", + "categoryId": 4, + "url": "http://www.smart4ads.com", + "companyId": "smart4ads" + }, + "smart_adserver": { + "name": "SMART AdServer", + "categoryId": 4, + "url": "https://smartadserver.com/", + "companyId": "smart_adserver" + }, + "smart_call": { + "name": "Smart Call", + "categoryId": 2, + "url": "https://smartcall.kz/", + "companyId": "smart_call" + }, + "smart_content": { + "name": "Smart Content", + "categoryId": 4, + "url": "http://www.getsmartcontent.com", + "companyId": "get_smart_content" + }, + "smart_device_media": { + "name": "Smart Device Media", + "categoryId": 4, + "url": "http://www.smartdevicemedia.com/", + "companyId": "smart_device_media" + }, + "smart_leads": { + "name": "Smart Leads", + "categoryId": 4, + "url": "http://www.cnt.my/", + "companyId": "smart_leads" + }, + "smart_selling": { + "name": "Smart Selling", + "categoryId": 2, + "url": "https://smartselling.cz/", + "companyId": "smart_selling" + }, + "smartad": { + "name": "smartAD", + "categoryId": 4, + "url": "http://smartad.eu/", + "companyId": "smartad" + }, + "smartbn": { + "name": "SmartBN", + "categoryId": 4, + "url": "http://smartbn.ru/", + "companyId": "smartbn" + }, + "smartclick.net": { + "name": "SmartClick", + "categoryId": 4, + "url": "http://smartclick.net/", + "companyId": null + }, + "smartclip": { + "name": "SmartClip", + "categoryId": 4, + "url": "http://www.smartclip.com/", + "companyId": "smartclip" + }, + "smartcontext": { + "name": "SmartContext", + "categoryId": 4, + "url": "http://smartcontext.pl/", + "companyId": "smartcontext" + }, + "smarter_remarketer": { + "name": "SmarterHQ", + "categoryId": 4, + "url": "https://smarterhq.com", + "companyId": "smarterhq" + }, + "smarter_travel": { + "name": "Smarter Travel Media", + "categoryId": 4, + "url": "https://www.smartertravel.com/", + "companyId": "iac_apps" + }, + "smarterclick": { + "name": "Smarterclick", + "categoryId": 4, + "url": "http://www.smarterclick.co.uk/", + "companyId": "smarter_click" + }, + "smartertrack": { + "name": "SmarterTrack", + "categoryId": 4, + "url": "http://www.smartertrack.com/", + "companyId": "smartertrack" + }, + "smartlink.cool": { + "name": "smartlink.cool", + "categoryId": 11, + "url": null, + "companyId": null + }, + "smartlook": { + "name": "Smartlook", + "categoryId": 2, + "url": "https://www.smartlook.com/", + "companyId": "smartlook" + }, + "smartstream.tv": { + "name": "SmartStream.TV", + "categoryId": 4, + "url": "https://www.smartstream.tv/en", + "companyId": "smartstream" + }, + "smartsupp_chat": { + "name": "Smartsupp Chat", + "categoryId": 2, + "url": "https://www.smartsupp.com/", + "companyId": "smartsuppp" + }, + "smi2.ru": { + "name": "smi2.ru", + "categoryId": 6, + "url": "https://smi2.net/", + "companyId": "media2_stat.media" + }, + "smooch": { + "name": "Smooch", + "categoryId": 2, + "url": "https://smooch.io/", + "companyId": "smooch" + }, + "smowtion": { + "name": "Smowtion", + "categoryId": 4, + "url": "http://www.smowtion.com/", + "companyId": "smowtion" + }, + "smx_ventures": { + "name": "SMX Ventures", + "categoryId": 6, + "url": "http://smxeventures.com/", + "companyId": "smx_ventures" + }, + "smyte": { + "name": "Smyte", + "categoryId": 6, + "url": "https://www.smyte.com/", + "companyId": "smyte" + }, + "snacktv": { + "name": "SnackTV", + "categoryId": 6, + "url": "https://www.verizon.com/", + "companyId": "verizon" + }, + "snacktv_player": { + "name": "SnackTV-Player", + "categoryId": 0, + "url": "https://www.verizon.com/", + "companyId": "verizon" + }, + "snap": { + "name": "Snap", + "categoryId": 2, + "url": "http://www.snap.com/", + "companyId": "snap_technologies" + }, + "snap_engage": { + "name": "Snap Engage", + "categoryId": 2, + "url": "https://snapengage.com/", + "companyId": "snap_engage" + }, + "snapchat": { + "name": "Snapchat For Business", + "categoryId": 4, + "url": "https://www.snapchat.com/", + "companyId": "snap_technologies" + }, + "snapcraft": { + "name": "Snapcraft", + "categoryId": 8, + "url": "https://snapcraft.io", + "companyId": "canonical", + "source": "AdGuard" + }, + "snigelweb": { + "name": "SnigelWeb, Inc.", + "categoryId": 4, + "url": "http://www.snigelweb.com/", + "companyId": "snigelweb_inc" + }, + "snoobi": { + "name": "Snoobi", + "categoryId": 6, + "url": "http://www.snoobi.eu/", + "companyId": "snoobi" + }, + "snoobi_analytics": { + "name": "Snoobi Analytics", + "categoryId": 6, + "url": "http://www.snoobi.com/", + "companyId": "snoobi_oy" + }, + "snowplow": { + "name": "Snowplow", + "categoryId": 6, + "url": "http://snowplowanalytics.com/", + "companyId": "snowplow" + }, + "soasta_mpulse": { + "name": "SOASTA mPulse", + "categoryId": 6, + "url": "http://www.soasta.com/", + "companyId": "akamai" + }, + "sociable_labs": { + "name": "Sociable Labs", + "categoryId": 4, + "url": "http://www.sociablelabs.com/", + "companyId": "sociable_labs" + }, + "social_amp": { + "name": "Social Amp", + "categoryId": 4, + "url": "http://www.merkleinc.com/", + "companyId": "dentsu_aegis_network" + }, + "social_annex": { + "name": "Social Annex", + "categoryId": 4, + "url": "http://www.socialannex.com", + "companyId": "social_annex" + }, + "social_miner": { + "name": "Social Miner", + "categoryId": 7, + "url": "https://socialminer.com/", + "companyId": "social_miner" + }, + "socialbeat": { + "name": "socialbeat", + "categoryId": 4, + "url": "http://www.socialbeat.it/", + "companyId": "socialbeat" + }, + "socialrms": { + "name": "SocialRMS", + "categoryId": 7, + "url": "http://socialinterface.com/socialrms/", + "companyId": "socialinterface" + }, + "sociaplus.com": { + "name": "SociaPlus", + "categoryId": 6, + "url": "https://sociaplus.com/", + "companyId": null + }, + "sociomantic": { + "name": "Sociomantic", + "categoryId": 4, + "url": "http://www.sociomantic.com/", + "companyId": "sociomantic_labs_gmbh" + }, + "sohu": { + "name": "Sohu", + "categoryId": 7, + "url": "http://www.sohu.com", + "companyId": "sohu" + }, + "sojern": { + "name": "Sojern", + "categoryId": 4, + "url": "http://www.sojern.com/", + "companyId": "sojern" + }, + "sokrati": { + "name": "Sokrati", + "categoryId": 4, + "url": "http://sokrati.com/", + "companyId": "sokrati" + }, + "solads.media": { + "name": "solads.media", + "categoryId": 4, + "url": "http://solads.media/", + "companyId": null + }, + "solaredge": { + "name": "SolarEdge Technologies, Inc.", + "categoryId": 8, + "url": "https://www.solaredge.com/", + "companyId": "solaredge", + "source": "AdGuard" + }, + "solidopinion": { + "name": "SolidOpinion", + "categoryId": 2, + "url": "https://solidopinion.com/", + "companyId": "solidopinion" + }, + "solve_media": { + "name": "Solve Media", + "categoryId": 4, + "url": "http://solvemedia.com/", + "companyId": "solve_media" + }, + "soma_2": { + "name": "SOMA 2", + "categoryId": 4, + "url": "http://www.webcombi.de/", + "companyId": "soma_2_gmbh" + }, + "somoaudience": { + "name": "SoMo Audience", + "categoryId": 4, + "url": "https://somoaudience.com/", + "companyId": "somoaudience" + }, + "sonobi": { + "name": "Sonobi", + "categoryId": 4, + "url": "http://sonobi.com/", + "companyId": "sonobi" + }, + "sonos": { + "name": "Sonos", + "categoryId": 8, + "url": "https://www.sonos.com/", + "companyId": "sonos", + "source": "AdGuard" + }, + "sophus3": { + "name": "Sophus3", + "categoryId": 4, + "url": "http://www.sophus3.com/", + "companyId": "sophus3" + }, + "sortable": { + "name": "Sortable", + "categoryId": 4, + "url": "https://sortable.com/", + "companyId": "sortable" + }, + "soundcloud": { + "name": "SoundCloud", + "categoryId": 0, + "url": "http://soundcloud.com/", + "companyId": "soundcloud" + }, + "sourceknowledge_pixel": { + "name": "SourceKnowledge Pixel", + "categoryId": 4, + "url": "http://www.provenpixel.com/", + "companyId": "sourceknowledge" + }, + "sourcepoint": { + "name": "Sourcepoint", + "categoryId": 4, + "url": "https://www.sourcepoint.com/", + "companyId": "sourcepoint" + }, + "sovrn": { + "name": "sovrn", + "categoryId": 4, + "url": "https://www.sovrn.com/", + "companyId": "sovrn" + }, + "sovrn_viewability_solutions": { + "name": "Sovrn Signal", + "categoryId": 4, + "url": "https://www.sovrn.com/publishers/signal/", + "companyId": "sovrn" + }, + "spark_studios": { + "name": "Spark Studios", + "categoryId": 0, + "url": "http://www.sparkstudios.com/", + "companyId": "spark_studios" + }, + "sparkasse.de": { + "name": "sparkasse.de", + "categoryId": 8, + "url": null, + "companyId": null + }, + "speakpipe": { + "name": "SpeakPipe", + "categoryId": 2, + "url": "http://www.speakpipe.com/", + "companyId": "speakpipe" + }, + "specific_media": { + "name": "Specific Media", + "categoryId": 4, + "url": "http://www.specificmedia.com", + "companyId": "specific_media" + }, + "spectate": { + "name": "Spectate", + "categoryId": 6, + "url": "http://spectate.com/", + "companyId": "spectate" + }, + "speed_shift_media": { + "name": "Speed Shift Media", + "categoryId": 4, + "url": "http://www.speedshiftmedia.com/", + "companyId": "speed_shift_media" + }, + "speedcurve": { + "name": "SpeedCurve", + "categoryId": 6, + "url": "https://speedcurve.com/", + "companyId": null + }, + "speedyads": { + "name": "SpeedyAds", + "categoryId": 4, + "url": "http://www.entireweb.com/speedyads/", + "companyId": "entireweb" + }, + "speee": { + "name": "Speee", + "categoryId": 4, + "url": "https://speee.jp", + "companyId": "speee" + }, + "sphere": { + "name": "Sphere", + "categoryId": 4, + "url": "http://www.sphere.com/", + "companyId": "verizon" + }, + "spheremall": { + "name": "SphereMall", + "categoryId": 6, + "url": "https://spheremall.com", + "companyId": "spheremall" + }, + "sphereup": { + "name": "SphereUp", + "categoryId": 2, + "url": "http://zoomd.com/", + "companyId": "zoomd" + }, + "spicy": { + "name": "Spicy", + "categoryId": 4, + "url": "http://sspicy.ru/#main", + "companyId": "spicy_ssp" + }, + "spider.ad": { + "name": "Spider.Ad", + "categoryId": 4, + "url": "http://spider.ad/", + "companyId": "spider.ad" + }, + "spider_ads": { + "name": "Spider Ads", + "categoryId": 4, + "url": "http://www.spiderads.eu/", + "companyId": "spiderads" + }, + "spinnakr": { + "name": "Spinnakr", + "categoryId": 6, + "url": "http://spinnakr.com/", + "companyId": "spinnakr" + }, + "spokenlayer": { + "name": "SpokenLayer", + "categoryId": 0, + "url": "http://www.spokenlayer.com", + "companyId": "spokenlayer" + }, + "spongecell": { + "name": "Spongecell", + "categoryId": 4, + "url": "http://www.spongecell.com/", + "companyId": "spongecell" + }, + "sponsorads.de": { + "name": "SponsorAds.de", + "categoryId": 4, + "url": "http://sponsorads.de", + "companyId": "sponsorads.de" + }, + "sportsbet_affiliates": { + "name": "Sportsbet Affiliates", + "categoryId": 4, + "url": "http://www.sportsbetaffiliates.com.au/", + "companyId": "sportsbet_affiliates" + }, + "spot.im": { + "name": "Spot.IM", + "categoryId": 7, + "url": "https://www.spot.im/", + "companyId": "spot.im" + }, + "spoteffect": { + "name": "Spoteffect", + "categoryId": 6, + "url": "http://www.spoteffects.com/home/", + "companyId": "spoteffect" + }, + "spotify": { + "name": "Spotify", + "categoryId": 0, + "url": "https://www.spotify.com/", + "companyId": "spotify" + }, + "spotify_embed": { + "name": "Spotify Embed", + "categoryId": 0, + "url": "https://www.spotify.com", + "companyId": "spotify" + }, + "spotscenered.info": { + "name": "spotscenered.info", + "categoryId": 11, + "url": null, + "companyId": null + }, + "spotxchange": { + "name": "SpotX", + "categoryId": 4, + "url": "https://www.spotx.tv/", + "companyId": "rtl_group" + }, + "spoutable": { + "name": "Spoutable", + "categoryId": 4, + "url": "http://spoutable.com/", + "companyId": "spoutable" + }, + "springboard": { + "name": "SpringBoard", + "categoryId": 4, + "url": "http://home.springboardplatform.com/", + "companyId": "springboard" + }, + "springserve": { + "name": "SpringServe", + "categoryId": 4, + "url": "http://springserve.com/", + "companyId": "springserve" + }, + "sprinklr": { + "name": "Sprinklr", + "categoryId": 4, + "url": "https://www.sprinklr.com/", + "companyId": "sprinklr" + }, + "sputnik": { + "name": "Sputnik", + "categoryId": 6, + "url": "https://cnt.sputnik.ru/", + "companyId": "sputnik" + }, + "squadata": { + "name": "Squadata", + "categoryId": 4, + "url": "http://www.email-match.net/", + "companyId": "squadata" + }, + "squarespace.com": { + "name": "Squarespace", + "categoryId": 6, + "url": "https://www.squarespace.com/", + "companyId": null + }, + "srvtrck.com": { + "name": "srvtrck.com", + "categoryId": 12, + "url": null, + "companyId": null + }, + "srvvtrk.com": { + "name": "srvvtrk.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "sstatic.net": { + "name": "Stack Exchange", + "categoryId": 9, + "url": "https://sstatic.net/", + "companyId": null + }, + "st-hatena": { + "name": "Hatena", + "categoryId": 7, + "url": "http://www.hatena.ne.jp/", + "companyId": "hatena_jp" + }, + "stackadapt": { + "name": "StackAdapt", + "categoryId": 4, + "url": "http://www.stackadapt.com/", + "companyId": "stackadapt" + }, + "stackpathdns.com": { + "name": "StackPath", + "categoryId": 9, + "url": "https://www.stackpath.com/", + "companyId": null + }, + "stailamedia_com": { + "name": "stailamedia.com", + "categoryId": 4, + "url": "http://stailamedia.com/", + "companyId": null + }, + "stalluva.pro": { + "name": "stalluva.pro", + "categoryId": 11, + "url": null, + "companyId": null + }, + "startapp": { + "name": "StartApp", + "categoryId": 4, + "url": "https://www.startapp.com/", + "companyId": null + }, + "stat24": { + "name": "Stat24", + "categoryId": 6, + "url": "http://www.stat24.com/en/", + "companyId": "stat24" + }, + "stat4u": { + "name": "stat4u", + "categoryId": 6, + "url": "http://stat.4u.pl/", + "companyId": "stat4u" + }, + "statcounter": { + "name": "Statcounter", + "categoryId": 6, + "url": "http://www.statcounter.com/", + "companyId": "statcounter" + }, + "stathat": { + "name": "StatHat", + "categoryId": 6, + "url": "http://www.stathat.com/", + "companyId": "stathat" + }, + "statisfy": { + "name": "Statisfy", + "categoryId": 6, + "url": "http://www.statisfy.com/", + "companyId": "statisfy" + }, + "statsy.net": { + "name": "statsy.net", + "categoryId": 11, + "url": null, + "companyId": null + }, + "statuscake": { + "name": "StatusCake", + "categoryId": 6, + "url": "https://www.statuscake.com/", + "companyId": "statuscake" + }, + "statuspage.io": { + "name": "Statuspage", + "categoryId": 2, + "url": "https://www.statuspage.io/", + "companyId": "atlassian" + }, + "stayfriends.de": { + "name": "stayfriends.de", + "categoryId": 8, + "url": "https://www.stayfriends.de/", + "companyId": null + }, + "steelhouse": { + "name": "Steel House Media", + "categoryId": 4, + "url": "https://steelhouse.com/", + "companyId": "steelhouse" + }, + "steepto.com": { + "name": "Steepto", + "categoryId": 4, + "url": "https://www.steepto.com/", + "companyId": null + }, + "stepstone.com": { + "name": "StepStone", + "categoryId": 8, + "url": "https://www.stepstone.com/", + "companyId": null + }, + "stetic": { + "name": "Stetic", + "categoryId": 6, + "url": "https://www.stetic.com/", + "companyId": "stetic" + }, + "stickyads": { + "name": "StickyAds", + "categoryId": 4, + "url": "http://corporate.comcast.com/", + "companyId": "comcast" + }, + "stocktwits": { + "name": "StockTwits", + "categoryId": 2, + "url": "http://stocktwits.com", + "companyId": "stocktwits" + }, + "storify": { + "name": "Storify", + "categoryId": 4, + "url": "https://storify.com/", + "companyId": "adobe" + }, + "storygize": { + "name": "Storygize", + "categoryId": 4, + "url": "http://www.storygize.com/", + "companyId": null + }, + "strands_recommender": { + "name": "Strands Recommender", + "categoryId": 4, + "url": "http://recommender.strands.com", + "companyId": "strands" + }, + "strava": { + "name": "Strava", + "categoryId": 6, + "url": "https://strava.com", + "companyId": "strava" + }, + "streak": { + "name": "Streak", + "categoryId": 2, + "url": "http://www.streak.com/", + "companyId": "streak" + }, + "streamotion": { + "name": "Streamotion", + "categoryId": 0, + "url": "https://streamotion.com.au/", + "companyId": "news_corp", + "source": "AdGuard" + }, + "streamrail.com": { + "name": "StreamRail", + "categoryId": 4, + "url": "https://www.streamrail.com/", + "companyId": "ironsource" + }, + "stride": { + "name": "Stride", + "categoryId": 6, + "url": "https://www.getstride.com/", + "companyId": "stride_software" + }, + "stripchat.com": { + "name": "stripchat.com", + "categoryId": 3, + "url": null, + "companyId": null + }, + "stripe.com": { + "name": "Stripe", + "categoryId": 2, + "url": "https://stripe.com/", + "companyId": null + }, + "stripst.com": { + "name": "stripst.com", + "categoryId": 3, + "url": null, + "companyId": null + }, + "stroer_digital_media": { + "name": "Stroer Digital Media", + "categoryId": 4, + "url": "http://www.stroeer.de/", + "companyId": "stroer" + }, + "strossle": { + "name": "Strossle", + "categoryId": 4, + "url": "https://strossle.com/", + "companyId": "strossle" + }, + "struq": { + "name": "Struq", + "categoryId": 4, + "url": "http://www.struq.com/", + "companyId": "quantcast" + }, + "stumbleupon_widgets": { + "name": "StumbleUpon Widgets", + "categoryId": 7, + "url": "http://www.stumbleupon.com/", + "companyId": "stumbleupon" + }, + "sub2": { + "name": "Sub2", + "categoryId": 4, + "url": "http://www.sub2tech.com/", + "companyId": "sub2" + }, + "sublime_skinz": { + "name": "Sublime", + "categoryId": 4, + "url": "https://sublimeskinz.com/home", + "companyId": "sublime_skinz" + }, + "suggest.io": { + "name": "Suggest.io", + "categoryId": 4, + "url": "https://suggest.io/", + "companyId": "suggest.io" + }, + "sumologic.com": { + "name": "Sumologic", + "categoryId": 6, + "url": "https://www.sumologic.com/", + "companyId": null + }, + "sumome": { + "name": "Sumo", + "categoryId": 6, + "url": "https://sumo.com/", + "companyId": "sumome" + }, + "sundaysky": { + "name": "SundaySky", + "categoryId": 4, + "url": "http://www.sundaysky.com/", + "companyId": "sundaysky" + }, + "supercell": { + "name": "Supercell", + "categoryId": 2, + "url": "https://supercell.com/", + "companyId": "supercell", + "source": "AdGuard" + }, + "supercounters": { + "name": "SuperCounters", + "categoryId": 6, + "url": "http://www.supercounters.com/", + "companyId": "supercounters" + }, + "superfastcdn.com": { + "name": "superfastcdn.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "supership": { + "name": "Supership", + "categoryId": 4, + "url": "https://supership.jp/en/", + "companyId": "supership" + }, + "supplyframe": { + "name": "SupplyFrame", + "categoryId": 4, + "url": "https://supplyframe.com/", + "companyId": "supplyframe" + }, + "surf_by_surfingbird": { + "name": "Surf by Surfingbird", + "categoryId": 2, + "url": "http://surfingbird.ru/", + "companyId": "surfingbird" + }, + "survata": { + "name": "Survata", + "categoryId": 4, + "url": "https://www.survata.com/", + "companyId": "survata" + }, + "sweettooth": { + "name": "Sweettooth", + "categoryId": 2, + "url": "https://www.sweettoothrewards.com/", + "companyId": "sweet_tooth_rewards" + }, + "swiftype": { + "name": "Swiftype", + "categoryId": 9, + "url": "https://swiftype.com/", + "companyId": "elastic" + }, + "swisscom": { + "name": "Swisscom", + "categoryId": 8, + "url": null, + "companyId": null + }, + "switch_concepts": { + "name": "Switch Concepts", + "categoryId": 4, + "url": "http://www.switchconcepts.co.uk/", + "companyId": "switch_concepts" + }, + "switchtv": { + "name": "Switch Media", + "categoryId": 8, + "url": "https://www.switch.tv/", + "companyId": "switchtv", + "source": "AdGuard" + }, + "swoop": { + "name": "Swoop", + "categoryId": 4, + "url": "http://swoop.com/", + "companyId": "swoop" + }, + "sykes": { + "name": "Sykes", + "categoryId": 6, + "url": "http://www.sykescottages.co.uk/", + "companyId": "sykes_cottages" + }, + "symantec": { + "name": "Symantec (Norton Secured Seal)", + "categoryId": 5, + "url": "https://www.symantec.com/page.jsp?id=ssl-resources&tabID=3#", + "companyId": "symantec" + }, + "symphony_talent": { + "name": "Symphony Talent", + "categoryId": 2, + "url": "http://www.symphonytalent.com/", + "companyId": "symphony_talent" + }, + "synacor": { + "name": "Synacor", + "categoryId": 4, + "url": "https://www.synacor.com/", + "companyId": "synacor" + }, + "syncapse": { + "name": "Syncapse", + "categoryId": 4, + "url": "http://www.clickable.com/", + "companyId": "syncapse" + }, + "synergy-e": { + "name": "Synergy-E", + "categoryId": 4, + "url": "http://synergy-e.com/", + "companyId": "synergy-e" + }, + "t-mobile": { + "name": "Deutsche Telekom", + "categoryId": 8, + "url": null, + "companyId": null + }, + "t8cdn.com": { + "name": "t8cdn.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "tableteducation.com": { + "name": "tableteducation.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "taboola": { + "name": "Taboola", + "categoryId": 4, + "url": "http://www.taboola.com", + "companyId": "taboola" + }, + "tacoda": { + "name": "Tacoda", + "categoryId": 4, + "url": "http://www.tacoda.com/", + "companyId": "verizon" + }, + "tag_commander": { + "name": "Commanders Act", + "categoryId": 5, + "url": "https://www.commandersact.com/en/", + "companyId": "tag_commander" + }, + "tagcade": { + "name": "Tagcade", + "categoryId": 4, + "url": "https://www.pubvantage.com/", + "companyId": "pubvantage" + }, + "taggify": { + "name": "Taggify", + "categoryId": 4, + "url": "http://new.taggify.net/", + "companyId": "taggify" + }, + "taggy": { + "name": "TAGGY", + "categoryId": 4, + "url": "http://taggy.jp/", + "companyId": "taggy" + }, + "tagman": { + "name": "TagMan", + "categoryId": 5, + "url": "http://www.tagman.com/", + "companyId": "ensighten" + }, + "tail_target": { + "name": "Tail", + "categoryId": 6, + "url": "https://www.tail.digital/", + "companyId": "tail.digital" + }, + "tailsweep": { + "name": "Tailsweep", + "categoryId": 4, + "url": "http://www.tailsweep.se/", + "companyId": "tailsweep" + }, + "tamedia.ch": { + "name": "Tamedia", + "categoryId": 4, + "url": "https://www.tamedia.ch/", + "companyId": null + }, + "tanx": { + "name": "Tanx", + "categoryId": 4, + "url": "http://tanx.com/", + "companyId": "tanx" + }, + "taobao": { + "name": "Taobao", + "categoryId": 4, + "url": "https://world.taobao.com/", + "companyId": "softbank", + "source": "AdGuard" + }, + "tapad": { + "name": "Tapad", + "categoryId": 4, + "url": "http://www.tapad.com/", + "companyId": "telenor" + }, + "tapinfluence": { + "name": "TapInfluence", + "categoryId": 4, + "url": "http://theblogfrog.com/", + "companyId": "tapinfluence" + }, + "tarafdari": { + "name": "Tarafdari", + "categoryId": 4, + "url": "https://www.tarafdari.com/", + "companyId": "tarafdari" + }, + "target_2_sell": { + "name": "Target 2 Sell", + "categoryId": 4, + "url": "http://www.target2sell.com/en/", + "companyId": "target_2_sell" + }, + "target_circle": { + "name": "Target Circle", + "categoryId": 6, + "url": "http://targetcircle.com", + "companyId": "target_circle" + }, + "target_fuel": { + "name": "Target Fuel", + "categoryId": 6, + "url": "http://targetfuel.com/", + "companyId": "target_fuel" + }, + "tawk": { + "name": "Tawk", + "categoryId": 2, + "url": "https://www.tawk.to/", + "companyId": "tawk" + }, + "tbn.ru": { + "name": "TBN.ru", + "categoryId": 4, + "url": "http://www.agava.ru", + "companyId": "agava" + }, + "tchibo_de": { + "name": "tchibo.de", + "categoryId": 8, + "url": "http://tchibo.de/", + "companyId": null + }, + "tdsrmbl_net": { + "name": "tdsrmbl.net", + "categoryId": 8, + "url": null, + "companyId": null + }, + "teads": { + "name": "Teads", + "categoryId": 4, + "url": "http://teads.tv/", + "companyId": "teads" + }, + "tealeaf": { + "name": "Tealeaf", + "categoryId": 6, + "url": "https://www.ibm.com/digital-marketing", + "companyId": "ibm" + }, + "tealium": { + "name": "Tealium", + "categoryId": 5, + "url": "http://www.tealium.com/", + "companyId": "tealium" + }, + "teaser.cc": { + "name": "Teaser.cc", + "categoryId": 4, + "url": "http://www.teaser.cc/", + "companyId": "teaser.cc" + }, + "tedemis": { + "name": "Tedemis", + "categoryId": 4, + "url": "http://www.tedemis.com", + "companyId": "tedemis" + }, + "teletech": { + "name": "TeleTech", + "categoryId": 4, + "url": "http://www.webmetro.com/whoweare/technology.aspx", + "companyId": "teletech" + }, + "telstra": { + "name": "Telstra", + "categoryId": 8, + "url": "https://www.telstra.com.au/", + "companyId": "telstra", + "source": "AdGuard" + }, + "tender": { + "name": "Tender", + "categoryId": 2, + "url": "http://www.tenderapp.com/", + "companyId": "tender" + }, + "tensitionschoo.club": { + "name": "tensitionschoo.club", + "categoryId": 11, + "url": null, + "companyId": null + }, + "teroti": { + "name": "Teroti", + "categoryId": 4, + "url": "http://www.teroti.com/", + "companyId": "teroti" + }, + "terren": { + "name": "Terren", + "categoryId": 4, + "url": "http://www.webterren.com/", + "companyId": "terren" + }, + "teufel.de": { + "name": "teufel.de", + "categoryId": 8, + "url": "https://www.teufel.de/", + "companyId": null + }, + "the_adex": { + "name": "The ADEX", + "categoryId": 4, + "url": "http://www.theadex.com/", + "companyId": "prosieben_sat1" + }, + "the_deck": { + "name": "The DECK", + "categoryId": 4, + "url": "http://decknetwork.net/", + "companyId": "the_deck" + }, + "the_guardian": { + "name": "The Guardian", + "categoryId": 8, + "url": "https://www.theguardian.com/", + "companyId": "the_guardian" + }, + "the_reach_group": { + "name": "The Reach Group", + "categoryId": 4, + "url": "http://www.redvertisment.com", + "companyId": "the_reach_group" + }, + "the_search_agency": { + "name": "The Search Agency", + "categoryId": 4, + "url": "http://www.thesearchagency.com/", + "companyId": "the_search_agency" + }, + "the_sun": { + "name": "The Sun", + "categoryId": 8, + "url": "https://www.thesun.co.uk/", + "companyId": "the_sun" + }, + "the_weather_company": { + "name": "The Weather Company", + "categoryId": 4, + "url": "http://www.theweathercompany.com/", + "companyId": "ibm" + }, + "themoviedb": { + "name": "The Movie DB", + "categoryId": 8, + "url": "https://www.themoviedb.org/", + "companyId": "themoviedb" + }, + "thinglink": { + "name": "ThingLink", + "categoryId": 4, + "url": "http://www.thinglink.com/", + "companyId": "thinglink" + }, + "threatmetrix": { + "name": "ThreatMetrix", + "categoryId": 6, + "url": "http://threatmetrix.com/", + "companyId": "threatmetrix" + }, + "tidbit": { + "name": "Tidbit", + "categoryId": 2, + "url": "http://tidbit.co.in/", + "companyId": "tidbit" + }, + "tidio": { + "name": "Tidio", + "categoryId": 2, + "url": "https://www.tidio.com/", + "companyId": "tidio_chat" + }, + "tiktok_analytics": { + "name": "TikTok Analytics", + "categoryId": 6, + "url": "https://analytics.tiktok.com", + "companyId": "bytedance_inc" + }, + "tiller": { + "name": "Tiller", + "categoryId": 4, + "url": "https://www.tiller.com/", + "companyId": "tiller" + }, + "timezondb": { + "name": "TimezonDB", + "categoryId": 4, + "url": "https://timezonedb.com/", + "companyId": "timezonedb" + }, + "tinypass": { + "name": "Piano", + "categoryId": 5, + "url": "https://piano.io/", + "companyId": "piano" + }, + "tisoomi": { + "name": "Tisoomi", + "categoryId": 4, + "url": "https://tisoomi-services.com/", + "companyId": null + }, + "tlv_media": { + "name": "TLV Media", + "categoryId": 4, + "url": "http://www.tlvmedia.com", + "companyId": "tlvmedia" + }, + "tns": { + "name": "TNS", + "categoryId": 6, + "url": "http://www.tnsglobal.com/", + "companyId": "wpp" + }, + "tomnewsupdate.info": { + "name": "tomnewsupdate.info", + "categoryId": 12, + "url": null, + "companyId": null + }, + "tomorrow_focus": { + "name": "Tomorrow Focus", + "categoryId": 4, + "url": "http://www.tomorrow-focus.com", + "companyId": "hubert_burda_media" + }, + "tonefuse": { + "name": "ToneFuse", + "categoryId": 4, + "url": "http://www.tonefuse.com/", + "companyId": "tonefuse" + }, + "top_mail": { + "name": "Top Mail", + "categoryId": 6, + "url": "https://corp.megafon.com/", + "companyId": "megafon" + }, + "toplist.cz": { + "name": "toplist.cz", + "categoryId": 11, + "url": null, + "companyId": null + }, + "toponclick_com": { + "name": "toponclick.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "topsy": { + "name": "Topsy", + "categoryId": 4, + "url": "http://topsy.com/", + "companyId": "topsy" + }, + "torbit": { + "name": "Torbit", + "categoryId": 6, + "url": "http://torbit.com/", + "companyId": "torbit" + }, + "toro": { + "name": "TORO", + "categoryId": 4, + "url": "http://toroadvertising.com/", + "companyId": "toro_advertising" + }, + "tororango.com": { + "name": "tororango.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "total_media": { + "name": "Total Media", + "categoryId": 4, + "url": "http://www.totalmedia.co.il/eng/", + "companyId": "total_media" + }, + "touchcommerce": { + "name": "Nuance", + "categoryId": 2, + "url": "https://www.nuance.com/omni-channel-customer-engagement/digital.html", + "companyId": "touchcommerce" + }, + "tovarro.com": { + "name": "Tovarro", + "categoryId": 4, + "url": "https://www.tovarro.com/", + "companyId": null + }, + "tp-cdn.com": { + "name": "TrialPay", + "categoryId": 4, + "url": "https://www.trialpay.com/", + "companyId": null + }, + "tracc.it": { + "name": "Kiwe.io", + "categoryId": 6, + "url": "https://www.kiwe.io/", + "companyId": null + }, + "tracemyip": { + "name": "TraceMyIP", + "categoryId": 4, + "url": "http://www.tracemyip.org/", + "companyId": "tracemyip" + }, + "traceview": { + "name": "TraceView", + "categoryId": 6, + "url": "http://www.appneta.com/", + "companyId": "appneta" + }, + "track_duck": { + "name": "Track Duck", + "categoryId": 6, + "url": "https://trackduck.com/", + "companyId": "track_duck" + }, + "trackjs": { + "name": "TrackJS", + "categoryId": 6, + "url": "http://www.trackjs.com/", + "companyId": "trackjs" + }, + "trackset_conversionlab": { + "name": "Trackset ConversionLab", + "categoryId": 4, + "url": "http://www.trackset.com/", + "companyId": "trackset" + }, + "trackuity": { + "name": "Trackuity", + "categoryId": 2, + "url": "http://www.trackuity.com/", + "companyId": "trackuity" + }, + "tradedesk": { + "name": "TradeDesk", + "categoryId": 4, + "url": "http://www.thetradedesk.com/", + "companyId": "the_trade_desk" + }, + "tradedoubler": { + "name": "TradeDoubler", + "categoryId": 4, + "url": "http://www.tradedoubler.com/", + "companyId": "tradedoubler" + }, + "tradelab": { + "name": "Tradelab", + "categoryId": 4, + "url": "http://www.tradelab.fr/", + "companyId": "tradelab" + }, + "tradetracker": { + "name": "TradeTracker", + "categoryId": 4, + "url": "http://www.tradetracker.com", + "companyId": "tradetracker" + }, + "traffective": { + "name": "Traffective", + "categoryId": 4, + "url": "https://traffective.com/", + "companyId": null + }, + "traffic_fuel": { + "name": "Traffic Fuel", + "categoryId": 4, + "url": "https://trafficfuel.com/", + "companyId": "traffic_fuel" + }, + "traffic_revenue": { + "name": "Traffic Revenue", + "categoryId": 4, + "url": "http://www.trafficrevenue.net/", + "companyId": "traffic_revenue" + }, + "traffic_stars": { + "name": "Traffic Stars", + "categoryId": 3, + "url": "https://trafficstars.com/#index_page", + "companyId": "traffic_stars" + }, + "trafficbroker": { + "name": "TrafficBroker", + "categoryId": 4, + "url": "http://trafficbroker.com/", + "companyId": "trafficbroker" + }, + "trafficfabrik.com": { + "name": "Traffic Fabrik", + "categoryId": 3, + "url": "https://www.trafficfabrik.com/", + "companyId": null + }, + "trafficfactory": { + "name": "Traffic Factory", + "categoryId": 4, + "url": "https://www.trafficfactory.biz/", + "companyId": null + }, + "trafficforce": { + "name": "TrafficForce", + "categoryId": 4, + "url": "http://www.trafficforce.com/", + "companyId": "trafficforce" + }, + "traffichaus": { + "name": "TrafficHaus", + "categoryId": 3, + "url": "http://www.traffichaus.com", + "companyId": "traffichaus" + }, + "trafficjunky": { + "name": "TrafficJunky", + "categoryId": 3, + "url": "http://www.trafficjunky.net/", + "companyId": "trafficjunky" + }, + "traffiliate": { + "name": "Traffiliate", + "categoryId": 4, + "url": "http://www.traffiliate.com/", + "companyId": "dsnr_media_group" + }, + "trafic": { + "name": "Trafic", + "categoryId": 6, + "url": "http://www.trafic.ro/", + "companyId": "trafic" + }, + "trafmag.com": { + "name": "TrafMag", + "categoryId": 4, + "url": "https://trafmag.com/", + "companyId": "trafmag" + }, + "transcend": { + "name": "Transcend Consent", + "categoryId": 14, + "url": "https://transcend.io/consent/", + "companyId": "transcend" + }, + "transcend_telemetry": { + "name": "Transcend Telemetry", + "categoryId": 6, + "url": "https://transcend.io", + "companyId": "transcend" + }, + "transmatic": { + "name": "Transmatic", + "categoryId": 6, + "url": "http://www.transmatico.com/en/", + "companyId": "transmatico" + }, + "travel_audience": { + "name": "Travel Audience", + "categoryId": 6, + "url": "https://travelaudience.com/", + "companyId": "travel_audience" + }, + "trbo": { + "name": "trbo", + "categoryId": 4, + "url": "http://www.trbo.com/", + "companyId": "trbo" + }, + "treasuredata": { + "name": "Treasure Data", + "categoryId": 6, + "url": "https://www.treasuredata.com/", + "companyId": "arm" + }, + "tremor_video": { + "name": "Tremor Video", + "categoryId": 0, + "url": "http://www.tremormedia.com/", + "companyId": "tremor_video" + }, + "trendcounter": { + "name": "trendcounter", + "categoryId": 6, + "url": "http://www.trendcounter.com/", + "companyId": "trendcounter" + }, + "trendemon": { + "name": "TrenDemon", + "categoryId": 6, + "url": "http://trendemon.com", + "companyId": "trendemon" + }, + "tribal_fusion": { + "name": "Tribal Fusion", + "categoryId": 4, + "url": "http://www.tribalfusion.com/", + "companyId": "exponential_interactive" + }, + "tribal_fusion_notice": { + "name": "Tribal Fusion Notice", + "categoryId": 4, + "url": "http://www.tribalfusion.com", + "companyId": "exponential_interactive" + }, + "triblio": { + "name": "Triblio", + "categoryId": 6, + "url": "https://triblio.com/", + "companyId": "triblio" + }, + "trigger_mail_marketing": { + "name": "Trigger Mail Marketing", + "categoryId": 4, + "url": "http://www.triggeremailmarketing.com/", + "companyId": "trigger_mail_marketing" + }, + "triggerbee": { + "name": "Triggerbee", + "categoryId": 2, + "url": "https://triggerbee.com/", + "companyId": "triggerbee" + }, + "tripadvisor": { + "name": "TripAdvisor", + "categoryId": 8, + "url": "http://iac.com/", + "companyId": "iac_apps" + }, + "triplelift": { + "name": "TripleLift", + "categoryId": 4, + "url": "http://triplelift.com/", + "companyId": "triplelift" + }, + "triptease": { + "name": "Triptease", + "categoryId": 2, + "url": "https://www.triptease.com", + "companyId": "triptease" + }, + "triton_digital": { + "name": "Triton Digital", + "categoryId": 0, + "url": "http://www.tritondigital.com/", + "companyId": "triton_digital" + }, + "trovus_revelations": { + "name": "Trovus Revelations", + "categoryId": 4, + "url": "http://www.trovus.co.uk/", + "companyId": "trovus_revelations" + }, + "trsv3.com": { + "name": "trsv3.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "true_fit": { + "name": "True Fit", + "categoryId": 4, + "url": "https://www.truefit.com/", + "companyId": "true_fit" + }, + "trueanthem": { + "name": "True Anthem", + "categoryId": 4, + "url": "https://www.trueanthem.com/", + "companyId": "trueanthem" + }, + "trueffect": { + "name": "TruEffect", + "categoryId": 4, + "url": "http://www.trueffect.com/", + "companyId": "trueffect" + }, + "truehits.net": { + "name": "Truehits.net", + "categoryId": 6, + "url": "http://truehits.net/", + "companyId": "truehits.net" + }, + "trumba": { + "name": "Trumba", + "categoryId": 4, + "url": "http://www.trumba.com", + "companyId": "trumba" + }, + "truoptik": { + "name": "Tru Optik", + "categoryId": 6, + "url": "http://truoptik.com/", + "companyId": null + }, + "trustarc": { + "name": "TrustArc", + "categoryId": 5, + "url": "http://www.trustarc.com/", + "companyId": "trustarc" + }, + "truste_consent": { + "name": "Truste Consent", + "categoryId": 5, + "url": "http://www.trustarc.com/", + "companyId": "trustarc" + }, + "truste_notice": { + "name": "TRUSTe Notice", + "categoryId": 5, + "url": "http://www.truste.com/", + "companyId": "trustarc" + }, + "truste_seal": { + "name": "TRUSTe Seal", + "categoryId": 5, + "url": "http://www.truste.com/", + "companyId": "trustarc" + }, + "trusted_shops": { + "name": "Trusted Shops", + "categoryId": 5, + "url": "http://www.trustedshops.com/", + "companyId": "trusted_shops" + }, + "trustev": { + "name": "Trustev", + "categoryId": 6, + "url": "http://www.trustev.com/", + "companyId": "trustev" + }, + "trustlogo": { + "name": "TrustLogo", + "categoryId": 5, + "url": "http://www.comodo.com/", + "companyId": "comodo" + }, + "trustpilot": { + "name": "Trustpilot", + "categoryId": 2, + "url": "http://www.trustpilot.com", + "companyId": "trustpilot" + }, + "trustwave.com": { + "name": "Trustwave", + "categoryId": 8, + "url": "https://www.trustwave.com/home/", + "companyId": null + }, + "tubecorporate": { + "name": "Tube Corporate", + "categoryId": 3, + "url": "https://tubecorporate.com/", + "companyId": null + }, + "tubecup.org": { + "name": "tubecup.org", + "categoryId": 3, + "url": null, + "companyId": null + }, + "tubemogul": { + "name": "TubeMogul", + "categoryId": 4, + "url": "http://tubemogul.com/", + "companyId": "tubemogul" + }, + "tumblr_analytics": { + "name": "Tumblr Analytics", + "categoryId": 6, + "url": "https://www.verizon.com/", + "companyId": "verizon" + }, + "tumblr_buttons": { + "name": "Tumblr Buttons", + "categoryId": 7, + "url": "http://www.tumblr.com/", + "companyId": "verizon" + }, + "tumblr_dashboard": { + "name": "Tumblr Dashboard", + "categoryId": 7, + "url": "http://www.tumblr.com/", + "companyId": "verizon" + }, + "tune_in": { + "name": "Tune In", + "categoryId": 0, + "url": "http://tunein.com/", + "companyId": "tunein" + }, + "turbo": { + "name": "Turbo", + "categoryId": 4, + "url": "http://www.turboadv.com/", + "companyId": "turbo" + }, + "turn_inc.": { + "name": "Turn Inc.", + "categoryId": 4, + "url": "https://www.amobee.com/company/", + "companyId": "singtel" + }, + "turner": { + "name": "Warner Media", + "categoryId": 6, + "url": "https://www.warnermedia.com/", + "companyId": "turner" + }, + "turnsocial": { + "name": "TurnSocial", + "categoryId": 7, + "url": "http://turnsocial.com/", + "companyId": "turnsocial" + }, + "turnto": { + "name": "TurnTo", + "categoryId": 2, + "url": "http://www.turntonetworks.com/", + "companyId": "turnto_networks" + }, + "tvsquared.com": { + "name": "TVSquared", + "categoryId": 4, + "url": "http://tvsquared.com/", + "companyId": "tvsquared" + }, + "tweetboard": { + "name": "Tweetboard", + "categoryId": 7, + "url": "http://tweetboard.com/alpha/", + "companyId": "tweetboard" + }, + "tweetmeme": { + "name": "TweetMeme", + "categoryId": 7, + "url": "http://tweetmeme.com/", + "companyId": "tweetmeme" + }, + "twenga": { + "name": "Twenga Solutions", + "categoryId": 4, + "url": "https://www.twenga-solutions.com/", + "companyId": null + }, + "twiago": { + "name": "Twiago", + "categoryId": 4, + "url": "https://www.twiago.com/", + "companyId": "twiago" + }, + "twine": { + "name": "Twine", + "categoryId": 6, + "url": "http://twinedigital.com/", + "companyId": "twine_digital" + }, + "twitch.tv": { + "name": "Twitch", + "categoryId": 0, + "url": "https://www.twitch.tv/", + "companyId": "amazon_associates" + }, + "twitch_cdn": { + "name": "Twitch CDN", + "categoryId": 0, + "url": "https://www.twitch.tv/", + "companyId": "amazon_associates" + }, + "twitter": { + "name": "X (formerly Twitter)", + "categoryId": 7, + "url": "https://twitter.com", + "companyId": "twitter", + "source": "AdGuard" + }, + "twitter_ads": { + "name": "Twitter Advertising", + "categoryId": 4, + "url": "http://twitter.com/widgets", + "companyId": "twitter" + }, + "twitter_analytics": { + "name": "Twitter Analytics", + "categoryId": 6, + "url": "https://twitter.com", + "companyId": "twitter" + }, + "twitter_badge": { + "name": "Twitter Badge", + "categoryId": 7, + "url": "http://twitter.com/widgets", + "companyId": "twitter" + }, + "twitter_button": { + "name": "Twitter Button", + "categoryId": 7, + "url": "http://twitter.com", + "companyId": "twitter" + }, + "twitter_conversion_tracking": { + "name": "Twitter Conversion Tracking", + "categoryId": 4, + "url": "https://twitter.com/", + "companyId": "twitter" + }, + "twitter_for_business": { + "name": "Twitter for Business", + "categoryId": 4, + "url": "https://business.twitter.com/", + "companyId": "twitter" + }, + "twitter_syndication": { + "name": "Twitter Syndication", + "categoryId": 7, + "url": "https://twitter.com", + "companyId": "twitter" + }, + "twittercounter": { + "name": "TwitterCounter", + "categoryId": 6, + "url": "http://twittercounter.com/", + "companyId": "twitter_counter" + }, + "twyn": { + "name": "Twyn", + "categoryId": 4, + "url": "http://www.twyn.com", + "companyId": "twyn" + }, + "txxx.com": { + "name": "txxx.com", + "categoryId": 8, + "url": "https://txxx.com", + "companyId": null + }, + "tynt": { + "name": "33Across", + "categoryId": 4, + "url": "http://www.tynt.com/", + "companyId": "33across" + }, + "typeform": { + "name": "Typeform", + "categoryId": 2, + "url": "https://www.typeform.com/", + "companyId": null + }, + "typepad_stats": { + "name": "Typepad Stats", + "categoryId": 6, + "url": "http://www.typepad.com/features/statistics.ht", + "companyId": "typepad" + }, + "typography.com": { + "name": "Webfonts by Hoefler&Co", + "categoryId": 9, + "url": "https://www.typography.com/", + "companyId": null + }, + "tyroo": { + "name": "Tyroo", + "categoryId": 7, + "url": "http://www.tyroo.com/", + "companyId": "tyroo" + }, + "tzetze": { + "name": "TzeTze", + "categoryId": 2, + "url": "http://www.tzetze.it/", + "companyId": "tzetze" + }, + "ubersetzung-app.com": { + "name": "ubersetzung-app.com", + "categoryId": 12, + "url": "https://www.ubersetzung-app.com/", + "companyId": null + }, + "ubuntu": { + "name": "Ubuntu", + "categoryId": 8, + "url": "https://ubuntu.com/", + "companyId": "canonical", + "source": "AdGuard" + }, + "ucfunnel": { + "name": "ucfunnel", + "categoryId": 4, + "url": "https://www.ucfunnel.com/", + "companyId": "ucfunnel" + }, + "ucoz": { + "name": "uCoz", + "categoryId": 6, + "url": "http://www.ucoz.net/", + "companyId": "ucoz" + }, + "uliza": { + "name": "Uliza", + "categoryId": 4, + "url": "http://uliza.jp/index.html", + "companyId": "uliza" + }, + "umbel": { + "name": "Umbel", + "categoryId": 6, + "url": "http://umbel.com", + "companyId": "umbel" + }, + "umebiggestern.club": { + "name": "umebiggestern.club", + "categoryId": 11, + "url": null, + "companyId": null + }, + "unanimis": { + "name": "Unanimis", + "categoryId": 4, + "url": "http://www.unanimis.co.uk/", + "companyId": "switch_concepts" + }, + "unbounce": { + "name": "Unbounce", + "categoryId": 6, + "url": "http://unbounce.com/", + "companyId": "unbounce" + }, + "unbxd": { + "name": "UNBXD", + "categoryId": 6, + "url": "http://unbxd.com/", + "companyId": "unbxd" + }, + "under-box.com": { + "name": "under-box.com", + "categoryId": 12, + "url": null, + "companyId": null + }, + "undercomputer.com": { + "name": "undercomputer.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "underdog_media": { + "name": "Underdog Media", + "categoryId": 4, + "url": "http://www.underdogmedia.com", + "companyId": "underdog_media" + }, + "undertone": { + "name": "Undertone", + "categoryId": 4, + "url": "https://www.undertone.com/", + "companyId": "perion" + }, + "unica": { + "name": "Unica", + "categoryId": 2, + "url": "http://www.unica.com/", + "companyId": "ibm" + }, + "unister": { + "name": "Unister", + "categoryId": 6, + "url": "http://www.unister.de/", + "companyId": "unister" + }, + "unite": { + "name": "Unite", + "categoryId": 4, + "url": "http://unite.me/#", + "companyId": "unite" + }, + "united_digital_group": { + "name": "United Digital Group", + "categoryId": 4, + "url": "https://www.udg.de/", + "companyId": "united_digital_group" + }, + "united_internet_media_gmbh": { + "name": "United Internet Media GmbH", + "categoryId": 4, + "url": "https://www.united-internet.de/", + "companyId": "united_internet" + }, + "unity": { + "name": "Unity", + "categoryId": 8, + "url": "https://unity.com/", + "companyId": "unity", + "source": "AdGuard" + }, + "unity_ads": { + "name": "Unity Ads", + "categoryId": 4, + "url": "https://unity.com/products/unity-ads", + "companyId": "unity", + "source": "AdGuard" + }, + "univide": { + "name": "Univide", + "categoryId": 4, + "url": "http://www.oracle.com/", + "companyId": "oracle" + }, + "unpkg.com": { + "name": "unpkg", + "categoryId": 9, + "url": "https://unpkg.com/#/", + "companyId": null + }, + "unruly_media": { + "name": "Unruly Media", + "categoryId": 4, + "url": "http://www.unrulymedia.com/", + "companyId": "unruly" + }, + "untriel_finger_printing": { + "name": "Untriel Finger Printing", + "categoryId": 6, + "url": "https://www.untriel.nl/", + "companyId": "untriel" + }, + "upland_clickability_beacon": { + "name": "Upland Clickability Beacon", + "categoryId": 4, + "url": "http://www.clickability.com/", + "companyId": "upland_software" + }, + "uppr.de": { + "name": "uppr GmbH", + "categoryId": 4, + "url": "https://uppr.de/", + "companyId": null + }, + "upravel.com": { + "name": "upravel.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "upsellit": { + "name": "UpSellit", + "categoryId": 2, + "url": "http://www.upsellit.com", + "companyId": "upsellit" + }, + "upsight": { + "name": "Upsight", + "categoryId": 6, + "url": "http://www.upsight.com/", + "companyId": "upsight" + }, + "uptain": { + "name": "Uptain", + "categoryId": 6, + "url": "http://www.uptain.de/en/regaining-lost-customers/", + "companyId": "uptain" + }, + "uptolike.com": { + "name": "Uptolike", + "categoryId": 7, + "url": "https://www.uptolike.com/", + "companyId": "uptolike" + }, + "uptrends": { + "name": "Uptrends", + "categoryId": 6, + "url": "http://www.uptrends.com/", + "companyId": "uptrends" + }, + "urban-media.com": { + "name": "Urban Media GmbH", + "categoryId": 4, + "url": "https://www.urban-media.com/", + "companyId": null + }, + "urban_airship": { + "name": "Urban Airship", + "categoryId": 6, + "url": "https://www.urbanairship.com/", + "companyId": "urban_airship" + }, + "usability_tools": { + "name": "Usability Tools", + "categoryId": 6, + "url": "http://usabilitytools.com/", + "companyId": "usability_tools" + }, + "usabilla": { + "name": "Usabilla", + "categoryId": 2, + "url": "https://usabilla.com/", + "companyId": "usabilla" + }, + "usemax": { + "name": "Usemax", + "categoryId": 4, + "url": "http://www.usemax.de", + "companyId": "usemax" + }, + "usemessages.com": { + "name": "usemessages.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "usercycle": { + "name": "USERcycle", + "categoryId": 6, + "url": "http://usercycle.com/", + "companyId": "usercycle" + }, + "userdive": { + "name": "USERDIVE", + "categoryId": 6, + "url": "http://userdive.com/", + "companyId": "userdive" + }, + "userecho": { + "name": "UserEcho", + "categoryId": 2, + "url": "http://userecho.com", + "companyId": "userecho" + }, + "userlike.com": { + "name": "Userlike", + "categoryId": 2, + "url": "https://www.userlike.com/", + "companyId": "userlike" + }, + "userpulse": { + "name": "UserPulse", + "categoryId": 2, + "url": "http://www.userpulse.com/", + "companyId": "userpulse" + }, + "userreplay": { + "name": "UserReplay", + "categoryId": 6, + "url": "https://www.userreplay.com/", + "companyId": "userreplay" + }, + "userreport": { + "name": "UserReport", + "categoryId": 2, + "url": "http://www.userreport.com/", + "companyId": "userreport" + }, + "userrules": { + "name": "UserRules", + "categoryId": 2, + "url": "http://www.userrules.com/", + "companyId": "userrules_software" + }, + "usersnap": { + "name": "Usersnap", + "categoryId": 2, + "url": "http://usersnap.com/", + "companyId": "usersnap" + }, + "uservoice": { + "name": "UserVoice", + "categoryId": 2, + "url": "http://uservoice.com/", + "companyId": "uservoice" + }, + "userzoom.com": { + "name": "UserZoom", + "categoryId": 2, + "url": "https://www.userzoom.com/", + "companyId": "userzoom" + }, + "usocial": { + "name": "Usocial", + "categoryId": 7, + "url": "https://usocial.pro/en", + "companyId": "usocial" + }, + "utarget": { + "name": "uTarget", + "categoryId": 4, + "url": "http://utarget.ru/", + "companyId": "utarget" + }, + "uuidksinc.net": { + "name": "uuidksinc.net", + "categoryId": 11, + "url": null, + "companyId": null + }, + "v12_group": { + "name": "V12 Group", + "categoryId": 6, + "url": null, + "companyId": null + }, + "vacaneedasap.com": { + "name": "vacaneedasap.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "valassis": { + "name": "Valassis", + "categoryId": 4, + "url": "http://www.brand.net/", + "companyId": "valassis" + }, + "validclick": { + "name": "ValidClick", + "categoryId": 4, + "url": "http://inuvo.com/", + "companyId": "inuvo" + }, + "valiton": { + "name": "Valiton", + "categoryId": 4, + "url": "https://www.valiton.com/", + "companyId": "hubert_burda_media" + }, + "valueclick_media": { + "name": "ValueClick Media", + "categoryId": 4, + "url": "https://www.conversantmedia.eu/", + "companyId": "conversant" + }, + "valuecommerce": { + "name": "ValueCommerce", + "categoryId": 4, + "url": "https://www.valuecommerce.ne.jp", + "companyId": "valuecommerce" + }, + "valued_opinions": { + "name": "Valued Opinions", + "categoryId": 4, + "url": "http://valuedopinions.com", + "companyId": "valued_opinions" + }, + "vanksen": { + "name": "Vanksen", + "categoryId": 4, + "url": "http://www.buzzparadise.com/", + "companyId": "vanksen" + }, + "varick_media_management": { + "name": "Varick Media Management", + "categoryId": 4, + "url": "http://www.varickmm.com/", + "companyId": "varick_media_management" + }, + "vcita": { + "name": "Vcita", + "categoryId": 6, + "url": "https://www.vcita.com/", + "companyId": "vcita" + }, + "vcommission": { + "name": "vCommission", + "categoryId": 4, + "url": "http://www.vcommission.com/", + "companyId": "vcommission" + }, + "vdopia": { + "name": "Vdopia", + "categoryId": 4, + "url": "http://mobile.vdopia.com/", + "companyId": "vdopia" + }, + "ve_interactive": { + "name": "Ve Interactive", + "categoryId": 4, + "url": "https://www.veinteractive.com", + "companyId": "ve_interactive" + }, + "vee24": { + "name": "VEE24", + "categoryId": 0, + "url": "https://www.vee24.com/", + "companyId": "vee24" + }, + "velocecdn.com": { + "name": "velocecdn.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "velti_mgage_visualize": { + "name": "Velti mGage Visualize", + "categoryId": 4, + "url": "http://www.velti.com/", + "companyId": "velti" + }, + "vendemore": { + "name": "Vendemore", + "categoryId": 1, + "url": "https://vendemore.com/", + "companyId": "ratos" + }, + "venturead.com": { + "name": "venturead.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "venyoo": { + "name": "Venyoo", + "categoryId": 2, + "url": "http://venyoo.ru/", + "companyId": "venyoo" + }, + "veoxa": { + "name": "Veoxa", + "categoryId": 4, + "url": "http://www.veoxa.com/", + "companyId": "veoxa" + }, + "vergic.com": { + "name": "Vergic", + "categoryId": 1, + "url": "https://www.vergic.com/", + "companyId": null + }, + "vero": { + "name": "Vero", + "categoryId": 4, + "url": "http://www.getvero.com/", + "companyId": "vero" + }, + "vertical_acuity": { + "name": "Vertical Acuity", + "categoryId": 4, + "url": "http://www.verticalacuity.com/", + "companyId": "outbrain" + }, + "vertical_leap": { + "name": "Vertical Leap", + "categoryId": 4, + "url": "http://www.vertical-leap.co.uk/", + "companyId": "vertical_leap" + }, + "verticalresponse": { + "name": "VerticalResponse", + "categoryId": 4, + "url": "http://www.verticalresponse.com", + "companyId": "verticalresponse" + }, + "verticalscope": { + "name": "VerticalScope", + "categoryId": 4, + "url": "http://www.verticalscope.com", + "companyId": "verticalscope" + }, + "vertoz": { + "name": "Vertoz", + "categoryId": 4, + "url": "http://www.vertoz.com/", + "companyId": "vertoz" + }, + "veruta": { + "name": "Veruta", + "categoryId": 4, + "url": "http://www.veruta.com/", + "companyId": "veruta" + }, + "verve_mobile": { + "name": "Verve Mobile", + "categoryId": 4, + "url": "http://www.vervemobile.com/", + "companyId": "verve_mobile" + }, + "vg_wort": { + "name": "VG Wort", + "categoryId": 6, + "url": "https://tom.vgwort.de/portal/showHelp", + "companyId": "vg_wort" + }, + "vi": { + "name": "Vi", + "categoryId": 4, + "url": "http://www.vi.ru/", + "companyId": "vi" + }, + "viacom_tag_container": { + "name": "Viacom Tag Container", + "categoryId": 4, + "url": "http://www.viacom.com/", + "companyId": "viacom" + }, + "viafoura": { + "name": "Viafoura", + "categoryId": 4, + "url": "http://www.viafoura.com/", + "companyId": "viafoura" + }, + "vibrant_ads": { + "name": "Vibrant Ads", + "categoryId": 4, + "url": "http://www.vibrantmedia.com/", + "companyId": "vibrant_media" + }, + "vicomi.com": { + "name": "Vicomi", + "categoryId": 6, + "url": "http://www.vicomi.com/", + "companyId": "vicomi" + }, + "vidazoo.com": { + "name": "Vidazoo", + "categoryId": 4, + "url": "https://www.vidazoo.com/", + "companyId": null + }, + "video_desk": { + "name": "Video Desk", + "categoryId": 0, + "url": "https://www.videodesk.com/", + "companyId": "video_desk" + }, + "video_potok": { + "name": "Video Potok", + "categoryId": 0, + "url": "http://videopotok.pro/", + "companyId": "videopotok" + }, + "videoadex.com": { + "name": "VideoAdX", + "categoryId": 4, + "url": "https://www.videoadex.com/", + "companyId": "digiteka" + }, + "videology": { + "name": "Videology", + "categoryId": 4, + "url": "https://videologygroup.com/", + "companyId": "singtel" + }, + "videonow": { + "name": "VideoNow", + "categoryId": 4, + "url": "https://videonow.ru/", + "companyId": "videonow" + }, + "videoplayerhub.com": { + "name": "videoplayerhub.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "videoplaza": { + "name": "Videoplaza", + "categoryId": 4, + "url": "http://www.videoplaza.com/", + "companyId": "videoplaza" + }, + "videostep": { + "name": "VideoStep", + "categoryId": 4, + "url": "https://www.videostep.com/", + "companyId": "videostep" + }, + "vidgyor": { + "name": "Vidgyor", + "categoryId": 0, + "url": "http://vidgyor.com/", + "companyId": "vidgyor" + }, + "vidible": { + "name": "Vidible", + "categoryId": 4, + "url": "http://vidible.tv/", + "companyId": "verizon" + }, + "vidora": { + "name": "Vidora", + "categoryId": 0, + "url": "https://www.vidora.com/", + "companyId": "vidora" + }, + "vietad": { + "name": "VietAd", + "categoryId": 4, + "url": "http://vietad.vn/", + "companyId": "vietad" + }, + "viglink": { + "name": "VigLink", + "categoryId": 4, + "url": "http://www.viglink.com", + "companyId": "viglink" + }, + "vigo": { + "name": "Vigo", + "categoryId": 6, + "url": "https://vigo.one/", + "companyId": "vigo" + }, + "vimeo": { + "name": "Vimeo", + "categoryId": 0, + "url": "http://vimeo.com/", + "companyId": "vimeo" + }, + "vindico_group": { + "name": "Vindico Group", + "categoryId": 4, + "url": "http://www.vindicogroup.com/", + "companyId": "vindico_group" + }, + "vinted": { + "name": "Vinted", + "categoryId": 8, + "url": "https://www.vinted.com/", + "companyId": null + }, + "viral_ad_network": { + "name": "Viral Ad Network", + "categoryId": 4, + "url": "http://viraladnetwork.joinvan.com/", + "companyId": "viral_ad_network" + }, + "viral_loops": { + "name": "Viral Loops", + "categoryId": 2, + "url": "https://viral-loops.com/", + "companyId": "viral-loops" + }, + "viralgains": { + "name": "ViralGains", + "categoryId": 4, + "url": "https://www.viralgains.com/", + "companyId": null + }, + "viralmint": { + "name": "ViralMint", + "categoryId": 7, + "url": "http://www.viralmint.com", + "companyId": "viralmint" + }, + "virgul": { + "name": "Virgul", + "categoryId": 4, + "url": "http://www.virgul.com/", + "companyId": "virgul" + }, + "virool_player": { + "name": "Virool Player", + "categoryId": 4, + "url": "https://www.virool.com/", + "companyId": "virool" + }, + "virtusize": { + "name": "Virtusize", + "categoryId": 5, + "url": "http://www.virtusize.com/", + "companyId": "virtusize" + }, + "visible_measures": { + "name": "Visible Measures", + "categoryId": 4, + "url": "http://www.visiblemeasures.com/", + "companyId": "visible_measures" + }, + "vision_critical": { + "name": "Vision Critical", + "categoryId": 6, + "url": "http://visioncritical.com/", + "companyId": "vision_critical" + }, + "visit_streamer": { + "name": "Visit Streamer", + "categoryId": 6, + "url": "http://www.visitstreamer.com/", + "companyId": "visit_streamer" + }, + "visitortrack": { + "name": "VisitorTrack", + "categoryId": 4, + "url": "http://www.netfactor.com/", + "companyId": "netfactor" + }, + "visitorville": { + "name": "VisitorVille", + "categoryId": 6, + "url": "http://www.visitorville.com", + "companyId": "visitorville" + }, + "visscore": { + "name": "VisScore", + "categoryId": 4, + "url": "http://withcubed.com/", + "companyId": "cubed_attribution" + }, + "visual_iq": { + "name": "Visual IQ", + "categoryId": 6, + "url": "http://visualiq.com/", + "companyId": "visualiq" + }, + "visual_revenue": { + "name": "Visual Revenue", + "categoryId": 6, + "url": "http://visualrevenue.com/", + "companyId": "outbrain" + }, + "visual_website_optimizer": { + "name": "VWO", + "categoryId": 6, + "url": "https://vwo.com/", + "companyId": "wingify" + }, + "visualdna": { + "name": "VisualDNA", + "categoryId": 4, + "url": "http://www.visualdna.com/", + "companyId": "nielsen" + }, + "visualstudio.com": { + "name": "Visualstudio.com", + "categoryId": 8, + "url": "https://www.visualstudio.com/", + "companyId": "microsoft" + }, + "visualvisitor": { + "name": "VisualVisitor", + "categoryId": 6, + "url": "http://www.visualvisitor.com/", + "companyId": "visualvisitor" + }, + "vivalu": { + "name": "VIVALU", + "categoryId": 4, + "url": "https://www.vivalu.com/", + "companyId": "vivalu" + }, + "vivistats": { + "name": "ViviStats", + "categoryId": 6, + "url": "http://en.vivistats.com/", + "companyId": "vivistats" + }, + "vizury": { + "name": "Vizury", + "categoryId": 4, + "url": "http://www.vizury.com/website/", + "companyId": "vizury" + }, + "vizzit": { + "name": "Vizzit", + "categoryId": 4, + "url": "http://www.vizzit.se/h/en/", + "companyId": "vizzit" + }, + "vk.com": { + "name": "Vk.com", + "categoryId": 7, + "url": "https://vk.com/", + "companyId": "vk", + "source": "AdGuard" + }, + "vkontakte": { + "name": "VKontakte", + "categoryId": 7, + "url": "https://vk.com/", + "companyId": "vk", + "source": "AdGuard" + }, + "vkontakte_widgets": { + "name": "VKontakte Widgets", + "categoryId": 7, + "url": "https://dev.vk.com/", + "companyId": "vk", + "source": "AdGuard" + }, + "vntsm.com": { + "name": "Venatus Media", + "categoryId": 4, + "url": "https://www.venatusmedia.com/", + "companyId": "venatus" + }, + "vodafone.de": { + "name": "vodafone.de", + "categoryId": 8, + "url": null, + "companyId": null + }, + "voicefive": { + "name": "VoiceFive", + "categoryId": 6, + "url": "https://www.voicefive.com", + "companyId": "comscore" + }, + "volusion_chat": { + "name": "Volusion Chat", + "categoryId": 2, + "url": "https://www.volusion.com/", + "companyId": "volusion" + }, + "voluum": { + "name": "Voluum", + "categoryId": 4, + "url": "https://voluum.com/", + "companyId": "codewise" + }, + "vooxe.com": { + "name": "vooxe.com", + "categoryId": 8, + "url": "http://www.vooxe.com/", + "companyId": null + }, + "vorwerk.de": { + "name": "vorwerk.de", + "categoryId": 8, + "url": "https://corporate.vorwerk.de/home/", + "companyId": null + }, + "vox": { + "name": "Vox", + "categoryId": 2, + "url": "https://www.voxmedia.com/", + "companyId": "vox" + }, + "voxus": { + "name": "Voxus", + "categoryId": 4, + "url": "http://www.voxus.tv/", + "companyId": "voxus" + }, + "vpon": { + "name": "VPON", + "categoryId": 4, + "url": "http://www.vpon.com/en/", + "companyId": "vpon" + }, + "vpscash": { + "name": "VPSCash", + "categoryId": 4, + "url": "http://vpscash.nl/home", + "companyId": "vps_cash" + }, + "vs": { + "name": "Visual Studio", + "categoryId": 8, + "url": "https://visualstudio.microsoft.com", + "companyId": "microsoft", + "source": "AdGuard" + }, + "vscode": { + "name": "Visual Studio Code", + "categoryId": 8, + "url": "https://code.visualstudio.com/", + "companyId": "microsoft", + "source": "AdGuard" + }, + "vtracy.de": { + "name": "vtracy.de", + "categoryId": 11, + "url": null, + "companyId": null + }, + "vungle": { + "name": "Vungle", + "categoryId": 4, + "url": "https://vungle.com/", + "companyId": "blackstone", + "source": "AdGuard" + }, + "vuukle": { + "name": "Vuukle", + "categoryId": 6, + "url": "http://vuukle.com/", + "companyId": "vuukle" + }, + "vzaar": { + "name": "Vzaar", + "categoryId": 0, + "url": "http://vzaar.com/", + "companyId": "vzaar" + }, + "w3counter": { + "name": "W3Counter", + "categoryId": 6, + "url": "http://www.w3counter.com/", + "companyId": "awio_web_services" + }, + "w3roi": { + "name": "w3roi", + "categoryId": 6, + "url": "http://www.w3roi.com/", + "companyId": "w3roi" + }, + "wahoha": { + "name": "Wahoha", + "categoryId": 2, + "url": "http://wahoha.com/", + "companyId": "wahoha" + }, + "walkme.com": { + "name": "WalkMe", + "categoryId": 2, + "url": "https://www.walkme.com/", + "companyId": "walkme" + }, + "wall_street_on_demand": { + "name": "Wall Street on Demand", + "categoryId": 4, + "url": "http://www.wallst.com", + "companyId": "markit_on_demand" + }, + "walmart": { + "name": "Walmart", + "categoryId": 8, + "url": null, + "companyId": null + }, + "wamcash": { + "name": "Wamcash", + "categoryId": 3, + "url": "http://wamcash.com/", + "companyId": "wamcash" + }, + "wanelo": { + "name": "Wanelo", + "categoryId": 2, + "url": "https://wanelo.com/", + "companyId": "wanelo" + }, + "warp.ly": { + "name": "Warp.ly", + "categoryId": 6, + "url": "https://warp.ly/", + "companyId": "warp.ly" + }, + "way2traffic": { + "name": "Way2traffic", + "categoryId": 4, + "url": "http://www.way2traffic.com/", + "companyId": "way2traffic" + }, + "wayfair_com": { + "name": "Wayfair", + "categoryId": 8, + "url": "https://www.wayfair.com/", + "companyId": null + }, + "wdr.de": { + "name": "wdr.de", + "categoryId": 8, + "url": "https://www1.wdr.de/index.html", + "companyId": null + }, + "web-stat": { + "name": "Web-Stat", + "categoryId": 6, + "url": "http://www.web-stat.net/", + "companyId": "web-stat" + }, + "web.de": { + "name": "web.de", + "categoryId": 8, + "url": "https://web.de/", + "companyId": null + }, + "web.stat": { + "name": "Web.STAT", + "categoryId": 6, + "url": "http://webstat.net/", + "companyId": "web.stat" + }, + "web_service_award": { + "name": "Web Service Award", + "categoryId": 6, + "url": "http://webserviceaward.com/english/", + "companyId": "web_service_award" + }, + "web_traxs": { + "name": "Web Traxs", + "categoryId": 6, + "url": "http://websolutions.thomasnet.com/web-traxs-analytics.php", + "companyId": "thomasnet_websolutions" + }, + "web_wipe_analytics": { + "name": "Web Wipe Analytics", + "categoryId": 6, + "url": "http://tensquare.de", + "companyId": "tensquare" + }, + "webads": { + "name": "WebAds", + "categoryId": 4, + "url": "http://www.webads.co.uk/", + "companyId": "webads" + }, + "webantenna": { + "name": "WebAntenna", + "categoryId": 6, + "url": "http://www.bebit.co.jp/webantenna/", + "companyId": "webantenna" + }, + "webclicks24_com": { + "name": "webclicks24.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "webclose.net": { + "name": "webclose.net", + "categoryId": 12, + "url": null, + "companyId": null + }, + "webcollage": { + "name": "Webcollage", + "categoryId": 2, + "url": "http://www.webcollage.com/", + "companyId": "webcollage" + }, + "webedia": { + "name": "Webedia", + "categoryId": 4, + "url": "http://fr.webedia-group.com/", + "companyId": "fimalac_group" + }, + "webeffective": { + "name": "WebEffective", + "categoryId": 6, + "url": "http://www.keynote.com/", + "companyId": "keynote_systems" + }, + "webengage": { + "name": "WebEngage", + "categoryId": 2, + "url": "http://webengage.com/", + "companyId": "webengage" + }, + "webgains": { + "name": "Webgains", + "categoryId": 8, + "url": null, + "companyId": null + }, + "webgozar": { + "name": "WebGozar", + "categoryId": 6, + "url": "http://webgozar.com/", + "companyId": "webgozar" + }, + "webhelpje": { + "name": "Webhelpje", + "categoryId": 2, + "url": "http://www.webhelpje.nl/", + "companyId": "webhelpje" + }, + "webleads_tracker": { + "name": "Webleads Tracker", + "categoryId": 6, + "url": "http://www.webleads-tracker.fr/", + "companyId": "webleads_tracker" + }, + "webmecanik": { + "name": "Webmecanik", + "categoryId": 6, + "url": "http://www.webmecanik.com/en/", + "companyId": "webmecanik" + }, + "weborama": { + "name": "Weborama", + "categoryId": 4, + "url": "https://weborama.com/", + "companyId": "weborama" + }, + "webprospector": { + "name": "WebProspector", + "categoryId": 6, + "url": "http://www.webprospector.de/", + "companyId": "webprospector" + }, + "webstat": { + "name": "WebSTAT", + "categoryId": 6, + "url": "http://www.webstat.com/", + "companyId": "webstat" + }, + "webstat.se": { + "name": "Webstat.se", + "categoryId": 6, + "url": "http://www.webstat.se/", + "companyId": "webstat.se" + }, + "webtrack": { + "name": "webtrack", + "categoryId": 6, + "url": "http://www.webtrack.biz/", + "companyId": "webtrack" + }, + "webtraffic": { + "name": "Webtraffic", + "categoryId": 6, + "url": "http://www.webtraffic.se/", + "companyId": "schibsted_asa" + }, + "webtrekk": { + "name": "Webtrekk", + "categoryId": 6, + "url": "http://www.webtrekk.com/", + "companyId": "webtrekk" + }, + "webtrekk_cc": { + "name": "Webtrek Control Cookie", + "categoryId": 6, + "url": "https://www.webtrekk.com/en/home/", + "companyId": "webtrekk" + }, + "webtrends": { + "name": "Webtrends", + "categoryId": 6, + "url": "http://www.webtrends.com/", + "companyId": "webtrends" + }, + "webtrends_ads": { + "name": "Webtrends Ads", + "categoryId": 4, + "url": "http://www.webtrends.com", + "companyId": "webtrends" + }, + "webvisor": { + "name": "WebVisor", + "categoryId": 6, + "url": "http://webvisor.ru", + "companyId": "yandex" + }, + "wedcs": { + "name": "WEDCS", + "categoryId": 4, + "url": "https://www.microsoft.com/", + "companyId": "microsoft" + }, + "weebly_ads": { + "name": "Weebly Ads", + "categoryId": 4, + "url": "http://www.weebly.com", + "companyId": "weebly" + }, + "weibo_widget": { + "name": "Weibo Widget", + "categoryId": 4, + "url": "http://www.sina.com/", + "companyId": "sina" + }, + "westlotto_com": { + "name": "westlotto.com", + "categoryId": 8, + "url": "http://westlotto.com/", + "companyId": null + }, + "wetter_com": { + "name": "Wetter.com", + "categoryId": 8, + "url": "http://www.wetter.com/", + "companyId": null + }, + "whatbroadcast": { + "name": "Whatbroadcast", + "categoryId": 2, + "url": "https://www.whatsbroadcast.com/", + "companyId": "whatsbroadcast" + }, + "whatsapp": { + "name": "WhatsApp", + "categoryId": 8, + "url": "https://www.whatsapp.com/", + "companyId": "meta", + "source": "AdGuard" + }, + "whisper": { + "name": "Whisper", + "categoryId": 7, + "url": "https://whisper.sh/", + "companyId": "medialab", + "source": "AdGuard" + }, + "whos.amung.us": { + "name": "Whos.amung.us", + "categoryId": 6, + "url": "http://whos.amung.us/", + "companyId": "whos.amung.us" + }, + "whoson": { + "name": "WhosOn", + "categoryId": 6, + "url": "http://www.whoson.com/", + "companyId": "whoson" + }, + "wibbitz": { + "name": "Wibbitz", + "categoryId": 0, + "url": "http://www.wibbitz.com/", + "companyId": "wibbitz" + }, + "wibiya_toolbar": { + "name": "Wibiya Toolbar", + "categoryId": 7, + "url": "http://www.wibiya.com/", + "companyId": "wibiya" + }, + "widdit": { + "name": "Widdit", + "categoryId": 2, + "url": "http://www.predictad.com/", + "companyId": "widdit" + }, + "widerplanet": { + "name": "WiderPlanet", + "categoryId": 4, + "url": "http://widerplanet.com/", + "companyId": "wider_planet" + }, + "widespace": { + "name": "Widespace", + "categoryId": 4, + "url": "https://www.widespace.com/", + "companyId": "widespace" + }, + "widgetbox": { + "name": "WidgetBox", + "categoryId": 2, + "url": "http://www.widgetbox.com/", + "companyId": "widgetbox" + }, + "wiget_media": { + "name": "Wiget Media", + "categoryId": 4, + "url": "http://wigetmedia.com", + "companyId": "wiget_media" + }, + "wigzo": { + "name": "Wigzo", + "categoryId": 4, + "url": "https://www.wigzo.com/", + "companyId": "wigzo" + }, + "wikia-services.com": { + "name": "Wikia Services", + "categoryId": 8, + "url": "http://www.wikia.com/fandom", + "companyId": "wikia" + }, + "wikia_beacon": { + "name": "Wikia Beacon", + "categoryId": 6, + "url": "http://www.wikia.com/", + "companyId": "wikia" + }, + "wikia_cdn": { + "name": "Wikia CDN", + "categoryId": 9, + "url": "http://www.wikia.com/fandom", + "companyId": "wikia" + }, + "wikimedia.org": { + "name": "WikiMedia", + "categoryId": 9, + "url": "https://wikimediafoundation.org/", + "companyId": "wikimedia_foundation" + }, + "winaffiliates": { + "name": "Winaffiliates", + "categoryId": 6, + "url": "http://www.winaffiliates.com/", + "companyId": "winaffiliates" + }, + "windows_maps": { + "name": "Windows Maps", + "categoryId": 8, + "url": "https://www.microsoft.com/store/apps/9wzdncrdtbvb", + "companyId": "microsoft", + "source": "AdGuard" + }, + "windows_notifications": { + "name": "The Windows Push Notification Services", + "categoryId": 8, + "url": "https://learn.microsoft.com/en-us/windows/apps/design/shell/tiles-and-notifications/windows-push-notification-services--wns--overview", + "companyId": "microsoft", + "source": "AdGuard" + }, + "windows_time": { + "name": "Windows Time Service", + "categoryId": 8, + "url": "https://learn.microsoft.com/en-us/windows-server/networking/windows-time-service/how-the-windows-time-service-works", + "companyId": "microsoft", + "source": "AdGuard" + }, + "windowsupdate": { + "name": "Windows Update", + "categoryId": 9, + "url": "https://support.microsoft.com/en-us/windows/windows-update-faq-8a903416-6f45-0718-f5c7-375e92dddeb2", + "companyId": "microsoft", + "source": "AdGuard" + }, + "wipmania": { + "name": "WIPmania", + "categoryId": 6, + "url": "http://www.wipmania.com/", + "companyId": "wipmania" + }, + "wiqhit": { + "name": "WiQhit", + "categoryId": 6, + "url": "https://wiqhit.com/nl/", + "companyId": "wiqhit" + }, + "wirecard": { + "name": "Wirecard", + "categoryId": 2, + "url": "https://www.wirecard.com/", + "companyId": null + }, + "wiredminds": { + "name": "WiredMinds", + "categoryId": 6, + "url": "http://www.wiredminds.de/", + "companyId": "wiredminds" + }, + "wirtualna_polska": { + "name": "Wirtualna Polska", + "categoryId": 4, + "url": "http://reklama.wp.pl/", + "companyId": "wirtualna_polska" + }, + "wisepops": { + "name": "WisePops", + "categoryId": 4, + "url": "http://wisepops.com/", + "companyId": "wisepops" + }, + "wishpond": { + "name": "Wishpond", + "categoryId": 2, + "url": "http://wishpond.com", + "companyId": "wishpond" + }, + "wistia": { + "name": "Wistia", + "categoryId": 6, + "url": "http://wistia.com/", + "companyId": "wistia" + }, + "wix.com": { + "name": "Wix", + "categoryId": 8, + "url": "https://www.wix.com/", + "companyId": "wix" + }, + "wixab": { + "name": "Wixab", + "categoryId": 6, + "url": "http://wixab.com/en/", + "companyId": "wixab" + }, + "wixmp": { + "name": "Wix Media Platform", + "categoryId": 9, + "url": "https://www.wixmp.com/", + "companyId": "wix" + }, + "wnzmauurgol.com": { + "name": "wnzmauurgol.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "wonderpush": { + "name": "WonderPush", + "categoryId": 2, + "url": "https://www.wonderpush.com/", + "companyId": "wonderpush" + }, + "woopic.com": { + "name": "woopic.com", + "categoryId": 8, + "url": null, + "companyId": null + }, + "woopra": { + "name": "Woopra", + "categoryId": 6, + "url": "http://www.woopra.com/", + "companyId": "woopra" + }, + "wordpress_ads": { + "name": "Wordpress Ads", + "categoryId": 4, + "url": "https://wordpress.com/", + "companyId": "automattic" + }, + "wordpress_stats": { + "name": "WordPress Stats", + "categoryId": 6, + "url": "http://wordpress.org/extend/plugins/stats/", + "companyId": "automattic" + }, + "wordstream": { + "name": "WordStream", + "categoryId": 6, + "url": "http://www.wordstream.com/", + "companyId": "wordstream" + }, + "worldnaturenet_xyz": { + "name": "worldnaturenet.xyz", + "categoryId": 12, + "url": null, + "companyId": null + }, + "wp.pl": { + "name": "Wirtualna Polska ", + "categoryId": 4, + "url": "https://www.wp.pl/", + "companyId": "wp" + }, + "wp_engine": { + "name": "WP Engine", + "categoryId": 5, + "url": "https://wpengine.com/", + "companyId": "wp_engine" + }, + "writeup_clickanalyzer": { + "name": "WriteUp ClickAnalyzer", + "categoryId": 6, + "url": "http://www.writeup.co.jp/", + "companyId": "writeup" + }, + "wurfl": { + "name": "WURFL", + "categoryId": 6, + "url": "https://web.wurfl.io/", + "companyId": "scientiamobile" + }, + "wwwpromoter": { + "name": "WWWPromoter", + "categoryId": 4, + "url": "http://wwwpromoter.com/", + "companyId": "wwwpromoter" + }, + "wykop": { + "name": "Wykop", + "categoryId": 7, + "url": "http://www.wykop.pl", + "companyId": "wykop" + }, + "wysistat.com": { + "name": "WysiStat", + "categoryId": 6, + "url": "https://www.wysistat.net/", + "companyId": "wysistat" + }, + "wywy.com": { + "name": "wywy", + "categoryId": 4, + "url": "http://wywy.com/", + "companyId": "tvsquared" + }, + "x-lift": { + "name": "X-lift", + "categoryId": 4, + "url": "https://www.x-lift.jp/", + "companyId": "x-lift" + }, + "xapads": { + "name": "Xapads", + "categoryId": 4, + "url": "http://www.xapads.com/", + "companyId": "xapads" + }, + "xen-media.com": { + "name": "Xen Media", + "categoryId": 11, + "url": "https://www.xenmedia.net/", + "companyId": "xenmedia", + "source": "AdGuard" + }, + "xfreeservice.com": { + "name": "xfreeservice.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "xhamster": { + "name": "xHamster", + "categoryId": 3, + "url": "https://xhamster.com/", + "companyId": "xhamster", + "source": "AdGuard" + }, + "xiaomi": { + "name": "Xiaomi", + "categoryId": 8, + "url": "https://www.mi.com/", + "companyId": "xiaomi", + "source": "AdGuard" + }, + "xing": { + "name": "Xing", + "categoryId": 6, + "url": "http://www.xing.com/", + "companyId": "xing" + }, + "xmediaclicks": { + "name": "XmediaClicks", + "categoryId": 3, + "url": "http://exoclick.com/", + "companyId": "exoclick" + }, + "xnxx_cdn": { + "name": "XNXX", + "categoryId": 9, + "url": "https://www.xnxx.com", + "companyId": "xnxx", + "source": "AdGuard" + }, + "xplosion": { + "name": "xplosion", + "categoryId": 4, + "url": "http://www.xplosion.de/", + "companyId": "xplosion_interactive" + }, + "xtend": { + "name": "XTEND", + "categoryId": 4, + "url": "http://www.xtendmedia.com/", + "companyId": "matomy_media" + }, + "xvideos_com": { + "name": "Xvideos", + "categoryId": 8, + "url": "https://www.xvideos.com", + "companyId": "xvideos", + "source": "AdGuard" + }, + "xxxlshop.de": { + "name": "XXXLutz", + "categoryId": 8, + "url": "https://www.xxxlutz.de/", + "companyId": "xxxlutz", + "source": "AdGuard" + }, + "xxxlutz": { + "name": "XXXLutz", + "categoryId": 8, + "url": "https://www.xxxlutz.de/", + "companyId": "xxxlutz" + }, + "yabbi": { + "name": "Yabbi", + "categoryId": 4, + "url": "https://yabbi.me/", + "companyId": "yabbi", + "source": "AdGuard" + }, + "yabuka": { + "name": "Yabuka", + "categoryId": 4, + "url": "http://www.yabuka.com/", + "companyId": "yabuka" + }, + "yahoo": { + "name": "Yahoo!", + "categoryId": 6, + "url": "https://yahoo.com/", + "companyId": "apollo_global_management", + "source": "AdGuard" + }, + "yahoo_ad_exchange": { + "name": "Yahoo! Ad Exchange", + "categoryId": 4, + "url": "https://www.verizonmedia.com/advertising", + "companyId": "verizon" + }, + "yahoo_ad_manager": { + "name": "Yahoo! Ad Manager Plus", + "categoryId": 4, + "url": "https://developer.yahoo.com/analytics/", + "companyId": "verizon" + }, + "yahoo_advertising": { + "name": "Yahoo! Advertising", + "categoryId": 4, + "url": "https://www.advertising.yahooinc.com/", + "companyId": "apollo_global_management", + "source": "AdGuard" + }, + "yahoo_analytics": { + "name": "Yahoo! Analytics", + "categoryId": 6, + "url": "http://web.analytics.yahoo.com/", + "companyId": "verizon" + }, + "yahoo_commerce_central": { + "name": "Yahoo! Commerce Central", + "categoryId": 4, + "url": "http://lexity.com/", + "companyId": "verizon" + }, + "yahoo_dot_tag": { + "name": "Yahoo! DOT tag", + "categoryId": 4, + "url": "https://www.verizon.com/", + "companyId": "verizon" + }, + "yahoo_japan_retargeting": { + "name": "Yahoo! Japan Retargeting", + "categoryId": 4, + "url": "http://www.yahoo.com/", + "companyId": "yahoo_japan" + }, + "yahoo_overture": { + "name": "Yahoo! Overture", + "categoryId": 4, + "url": "http://searchmarketing.yahoo.com", + "companyId": "verizon" + }, + "yahoo_search": { + "name": "Yahoo! Search", + "categoryId": 4, + "url": "https://search.yahooinc.com/", + "companyId": "apollo_global_management", + "source": "AdGuard" + }, + "yahoo_small_business": { + "name": "Yahoo! Small Business", + "categoryId": 4, + "url": "http://www.pixazza.com/", + "companyId": "verizon" + }, + "yandex": { + "name": "Yandex", + "categoryId": 4, + "url": "https://www.yandex.com/", + "companyId": "yandex" + }, + "yandex.api": { + "name": "Yandex.API", + "categoryId": 2, + "url": "http://api.yandex.ru/", + "companyId": "yandex" + }, + "yandex_adexchange": { + "name": "Yandex AdExchange", + "categoryId": 4, + "url": "https://www.yandex.com/", + "companyId": "yandex" + }, + "yandex_advisor": { + "name": "Yandex.Advisor", + "categoryId": 12, + "url": "https://sovetnik.yandex.ru/", + "companyId": "yandex" + }, + "yandex_appmetrica": { + "name": "Yandex AppMetrica", + "categoryId": 101, + "url": "https://appmetrica.yandex.com/", + "companyId": "yandex", + "source": "AdGuard" + }, + "yandex_direct": { + "name": "Yandex.Direct", + "categoryId": 6, + "url": "https://direct.yandex.com/", + "companyId": "yandex" + }, + "yandex_metrika": { + "name": "Yandex Metrika", + "categoryId": 6, + "url": "https://metrica.yandex.com/", + "companyId": "yandex" + }, + "yandex_passport": { + "name": "Yandex Passport", + "categoryId": 2, + "url": "https://www.yandex.com/", + "companyId": "yandex" + }, + "yapfiles.ru": { + "name": "yapfiles.ru", + "categoryId": 8, + "url": "https://www.yapfiles.ru/", + "companyId": null + }, + "yashi": { + "name": "Yashi", + "categoryId": 4, + "url": "http://www.yashi.com/", + "companyId": "mass2" + }, + "ybrant_media": { + "name": "Ybrant Media", + "categoryId": 4, + "url": "http://www.addynamix.com/index.html", + "companyId": "ybrant_media" + }, + "ycontent": { + "name": "Ycontent", + "categoryId": 0, + "url": "http://ycontent.com.br/", + "companyId": "ycontent" + }, + "yektanet": { + "name": "Yektanet", + "categoryId": 4, + "url": "https://yektanet.com/", + "companyId": "yektanet" + }, + "yengo": { + "name": "Yengo", + "categoryId": 4, + "url": "http://www.yengo.com/", + "companyId": "yengo" + }, + "yesmail": { + "name": "Yesmail", + "categoryId": 4, + "url": "http://www.yesmail.com/", + "companyId": "yes_mail" + }, + "yesup_advertising": { + "name": "YesUp Advertising", + "categoryId": 4, + "url": "http://yesup.net/", + "companyId": "yesup" + }, + "yesware": { + "name": "Yesware", + "categoryId": 2, + "url": "http://www.yesware.com/", + "companyId": "yesware" + }, + "yieldbot": { + "name": "Yieldbot", + "categoryId": 6, + "url": "https://www.yieldbot.com/", + "companyId": "yieldbot" + }, + "yieldify": { + "name": "Yieldify", + "categoryId": 4, + "url": "http://www.yieldify.com/", + "companyId": "yieldify" + }, + "yieldlab": { + "name": "Yieldlab", + "categoryId": 4, + "url": "http://www.yieldlab.de/", + "companyId": "prosieben_sat1" + }, + "yieldlove": { + "name": "Yieldlove", + "categoryId": 4, + "url": "https://www.yieldlove.com/", + "companyId": "yieldlove" + }, + "yieldmo": { + "name": "Yieldmo", + "categoryId": 4, + "url": "https://www.yieldmo.com/", + "companyId": "yieldmo" + }, + "yieldr": { + "name": "Yieldr Ads", + "categoryId": 4, + "url": "https://www.yieldr.com/", + "companyId": "yieldr" + }, + "yieldr_air": { + "name": "Yieldr Air", + "categoryId": 6, + "url": "https://www.yieldr.com/", + "companyId": "yieldr" + }, + "yieldsquare": { + "name": "YieldSquare", + "categoryId": 4, + "url": "http://www.yieldsquare.com/", + "companyId": "yieldsquare" + }, + "yle": { + "name": "YLE", + "categoryId": 6, + "url": "http://yle.fi/", + "companyId": "yle" + }, + "yllixmedia": { + "name": "YllixMedia", + "categoryId": 4, + "url": "http://yllix.com/", + "companyId": "yllixmedia" + }, + "ymetrica1.com": { + "name": "ymetrica1.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "ymzrrizntbhde.com": { + "name": "ymzrrizntbhde.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "yo_button": { + "name": "Yo Button", + "categoryId": 2, + "url": "http://www.justyo.co/", + "companyId": "yo" + }, + "yodle": { + "name": "Yodle", + "categoryId": 4, + "url": "http://www.yodle.com/", + "companyId": "yodle" + }, + "yola_analytics": { + "name": "Yola Analytics", + "categoryId": 6, + "url": "https://www.yola.com/", + "companyId": "yola" + }, + "yomedia": { + "name": "Yomedia", + "categoryId": 4, + "url": "http://www.pinetech.vn/", + "companyId": "yomedia" + }, + "yoochoose.net": { + "name": "Ibexa Personalizaton Software", + "categoryId": 4, + "url": "https://yoochoose.net/", + "companyId": "ibexa", + "source": "AdGuard" + }, + "yotpo": { + "name": "Yotpo", + "categoryId": 1, + "url": "https://www.yotpo.com/", + "companyId": "yotpo" + }, + "yottaa": { + "name": "Yottaa", + "categoryId": 6, + "url": "https://www.yottaa.com/", + "companyId": "yottaa" + }, + "yottly": { + "name": "Yottly", + "categoryId": 4, + "url": "https://yottly.com/", + "companyId": "yottly" + }, + "youcanbookme": { + "name": "YouCanBookMe", + "categoryId": 2, + "url": "https://youcanbook.me/", + "companyId": "youcanbookme" + }, + "youku": { + "name": "Youku", + "categoryId": 0, + "url": "http://www.youku.com/", + "companyId": "youku" + }, + "youporn": { + "name": "YouPorn", + "categoryId": 3, + "url": "https://www.youporn.com/", + "companyId": "youporn", + "source": "AdGuard" + }, + "youtube": { + "name": "YouTube", + "categoryId": 0, + "url": "https://www.youtube.com/", + "companyId": "google" + }, + "youtube_subscription": { + "name": "YouTube Subscription", + "categoryId": 2, + "url": "http://www.youtube.com/", + "companyId": "google" + }, + "yp": { + "name": "YellowPages", + "categoryId": 4, + "url": "https://www.yellowpages.com/", + "companyId": "thryv" + }, + "ysance": { + "name": "YSance", + "categoryId": 4, + "url": "http://www.ysance.com/en/index.html", + "companyId": "ysance" + }, + "yume": { + "name": "YuMe", + "categoryId": 4, + "url": "http://www.yume.com/", + "companyId": "yume" + }, + "yume,_inc.": { + "name": "YuMe, Inc.", + "categoryId": 4, + "url": "http://www.yume.com/", + "companyId": "yume" + }, + "yusp": { + "name": "Yusp", + "categoryId": 6, + "url": "https://www.yusp.com/", + "companyId": "yusp" + }, + "zadarma": { + "name": "Zadarma", + "categoryId": 2, + "url": "https://zadarma.com/", + "companyId": "zadarma" + }, + "zalando_de": { + "name": "zalando.de", + "categoryId": 8, + "url": "https://zalando.de/", + "companyId": "zalando" + }, + "zalo": { + "name": "Zalo", + "categoryId": 2, + "url": "https://zaloapp.com/", + "companyId": "zalo" + }, + "zanox": { + "name": "Zanox", + "categoryId": 4, + "url": "http://www.zanox.com/us/", + "companyId": "axel_springer" + }, + "zaparena": { + "name": "zaparena", + "categoryId": 4, + "url": "http://www.zaparena.com/", + "companyId": "zapunited" + }, + "zappos": { + "name": "Zappos", + "categoryId": 4, + "url": "http://www.zappos.com/", + "companyId": "zappos" + }, + "zdassets.com": { + "name": "Zendesk CDN", + "categoryId": 8, + "url": "http://www.zendesk.com/", + "companyId": "zendesk" + }, + "zebestof.com": { + "name": "Zebestof", + "categoryId": 4, + "url": "http://www.zebestof.com/en/home/", + "companyId": "zebestof" + }, + "zedo": { + "name": "Zedo", + "categoryId": 4, + "url": "http://www.zedo.com/", + "companyId": "zedo" + }, + "zemanta": { + "name": "Zemanta", + "categoryId": 2, + "url": "http://www.zemanta.com/", + "companyId": "zemanta" + }, + "zencoder": { + "name": "Zencoder", + "categoryId": 0, + "url": "https://zencoder.com/en/", + "companyId": "zencoder" + }, + "zendesk": { + "name": "Zendesk", + "categoryId": 2, + "url": "http://www.zendesk.com/", + "companyId": "zendesk" + }, + "zergnet": { + "name": "ZergNet", + "categoryId": 2, + "url": "http://www.zergnet.com/info", + "companyId": "zergnet" + }, + "zero.kz": { + "name": "ZERO.kz", + "categoryId": 6, + "url": "http://zero.kz/", + "companyId": "neolabs_zero" + }, + "zeta": { + "name": "Zeta", + "categoryId": 2, + "url": "https://zetaglobal.com/", + "companyId": "zeta" + }, + "zeusclicks": { + "name": "ZeusClicks", + "categoryId": 4, + "url": "http://zeusclicks.com/", + "companyId": "zeusclicks", + "source": "AdGuard" + }, + "ziff_davis": { + "name": "Ziff Davis", + "categoryId": 4, + "url": "https://www.ziffdavis.com/", + "companyId": "ziff_davis" + }, + "zift_solutions": { + "name": "Zift Solutions", + "categoryId": 6, + "url": "https://ziftsolutions.com/", + "companyId": "zift_solutions" + }, + "zimbio.com": { + "name": "Zimbio", + "categoryId": 8, + "url": "http://www.zimbio.com/", + "companyId": "livinglymedia", + "source": "AdGuard" + }, + "zippyshare_widget": { + "name": "Zippyshare Widget", + "categoryId": 2, + "url": "http://www.zippyshare.com", + "companyId": "zippyshare" + }, + "zmags": { + "name": "Zmags", + "categoryId": 6, + "url": "https://zmags.com/", + "companyId": "zmags" + }, + "zmctrack.net": { + "name": "zmctrack.net", + "categoryId": 11, + "url": null, + "companyId": null + }, + "zog.link": { + "name": "zog.link", + "categoryId": 11, + "url": null, + "companyId": null + }, + "zoho": { + "name": "Zoho", + "categoryId": 6, + "url": "https://www.zohocorp.com/index.html", + "companyId": "zoho_corp" + }, + "zononi.com": { + "name": "zononi.com", + "categoryId": 3, + "url": null, + "companyId": null + }, + "zopim": { + "name": "Zopim", + "categoryId": 2, + "url": "http://www.zopim.com/", + "companyId": "zendesk" + }, + "zukxd6fkxqn.com": { + "name": "zukxd6fkxqn.com", + "categoryId": 11, + "url": null, + "companyId": null + }, + "zwaar": { + "name": "Zwaar", + "categoryId": 4, + "url": "http://www.zwaar.org", + "companyId": "zwaar" + }, + "zypmedia": { + "name": "ZypMedia", + "categoryId": 4, + "url": "http://www.zypmedia.com/", + "companyId": "zypmedia" + } + }, + "trackerDomains": { + "mmtro.com": "1000mercis", + "creative-serving.com": "161media", + "p161.net": "161media", + "analytics.163.com": "163", + "1822direkt.de": "1822direkt.de", + "1dmp.io": "1dmp.io", + "opecloud.com": "1plusx", + "1sponsor.com": "1sponsor", + "tm.dentsu.de": "1tag", + "1and1.com": "1und1", + "1und1.de": "1und1", + "uicdn.com": "1und1", + "website-start.de": "1und1", + "24-ads.com": "24-ads.com", + "247-inc.net": "24_7", + "d1af033869koo7.cloudfront.net": "24_7", + "counter.24log.ru": "24log", + "24smi.net": "24smi", + "24smi.org": "24smi", + "2leep.com": "2leep", + "33across.com": "33across", + "3dstats.com": "3dstats", + "3gpp.org": "3gpp", + "3gppnetwork.org": "3gpp", + "4cdn.org": "4chan", + "4finance.com": "4finance_com", + "4wnet.com": "4w_marketplace", + "d3aa0ztdn3oibi.cloudfront.net": "500friends", + "51.la": "51.la", + "5min.com": "5min_media", + "d1lm7kd3bd3yo9.cloudfront.net": "6sense", + "grepdata.com": "6sense", + "77tracking.com": "77tracking", + "swm.digital": "7plus", + "7tv.de": "7tv.de", + "888media.net": "888media", + "hit.8digits.com": "8digits", + "94j7afz2nr.xyz": "94j7afz2nr.xyz", + "statsanalytics.com": "99stats", + "a3cloud.net": "a3cloud_net", + "a8.net": "a8", + "aaxads.com": "aaxads.com", + "abtasty.com": "ab_tasty", + "d1447tq2m68ekg.cloudfront.net": "ab_tasty", + "ab.co": "abc", + "abc-cdn.net.au": "abc", + "abc-host.net": "abc", + "abc-host.net.au": "abc", + "abc-prod.net.au": "abc", + "abc-stage.net.au": "abc", + "abc-test.net.au": "abc", + "abc.net.au": "abc", + "abcaustralia.net.au": "abc", + "abcradio.net.au": "abc", + "ablida.de": "ablida", + "ablida.net": "ablida", + "durasite.net": "accelia", + "accengage.net": "accengage", + "ax.xrea.com": "accessanalyzer", + "accesstrade.net": "accesstrade", + "agcdn.com": "accord_group", + "accmgr.com": "accordant_media", + "p-td.com": "accuen_media", + "acestream.net": "acestream.net", + "acint.net": "acint.net", + "acloudimages.com": "acloudimages", + "acpm.fr": "acpm.fr", + "acquia.com": "acquia.com", + "ziyu.net": "acrweb", + "actionpay.ru": "actionpay", + "adnwb.ru": "actionpay", + "adonweb.ru": "actionpay", + "active-agent.com": "active_agent", + "trackcmp.net": "active_campaign", + "active-srv02.de": "active_performance", + "active-tracking.de": "active_performance", + "activeconversion.com": "activeconversion", + "a-cast.jp": "activecore", + "activemeter.com": "activemeter", + "go.activengage.com": "activengage", + "actonsoftware.com": "acton", + "acuityplatform.com": "acuity_ads", + "acxiom-online.com": "acxiom", + "acxiom.com": "acxiom", + "ad-blocker.org": "ad-blocker.org", + "ads.ad-center.com": "ad-center", + "ad-delivery.net": "ad-delivery.net", + "ad-sys.com": "ad-sys", + "adagionet.com": "ad.agio", + "ad2click.go2cloud.org": "ad2click", + "ad2games.com": "ad2games", + "ad360.vn": "ad360", + "ads.ad4game.com": "ad4game", + "ad4mat.ar": "ad4mat", + "ad4mat.at": "ad4mat", + "ad4mat.be": "ad4mat", + "ad4mat.bg": "ad4mat", + "ad4mat.br": "ad4mat", + "ad4mat.ch": "ad4mat", + "ad4mat.co.uk": "ad4mat", + "ad4mat.cz": "ad4mat", + "ad4mat.de": "ad4mat", + "ad4mat.dk": "ad4mat", + "ad4mat.es": "ad4mat", + "ad4mat.fi": "ad4mat", + "ad4mat.fr": "ad4mat", + "ad4mat.gr": "ad4mat", + "ad4mat.hu": "ad4mat", + "ad4mat.it": "ad4mat", + "ad4mat.mx": "ad4mat", + "ad4mat.net": "ad4mat", + "ad4mat.nl": "ad4mat", + "ad4mat.no": "ad4mat", + "ad4mat.pl": "ad4mat", + "ad4mat.ro": "ad4mat", + "ad4mat.ru": "ad4mat", + "ad4mat.se": "ad4mat", + "ad4mat.tr": "ad4mat", + "ad6.fr": "ad6media", + "ad6media.co.uk": "ad6media", + "ad6media.com": "ad6media", + "ad6media.es": "ad6media", + "ad6media.fr": "ad6media", + "a2dfp.net": "ad_decisive", + "addynamo.net": "ad_dynamo", + "ebis.ne.jp": "ad_ebis", + "adlightning.com": "ad_lightning", + "admagnet.net": "ad_magnet", + "amimg.net": "ad_magnet", + "adspirit.de": "ad_spirit", + "adspirit.net": "ad_spirit", + "adac.de": "adac_de", + "adacado.com": "adacado", + "ozonemedia.com": "adadyn", + "adrtx.net": "adality_gmbh", + "adalliance.io": "adalliance.io", + "adalyser.com": "adalyser.com", + "adaos-ads.net": "adaos", + "adap.tv": "adap.tv", + "smrtlnks.com": "adaptiveblue_smartlinks", + "yieldoptimizer.com": "adara_analytics", + "adnetwork.adasiaholdings.com": "adasia_holdings", + "adbetclickin.pink": "adbetclickin.pink", + "adbetnet.com": "adbetnet.com", + "adblade.com": "adblade.com", + "adbooth.com": "adbooth", + "adbooth.net": "adbooth", + "adbox.lv": "adbox", + "adbrn.com": "adbrain", + "adbrite.com": "adbrite", + "adbull.com": "adbull", + "adbutler.com": "adbutler", + "adc-serv.net": "adc_media", + "adc-srv.net": "adc_media", + "adcash.com": "adcash", + "vuroll.in": "adchakra", + "acs86.com": "adchina", + "csbew.com": "adchina", + "irs09.com": "adchina", + "adcito.com": "adcito", + "adcitomedia.com": "adcito", + "adclear.net": "adclear", + "swift.adclerks.com": "adclerks", + "adclickmedia.com": "adclickmedia", + "adclickzone.go2cloud.org": "adclickzone", + "ad-cloud.jp": "adcloud", + "admarvel.s3.amazonaws.com": "adcolony", + "ads.admarvel.com": "adcolony", + "adcolony.com": "adcolony", + "adrdgt.com": "adconion", + "amgdgt.com": "adconion", + "adcrowd.com": "adcrowd", + "shop2market.com": "adcurve", + "addtocalendar.com": "add_to_calendar", + "dpmsrv.com": "addaptive", + "yagiay.com": "addefend", + "addfreestats.com": "addfreestats", + "addinto.com": "addinto", + "addshoppers.com": "addshoppers", + "shop.pe": "addshoppers", + "addthis.com": "addthis", + "addthiscdn.com": "addthis", + "addthisedge.com": "addthis", + "b2btracking.addvalue.de": "addvalue", + "addyon.com": "addyon", + "adeasy.ru": "adeasy", + "ipredictive.com": "adelphic", + "adengage.com": "adengage", + "adespresso.com": "adespresso", + "adexcite.com": "adexcite", + "adextent.com": "adextent", + "adf.ly": "adf.ly", + "adfalcon.com": "adfalcon", + "adfoc.us": "adfocus", + "js.adforgames.com": "adforgames", + "adform.net": "adform", + "adformdsp.net": "adform", + "seadform.net": "adform", + "adfox.ru": "adfox", + "adwolf.ru": "adfox", + "adfreestyle.pl": "adfreestyle", + "adfront.org": "adfront", + "adfrontiers.com": "adfrontiers", + "adgebra.co.in": "adgebra", + "adgenie.co.uk": "adgenie", + "ad.adgile.com": "adgile", + "ad.antventure.com": "adgile", + "adglare.net": "adglare.net", + "adsafety.net": "adglue", + "smartadcheck.de": "adgoal", + "smartredirect.de": "adgoal", + "adgorithms.com": "adgorithms", + "adgoto.com": "adgoto", + "adguard.com": "adguard", + "adguard.app": "adguard", + "adguard.info": "adguard", + "adguard.io": "adguard", + "adguard.org": "adguard", + "adtidy.org": "adguard", + "agrd.io": "adguard", + "agrd.eu": "adguard", + "adguard-dns.com": "adguard_dns", + "adguard-dns.io": "adguard_dns", + "adguard-vpn.com": "adguard_vpn", + "adguard-vpn.online": "adguard_vpn", + "adguardvpn.com": "adguard_vpn", + "adhands.ru": "adhands", + "adhese.be": "adhese", + "adhese.com": "adhese", + "adhese.net": "adhese", + "adhitzads.com": "adhitz", + "adhood.com": "adhood", + "afy11.net": "adify", + "cdn.adikteev.com": "adikteev", + "adimpact.com": "adimpact", + "adinch.com": "adinch", + "adition.com": "adition", + "adjal.com": "adjal", + "cdn.adjs.net": "adjs", + "adjug.com": "adjug", + "adjust.com": "adjust", + "adj.st": "adjust", + "adjust.io": "adjust", + "adjust.net.in": "adjust", + "adjust.world": "adjust", + "apptrace.com": "adjust", + "adk2.com": "adk2", + "cdn.adsrvmedia.com": "adk2", + "cdn.cdnrl.com": "adk2", + "adklip.com": "adklip", + "adkengage.com": "adknowledge", + "adknowledge.com": "adknowledge", + "bidsystem.com": "adknowledge", + "blogads.com": "adknowledge", + "cubics.com": "adknowledge", + "yarpp.org": "adknowledge", + "adsearch.adkontekst.pl": "adkontekst", + "netsprint.eu": "adkontekst.pl", + "adlabs.ru": "adlabs", + "clickiocdn.com": "adlabs", + "luxup.ru": "adlabs", + "mixmarket.biz": "adlabs", + "ad-serverparc.nl": "adlantic", + "adimg.net": "adlantis", + "adlantis.jp": "adlantis", + "cdn.adless.io": "adless", + "api.publishers.adlive.io": "adlive_header_bidding", + "adlooxtracking.com": "adloox", + "adx1.com": "admachine", + "adman.gr": "adman", + "adman.in.gr": "adman", + "admanmedia.com": "adman_media", + "admantx.com": "admantx.com", + "admaster.net": "admaster", + "cdnmaster.com": "admaster", + "admaster.com.cn": "admaster.cn", + "admasterapi.com": "admaster.cn", + "admatic.com.tr": "admatic", + "ads5.admatic.com.tr": "admatic", + "cdn2.admatic.com.tr": "admatic", + "lib-3pas.admatrix.jp": "admatrix", + "admaxserver.com": "admax", + "admaxim.com": "admaxim", + "admaya.in": "admaya", + "admedia.com": "admedia", + "adizio.com": "admedo_com", + "admedo.com": "admedo_com", + "admeira.ch": "admeira.ch", + "admeld.com": "admeld", + "admeo.ru": "admeo", + "admaym.com": "admeta", + "atemda.com": "admeta", + "admicro.vn": "admicro", + "vcmedia.vn": "admicro", + "admitad.com": "admitad.com", + "admixer.net": "admixer", + "admixer.com": "admixer", + "admized.com": "admized", + "admo.tv": "admo.tv", + "a.admob.com": "admob", + "mm.admob.com": "admob", + "mmv.admob.com": "admob", + "p.admob.com": "admob", + "run.admost.com": "admost", + "dmmotion.com": "admotion", + "nspmotion.com": "admotion", + "admulti.com": "admulti", + "adnegah.net": "adnegah", + "adnet.vn": "adnet", + "adnet.biz": "adnet.de", + "adnet.de": "adnet.de", + "adclick.lt": "adnet_media", + "adnet.lt": "adnet_media", + "ad.adnetwork.net": "adnetwork.net", + "adnetworkperformance.com": "adnetworkperformance.com", + "adserver.adnexio.com": "adnexio", + "adnium.com": "adnium.com", + "heias.com": "adnologies", + "smaclick.com": "adnow", + "st-n.ads3-adnow.com": "adnow", + "adnymics.com": "adnymics", + "adobe.com": "adobe_audience_manager", + "demdex.net": "adobe_audience_manager", + "everestjs.net": "adobe_audience_manager", + "everesttech.net": "adobe_audience_manager", + "adobe.io": "adobe_developer", + "scene7.com": "adobe_dynamic_media", + "adobedtm.com": "adobe_dynamic_tag_management", + "2o7.net": "adobe_experience_cloud", + "du8783wkf05yr.cloudfront.net": "adobe_experience_cloud", + "hitbox.com": "adobe_experience_cloud", + "imageg.net": "adobe_experience_cloud", + "nedstat.com": "adobe_experience_cloud", + "omtrdc.net": "adobe_experience_cloud", + "sitestat.com": "adobe_experience_cloud", + "adobedc.net": "adobe_experience_league", + "adobelogin.com": "adobe_login", + "adobetag.com": "adobe_tagmanager", + "typekit.com": "adobe_typekit", + "typekit.net": "adobe_typekit", + "adocean.pl": "adocean", + "dmtry.com": "adometry", + "adomik.com": "adomik", + "adcde.com": "adon_network", + "addlvr.com": "adon_network", + "adfeedstrk.com": "adon_network", + "adtrgt.com": "adon_network", + "bannertgt.com": "adon_network", + "cptgt.com": "adon_network", + "cpvfeed.com": "adon_network", + "cpvtgt.com": "adon_network", + "mygeek.com": "adon_network", + "popcde.com": "adon_network", + "sdfje.com": "adon_network", + "urtbk.com": "adon_network", + "adonion.com": "adonion", + "t.adonly.com": "adonly", + "adoperator.com": "adoperator", + "adoric.com": "adoric", + "adorika.com": "adorika", + "adorika.net": "adorika", + "adosia.com": "adosia", + "adotmob.com": "adotmob.com", + "adotube.com": "adotube", + "adparlor.com": "adparlor", + "adparlour.com": "adparlor", + "a4p.adpartner.pro": "adpartner", + "adpeepshosted.com": "adpeeps", + "adperfect.com": "adperfect", + "adperium.com": "adperium", + "adpilot.at": "adpilot", + "erne.co": "adpilot", + "adplan-ds.com": "adplan", + "advg.jp": "adplan", + "c.p-advg.com": "adplan", + "adplus.co.id": "adplus", + "adprofex.com": "adprofex", + "ads2.bid": "adprofex", + "adframesrc.com": "adprofy", + "adserve.adpulse.ir": "adpulse", + "ads.adpv.com": "adpv", + "adreactor.com": "adreactor", + "adrecord.com": "adrecord", + "adrecover.com": "adrecover", + "ad.vcm.jp": "adresult", + "adresult.jp": "adresult", + "adriver.ru": "adriver", + "adroll.com": "adroll", + "adrom.net": "adrom", + "txt.eu": "adrom", + "adru.net": "adru.net", + "adrunnr.com": "adrunnr", + "adsame.com": "adsame", + "adsbookie.com": "adsbookie", + "adscale.de": "adscale", + "adscience.nl": "adscience", + "adsco.re": "adsco.re", + "adsensecamp.com": "adsensecamp", + "adserverpub.com": "adserverpub", + "online.adservicemedia.dk": "adservice_media", + "adsfactor.net": "adsfactor", + "ads.doclix.com": "adside", + "adskeeper.co.uk": "adskeeper", + "ssp.adskom.com": "adskom", + "adslot.com": "adslot", + "adsnative.com": "adsnative", + "adsniper.ru": "adsniper.ru", + "adspeed.com": "adspeed", + "adspeed.net": "adspeed", + "o333o.com": "adspyglass", + "adstage-analytics.herokuapp.com": "adstage", + "code.adstanding.com": "adstanding", + "adstars.co.id": "adstars", + "ad-stir.com": "adstir", + "4dsply.com": "adsupply", + "cdn.engine.adsupply.com": "adsupply", + "trklnks.com": "adsupply", + "adswizz.com": "adswizz", + "adtaily.com": "adtaily", + "adtaily.pl": "adtaily", + "adtarget.me": "adtarget.me", + "adtech.de": "adtech", + "adtechus.com": "adtech", + "adtegrity.net": "adtegrity", + "adtpix.com": "adtegrity", + "adtelligence.de": "adtelligence.de", + "adentifi.com": "adtheorent", + "adthink.com": "adthink", + "advertstream.com": "adthink", + "audienceinsights.net": "adthink", + "adtiger.de": "adtiger", + "adtimaserver.vn": "adtima", + "adtng.com": "adtng.com", + "adtoma.com": "adtoma", + "adtomafusion.com": "adtoma", + "adtr02.com": "adtr02.com", + "track.adtraction.com": "adtraction", + "adtraxx.de": "adtraxx", + "adtriba.com": "adtriba.com", + "adtrue.com": "adtrue", + "adtrustmedia.com": "adtrustmedia", + "ad.adtube.ir": "adtube", + "awempire.com": "adult_webmaster_empire", + "dditscdn.com": "adult_webmaster_empire", + "livejasmin.com": "adult_webmaster_empire", + "adultadworld.com": "adultadworld", + "adworldmedia.com": "adultadworld", + "adup-tech.com": "adup-tech.com", + "advaction.ru": "advaction", + "aucourant.info": "advaction", + "schetu.net": "advaction", + "dqfw2hlp4tfww.cloudfront.net": "advalo", + "ahcdn.com": "advanced_hosters", + "pix-cdn.org": "advanced_hosters", + "s3.advarkads.com": "advark", + "adventori.com": "adventori", + "adnext.fr": "adverline", + "adverline.com": "adverline", + "surinter.net": "adverline", + "adversaldisplay.com": "adversal", + "adversalservers.com": "adversal", + "go.adversal.com": "adversal", + "adverserve.net": "adverserve", + "ad.adverteerdirect.nl": "adverteerdirect", + "adverticum.net": "adverticum", + "advertise.com": "advertise.com", + "advertisespace.com": "advertisespace", + "adsdk.com": "advertising.com", + "advertising.com": "advertising.com", + "aol.com": "advertising.com", + "atwola.com": "advertising.com", + "pictela.net": "advertising.com", + "verizonmedia.com": "advertising.com", + "advertlets.com": "advertlets", + "advertserve.com": "advertserve", + "advidi.com": "advidi", + "am10.ru": "advmaker.ru", + "am15.net": "advmaker.ru", + "advolution.de": "advolution", + "adwebster.com": "adwebster", + "ads.adwitserver.com": "adwit", + "adworx.at": "adworx.at", + "adworxs.net": "adworxs.net", + "adxion.com": "adxion", + "adxpansion.com": "adxpansion", + "ads.adxpose.com": "adxpose", + "event.adxpose.com": "adxpose", + "servedby.adxpose.com": "adxpose", + "adxprtz.com": "adxprtz.com", + "adyoulike.com": "adyoulike", + "omnitagjs.com": "adyoulike", + "adzerk.net": "adzerk", + "adzly.com": "adzly", + "aemediatraffic.com": "aemediatraffic", + "hprofits.com": "aemediatraffic", + "amxdt.com": "aerify_media", + "aerisapi.com": "aeris_weather", + "aerisweather.com": "aeris_weather", + "affectv.com": "affectv", + "go.affec.tv": "affectv", + "hybridtheory.com": "affectv", + "affilbox.com": "affilbox", + "affilbox.cz": "affilbox", + "track.affiliate-b.com": "affiliate-b", + "affiliate4you.nl": "affiliate4you", + "ads.affbuzzads.com": "affiliatebuzz", + "affiliatefuture.com": "affiliatefuture", + "affiliatelounge.com": "affiliatelounge", + "affiliation-france.com": "affiliation_france", + "affiliator.com": "affiliator", + "affiliaweb.fr": "affiliaweb", + "banner-rotation.com": "affilinet", + "webmasterplan.com": "affilinet", + "affimax.de": "affimax", + "affinity.com": "affinity", + "countby.com": "affinity.by", + "affiz.net": "affiz_cpm", + "pml.afftrack.com": "afftrack", + "afgr2.com": "afgr2.com", + "v2.afilio.com.br": "afilio", + "afsanalytics.com": "afs_analystics", + "ads.aftonbladet.se": "aftonbladet_ads", + "aftv-serving.bid": "aftv-serving.bid", + "agkn.com": "aggregate_knowledge", + "agilone.com": "agilone", + "adview.pl": "agora", + "pingagenow.com": "ahalogy", + "aimediagroup.com": "ai_media_group", + "advombat.ru": "aidata", + "aidata.io": "aidata", + "aim4media.com": "aim4media", + "muscache.com": "airbnb", + "musthird.com": "airbnb", + "airbrake.io": "airbrake", + "airpr.com": "airpr.com", + "ab.airpush.com": "airpush", + "abmr.net": "akamai_technologies", + "akamai.net": "akamai_technologies", + "akamaihd.net": "akamai_technologies", + "akamaized.net": "akamai_technologies", + "akstat.io": "akamai_technologies", + "edgekey.net": "akamai_technologies", + "edgesuite.net": "akamai_technologies", + "imiclk.com": "akamai_technologies", + "akadns.net": "akamai_technologies", + "akamaiedge.net": "akamai_technologies", + "akaquill.net": "akamai_technologies", + "akamoihd.net": "akamoihd.net", + "adn-d.sp.gmossp-sp.jp": "akane", + "akanoo.com": "akanoo", + "akavita.com": "akavita", + "ads.albawaba.com": "al_bawaba_advertising", + "serve.albacross.com": "albacross", + "aldi-international.com": "aldi-international.com", + "alenty.com": "alenty", + "alephd.com": "alephd.com", + "alexametrics.com": "alexa_metrics", + "d31qbv1cthcecs.cloudfront.net": "alexa_metrics", + "d5nxst8fruw4z.cloudfront.net": "alexa_metrics", + "alexa.com": "alexa_traffic_rank", + "algolia.com": "algolia.net", + "algolia.net": "algolia.net", + "algovid.com": "algovid.com", + "alibaba.com": "alibaba.com", + "alicdn.com": "alibaba.com", + "aliapp.org": "alibaba.com", + "alibabachengdun.com": "alibaba.com", + "alibabausercontent.com": "alibaba.com", + "aliexpress.com": "alibaba.com", + "alikunlun.com": "alibaba.com", + "aliyuncs.com": "alibaba.com", + "alibabacloud.com": "alibaba_cloud", + "alibabadns.com": "alibaba_cloud", + "aliyun.com": "alibaba_cloud", + "ucweb.com": "alibaba_ucbrowser", + "alipay.com": "alipay.com", + "alipayobjects.com": "alipay.com", + "websitealive.com": "alivechat", + "allegroimg.com": "allegro.pl", + "allegrostatic.com": "allegro.pl", + "allegrostatic.pl": "allegro.pl", + "ngacm.com": "allegro.pl", + "ngastatic.com": "allegro.pl", + "i.btg360.com.br": "allin", + "allo-pages.fr": "allo-pages.fr", + "allotraffic.com": "allotraffic", + "edge.alluremedia.com.au": "allure_media", + "allyes.com": "allyes", + "inputs.alooma.com": "alooma", + "arena.altitude-arena.com": "altitude_digital", + "amadesa.com": "amadesa", + "amap.com": "amap", + "amazon.ca": "amazon", + "amazon.co.jp": "amazon", + "amazon.co.uk": "amazon", + "amazon.com": "amazon", + "amazon.de": "amazon", + "amazon.es": "amazon", + "amazon.fr": "amazon", + "amazon.it": "amazon", + "d3io1k5o0zdpqr.cloudfront.net": "amazon", + "a2z.com": "amazon", + "aamazoncognito.com": "amazon", + "amazon-corp.com": "amazon", + "amazon-dss.com": "amazon", + "amazon.com.au": "amazon", + "amazon.com.mx": "amazon", + "amazon.dev": "amazon", + "amazon.in": "amazon", + "amazon.nl": "amazon", + "amazon.sa": "amazon", + "amazonbrowserapp.co.uk": "amazon", + "amazonbrowserapp.es": "amazon", + "amazoncrl.com": "amazon", + "firetvcaptiveportal.com": "amazon", + "ntp-fireos.com": "amazon", + "amazon-adsystem.com": "amazon_adsystem", + "serving-sys.com": "amazon_adsystem", + "sizmek.com": "amazon_adsystem", + "assoc-amazon.ca": "amazon_associates", + "assoc-amazon.co.uk": "amazon_associates", + "assoc-amazon.com": "amazon_associates", + "assoc-amazon.de": "amazon_associates", + "assoc-amazon.fr": "amazon_associates", + "assoc-amazon.jp": "amazon_associates", + "images-amazon.com": "amazon_cdn", + "media-amazon.com": "amazon_cdn", + "ssl-images-amazon.com": "amazon_cdn", + "amazontrust.com": "amazon_cdn", + "associates-amazon.com": "amazon_cdn", + "cloudfront.net": "amazon_cloudfront", + "ota-cloudfront.net": "amazon_cloudfront", + "axx-eu.amazon-adsystem.com": "amazon_mobile_ads", + "amazonpay.com": "amazon_payments", + "payments-amazon.com": "amazon_payments", + "amazonpay.in": "amazon_payments", + "aiv-cdn.net": "amazon_video", + "aiv-delivery.net": "amazon_video", + "amazonvideo.com": "amazon_video", + "pv-cdn.net": "amazon_video", + "primevideo.com": "amazon_video", + "amazonaws.com": "amazon_web_services", + "amazonwebservices.com": "amazon_web_services", + "awsstatic.com": "amazon_web_services", + "adnetwork.net.vn": "ambient_digital", + "adnetwork.vn": "ambient_digital", + "ambientplatform.vn": "ambient_digital", + "amgload.net": "amgload.net", + "amoad.com": "amoad", + "ad.amgdgt.com": "amobee", + "ads.amgdgt.com": "amobee", + "amobee.com": "amobee", + "collective-media.net": "amp_platform", + "amplitude.com": "amplitude", + "d24n15hnbwhuhn.cloudfront.net": "amplitude", + "ampproject.org": "ampproject.org", + "anametrix.net": "anametrix", + "ancestrycdn.com": "ancestry_cdn", + "ancoraplatform.com": "ancora", + "anetwork.ir": "anetwork", + "aniview.com": "aniview.com", + "a-ads.com": "anonymousads", + "anormal-tracker.de": "anormal_tracker", + "answerscloud.com": "answers_cloud_service", + "anthill.vn": "ants", + "ants.vn": "ants", + "rt.analytics.anvato.net": "anvato", + "tkx2-prod.anvato.net": "anvato", + "w3.cdn.anvato.net": "anvato", + "player.anyclip.com": "anyclip", + "video-loader.com": "aol_be_on", + "aolcdn.com": "aol_cdn", + "isp.netscape.com": "aol_cdn", + "apa.at": "apa.at", + "apester.com": "apester", + "apicit.net": "apicit.net", + "carrierzone.com": "aplus_analytics", + "appcenter.ms": "appcenter", + "appcues.com": "appcues", + "appdynamics.com": "appdynamics", + "de8of677fyt0b.cloudfront.net": "appdynamics", + "eum-appdynamics.com": "appdynamics", + "jscdn.appier.net": "appier", + "apple.com": "apple", + "aaplimg.com": "apple", + "apple-cloudkit.com": "apple", + "apple-dns.net": "apple", + "apple-livephotoskit.com": "apple", + "apple-mapkit.com": "apple", + "apple.news": "apple", + "apzones.com": "apple", + "cdn-apple.com": "apple", + "icloud-content.com": "apple", + "icloud.com": "apple", + "icons.axm-usercontent-apple.com": "apple", + "itunes.com": "apple", + "me.com": "apple", + "mzstatic.com": "apple", + "safebrowsing.apple": "apple", + "safebrowsing.g.applimg.com": "apple", + "iadsdk.apple.com": "apple_ads", + "applifier.com": "applifier", + "assets.applovin.com": "applovin", + "applovin.com": "applovin", + "applvn.com": "applovin", + "appmetrx.com": "appmetrx", + "adnxs.com": "appnexus", + "adnxs.net": "appnexus", + "appsflyer.com": "appsflyer", + "appsflyersdk.com": "appsflyer", + "adne.tv": "apptv", + "readserver.net": "apptv", + "www.apture.com": "apture", + "arcpublishing.com": "arcpublishing", + "ard.de": "ard.de", + "areyouahuman.com": "are_you_a_human", + "arkoselabs.com": "arkoselabs.com", + "art19.com": "art19", + "banners.advsnx.net": "artimedia", + "artlebedev.ru": "artlebedev.ru", + "ammadv.it": "aruba_media_marketing", + "arubamediamarketing.it": "aruba_media_marketing", + "cya2.net": "arvato_canvas_fp", + "asambeauty.com": "asambeauty.com", + "ask.com": "ask.com", + "aspnetcdn.com": "aspnetcdn", + "ads.assemblyexchange.com": "assemblyexchange", + "cdn.astronomer.io": "astronomer", + "ati-host.net": "at_internet", + "aticdn.net": "at_internet", + "xiti.com": "at_internet", + "atedra.com": "atedra", + "oadts.com": "atg_group", + "as00.estara.com": "atg_optimization", + "atgsvcs.com": "atg_recommendations", + "adbureau.net": "atlas", + "atdmt.com": "atlas", + "atlassbx.com": "atlas", + "track.roiservice.com": "atlas_profitbuilder", + "atl-paas.net": "atlassian.net", + "atlassian.com": "atlassian.net", + "atlassian.net": "atlassian.net", + "d12ramskps3070.cloudfront.net": "atlassian.net", + "bitbucket.org": "atlassian.net", + "jira.com": "atlassian.net", + "ss-inf.net": "atlassian.net", + "d1xfq2052q7thw.cloudfront.net": "atlassian_marketplace", + "marketplace.atlassian.com": "atlassian_marketplace", + "atomz.com": "atomz_search", + "atsfi.de": "atsfi_de", + "cdn.attracta.com": "attracta", + "locayta.com": "attraqt", + "ads.audience2media.com": "audience2media", + "qwobl.net": "audience_ad_network", + "revsci.net": "audience_science", + "wunderloop.net": "audience_science", + "12mlbe.com": "audiencerate", + "audiencesquare.com": "audiencesquare.com", + "auditude.com": "auditude", + "audtd.com": "audtd.com", + "cdn.augur.io": "augur", + "aumago.com": "aumago", + "clicktracks.com": "aurea_clicktracks", + "ausgezeichnet.org": "ausgezeichnet_org", + "advertising.gov.au": "australia.gov", + "auth0.com": "auth0", + "ai.autoid.com": "autoid", + "optimost.com": "autonomy", + "oc-track.autonomycloud.com": "autonomy_campaign", + "track.yieldsoftware.com": "autonomy_campaign", + "api.autopilothq.com": "autopilothq", + "autoscout24.com": "autoscout24.com", + "autoscout24.net": "autoscout24.com", + "avail.net": "avail", + "analytics.avanser.com.au": "avanser", + "avmws.com": "avant_metrics", + "avantlink.com": "avantlink", + "ads.avazu.net": "avazu_network", + "avenseo.com": "avenseo", + "adspdbl.com": "avid_media", + "avocet.io": "avocet", + "aweber.com": "aweber", + "awin.com": "awin", + "awin1.com": "awin", + "perfb.com": "awin", + "ad.globe7.com": "axill", + "azadify.com": "azadify", + "azure.com": "azure", + "azure.net": "azure", + "azurefd.net": "azure", + "trafficmanager.net": "azure", + "blob.core.windows.net": "azure_blob_storage", + "azureedge.net": "azureedge.net", + "b2bcontext.ru": "b2bcontext", + "b2bvideo.ru": "b2bvideo", + "babator.com": "babator.com", + "backbeatmedia.com": "back_beat_media", + "widgets.backtype.com": "backtype_widgets", + "bahn.de": "bahn_de", + "img-bahn.de": "bahn_de", + "baidu.com": "baidu_ads", + "baidustatic.com": "baidu_ads", + "bdimg.com": "baidu_static", + "bdstatic.com": "baidu_static", + "baletingo.com": "baletingo.com", + "bangdom.com": "bangdom.com", + "widgets.bankrate.com": "bankrate", + "bannerconnect.net": "banner_connect", + "bannerflow.com": "bannerflow.com", + "bannerplay.com": "bannerplay", + "cdn.bannersnack.com": "bannersnack", + "dn3y71tq7jf07.cloudfront.net": "barilliance", + "getbarometer.s3.amazonaws.com": "barometer", + "basilic.io": "basilic.io", + "batanga.com": "batanga_network", + "t4ft.de": "batch_media", + "bauernative.com": "bauer_media", + "baur.de": "baur.de", + "baynote.net": "baynote_observer", + "bazaarvoice.com": "bazaarvoice", + "bbci.co.uk": "bbci", + "tracking.bd4travel.com": "bd4travel", + "beopinion.com": "be_opinion", + "bfmio.com": "beachfront", + "beaconads.com": "beacon_ad_network", + "beampulse.com": "beampulse.com", + "beanstalkdata.com": "beanstalk_data", + "bebi.com": "bebi", + "beeketing.com": "beeketing.com", + "beeline.ru": "beeline.ru", + "bidr.io": "beeswax", + "tracker.beezup.com": "beezup", + "begun.ru": "begun", + "behavioralengine.com": "behavioralengine", + "belboon.de": "belboon_gmbh", + "cdn.belco.io": "belco", + "belstat.be": "belstat", + "belstat.com": "belstat", + "belstat.de": "belstat", + "belstat.fr": "belstat", + "belstat.nl": "belstat", + "bemobile.ua": "bemobile.ua", + "tag.benchplatform.com": "bench_platform", + "betterttv.net": "betterttv", + "betweendigital.com": "betweendigital.com", + "intencysrv.com": "betweendigital.com", + "bid.run": "bid.run", + "bidgear.com": "bidgear", + "bidswitch.net": "bidswitch", + "exe.bid": "bidswitch", + "bttrack.com": "bidtellect", + "bidtheatre.com": "bidtheatre", + "bidvertiser.com": "bidvertiser", + "bigmobileads.com": "big_mobile", + "bigcommerce.com": "bigcommerce.com", + "bigmir.net": "bigmir.net", + "bigpoint-payment.com": "bigpoint", + "bigpoint.com": "bigpoint", + "bigpoint.net": "bigpoint", + "bpcdn.net": "bigpoint", + "bpsecure.com": "bigpoint", + "bildstatic.de": "bild", + "ad-cdn.bilgin.pro": "bilgin_pro", + "pixel.bilinmedia.net": "bilin", + "bat.r.msn.com": "bing_ads", + "bing.com": "bing_ads", + "bing.net": "bing_ads", + "virtualearth.net": "bing_maps", + "binge.com.au": "binge", + "view.binlayer.com": "binlayer", + "widgets.binotel.com": "binotel", + "esendra.fi": "bisnode", + "bitcoinplus.com": "bitcoin_miner", + "bit.ly": "bitly", + "bitrix.de": "bitrix", + "bitrix.info": "bitrix", + "bitrix.ru": "bitrix", + "bitrix24.com": "bitrix", + "bitrix24.com.br": "bitrix", + "bitwarden.com": "bitwarden", + "traffic.adxprts.com": "bizcn", + "jssr.jd.com": "blackdragon", + "blau.de": "blau.de", + "bnmla.com": "blink_new_media", + "blismedia.com": "blis", + "blogad.com.tw": "blogad", + "blogbang.com": "blogbang", + "www.blogcatalog.com": "blogcatalog", + "track.blogcounter.de": "blogcounter", + "blogfoster.com": "blogfoster.com", + "bloggerads.net": "bloggerads", + "blogher.com": "blogher", + "blogherads.com": "blogher", + "blogimg.jp": "blogimg.jp", + "blogsmithmedia.com": "blogsmithmedia.com", + "blogblog.com": "blogspot_com", + "blogger.com": "blogspot_com", + "blogspot.com": "blogspot_com", + "brcdn.com": "bloomreach", + "brsrvr.com": "bloomreach", + "brtstats.com": "bloomreach", + "offerpoint.net": "blue_cherry_group", + "blueserving.com": "blue_seed", + "blueconic.net": "blueconic.net", + "bluecore.com": "bluecore", + "triggeredmail.appspot.com": "bluecore", + "bkrtx.com": "bluekai", + "bluekai.com": "bluekai", + "adrevolver.com": "bluelithium", + "bluelithium.com": "bluelithium", + "bmmetrix.com": "bluemetrix", + "japanmetrix.jp": "bluemetrix", + "bluenewsupdate.info": "bluenewsupdate.info", + "bluestreak.com": "bluestreak", + "bluetriangletech.com": "bluetriangle", + "btttag.com": "bluetriangle", + "bodelen.com": "bodelen.com", + "tracking.bol.com": "bol_affiliate_program", + "qb.boldapps.net": "bold", + "secure.apps.shappify.com": "bold", + "boldchat.com": "boldchat", + "boltdns.net": "boltdns.net", + "bom.gov.au": "bom", + "ml314.com": "bombora", + "bongacams.com": "bongacams.com", + "bonial.com": "bonial", + "bonialconnect.com": "bonial", + "bonialserviceswidget.de": "bonial", + "boo-box.com": "boo-box", + "booking.com": "booking.com", + "bstatic.com": "booking.com", + "boostbox.com.br": "boost_box", + "boostervideo.ru": "booster_video", + "bootstrapcdn.com": "bootstrap", + "borrango.com": "borrango.com", + "scan.botscanner.com": "botscanner", + "boudja.com": "boudja.com", + "bounceexchange.com": "bounce_exchange", + "bouncex.com": "bouncex", + "bouncex.net": "bouncex", + "j.clickdensity.com": "box_uk", + "boxever.com": "boxever", + "brainient.com": "brainient", + "brainsins.com": "brainsins", + "d2xkqxdy6ewr93.cloudfront.net": "brainsins", + "mobileapptracking.com": "branch", + "app.link": "branch_metrics", + "branch.io": "branch_metrics", + "brandaffinity.net": "brand_affinity", + "go.cpmadvisors.com": "brand_networks", + "optorb.com": "brand_networks", + "brandmetrics.com": "brandmetrics.com", + "brandreachsys.com": "brandreach", + "rtbidder.net": "brandscreen", + "brandwire.tv": "brandwire.tv", + "branica.com": "branica", + "appboycdn.com": "braze", + "braze.com": "braze", + "brealtime.com": "brealtime", + "bridgetrack.com": "bridgetrack", + "brightcove.com": "brightcove", + "brightcove.net": "brightcove_player", + "analytics.brightedge.com": "brightedge", + "munchkin.brightfunnel.com": "brightfunnel", + "brightonclick.com": "brightonclick.com", + "btrll.com": "brightroll", + "p.brilig.com": "brilig", + "brillen.de": "brillen.de", + "broadstreetads.com": "broadstreet", + "bm23.com": "bronto", + "brow.si": "brow.si", + "browser-statistik.de": "browser-statistik", + "browser-update.org": "browser_update", + "btncdn.com": "btncdn.com", + "in.bubblestat.com": "bubblestat", + "brighteroption.com": "buddy_media", + "bufferapp.com": "buffer_button", + "bugherd.com": "bugherd.com", + "bugsnag.com": "bugsnag", + "d2wy8f7a9ursnm.cloudfront.net": "bugsnag", + "bulkhentai.com": "bulkhentai.com", + "bumlam.com": "bumlam.com", + "bunchbox.co": "bunchbox", + "bf-ad.net": "burda", + "bf-tools.net": "burda", + "bstatic.de": "burda_digital_systems", + "burstbeacon.com": "burst_media", + "burstnet.com": "burst_media", + "burt.io": "burt", + "d3q6px0y2suh5n.cloudfront.net": "burt", + "rich-agent.s3.amazonaws.com": "burt", + "richmetrics.com": "burt", + "stats.businessol.com": "businessonline_analytics", + "bttn.io": "button", + "buysellads.com": "buysellads", + "servedby-buysellads.com": "buysellads", + "buzzadexchange.com": "buzzadexchange.com", + "buzzador.com": "buzzador", + "buzzfed.com": "buzzfeed", + "bwbx.io": "bwbx.io", + "bypass.jp": "bypass", + "c1exchange.com": "c1_exchange", + "c3metrics.com": "c3_metrics", + "c3tag.com": "c3_metrics", + "c8.net.ua": "c8_network", + "cackle.me": "cackle.me", + "d1cerpgff739r9.cloudfront.net": "cadreon", + "d1qpxk1wfeh8v1.cloudfront.net": "cadreon", + "callpage.io": "call_page", + "callbackhunter.com": "callbackhunter", + "callmeasurement.com": "callbox", + "callibri.ru": "callibri", + "callrail.com": "callrail", + "calltracking.ru": "calltracking", + "caltat.com": "caltat.com", + "cam-content.com": "cam-content.com", + "camakaroda.com": "camakaroda.com", + "s.edkay.com": "campus_explorer", + "canddi.com": "canddi", + "canonical.com": "canonical", + "canvas.net": "canvas", + "canvasnetwork.com": "canvas", + "du11hjcvx0uqb.cloudfront.net": "canvas", + "kdata.fr": "capitaldata", + "captora.com": "captora", + "edge.capturemedia.network": "capture_media", + "cdn.capturly.com": "capturly", + "route.carambo.la": "carambola", + "carbonads.com": "carbonads", + "carbonads.net": "carbonads", + "fusionads.net": "carbonads", + "cardinalcommerce.com": "cardinal", + "cardlytics.com": "cardlytics", + "cdn.carrotquest.io": "carrot_quest", + "api.cartstack.com": "cartstack", + "caspion.com": "caspion", + "t.castle.io": "castle", + "3gl.net": "catchpoint", + "cbox.ws": "cbox", + "adlog.com.com": "cbs_interactive", + "cbsinteractive.com": "cbs_interactive", + "dw.com.com": "cbs_interactive", + "ccmbg.com": "ccm_benchmark", + "admission.net": "cdk_digital_marketing", + "cdn-net.com": "cdn-net.com", + "cdn13.com": "cdn13.com", + "cdn77.com": "cdn77", + "cdn77.org": "cdn77", + "cdnetworks.com": "cdnetworks.net", + "cdnetworks.net": "cdnetworks.net", + "cdnnetwok.xyz": "cdnnetwok_xyz", + "cdnondemand.org": "cdnondemand.org", + "cdnsure.com": "cdnsure.com", + "cdnvideo.com": "cdnvideo.com", + "cdnwidget.com": "cdnwidget.com", + "cedexis-radar.net": "cedexis_radar", + "cedexis-test.com": "cedexis_radar", + "cedexis.com": "cedexis_radar", + "cedexis.fastlylb.net": "cedexis_radar", + "cedexis.net": "cedexis_radar", + "celebrus.com": "celebrus", + "celtra.com": "celtra", + "cendyn.adtrack.calls.net": "cendyn", + "centraltag.com": "centraltag", + "brand-server.com": "centro", + "speed-trap.nl": "cerberus_speed-trap", + "link.ixs1.net": "certainsource", + "hits.e.cl": "certifica_metric", + "certona.net": "certona", + "res-x.com": "certona", + "gsn.chameleon.ad": "chameleon", + "chango.ca": "chango", + "chango.com": "chango", + "channelintelligence.com": "channel_intelligence", + "cptrack.de": "channel_pilot_solutions", + "channeladvisor.com": "channeladvisor", + "searchmarketing.com": "channeladvisor", + "channelfinder.net": "channelfinder", + "chaordicsystems.com": "chaordic", + "chartbeat.com": "chartbeat", + "chartbeat.net": "chartbeat", + "chartboost.com": "chartboost", + "chaser.ru": "chaser", + "cloud.chatbeacon.io": "chat_beacon", + "chatango.com": "chatango", + "call.chatra.io": "chatra", + "chaturbate.com": "chaturbate.com", + "chatwing.com": "chatwing", + "checkmystats.com.au": "checkmystats", + "chefkoch-cdn.de": "chefkoch_de", + "chefkoch.de": "chefkoch_de", + "tracker.chinmedia.vn": "chin_media", + "chinesean.com": "chinesean", + "chitika.net": "chitika", + "choicestream.com": "choicestream", + "api.getchute.com": "chute", + "media.chute.io": "chute", + "iqcontentplatform.de": "circit", + "data.circulate.com": "circulate", + "p.cityspark.com": "city_spark", + "cityads.ru": "cityads", + "gameleads.ru": "cityads", + "ciuvo.com": "ciuvo.com", + "widget.civey.com": "civey_widgets", + "civicscience.com": "civicscience.com", + "ciweb.ciwebgroup.com": "ciwebgroup", + "clcknads.pro": "clcknads.pro", + "pulseradius.com": "clear_pier", + "clearbit.com": "clearbit.com", + "clearsale.com.br": "clearsale", + "tag.clrstm.com": "clearstream.tv", + "api.clerk.io": "clerk.io", + "cleverpush.com": "clever_push", + "wzrkt.com": "clever_tap", + "cleversite.ru": "cleversite", + "script.click360.io": "click360", + "clickandchat.com": "click_and_chat", + "software.clickback.com": "click_back", + "hit.clickaider.com": "clickaider", + "clickaine.com": "clickaine", + "clickbank.net": "clickbank", + "cbproads.com": "clickbank_proads", + "adtoll.com": "clickbooth", + "clickbooth.com": "clickbooth", + "clickboothlnk.com": "clickbooth", + "clickcease.com": "clickcease", + "clickcertain.com": "clickcertain", + "remarketstats.com": "clickcertain", + "clickdesk.com": "clickdesk", + "analytics.clickdimensions.com": "clickdimensions", + "clickequations.net": "clickequations", + "clickexperts.net": "clickexperts", + "doublemax.net": "clickforce", + "clickinc.com": "clickinc", + "clickintext.net": "clickintext", + "clickky.biz": "clickky", + "9nl.be": "clickmeter", + "9nl.com": "clickmeter", + "9nl.eu": "clickmeter", + "9nl.it": "clickmeter", + "9nl.me": "clickmeter", + "clickmeter.com": "clickmeter", + "clickonometrics.pl": "clickonometrics", + "clickpoint.com": "clickpoint", + "clickpoint.it": "clickpoint", + "clickprotector.com": "clickprotector", + "clickreport.com": "clickreport", + "doogleonduty.com": "clickreport", + "ctn.go2cloud.org": "clicks_thru_networks", + "clicksor.com": "clicksor", + "hatid.com": "clicksor", + "lzjl.com": "clicksor", + "myroitracking.com": "clicksor", + "clicktale.com": "clicktale", + "clicktale.net": "clicktale", + "clicktale.pantherssl.com": "clicktale", + "clicktalecdn.sslcs.cdngc.net": "clicktale", + "clicktripz.com": "clicktripz", + "clickwinks.com": "clickwinks", + "getclicky.com": "clicky", + "staticstuff.net": "clicky", + "clickyab.com": "clickyab", + "clicmanager.fr": "clicmanager", + "eplayer.clipsyndicate.com": "clip_syndicate", + "www.is1.clixgalore.com": "clixgalore", + "clixmetrix.com": "clixmetrix", + "clixsense.com": "clixsense", + "cloud-media.fr": "cloud-media.fr", + "cloudflare.com": "cloudflare", + "cloudflare.net": "cloudflare", + "cloudflare-dm-cmpimg.com": "cloudflare", + "cloudflare-dns.com": "cloudflare", + "cloudflare-ipfs.com": "cloudflare", + "cloudflare-quic.com": "cloudflare", + "cloudflare-terms-of-service-abuse.com": "cloudflare", + "cloudflare.tv": "cloudflare", + "cloudflareaccess.com": "cloudflare", + "cloudflareclient.com": "cloudflare", + "cloudflareinsights.com": "cloudflare", + "cloudflareok.com": "cloudflare", + "cloudflareportal.com": "cloudflare", + "cloudflareresolve.com": "cloudflare", + "cloudflaressl.com": "cloudflare", + "cloudflarestatus.com": "cloudflare", + "cloudflarestream.com": "cloudflare", + "pacloudflare.com": "cloudflare", + "sn-cloudflare.com": "cloudflare", + "videodelivery.net": "cloudflare", + "cloudimg.io": "cloudimage.io", + "cloudinary.com": "cloudinary", + "clovenetwork.com": "clove_network", + "clustrmaps.com": "clustrmaps", + "cnbc.com": "cnbc", + "cnetcontent.com": "cnetcontent.com", + "cnstats.ru": "cnstats", + "cnzz.com": "cnzz.com", + "umeng.com": "cnzz.com", + "acc-hd.de": "coadvertise", + "client.cobrowser.net": "cobrowser", + "codeonclick.com": "codeonclick.com", + "cogocast.net": "cogocast", + "coin-have.com": "coin_have", + "appsha1.cointraffic.io": "coin_traffic", + "authedmine.com": "coinhive", + "coin-hive.com": "coinhive", + "coinhive.com": "coinhive", + "coinurl.com": "coinurl", + "coll1onf.com": "coll1onf.com", + "coll2onf.com": "coll2onf.com", + "service.collarity.com": "collarity", + "static.clmbtech.com": "columbia_online", + "combotag.com": "combotag", + "pdk.theplatform.com": "comcast_technology_solutions", + "comm100.cn": "comm100", + "comm100.com": "comm100", + "cdn-cs.com": "commerce_sciences", + "cdn.mercent.com": "commercehub", + "link.mercent.com": "commercehub", + "commercialvalue.org": "commercialvalue.org", + "afcyhf.com": "commission_junction", + "anrdoezrs.net": "commission_junction", + "apmebf.com": "commission_junction", + "awltovhc.com": "commission_junction", + "emjcd.com": "commission_junction", + "ftjcfx.com": "commission_junction", + "lduhtrp.net": "commission_junction", + "qksz.net": "commission_junction", + "tkqlhce.com": "commission_junction", + "tqlkg.com": "commission_junction", + "yceml.net": "commission_junction", + "communicatorcorp.com": "communicator_corp", + "wowanalytics.co.uk": "communigator", + "c-col.com": "competexl", + "c.compete.com": "competexl", + "complex.com": "complex_media_network", + "complexmedianetwork.com": "complex_media_network", + "comprigo.com": "comprigo", + "comscore.com": "comscore", + "zqtk.net": "comscore", + "conative.de": "conative.de", + "condenast.com": "condenastdigital.com", + "conduit-banners.com": "conduit", + "conduit-data.com": "conduit", + "conduit.com": "conduit", + "confirmit.com": "confirmit", + "congstar.de": "congstar.de", + "connatix.com": "connatix.com", + "connected-by.connectad.io": "connectad", + "cdn.connecto.io": "connecto", + "connexity.net": "connexity", + "cxt.ms": "connexity", + "connextra.com": "connextra", + "rs6.net": "constant_contact", + "serverbid.com": "consumable", + "contactatonce.com": "contact_at_once", + "adrolays.de": "contact_impact", + "c-i.as": "contact_impact", + "df-srv.de": "contact_impact", + "d1uwd25yvxu96k.cloudfront.net": "contactme", + "static.contactme.com": "contactme", + "contaxe.com": "contaxe", + "content.ad": "content.ad", + "ingestion.contentinsights.com": "content_insights", + "contentexchange.me": "contentexchange.me", + "ctfassets.net": "contentful_gmbh", + "contentpass.de": "contentpass", + "contentpass.net": "contentpass", + "contentsquare.net": "contentsquare.net", + "d1aug3dv5magti.cloudfront.net": "contentwrx", + "d39se0h2uvfakd.cloudfront.net": "contentwrx", + "c-on-text.com": "context", + "intext.contextad.pl": "context.ad", + "continum.net": "continum_net", + "s2.contribusourcesyndication.com": "contribusource", + "hits.convergetrack.com": "convergetrack", + "fastclick.net": "conversant", + "mediaplex.com": "conversant", + "mplxtms.com": "conversant", + "cm-commerce.com": "conversio", + "media.conversio.com": "conversio", + "c.conversionlogic.net": "conversion_logic", + "conversionruler.com": "conversionruler", + "conversionsbox.com": "conversions_box", + "conversionsondemand.com": "conversions_on_demand", + "ant.conversive.nl": "conversive", + "convertexperiments.com": "convert", + "d3sjgucddk68ji.cloudfront.net": "convertfox", + "convertro.com": "convertro", + "d1ivexoxmp59q7.cloudfront.net": "convertro", + "conviva.com": "conviva", + "cookieconsent.silktide.com": "cookie_consent", + "cookie-script.com": "cookie_script", + "cookiebot.com": "cookiebot", + "cookieq.com": "cookieq", + "lite.piclens.com": "cooliris", + "copacet.com": "copacet", + "raasnet.com": "coreaudience", + "coremotives.com": "coremotives", + "coull.com": "coull", + "cpmrocket.com": "cpm_rocket", + "cpmprofit.com": "cpmprofit", + "cpmstar.com": "cpmstar", + "captifymedia.com": "cpx.to", + "cpx.to": "cpx.to", + "cqcounter.com": "cq_counter", + "cqq5id8n.com": "cqq5id8n.com", + "cquotient.com": "cquotient.com", + "craftkeys.com": "craftkeys", + "ads.crakmedia.com": "crakmedia_network", + "craktraffic.com": "crakmedia_network", + "crankyads.com": "crankyads", + "crashlytics.com": "crashlytics", + "cetrk.com": "crazy_egg", + "crazyegg.com": "crazy_egg", + "dnn506yrbagrg.cloudfront.net": "crazy_egg", + "creafi-online-media.com": "creafi", + "createjs.com": "createjs", + "creativecommons.org": "creative_commons", + "brandwatch.com": "crimsonhexagon_com", + "crimsonhexagon.com": "crimsonhexagon_com", + "hexagon-analytics.com": "crimsonhexagon_com", + "ctnsnet.com": "crimtan", + "crisp.chat": "crisp", + "crisp.im": "crisp", + "criteo.com": "criteo", + "criteo.net": "criteo", + "p.crm4d.com": "crm4d", + "crossengage.io": "crossengage", + "crosspixel.net": "crosspixel", + "crsspxl.com": "crosspixel", + "crosssell.info": "crosssell.info", + "crossss.com": "crossss", + "widget.crowdignite.com": "crowd_ignite", + "static.crowdscience.com": "crowd_science", + "ss.crowdprocess.com": "crowdprocess", + "our.glossip.nl": "crowdynews", + "widget.breakingburner.com": "crowdynews", + "widget.crowdynews.com": "crowdynews", + "searchg2.crownpeak.net": "crownpeak", + "snippet.omm.crownpeak.com": "crownpeak", + "cryptoloot.pro": "cryptoloot_miner", + "ctnetwork.hu": "ctnetwork", + "adzhub.com": "ctrlshift", + "data.withcubed.com": "cubed", + "cuelinks.com": "cuelinks", + "cdn.cupinteractive.com": "cup_interactive", + "curse.com": "curse.com", + "cursecdn.com": "cursecdn.com", + "assets.customer.io": "customer.io", + "widget.customerly.io": "customerly", + "cxense.com": "cxense", + "cxo.name": "cxo.name", + "cyberwing.co.jp": "cyber_wing", + "cybersource.com": "cybersource", + "cygnus.com": "cygnus", + "da-ads.com": "da-ads.com", + "dailymail.co.uk": "dailymail.co.uk", + "dailymotion.com": "dailymotion", + "dailymotionbus.com": "dailymotion", + "dm-event.net": "dailymotion", + "dmcdn.net": "dailymotion", + "dmxleo.com": "dailymotion_advertising", + "ds1.nl": "daisycon", + "dantrack.net": "dantrack.net", + "dmclick.cn": "darwin_marketing", + "tags.dashboardad.net": "dashboard_ad", + "datacaciques.com": "datacaciques.com", + "datacoral.com": "datacoral", + "abandonaid.com": "datacrushers", + "datacrushers.com": "datacrushers", + "datadome.co": "datadome", + "optimahub.com": "datalicious_datacollector", + "supert.ag": "datalicious_supertag", + "inextaction.net": "datalogix", + "nexac.com": "datalogix", + "datamind.ru": "datamind.ru", + "datatables.net": "datatables", + "adunits.datawrkz.com": "datawrkz", + "dataxpand.script.ag": "dataxpand", + "tc.dataxpand.com": "dataxpand", + "w55c.net": "dataxu", + "datds.net": "datds.net", + "pro-market.net": "datonics", + "displaymarketplace.com": "datran", + "davebestdeals.com": "davebestdeals.com", + "dawandastatic.com": "dawandastatic.com", + "dc-storm.com": "dc_stormiq", + "h4k5.com": "dc_stormiq", + "stormcontainertag.com": "dc_stormiq", + "stormiq.com": "dc_stormiq", + "dcbap.com": "dcbap.com", + "dcmn.com": "dcmn.com", + "statslogger.rocket.persgroep.cloud": "de_persgroep", + "deadlinefunnel.com": "deadline_funnel", + "cc2.dealer.com": "dealer.com", + "d9lq0o81skkdj.cloudfront.net": "dealer.com", + "esm1.net": "dealer.com", + "static.dealer.com": "dealer.com", + "decibelinsight.net": "decibel_insight", + "ads.dedicatedmedia.com": "dedicated_media", + "api.deep.bi": "deep.bi", + "deepintent.com": "deepintent.com", + "defpush.com": "defpush.com", + "deichmann.com": "deichmann.com", + "vxml4.delacon.com.au": "delacon", + "tracking.percentmobile.com": "delivr", + "adaction.se": "delta_projects", + "de17a.com": "delta_projects", + "deluxe.script.ag": "deluxe", + "delvenetworks.com": "delve_networks", + "company-target.com": "demandbase", + "demandbase.com": "demandbase", + "dmd53.com": "demandmedia", + "dmtracker.com": "demandmedia", + "deqwas.net": "deqwas", + "devatics.com": "devatics", + "developermedia.com": "developer_media", + "dapxl.com": "deviantart.net", + "deviantart.net": "deviantart.net", + "my.blueadvertise.com": "dex_platform", + "dgm-au.com": "dgm", + "s2d6.com": "dgm", + "d31y97ze264gaa.cloudfront.net": "dialogtech", + "d3von6il1wr7wo.cloudfront.net": "dianomi", + "dianomi.com": "dianomi", + "dianomioffers.co.uk": "dianomi", + "tag.didit.com": "didit_blizzard", + "track.did-it.com": "didit_maestro", + "privacy-center.org": "didomi", + "digg.com": "digg_widget", + "digicert.com": "digicert_trust_seal", + "phicdn.net": "digicert_trust_seal", + "digidip.net": "digidip", + "digiglitzmarketing.go2cloud.org": "digiglitz", + "wtp101.com": "digilant", + "digioh.com": "digioh", + "lightboxcdn.com": "digioh", + "digitalgov.gov": "digital.gov", + "cookiereports.com": "digital_control_room", + "adtag.cc": "digital_nomads", + "adready.com": "digital_remedy", + "adreadytractions.com": "digital_remedy", + "cpxinteractive.com": "digital_remedy", + "directtrack.com": "digital_river", + "onenetworkdirect.net": "digital_river", + "track.digitalriver.com": "digital_river", + "dwin1.com": "digital_window", + "digiteka.net": "digiteka", + "ultimedia.com": "digiteka", + "digitru.st": "digitrust", + "widget.dihitt.com.br": "dihitt_badge", + "dimml.io": "dimml", + "keywordsconnect.com": "direct_keyword_link", + "directadvert.ru": "directadvert", + "directrev.com": "directrev", + "discordapp.com": "discord", + "disneyplus.com": "disneyplus", + "bamgrid.com": "disneystreaming", + "dssedge.com": "disneystreaming", + "dssott.com": "disneystreaming", + "d81mfvml8p5ml.cloudfront.net": "display_block", + "disqus.com": "disqus", + "disquscdn.com": "disqus", + "disqusads.com": "disqus_ads", + "distiltag.com": "distil_tag", + "districtm.ca": "districtm.io", + "districtm.io": "districtm.io", + "jsrdn.com": "distroscale", + "div.show": "div.show", + "stats.vertriebsassistent.de": "diva", + "tag.divvit.com": "divvit", + "d-msquared.com": "dm2", + "and.co.uk": "dmg_media", + "dmm.co.jp": "dmm", + "ctret.de": "dmwd", + "toolbar.dockvine.com": "dockvine", + "awecr.com": "docler", + "fwbntw.com": "docler", + "s.dogannet.tv": "dogannet", + "domain.glass": "domainglass", + "www.domodomain.com": "domodomain", + "donation-tools.org": "donationtools", + "doofinder.com": "doofinder.com", + "embed.doorbell.io": "doorbell.io", + "dotandad.com": "dotandmedia", + "trackedlink.net": "dotmailer", + "dotmetrics.net": "dotmetrics.net", + "dotomi.com": "dotomi", + "dtmc.com": "dotomi", + "dtmpub.com": "dotomi", + "double.net": "double.net", + "2mdn.net": "doubleclick", + "doubleclick.net": "doubleclick", + "invitemedia.com": "doubleclick", + "doubleclick.com": "doubleclick", + "doublepimp.com": "doublepimp", + "doublepimpssl.com": "doublepimp", + "redcourtside.com": "doublepimp", + "xeontopa.com": "doublepimp", + "zerezas.com": "doublepimp", + "doubleverify.com": "doubleverify", + "wrating.com": "dratio", + "adsymptotic.com": "drawbridge", + "dreame.tech": "dreame_tech", + "dreametech.com": "dreame_tech", + "dreamlab.pl": "dreamlab.pl", + "drift.com": "drift", + "js.driftt.com": "drift", + "getdrip.com": "drip", + "dropbox.com": "dropbox.com", + "dropboxstatic.com": "dropbox.com", + "z5x.net": "dsnr_media_group", + "dsp-rambler.ru": "dsp_rambler", + "m6d.com": "dstillery", + "media6degrees.com": "dstillery", + "dtscout.com": "dtscout.com", + "dd-cdn.multiscreensite.com": "dudamobile", + "px.multiscreensite.com": "dudamobile", + "cdn-0.d41.co": "dun_and_bradstreet", + "cn01.dwstat.cn": "dwstat.cn", + "dynad.net": "dynad", + "dyntrk.com": "dynadmic", + "dyntracker.de": "dynamic_1001_gmbh", + "media01.eu": "dynamic_1001_gmbh", + "content.dl-rms.com": "dynamic_logic", + "dlqm.net": "dynamic_logic", + "questionmarket.com": "dynamic_logic", + "dynamicyield.com": "dynamic_yield", + "beacons.hottraffic.nl": "dynata", + "dynatrace.com": "dynatrace.com", + "dyncdn.me": "dyncdn.me", + "e-planning.net": "e-planning", + "eadv.it": "eadv", + "eanalyzer.de": "eanalyzer.de", + "early-birds.fr": "early_birds", + "cdn.earnify.com": "earnify", + "earnify.com": "earnify_tracker", + "easyads.bg": "easyads", + "easylist.club": "easylist_club", + "classistatic.de": "ebay", + "ebay-us.com": "ebay", + "ebay.com": "ebay", + "ebay.de": "ebay", + "ebayclassifiedsgroup.com": "ebay", + "ebaycommercenetwork.com": "ebay", + "ebaydesc.com": "ebay", + "ebayimg.com": "ebay", + "ebayrtm.com": "ebay", + "ebaystatic.com": "ebay", + "ad.about.co.kr": "ebay_korea", + "adcheck.about.co.kr": "ebay_korea", + "adn.ebay.com": "ebay_partner_network", + "beead.co.uk": "ebuzzing", + "beead.fr": "ebuzzing", + "beead.net": "ebuzzing", + "ebuzzing.com": "ebuzzing", + "ebz.io": "ebuzzing", + "echoenabled.com": "echo", + "eclick.vn": "eclick", + "econda-monitor.de": "econda", + "eco-tag.jp": "ecotag", + "alphacdn.net": "edgio", + "edg.io": "edgio", + "edgecast.com": "edgio", + "edgecastcdn.net": "edgio", + "edgecastdns.net": "edgio", + "sigmacdn.net": "edgio", + "ecustomeropinions.com": "edigitalresearch", + "effectivemeasure.net": "effective_measure", + "effiliation.com": "effiliation", + "egain.net": "egain", + "cloud-emea.analytics-egain.com": "egain_analytics", + "ehi-siegel.de": "ehi-siegel_de", + "ekmpinpoint.com": "ekmpinpoint", + "ekomi.de": "ekomi", + "elasticad.net": "elastic_ad", + "elasticbeanstalk.com": "elastic_beanstalk", + "cloudcell.com": "electronic_arts", + "ea.com": "electronic_arts", + "eamobile.com": "electronic_arts", + "element.io": "element", + "riot.im": "element", + "elicitapp.com": "elicit", + "eloqua.com": "eloqua", + "en25.com": "eloqua", + "eluxer.net": "eluxer_net", + "tracker.emailaptitude.com": "email_aptitude", + "tag.email-attitude.com": "email_attitude", + "app.emarketeer.com": "emarketeer", + "embed.ly": "embed.ly", + "embedly.com": "embed.ly", + "emediate.dk": "emediate", + "emediate.eu": "emediate", + "emediate.se": "emediate", + "emetriq.de": "emetriq", + "e2ma.net": "emma", + "adinsight.co.kr": "emnet", + "colbenson.es": "empathy", + "emsmobile.de": "emsmobile.de", + "sitecompass.com": "encore_metrics", + "enectoanalytics.com": "enecto_analytics", + "trk.enecto.com": "enecto_analytics", + "track.engagesciences.com": "engage_sciences", + "widget.engageya.com": "engageya_widget", + "engagio.com": "engagio", + "engineseeker.com": "engineseeker", + "enquisite.com": "enquisite", + "adtlgc.com": "enreach", + "ats.tumri.net": "ensemble", + "ensighten.com": "ensighten", + "envolve.com": "envolve", + "cdn.callbackkiller.com": "envybox", + "email-reflex.com": "eperflex", + "epicgameads.com": "epic_game_ads", + "trafficmp.com": "epic_marketplace", + "adshost1.com": "epom", + "adshost2.com": "epom", + "epom.com": "epom", + "epoq.de": "epoq", + "banzaiadv.it": "eprice", + "eproof.com": "eproof", + "equitystory.com": "eqs_group", + "eqads.com": "eqworks", + "ero-advertising.com": "eroadvertising", + "eroadvertising.com": "eroadvertising", + "d15qhc0lu1ghnk.cloudfront.net": "errorception", + "errorception.com": "errorception", + "eshopcomp.com": "eshopcomp.com", + "espncdn.com": "espn_cdn", + "esprit.de": "esprit.de", + "cybermonitor.com": "estat", + "estat.com": "estat", + "teste-s3-maycon.s3.amazonaws.com": "etag", + "etahub.com": "etahub.com", + "etargetnet.com": "etarget", + "ethn.io": "ethnio", + "pages.etology.com": "etology", + "sa.etp-prod.com": "etp", + "etracker.com": "etracker", + "etracker.de": "etracker", + "sedotracker.com": "etracker", + "etrigue.com": "etrigue", + "etsystatic.com": "etsystatic", + "eulerian.net": "eulerian", + "eultech.fnac.com": "eulerian", + "ew3.io": "eulerian", + "euroads.dk": "euroads", + "euroads.fi": "euroads", + "euroads.no": "euroads", + "newpromo.europacash.com": "europecash", + "tracker.euroweb.net": "euroweb_counter", + "apptegic.com": "evergage.com", + "evergage.com": "evergage.com", + "listener.everstring.com": "everstring", + "waterfrontmedia.com": "everyday_health", + "betrad.com": "evidon", + "evidon.com": "evidon", + "evisitanalyst.com": "evisit_analyst", + "evisitcs.com": "evisit_analyst", + "websiteperform.com": "evisit_analyst", + "ads.exactdrive.com": "exact_drive", + "exactag.com": "exactag", + "exelator.com": "exelate", + "dynamicoxygen.com": "exitjunction", + "exitjunction.com": "exitjunction", + "exdynsrv.com": "exoclick", + "exoclick.com": "exoclick", + "exosrv.com": "exoclick", + "exoticads.com": "exoticads.com", + "expedia.com": "expedia", + "trvl-px.com": "expedia", + "eccmp.com": "experian", + "audienceiq.com": "experian_marketing_services", + "techlightenment.com": "experian_marketing_services", + "expo-max.com": "expo-max", + "server.exposebox.com": "expose_box", + "sf.exposebox.com": "expose_box_widgets", + "express.co.uk": "express.co.uk", + "d1lp05q4sghme9.cloudfront.net": "expressvpn", + "extreme-dm.com": "extreme_tracker", + "eyenewton.ru": "eye_newton", + "eyeota.net": "eyeota", + "eyereturn.com": "eyereturnmarketing", + "eyeviewads.com": "eyeview", + "ezakus.net": "ezakus", + "f11-ads.com": "f11-ads.com", + "facebook.com": "facebook", + "facebook.net": "facebook", + "graph.facebook.com": "facebook_audience", + "fbcdn.net": "facebook_cdn", + "fbsbx.com": "facebook_cdn", + "facetz.net": "facetz.dca", + "adsfac.eu": "facilitate_digital", + "adsfac.net": "facilitate_digital", + "adsfac.sg": "facilitate_digital", + "adsfac.us": "facilitate_digital", + "faktor.io": "faktor.io", + "thefancy.com": "fancy_widget", + "d1q7pknmpq2wkm.cloudfront.net": "fanplayr", + "fap.to": "fap.to", + "farlightgames.com": "farlight_pte_ltd", + "fastly-insights.com": "fastly_insights", + "fastly.net": "fastlylb.net", + "fastlylb.net": "fastlylb.net", + "fastly-masque.net": "fastlylb.net", + "fastpic.ru": "fastpic.ru", + "fmpub.net": "federated_media", + "fby.s3.amazonaws.com": "feedbackify", + "feedbackify.com": "feedbackify", + "feedburner.com": "feedburner.com", + "feedify.de": "feedify", + "feedjit.com": "feedjit", + "log.feedjit.com": "feedjit", + "tracking.feedperfect.com": "feedperfect", + "feedsportal.com": "feedsportal", + "feefo.com": "feefo", + "fidelity-media.com": "fidelity_media", + "fiksu.com": "fiksu", + "filamentapp.s3.amazonaws.com": "filament.io", + "fileserve.xyz": "fileserve", + "tools.financeads.net": "financeads", + "tracker.financialcontent.com": "financial_content", + "findizer.fr": "findizer.fr", + "findologic.com": "findologic.com", + "app-measurement.com": "firebase", + "fcm.googleapis.com": "firebase", + "firebase.com": "firebase", + "firebase.google.com": "firebase", + "firebase.googleapis.com": "firebase", + "firebaseapp.com": "firebase", + "firebaseappcheck.googleapis.com": "firebase", + "firebasedynamiclinks-ipv4.googleapis.com": "firebase", + "firebasedynamiclinks-ipv6.googleapis.com": "firebase", + "firebasedynamiclinks.googleapis.com": "firebase", + "firebaseinappmessaging.googleapis.com": "firebase", + "firebaseinstallations.googleapis.com": "firebase", + "firebaselogging-pa.googleapis.com": "firebase", + "firebaselogging.googleapis.com": "firebase", + "firebaseperusertopics-pa.googleapis.com": "firebase", + "firebaseremoteconfig.googleapis.com": "firebase", + "firebaseio.com": "firebaseio.com", + "firstimpression.io": "first_impression", + "fitanalytics.com": "fit_analytics", + "fivetran.com": "fivetran", + "flagads.net": "flag_ads", + "flagcounter.com": "flag_counter", + "flashnews.com.au": "flash", + "flashtalking.com": "flashtalking", + "flattr.com": "flattr_button", + "flexlinks.com": "flexoffers", + "linkoffers.net": "flexoffers", + "flickr.com": "flickr_badge", + "staticflickr.com": "flickr_badge", + "lflipboard.com": "flipboard", + "flipboard.com": "flipboard", + "flite.com": "flite", + "flixcdn.com": "flixcdn.com", + "flix360.com": "flixmedia", + "flixcar.com": "flixmedia", + "flocktory.com": "flocktory.com", + "flowplayer.org": "flowplayer", + "adingo.jp": "fluct", + "clicken.us": "fluent", + "strcst.net": "fluid", + "fluidads.co": "fluidads", + "fluidsurveys.com": "fluidsurveys", + "cdn.flurry.com": "flurry", + "data.flurry.com": "flurry", + "flurry.com": "flurry", + "flx1.com": "flxone", + "flxpxl.com": "flxone", + "api.flyertown.ca": "flyertown", + "adservinghost.com": "fmadserving", + "adservinginternational.com": "fmadserving", + "special.matchtv.ru": "fonbet", + "kavijaseuranta.fi": "fonecta", + "fontawesome.com": "fontawesome_com", + "foodieblogroll.com": "foodie_blogroll", + "footprintlive.com": "footprint", + "footprintdns.com": "footprintdns.com", + "forcetrac.com": "forcetrac", + "fqsecure.com": "forensiq", + "fqtag.com": "forensiq", + "securepaths.com": "forensiq", + "4seeresults.com": "foresee", + "foresee.com": "foresee", + "cdn-static.formisimo.com": "formisimo", + "forter.com": "forter", + "fortlachanhecksof.info": "fortlachanhecksof.info", + "platform.foursquare.com": "foursquare_widget", + "fout.jp": "fout.jp", + "fimserve.com": "fox_audience_network", + "foxsports.com.au": "fox_sports", + "fncstatic.com": "foxnews_static", + "cdn.foxpush.net": "foxpush", + "foxpush.com": "foxpush", + "foxtel.com.au": "foxtel", + "foxydeal.com": "foxydeal_com", + "yabidos.com": "fraudlogix", + "besucherstatistiken.com": "free_counter", + "compteurdevisite.com": "free_counter", + "contadorvisitasgratis.com": "free_counter", + "contatoreaccessi.com": "free_counter", + "freecounterstat.com": "free_counter", + "statcounterfree.com": "free_counter", + "webcontadores.com": "free_counter", + "fastonlineusers.com": "free_online_users", + "fastwebcounter.com": "free_online_users", + "freeonlineusers.com": "free_online_users", + "atoomic.com": "free_pagerank", + "free-pagerank.com": "free_pagerank", + "freedom.com": "freedom_mortgage", + "freegeoip.net": "freegeoip_net", + "freenet.de": "freenet_de", + "freent.de": "freenet_de", + "freeview.com": "freeview", + "freeview.com.au": "freeview", + "freeviewaustralia.tv": "freeview", + "fwmrm.net": "freewheel", + "heimdall.fresh8.co": "fresh8", + "d36mpcpuzc4ztk.cloudfront.net": "freshdesk", + "freshdesk.com": "freshdesk", + "freshplum.com": "freshplum", + "friendbuy.com": "friendbuy", + "friendfeed.com": "friendfeed", + "adultfriendfinder.com": "friendfinder_network", + "amigos.com": "friendfinder_network", + "board-books.com": "friendfinder_network", + "cams.com": "friendfinder_network", + "facebookofsex.com": "friendfinder_network", + "getiton.com": "friendfinder_network", + "nostringsattached.com": "friendfinder_network", + "pop6.com": "friendfinder_network", + "streamray.com": "friendfinder_network", + "inpref.com": "frosmo_optimizer", + "inpref.s3-external-3.amazonaws.com": "frosmo_optimizer", + "inpref.s3.amazonaws.com": "frosmo_optimizer", + "adflan.com": "fruitflan", + "fruitflan.com": "fruitflan", + "fstrk.net": "fstrk.net", + "cookie.fuel451.com": "fuelx", + "fullstory.com": "fullstory", + "track.funnelytics.io": "funnelytics", + "angsrvr.com": "fyber", + "fyber.com": "fyber", + "game-advertising-online.com": "game_advertising_online", + "gameanalytics.com": "gameanalytics", + "gamedistribution.com": "gamedistribution.com", + "gamerdna.com": "gamerdna", + "gannett-cdn.com": "gannett", + "gaug.es": "gaug.es", + "gpm-digital.com": "gazprom-media_digital", + "js.gb-world.net": "gb-world", + "gdeslon.ru": "gdeslon", + "gdmdigital.com": "gdm_digital", + "gntm.geeen.co.jp": "geeen", + "lpomax.net": "geeen", + "gemius.pl": "gemius", + "generaltracking.de": "generaltracking_de", + "genesismedia.com": "genesis", + "gssprt.jp": "geniee", + "rsvpgenius.com": "genius", + "genoo.com": "genoo", + "js.geoads.com": "geoads", + "geolify.com": "geolify", + "geoplugin.net": "geoplugin", + "geotrust.com": "geotrust", + "geovisite.com": "geovisite", + "gestionpub.com": "gestionpub", + "app.getresponse.com": "get_response", + "getsitecontrol.com": "get_site_control", + "getconversion.net": "getconversion", + "widgets.getglue.com": "getglue", + "adhigh.net": "getintent", + "static.getkudos.me": "getkudos", + "yottos.com": "getmyad", + "gsfn.us": "getsatisfaction", + "gettyimages.com": "gettyimages", + "sensic.net": "gfk", + "gfycat.com": "gfycat.com", + "a.giantrealm.com": "giant_realm", + "videostat.com": "giantmedia", + "gigaonclick.com": "giga", + "analytics.gigyahosting1.com": "gigya", + "gigcount.com": "gigya", + "gigya.com": "gigya", + "service.giosg.com": "giosg", + "giphy.com": "giphy.com", + "giraff.io": "giraff.io", + "github.com": "github", + "githubassets.com": "github", + "githubusercontent.com": "github", + "ghcr.io": "github", + "github.blog": "github", + "github.dev": "github", + "octocaptcha.com": "github", + "githubapp.com": "github_apps", + "github.io": "github_pages", + "aff3.gittigidiyor.com": "gittigidiyor_affiliate_program", + "gittip.com": "gittip", + "sitest.jp": "glad_cube", + "glganltcs.space": "glganltcs.space", + "globalwebindex.net": "global_web_index", + "globalnotifier.com": "globalnotifier.com", + "globalsign.com": "globalsign", + "ad.globaltakeoff.net": "globaltakeoff", + "glomex.cloud": "glomex.com", + "glomex.com": "glomex.com", + "glotgrx.com": "glotgrx.com", + "a.gmdelivery.com": "gm_delivery", + "gmail.com": "gmail", + "ad.atown.jp": "gmo", + "gmx.net": "gmx_net", + "gmxpro.net": "gmx_net", + "go.com": "go.com", + "affiliate.godaddy.com": "godaddy_affiliate_program", + "trafficfacts.com": "godaddy_site_analytics", + "seal.godaddy.com": "godaddy_site_seal", + "tracking.godatafeed.com": "godatafeed", + "counter.goingup.com": "goingup", + "axf8.net": "gomez", + "goodadvert.ru": "goodadvert", + "google.at": "google", + "google.be": "google", + "google.ca": "google", + "google.ch": "google", + "google.co.id": "google", + "google.co.in": "google", + "google.co.jp": "google", + "google.co.ma": "google", + "google.co.th": "google", + "google.co.uk": "google", + "google.com": "google", + "google.com.ar": "google", + "google.com.au": "google", + "google.com.br": "google", + "google.com.mx": "google", + "google.com.tr": "google", + "google.com.tw": "google", + "google.com.ua": "google", + "google.cz": "google", + "google.de": "google", + "google.dk": "google", + "google.dz": "google", + "google.es": "google", + "google.fi": "google", + "google.fr": "google", + "google.gr": "google", + "google.hu": "google", + "google.ie": "google", + "google.it": "google", + "google.nl": "google", + "google.no": "google", + "google.pl": "google", + "google.pt": "google", + "google.ro": "google", + "google.rs": "google", + "google.ru": "google", + "google.se": "google", + "google.tn": "google", + "1e100.net": "google", + "agnss.goog": "google", + "channel.status.request.url": "google", + "g.cn": "google", + "g.co": "google", + "google.ad": "google", + "google.ae": "google", + "google.al": "google", + "google.am": "google", + "google.as": "google", + "google.az": "google", + "google.ba": "google", + "google.bf": "google", + "google.bg": "google", + "google.bi": "google", + "google.bj": "google", + "google.bs": "google", + "google.bt": "google", + "google.by": "google", + "google.cat": "google", + "google.cd": "google", + "google.cf": "google", + "google.cg": "google", + "google.ci": "google", + "google.cl": "google", + "google.cm": "google", + "google.cn": "google", + "google.co.ao": "google", + "google.co.bw": "google", + "google.co.ck": "google", + "google.co.cr": "google", + "google.co.il": "google", + "google.co.ke": "google", + "google.co.kr": "google", + "google.co.ls": "google", + "google.co.mz": "google", + "google.co.nz": "google", + "google.co.tz": "google", + "google.co.ug": "google", + "google.co.uz": "google", + "google.co.ve": "google", + "google.co.vi": "google", + "google.co.za": "google", + "google.co.zm": "google", + "google.co.zw": "google", + "google.com.af": "google", + "google.com.ag": "google", + "google.com.ai": "google", + "google.com.bd": "google", + "google.com.bh": "google", + "google.com.bn": "google", + "google.com.bo": "google", + "google.com.bz": "google", + "google.com.co": "google", + "google.com.cu": "google", + "google.com.cy": "google", + "google.com.ec": "google", + "google.com.eg": "google", + "google.com.et": "google", + "google.com.fj": "google", + "google.com.gh": "google", + "google.com.gi": "google", + "google.com.gt": "google", + "google.com.hk": "google", + "google.com.jm": "google", + "google.com.kh": "google", + "google.com.kw": "google", + "google.com.lb": "google", + "google.com.my": "google", + "google.com.na": "google", + "google.com.nf": "google", + "google.com.ng": "google", + "google.com.ni": "google", + "google.com.np": "google", + "google.com.om": "google", + "google.com.pa": "google", + "google.com.pe": "google", + "google.com.pg": "google", + "google.com.ph": "google", + "google.com.pk": "google", + "google.com.pr": "google", + "google.com.py": "google", + "google.com.qa": "google", + "google.com.sa": "google", + "google.com.sb": "google", + "google.com.sg": "google", + "google.com.sl": "google", + "google.com.sv": "google", + "google.com.tj": "google", + "google.com.uy": "google", + "google.com.vc": "google", + "google.com.vn": "google", + "google.cv": "google", + "google.dj": "google", + "google.dm": "google", + "google.ee": "google", + "google.fm": "google", + "google.ga": "google", + "google.ge": "google", + "google.gg": "google", + "google.gl": "google", + "google.gm": "google", + "google.gp": "google", + "google.gy": "google", + "google.hn": "google", + "google.hr": "google", + "google.ht": "google", + "google.im": "google", + "google.in": "google", + "google.iq": "google", + "google.is": "google", + "google.je": "google", + "google.jo": "google", + "google.kg": "google", + "google.ki": "google", + "google.kz": "google", + "google.la": "google", + "google.li": "google", + "google.lk": "google", + "google.lt": "google", + "google.lu": "google", + "google.lv": "google", + "google.md": "google", + "google.me": "google", + "google.mg": "google", + "google.mk": "google", + "google.ml": "google", + "google.mn": "google", + "google.ms": "google", + "google.mu": "google", + "google.mv": "google", + "google.mw": "google", + "google.ne": "google", + "google.net": "google", + "google.nr": "google", + "google.nu": "google", + "google.org": "google", + "google.pn": "google", + "google.ps": "google", + "google.rw": "google", + "google.sc": "google", + "google.sh": "google", + "google.si": "google", + "google.sk": "google", + "google.sm": "google", + "google.sn": "google", + "google.so": "google", + "google.sr": "google", + "google.st": "google", + "google.td": "google", + "google.tg": "google", + "google.tk": "google", + "google.tl": "google", + "google.tm": "google", + "google.to": "google", + "google.tt": "google", + "google.us": "google", + "google.vg": "google", + "google.vu": "google", + "google.ws": "google", + "googleapis.cn": "google", + "googlecode.com": "google", + "googledownloads.cn": "google", + "googleoptimize.com": "google", + "googleweblight.in": "google", + "googlezip.net": "google", + "gstatic.cn": "google", + "news.google.com": "google", + "oo.gl": "google", + "withgoogle.com": "google", + "googleadservices.com": "google_adservices", + "google-analytics.com": "google_analytics", + "app-analytics-services.com": "google_analytics", + "ssl-google-analytics.l.google.com": "google_analytics", + "www-googletagmanager.l.google.com": "google_analytics", + "appspot.com": "google_appspot", + "googlehosted.com": "google_appspot", + "accounts.google.com": "google_auth", + "myaccount.google.com": "google_auth", + "oauth2.googleapis.com": "google_auth", + "ogs.google.com": "google_auth", + "securetoken.googleapis.com": "google_auth", + "beacons-google.com": "google_beacons", + "alt1-mtalk.google.com": "google_chat", + "alt2-mtalk.google.com": "google_chat", + "alt3-mtalk.google.com": "google_chat", + "alt4-mtalk.google.com": "google_chat", + "alt5-mtalk.google.com": "google_chat", + "alt6-mtalk.google.com": "google_chat", + "alt7-mtalk.google.com": "google_chat", + "alt8-mtalk.google.com": "google_chat", + "chat.google.com": "google_chat", + "mobile-gtalk.l.google.com": "google_chat", + "mobile-gtalk4.l.google.com": "google_chat", + "mtalk.google.com": "google_chat", + "mtalk4.google.com": "google_chat", + "talk.google.com": "google_chat", + "talk.l.google.com": "google_chat", + "talkx.l.google.com": "google_chat", + "cloud.google.com": "google_cloud_platform", + "gcp.gvt2.com": "google_cloud_platform", + "storage.googleapis.com": "google_cloud_storage", + "adsensecustomsearchads.com": "google_custom_search", + "dns.google": "google_dns", + "dns.google.com": "google_dns", + "google-public-dns-a.google.com": "google_dns", + "google-public-dns-b.google.com": "google_dns", + "domains.google": "google_domains", + "googledomains.com": "google_domains", + "nic.google": "google_domains", + "registry.google": "google_domains", + "edge.google.com": "google_edge", + "mail-ads.google.com": "google_email", + "fonts.googleapis.com": "google_fonts", + "cloudfunctions.net": "google_hosted", + "ghs.googlehosted.com": "google_hosted", + "ghs4.googlehosted.com": "google_hosted", + "ghs46.googlehosted.com": "google_hosted", + "ghs6.googlehosted.com": "google_hosted", + "googlehosted.l.googleusercontent.com": "google_hosted", + "run.app": "google_hosted", + "supl.google.com": "google_location", + "earth.app.goo.gl": "google_maps", + "geo0.ggpht.com": "google_maps", + "geo1.ggpht.com": "google_maps", + "geo2.ggpht.com": "google_maps", + "geo3.ggpht.com": "google_maps", + "kh.google.com": "google_maps", + "maps.app.goo.gl": "google_maps", + "maps.google.ca": "google_maps", + "maps.google.ch": "google_maps", + "maps.google.co.jp": "google_maps", + "maps.google.co.uk": "google_maps", + "maps.google.com": "google_maps", + "maps.google.com.mx": "google_maps", + "maps.google.es": "google_maps", + "maps.google.se": "google_maps", + "maps.gstatic.com": "google_maps", + "adsense.google.com": "google_marketing", + "adservice.google.ca": "google_marketing", + "adservice.google.co.in": "google_marketing", + "adservice.google.co.kr": "google_marketing", + "adservice.google.co.uk": "google_marketing", + "adservice.google.co.za": "google_marketing", + "adservice.google.com": "google_marketing", + "adservice.google.com.ar": "google_marketing", + "adservice.google.com.au": "google_marketing", + "adservice.google.com.br": "google_marketing", + "adservice.google.com.co": "google_marketing", + "adservice.google.com.gt": "google_marketing", + "adservice.google.com.mx": "google_marketing", + "adservice.google.com.pe": "google_marketing", + "adservice.google.com.ph": "google_marketing", + "adservice.google.com.pk": "google_marketing", + "adservice.google.com.tr": "google_marketing", + "adservice.google.com.tw": "google_marketing", + "adservice.google.com.vn": "google_marketing", + "adservice.google.de": "google_marketing", + "adservice.google.dk": "google_marketing", + "adservice.google.es": "google_marketing", + "adservice.google.fr": "google_marketing", + "adservice.google.nl": "google_marketing", + "adservice.google.no": "google_marketing", + "adservice.google.pl": "google_marketing", + "adservice.google.ru": "google_marketing", + "adservice.google.vg": "google_marketing", + "dai.google.com": "google_marketing", + "doubleclickbygoogle.com": "google_marketing", + "googlesyndication-cn.com": "google_marketing", + "duo.google.com": "google_meet", + "hangouts.clients6.google.com": "google_meet", + "hangouts.google.com": "google_meet", + "hangouts.googleapis.com": "google_meet", + "meet.google.com": "google_meet", + "meetings.googleapis.com": "google_meet", + "stun.l.google.com": "google_meet", + "stun1.l.google.com": "google_meet", + "ggpht.com": "google_photos", + "play-fe.googleapis.com": "google_play", + "play-lh.googleusercontent.com": "google_play", + "play.google.com": "google_play", + "play.googleapis.com": "google_play", + "1e100cdn.net": "google_servers", + "gvt1.com": "google_servers", + "gvt2.com": "google_servers", + "gvt3.com": "google_servers", + "googlesyndication.com": "google_syndication", + "googletagmanager.com": "google_tag_manager", + "googletagservices.com": "google_tag_manager", + "translate.google.com": "google_translate", + "googletraveladservices.com": "google_travel_adds", + "pki.goog": "google_trust_services", + "googlecommerce.com": "google_trusted_stores", + "googleusercontent.com": "google_users", + "telephony.goog": "google_voice", + "voice.google.com": "google_voice", + "gmodules.com": "google_widgets", + "calendar.google.com": "google_workspace", + "contacts.google.com": "google_workspace", + "currents.google.com": "google_workspace", + "docs.google.com": "google_workspace", + "drive.google.com": "google_workspace", + "forms.google.com": "google_workspace", + "gsuite.google.com": "google_workspace", + "jamboard.google.com": "google_workspace", + "keep.google.com": "google_workspace", + "plus.google.com": "google_workspace", + "sheets.google.com": "google_workspace", + "slides.google.com": "google_workspace", + "spreadsheets.google.com": "google_workspace", + "googleapis.com": "googleapis.com", + "gooal.herokuapp.com": "goooal", + "gooo.al": "goooal", + "cdn.triggertag.gorillanation.com": "gorilla_nation", + "evolvemediametrics.com": "gorilla_nation", + "d1l6p2sc9645hc.cloudfront.net": "gosquared", + "gosquared.com": "gosquared", + "gostats.com": "gostats", + "govmetric.com": "govmetric", + "servmetric.com": "govmetric", + "b.grabo.bg": "grabo_affiliate", + "trw12.com": "grandslammedia", + "tuberewards.com": "grandslammedia", + "d2bw638ufki166.cloudfront.net": "granify", + "granify.com": "granify", + "grapeshot.co.uk": "grapeshot", + "gscontxt.net": "grapeshot", + "graphcomment.com": "graph_comment", + "gravatar.com": "gravatar", + "cdn.gravitec.net": "gravitec", + "gravity.com": "gravity_insights", + "grvcdn.com": "gravity_insights", + "greatviews.de": "greatviews.de", + "gandrad.org": "green_and_red", + "green-red.com": "green_and_red", + "co2stats.com": "green_certified_site", + "greenstory.ca": "green_story", + "greentube.com": "greentube.com", + "gt-cdn.net": "greentube.com", + "greystripe.com": "greystripe", + "groovehq.com": "groove", + "groovinads.com": "groovinads", + "bidagent.xad.com": "groundtruth", + "gmads.net": "groupm_server", + "grmtech.net": "groupm_server", + "media.gsimedia.net": "gsi_media", + "gstatic.com": "gstatic", + "fx.gtop.ro": "gtop", + "fx.gtopstats.com": "gtop", + "gubagootracking.com": "gugaboo", + "guj.de": "guj.de", + "emsservice.de": "gujems", + "gumgum.com": "gumgum", + "gumroad.com": "gumroad", + "gunggo.com": "gunggo", + "h12-media.com": "h12_ads", + "h12-media.net": "h12_ads", + "hnbutton.appspot.com": "hacker_news_button", + "haendlerbund.de": "haendlerbund.de", + "halogennetwork.com": "halogen_network", + "d1l7z5ofrj6ab8.cloudfront.net": "happy_fox_chat", + "ad.harrenmedianetwork.com": "harren_media", + "ads.networkhm.com": "harren_media", + "app.hatchbuck.com": "hatchbuck", + "hhcdn.ru": "head_hunter", + "healte.de": "healte.de", + "d36lvucg9kzous.cloudfront.net": "heap", + "heapanalytics.com": "heap", + "heatmap.it": "heatmap", + "weltsport.net": "heimspiel", + "hellobar.com": "hello_bar", + "hellosociety.com": "hellosociety", + "here.com": "here", + "herokuapp.com": "heroku", + "heureka.cz": "heureka-widget", + "heybubble.com": "heybubble", + "heyos.com": "heyos", + "adlink.net": "hi-media_performance", + "comclick.com": "hi-media_performance", + "hi-mediaserver.com": "hi-media_performance", + "himediads.com": "hi-media_performance", + "himediadx.com": "hi-media_performance", + "hiconversion.com": "hiconversion", + "highwebmedia.com": "highwebmedia.com", + "hwcdn.net": "highwinds", + "hiiir.com": "hiiir", + "hiro.tv": "hiro", + "histats.com": "histats", + "hit-parade.com": "hit-parade", + "hit.ua": "hit.ua", + "hitslink.com": "hitslink", + "hitsprocessor.com": "hitslink", + "hitsniffer.com": "hitsniffer", + "hittail.com": "hittail", + "hivedx.com": "hivedx.com", + "ads.thehiveworks.com": "hiveworks", + "hockeyapp.net": "hockeyapp", + "hoholikik.club": "hoholikik.club", + "h-cdn.com": "hola_player", + "homeaway.com": "homeaway", + "honeybadger.io": "honeybadger", + "hlserve.com": "hooklogic", + "apiae.hopscore.com": "hop-cube", + "hotdogsandads.com": "hotdogsandads.com", + "hotjar.com": "hotjar", + "hotkeys.com": "hotkeys", + "hotlog.ru": "hotlog.ru", + "hotwords.com": "hotwords", + "hotwords.es": "hotwords", + "howtank.com": "howtank.com", + "hqentertainmentnetwork.com": "hqentertainmentnetwork.com", + "justservingfiles.net": "hqentertainmentnetwork.com", + "hsoub.com": "hsoub", + "hstrck.com": "hstrck.com", + "httpool.com": "httpool", + "toboads.com": "httpool", + "hubrus.com": "hubrus", + "hs-analytics.net": "hubspot", + "hs-scripts.com": "hubspot", + "hsleadflows.net": "hubspot", + "hubapi.com": "hubspot", + "hubspot.com": "hubspot", + "forms.hubspot.com": "hubspot_forms", + "hubvisor.io": "hubvisor.io", + "files.hucksterbot.com": "hucksterbot", + "hupso.com": "hupso", + "hurra.com": "hurra_tracker", + "hybrid.ai": "hybrid.ai", + "targetix.net": "hybrid.ai", + "hypeads.org": "hype_exchange", + "hypercomments.com": "hypercomments", + "hyves.nl": "hyves_widgets", + "hyvyd.com": "hyvyd", + "ib-ibi.com": "i-behavior", + "i-mobile.co.jp": "i-mobile", + "r.i.ua": "i.ua", + "i10c.net": "i10c.net", + "i2i.jp": "i2i.jp", + "i2idata.com": "i2i.jp", + "consensu.org": "iab_consent", + "iadvize.com": "iadvize", + "cmcore.com": "ibm_customer_experience", + "coremetrics.com": "ibm_customer_experience", + "coremetrics.eu": "ibm_customer_experience", + "tracker.icerocket.com": "icerocket_tracker", + "nsimg.net": "icf_technology", + "optimix.asia": "iclick", + "ic-live.com": "icrossing", + "icstats.nl": "icstats", + "icuazeczpeoohx.com": "icuazeczpeoohx.com", + "id-news.net": "id-news.net", + "idcdn.de": "id-news.net", + "cdn.id.services": "id_services", + "e-generator.com": "ideal_media", + "idealo.com": "idealo_com", + "identrust.com": "identrust", + "ideoclick.com": "ideoclick", + "s.idio.co": "idio", + "ie8eamus.com": "ie8eamus.com", + "600z.com": "ientry", + "api.iflychat.com": "iflychat", + "ignitionone.com": "ignitionone", + "knotice.net": "ignitionone", + "igodigital.com": "igodigital", + "ad.wsod.com": "ihs_markit", + "collserve.com": "ihs_markit_online_shopper_insigh", + "ihvmcqojoj.com": "ihvmcqojoj.com", + "iias.eu": "iias.eu", + "ijento.com": "ijento", + "adv.imadrep.co.kr": "imad", + "worthathousandwords.com": "image_advantage", + "picadmedia.com": "image_space_media", + "imgix.net": "imgix.net", + "imgur.com": "imgur", + "vidigital.ru": "imho_vi", + "immanalytics.com": "immanalytics", + "immobilienscout24.de": "immobilienscout24_de", + "static-immobilienscout24.de": "immobilienscout24_de", + "imonomy.com": "imonomy", + "7eer.net": "impact_radius", + "d3cxv97fi8q177.cloudfront.net": "impact_radius", + "evyy.net": "impact_radius", + "impactradius-event.com": "impact_radius", + "impactradius-tag.com": "impact_radius", + "impactradius.com": "impact_radius", + "ojrq.net": "impact_radius", + "r7ls.net": "impact_radius", + "impresionesweb.com": "impresiones_web", + "360yield.com": "improve_digital", + "iljmp.com": "improvely", + "inbenta.com": "inbenta", + "inboxsdk.com": "inboxsdk.com", + "indeed.com": "indeed", + "casalemedia.com": "index_exchange", + "indexww.com": "index_exchange", + "indieclick.com": "indieclick", + "industrybrains.com": "industry_brains", + "impdesk.com": "infectious_media", + "impressiondesk.com": "infectious_media", + "zachysprod.infiniteanalytics.com": "infinite_analytics", + "infinity-tracking.net": "infinity_tracking", + "engine.influads.com": "influads", + "infolinks.com": "infolinks", + "intextscript.com": "infolinks", + "ioam.de": "infonline", + "iocnt.net": "infonline", + "ivwbox.de": "infonline", + "informer.com": "informer_technologies", + "infusionsoft.com": "infusionsoft", + "keap.com": "infusionsoft", + "innity.com": "innity", + "innity.net": "innity", + "innogames.com": "innogames.de", + "innogames.de": "innogames.de", + "innogamescdn.com": "innogames.de", + "innovid.com": "innovid", + "inside-graph.com": "inside", + "useinsider.com": "insider", + "insightexpressai.com": "insightexpress", + "inskinad.com": "inskin_media", + "inskinmedia.com": "inskin_media", + "inspectlet.com": "inspectlet", + "inspsearchapi.com": "inspsearchapi.com", + "cdninstagram.com": "instagram_com", + "instagram.com": "instagram_com", + "tcgtrkr.com": "instant_check_mate", + "sdad.guru": "instart_logic", + "insticator.com": "insticator", + "load.instinctiveads.com": "instinctive", + "intango.com": "intango", + "adsafeprotected.com": "integral_ad_science", + "iasds01.com": "integral_ad_science", + "integral-marketing.com": "integral_marketing", + "intelliad.com": "intelliad", + "intelliad.de": "intelliad", + "saas.intelligencefocus.com": "intelligencefocus", + "ist-track.com": "intelligent_reach", + "intensedebate.com": "intense_debate", + "intentiq.com": "intent_iq", + "intentmedia.net": "intent_media", + "intercom.com": "intercom", + "intercom.io": "intercom", + "intercomassets.com": "intercom", + "intercomcdn.com": "intercom", + "interedy.info": "interedy.info", + "ads.intergi.com": "intergi", + "intermarkets.net": "intermarkets.net", + "intermundomedia.com": "intermundo_media", + "bbelements.com": "internet_billboard", + "goadservices.com": "internet_billboard", + "ibillboard.com": "internet_billboard", + "mediainter.net": "internet_billboard", + "voice2page.com": "internetaudioads", + "ibpxl.com": "internetbrands", + "ibsrv.net": "internetbrands", + "interpolls.com": "interpolls", + "ps7894.com": "interyield", + "intilery-analytics.com": "intilery", + "im-apps.net": "intimate_merger", + "investingchannel.com": "investingchannel", + "inviziads.com": "inviziads", + "js12.invoca.net": "invoca", + "ringrevenue.com": "invoca", + "invodo.com": "invodo", + "ionicframework.com": "ionicframework.com", + "dsp.io": "iotec", + "iesnare.com": "iovation", + "iovation.com": "iovation", + "ip-label.net": "ip-label", + "eltoro.com": "ip_targeting", + "iptargeting.com": "ip_targeting", + "ip-tracker.org": "ip_tracker", + "iptrack.io": "ip_tracker", + "iperceptions.com": "iperceptions", + "dust.ipfingerprint.com": "ipfingerprint", + "mbww.com": "ipg_mediabrands", + "ipify.org": "ipify", + "ipinfo.io": "ipinfo", + "iplogger.ru": "iplogger", + "centraliprom.com": "iprom", + "iprom.net": "iprom", + "ipromote.com": "ipromote", + "clickmanage.com": "iprospect", + "iq.com": "iqiyi", + "iqiyi.com": "iqiyi", + "qy.net": "iqiyi", + "addelive.com": "ironsource", + "afdads.com": "ironsource", + "delivery47.com": "ironsource", + "ironsrc.com": "ironsource", + "ironsrc.net": "ironsource", + "is.com": "ironsource", + "soom.la": "ironsource", + "supersonicads.com": "ironsource", + "tapjoy.com": "ironsource", + "adsbyisocket.com": "isocket", + "isocket.com": "isocket", + "isolarcloud.com": "isolarcloud", + "isolarcloud.com.a.lahuashanbx.com": "isolarcloud", + "isolarcloud.com.w.cdngslb.com": "isolarcloud", + "isolarcloud.com.w.kunlunsl.com": "isolarcloud", + "ispot.tv": "ispot.tv", + "itineraire.info": "itineraire.info", + "autolinkmaker.itunes.apple.com": "itunes_link_maker", + "ity.im": "ity.im", + "iubenda.com": "iubenda.com", + "ivcbrasil.org.br": "ivcbrasil.org.br", + "ivitrack.com": "ividence", + "iwiw.hu": "iwiw_widgets", + "ixiaa.com": "ixi_digital", + "ixquick.com": "ixquick.com", + "cdn.izooto.com": "izooto", + "jlist.com": "j-list_affiliate_program", + "getjaco.com": "jaco", + "janrainbackplane.com": "janrain", + "rpxnow.com": "janrain", + "jeeng.com": "jeeng", + "api.jeeng.com": "jeeng_widgets", + "phone-analytics.com": "jet_interactive", + "jetlore.com": "jetlore", + "pixel.wp.com": "jetpack", + "stats.wp.com": "jetpack", + "jetpackdigital.com": "jetpack_digital", + "jimcdn.com": "jimdo.com", + "jimdo.com": "jimdo.com", + "jimstatic.com": "jimdo.com", + "ads.jinkads.com": "jink", + "jirafe.com": "jirafe", + "jivosite.com": "jivochat", + "jivox.com": "jivox", + "jobs2careers.com": "jobs_2_careers", + "joinhoney.com": "joinhoney", + "create.leadid.com": "jornaya", + "d1tprjo2w7krrh.cloudfront.net": "jornaya", + "cdnjquery.com": "jquery", + "jquery.com": "jquery", + "cjmooter.xcache.kinxcdn.com": "js_communications", + "jsdelivr.net": "jsdelivr", + "jsecoin.com": "jse_coin", + "jsuol.com.br": "jsuol.com.br", + "contentabc.com": "juggcash", + "mofos.com": "juggcash", + "juiceadv.com": "juiceadv", + "juicyads.com": "juicyads", + "cdn.jumplead.com": "jumplead", + "jumpstarttaggingsolutions.com": "jumpstart_tagging_solutions", + "jumptap.com": "jumptap", + "jump-time.net": "jumptime", + "jumptime.com": "jumptime", + "components.justanswer.com": "just_answer", + "justpremium.com": "just_premium", + "justpremium.nl": "just_premium", + "justrelevant.com": "just_relevant", + "jvc.gg": "jvc.gg", + "d21rhj7n383afu.cloudfront.net": "jw_player", + "jwpcdn.com": "jw_player", + "jwplatform.com": "jw_player", + "jwplayer.com": "jw_player", + "jwpltx.com": "jw_player", + "jwpsrv.com": "jw_player", + "ltassrv.com": "jw_player_ad_solutions", + "kaeufersiegel.de": "kaeufersiegel.de", + "kairion.de": "kairion.de", + "kctag.net": "kairion.de", + "kaloo.ga": "kaloo.ga", + "kaltura.com": "kaltura", + "kameleoon.com": "kameleoon", + "kameleoon.eu": "kameleoon", + "kampyle.com": "kampyle", + "kanoodle.com": "kanoodle", + "kmi-us.com": "kantar_media", + "tnsinternet.be": "kantar_media", + "karambasecurity.com": "karambasecurity", + "kargo.com": "kargo", + "kaspersky-labs.com": "kaspersky-labs.com", + "kataweb.it": "kataweb.it", + "cen.katchup.fr": "katchup", + "kau.li": "kauli", + "kavanga.ru": "kavanga", + "kayosports.com.au": "kayo_sports", + "dc8na2hxrj29i.cloudfront.net": "keen_io", + "keen.io": "keen_io", + "widget.kelkoo.com": "kelkoo", + "xg4ken.com": "kenshoo", + "keymetric.net": "keymetric", + "lb.keytiles.com": "keytiles", + "keywee.co": "keywee", + "keywordmax.com": "keywordmax", + "massrelevance.com": "khoros", + "tweetriver.com": "khoros", + "khzbeucrltin.com": "khzbeucrltin.com", + "ping.kickfactory.com": "kickfactory", + "sa-as.com": "kickfire", + "sniff.visistat.com": "kickfire", + "stats.visistat.com": "kickfire", + "apikik.com": "kik", + "kik-gateway-use1.meetme.com": "kik", + "kik-live.com": "kik", + "kik-stream.meetme.com": "kik", + "kik.com": "kik", + "king.com": "king.com", + "midasplayer.com": "king_com", + "kinja-img.com": "kinja.com", + "kinja-static.com": "kinja.com", + "kinja.com": "kinja.com", + "kiosked.com": "kiosked", + "doug1izaerwt3.cloudfront.net": "kissmetrics.com", + "kissmetrics.com": "kissmetrics.com", + "ad.103092804.com": "kitara_media", + "kmdisplay.com": "kitara_media", + "kixer.com": "kixer", + "klarna.com": "klarna.com", + "a.klaviyo.com": "klaviyo", + "klaviyo.com": "klaviyo", + "klikki.com": "klikki", + "scr.kliksaya.com": "kliksaya", + "mediapeo2.com": "kmeleo", + "knoopstat.nl": "knoopstat", + "knotch.it": "knotch", + "komoona.com": "komoona", + "kona.kontera.com": "kontera_contentlink", + "ktxtr.com": "kontextr", + "kontextua.com": "kontextua", + "cleanrm.net": "korrelate", + "korrelate.net": "korrelate", + "trackit.ktxlytics.io": "kortx", + "kaptcha.com": "kount", + "krxd.net": "krux_digital", + "d31bfnnwekbny6.cloudfront.net": "kupona", + "kpcustomer.de": "kupona", + "q-sis.de": "kupona", + "kxcdn.com": "kxcdn.com", + "cdn.kyto.com": "kyto", + "cd-ladsp-com.s3.amazonaws.com": "ladsp.com", + "ladmp.com": "ladsp.com", + "ladsp.com": "ladsp.com", + "lanistaads.com": "lanista_concepts", + "latimes.com": "latimes", + "events.launchdarkly.com": "launch_darkly", + "launchdarkly.com": "launch_darkly", + "launchbit.com": "launchbit", + "launchpad.net": "launchpad", + "launchpadcontent.net": "launchpad", + "layer-ad.org": "layer-ad.org", + "ph-live.slatic.net": "lazada", + "slatic.net": "lazada", + "lcxdigital.com": "lcx_digital", + "lemde.fr": "le_monde.fr", + "t1.llanalytics.com": "lead_liaison", + "leadback.ru": "leadback", + "leaddyno.com": "leaddyno", + "123-tracker.com": "leadforensics", + "55-trk-srv.com": "leadforensics", + "business-path-55.com": "leadforensics", + "click-to-trace.com": "leadforensics", + "cloud-exploration.com": "leadforensics", + "cloud-journey.com": "leadforensics", + "cloud-trail.com": "leadforensics", + "cloudpath82.com": "leadforensics", + "cloudtracer101.com": "leadforensics", + "discover-path.com": "leadforensics", + "discovertrail.net": "leadforensics", + "domainanalytics.net": "leadforensics", + "dthvdr9.com": "leadforensics", + "explore-123.com": "leadforensics", + "finger-info.net": "leadforensics", + "forensics1000.com": "leadforensics", + "ip-route.net": "leadforensics", + "ipadd-path.com": "leadforensics", + "iproute66.com": "leadforensics", + "lead-123.com": "leadforensics", + "lead-analytics-1000.com": "leadforensics", + "lead-watcher.com": "leadforensics", + "leadforensics.com": "leadforensics", + "ledradn.com": "leadforensics", + "letterbox-path.com": "leadforensics", + "letterboxtrail.com": "leadforensics", + "network-handle.com": "leadforensics", + "path-follower.com": "leadforensics", + "path-trail.com": "leadforensics", + "scan-trail.com": "leadforensics", + "site-research.net": "leadforensics", + "srv1010elan.com": "leadforensics", + "the-lead-tracker.com": "leadforensics", + "trace-2000.com": "leadforensics", + "track-web.net": "leadforensics", + "trackdiscovery.net": "leadforensics", + "trackercloud.net": "leadforensics", + "trackinvestigate.net": "leadforensics", + "trail-viewer.com": "leadforensics", + "trail-web.com": "leadforensics", + "trailbox.net": "leadforensics", + "trailinvestigator.com": "leadforensics", + "web-path.com": "leadforensics", + "webforensics.co.uk": "leadforensics", + "websiteexploration.com": "leadforensics", + "www-path.com": "leadforensics", + "gate.leadgenic.com": "leadgenic", + "leadhit.ru": "leadhit", + "js.leadin.com": "leadin", + "io.leadingreports.de": "leading_reports", + "js.leadinspector.de": "leadinspector", + "formalyzer.com": "leadlander", + "trackalyzer.com": "leadlander", + "analytics.leadlifesolutions.net": "leadlife", + "my.leadpages.net": "leadpages", + "leadplace.fr": "leadplace", + "scorecard.wspisp.net": "leads_by_web.com", + "www.leadscoreapp.dk": "leadscoreapp", + "tracker.leadsius.com": "leadsius", + "leady.com": "leady", + "leady.cz": "leady", + "leiki.com": "leiki", + "lengow.com": "lengow", + "lenmit.com": "lenmit.com", + "lentainform.com": "lentainform.com", + "lenua.de": "lenua.de", + "letreach.com": "let_reach", + "lencr.org": "lets_encrypt", + "letsencrypt.org": "lets_encrypt", + "js.letvcdn.com": "letv", + "footprint.net": "level3_communications", + "alphonso.tv": "lgads", + "lgads.tv": "lgads", + "lg.com": "lgtv", + "lge.com": "lgtv", + "lgsmartad.com": "lgtv", + "lgtvcommon.com": "lgtv", + "lgtvsdp.com": "lgtv", + "licensebuttons.net": "licensebuttons.net", + "lfstmedia.com": "lifestreet_media", + "content-recommendation.net": "ligatus", + "ligadx.com": "ligatus", + "ligatus.com": "ligatus", + "ligatus.de": "ligatus", + "veeseo.com": "ligatus", + "limk.com": "limk", + "line-apps.com": "line_apps", + "line-scdn.net": "line_apps", + "line.me": "line_apps", + "tongji.linezing.com": "linezing", + "linkbucks.com": "linkbucks", + "linkconnector.com": "linkconnector", + "bizo.com": "linkedin", + "licdn.com": "linkedin", + "linkedin.com": "linkedin", + "lynda.com": "linkedin", + "ads.linkedin.com": "linkedin_ads", + "snap.licdn.com": "linkedin_analytics", + "bizographics.com": "linkedin_marketing_solutions", + "platform.linkedin.com": "linkedin_widgets", + "linker.hr": "linker", + "linkprice.com": "linkprice", + "lp4.io": "linkpulse", + "linksalpha.com": "linksalpha", + "erovinmo.com": "linksmart", + "linksmart.com": "linksmart", + "linkstorm.net": "linkstorm", + "linksynergy.com": "linksynergy.com", + "linkup.com": "linkup", + "linkwi.se": "linkwise", + "linkwithin.com": "linkwithin", + "lqm.io": "liquidm_technology_gmbh", + "lqmcdn.com": "liquidm_technology_gmbh", + "liqwid.net": "liqwid", + "list.ru": "list.ru", + "listrakbi.com": "listrak", + "live2support.com": "live2support", + "live800.com": "live800", + "ladesk.com": "live_agent", + "livehelpnow.net": "live_help_now", + "liadm.com": "live_intent", + "l-stat.livejournal.net": "live_journal", + "liveadexchanger.com": "liveadexchanger.com", + "livechat.s3.amazonaws.com": "livechat", + "livechatinc.com": "livechat", + "livechatinc.net": "livechat", + "livechatnow.com": "livechatnow", + "livechatnow.net": "livechatnow", + "liveclicker.net": "liveclicker", + "livecounter.dk": "livecounter", + "fyre.co": "livefyre", + "livefyre.com": "livefyre", + "yadro.ru": "liveinternet", + "liveperson.net": "liveperson", + "lpsnmedia.net": "liveperson", + "pippio.com": "liveramp", + "rapleaf.com": "liveramp", + "rlcdn.com": "liveramp", + "livere.co.kr": "livere", + "livere.co.kr.cizion.ixcloud.net": "livere", + "livesportmedia.eu": "livesportmedia.eu", + "analytics.livestream.com": "livestream", + "livetex.ru": "livetex.ru", + "lkqd.net": "lkqd", + "loadbee.com": "loadbee.com", + "loadercdn.com": "loadercdn.com", + "loadsource.org": "loadsource.org", + "web.localytics.com": "localytics", + "localytics.com": "localytics", + "cdn2.lockerdome.com": "lockerdome", + "addtoany.com": "lockerz_share", + "pixel.loganmedia.mobi": "logan_media", + "ping.answerbook.com": "logdna", + "loggly.com": "loggly", + "logly.co.jp": "logly", + "logsss.com": "logsss.com", + "lomadee.com": "lomadee", + "assets.loomia.com": "loomia", + "loop11.com": "loop11", + "lfov.net": "loopfuse_oneview", + "crwdcntrl.net": "lotame", + "vidcpm.com": "lottex_inc", + "tracker.samplicio.us": "lucid", + "lucidmedia.com": "lucid_media", + "lead.adsender.us": "lucini", + "livestatserver.com": "lucky_orange", + "luckyorange.com": "lucky_orange", + "luckyorange.net": "lucky_orange", + "luckypushh.com": "luckypushh.com", + "adelixir.com": "lxr100", + "lypn.com": "lynchpin_analytics", + "lypn.net": "lynchpin_analytics", + "lytics.io": "lytics", + "lyuoaxruaqdo.com": "lyuoaxruaqdo.com", + "m-pathy.com": "m-pathy", + "mpnrs.com": "m._p._newmedia", + "m4n.nl": "m4n", + "madadsmedia.com": "mad_ads_media", + "madeleine.de": "madeleine.de", + "dinclinx.com": "madison_logic", + "madisonlogic.com": "madison_logic", + "madnet.ru": "madnet", + "eu2.madsone.com": "mads", + "magna.ru": "magna_advertise", + "d3ezl4ajpp2zy8.cloudfront.net": "magnetic", + "domdex.com": "magnetic", + "domdex.net": "magnetic", + "magnetisemedia.com": "magnetise_group", + "magnify360.com": "magnify360", + "magnuum.com": "magnuum.com", + "ad.mail.ru": "mail.ru_banner", + "imgsmail.ru": "mail.ru_group", + "mail.ru": "mail.ru_group", + "mradx.net": "mail.ru_group", + "odnoklassniki.ru": "mail.ru_group", + "ok.ru": "mail.ru_group", + "chimpstatic.com": "mailchimp_tracking", + "list-manage.com": "mailchimp_tracking", + "mailchimp.com": "mailchimp_tracking", + "mailerlite.com": "mailerlite.com", + "mailtrack.io": "mailtrack.io", + "mainadv.com": "mainadv", + "makazi.com": "makazi", + "makeappdev.xyz": "makeappdev.xyz", + "makesource.cool": "makesource.cool", + "widgets.mango-office.ru": "mango", + "manycontacts.com": "manycontacts", + "mapandroute.de": "mapandroute.de", + "mapbox.com": "mapbox", + "www.maploco.com": "maploco", + "px.marchex.io": "marchex", + "voicestar.com": "marchex", + "mmadsgadget.com": "marimedia", + "qadabra.com": "marimedia", + "qadserve.com": "marimedia", + "qadservice.com": "marimedia", + "marinsm.com": "marin_search_marketer", + "markandmini.com": "mark_+_mini", + "ak-cdn.placelocal.com": "market_thunder", + "dt00.net": "marketgid", + "dt07.net": "marketgid", + "marketgid.com": "marketgid", + "mgid.com": "marketgid", + "marketingautomation.si": "marketing_automation", + "marketo.com": "marketo", + "marketo.net": "marketo", + "mktoresp.com": "marketo", + "caanalytics.com": "markmonitor", + "mmstat.com": "markmonitor", + "markmonitor.com": "markmonitor", + "netscope.data.marktest.pt": "marktest", + "marshadow.io": "marshadow.io", + "martiniadnetwork.com": "martini_media", + "edigitalsurvey.com": "maru-edu", + "marvellousmachine.net": "marvellous_machine", + "mbn.com.ua": "master_banner_network", + "mastertarget.ru": "mastertarget", + "rns.matelso.de": "matelso", + "matheranalytics.com": "mather_analytics", + "mathjax.org": "mathjax.org", + "nzaza.com": "matiro", + "matomo.cloud": "matomo", + "matomo.org": "matomo", + "piwik.org": "matomo", + "adsmarket.com": "matomy_market", + "m2pub.com": "matomy_market", + "matrix.org": "matrix", + "mb01.com": "maxbounty", + "maxcdn.com": "maxcdn", + "netdna-cdn.com": "maxcdn", + "netdna-ssl.com": "maxcdn", + "maxlab.ru": "maxlab", + "maxmind.com": "maxmind", + "maxonclick.com": "maxonclick_com", + "mxptint.net": "maxpoint_interactive", + "maxymiser.hs.llnwd.net": "maxymiser", + "maxymiser.net": "maxymiser", + "m6r.eu": "mbr_targeting", + "pixel.adbuyer.com": "mbuy", + "mcabi.mcloudglobal.com": "mcabi", + "scanalert.com": "mcafee_secure", + "ywxi.net": "mcafee_secure", + "mconet.biz": "mconet", + "mdotlabs.com": "mdotlabs", + "media-clic.com": "media-clic", + "media-imdb.com": "media-imdb.com", + "media.net": "media.net", + "mediaimpact.de": "media_impact", + "mookie1.com": "media_innovation_group", + "idntfy.ru": "media_today", + "s1.mediaad.org": "mediaad", + "mlnadvertising.com": "mediaglu", + "fhserve.com": "mediahub", + "media-lab.ai": "medialab", + "medialab.la": "medialab", + "adnet.ru": "medialand", + "medialand.ru": "medialand", + "medialead.de": "medialead", + "mathads.com": "mediamath", + "mathtag.com": "mediamath", + "mediametrics.ru": "mediametrics", + "audit.median.hu": "median", + "mediapass.com": "mediapass", + "mt.mediapostcommunication.net": "mediapost_communications", + "mediarithmics.com": "mediarithmics.com", + "tns-counter.ru": "mediascope", + "ad.media-servers.net": "mediashakers", + "adsvc1107131.net": "mediashift", + "mediator.media": "mediator.media", + "mediav.com": "mediav", + "adnetinteractive.com": "mediawhiz", + "adnetinteractive.net": "mediawhiz", + "mediego.com": "medigo", + "medleyads.com": "medley", + "adnet.com.tr": "medyanet", + "e-kolay.net": "medyanet", + "medyanetads.com": "medyanet", + "cim.meebo.com": "meebo_bar", + "meetrics.net": "meetrics", + "mxcdn.net": "meetrics", + "research.de.com": "meetrics", + "counter.megaindex.ru": "megaindex", + "mega.co.nz": "meganz", + "mega.io": "meganz", + "mega.nz": "meganz", + "mein-bmi.com": "mein-bmi.com", + "webvisitor.melissadata.net": "melissa", + "meltdsp.com": "melt", + "mlt01.com": "menlo", + "mentad.com": "mentad", + "mercadoclics.com": "mercado", + "mercadolivre.com.br": "mercado", + "mlstatic.com": "mercado", + "merchantadvantage.com": "merchantadvantage", + "merchenta.com": "merchenta", + "roia.biz": "mercury_media", + "cdn.merklesearch.com": "merkle_research", + "rkdms.com": "merkle_rkg", + "messenger.com": "messenger.com", + "ad.metanetwork.com": "meta_network", + "metaffiliation.com": "metaffiliation.com", + "netaffiliation.com": "metaffiliation.com", + "metalyzer.com": "metapeople", + "mlsat02.de": "metapeople", + "metrigo.com": "metrigo", + "metriweb.be": "metriweb", + "miaozhen.com": "miaozhen", + "microad.co.jp": "microad", + "microad.jp": "microad", + "microad.net": "microad", + "microadinc.com": "microad", + "azurewebsites.net": "microsoft", + "cloudapp.net": "microsoft", + "gfx.ms": "microsoft", + "microsoft.com": "microsoft", + "microsoftonline-p.com": "microsoft", + "microsoftonline.com": "microsoft", + "microsofttranslator.com": "microsoft", + "msecnd.net": "microsoft", + "msedge.net": "microsoft", + "msocdn.com": "microsoft", + "onestore.ms": "microsoft", + "s-microsoft.com": "microsoft", + "trouter.io": "microsoft", + "windows.net": "microsoft", + "aka.ms": "microsoft", + "microsoftazuread-sso.com": "microsoft", + "bingapis.com": "microsoft", + "msauth.net": "microsoft", + "msauthimages.net": "microsoft", + "msftauth.net": "microsoft", + "msftstatic.com": "microsoft", + "msidentity.com": "microsoft", + "nelreports.net": "microsoft", + "windowscentral.com": "microsoft", + "analytics.live.com": "microsoft_analytics", + "a.clarity.ms": "microsoft_clarity", + "b.clarity.ms": "microsoft_clarity", + "c.clarity.ms": "microsoft_clarity", + "d.clarity.ms": "microsoft_clarity", + "e.clarity.ms": "microsoft_clarity", + "f.clarity.ms": "microsoft_clarity", + "g.clarity.ms": "microsoft_clarity", + "h.clarity.ms": "microsoft_clarity", + "i.clarity.ms": "microsoft_clarity", + "j.clarity.ms": "microsoft_clarity", + "log.clarity.ms": "microsoft_clarity", + "www.clarity.ms": "microsoft_clarity", + "mmismm.com": "mindset_media", + "imgfarm.com": "mindspark", + "mindspark.com": "mindspark", + "staticimgfarm.com": "mindspark", + "mvtracker.com": "mindviz_tracker", + "minewhat.com": "minewhat", + "mintsapp.io": "mints_app", + "snackly.co": "minute.ly", + "snippet.minute.ly": "minute.ly", + "apv.configuration.minute.ly": "minute.ly_video", + "get.mirando.de": "mirando", + "mirtesen.ru": "mirtesen.ru", + "misterbell.com": "mister_bell", + "mixi.jp": "mixi", + "mixpanel.com": "mixpanel", + "mxpnl.com": "mixpanel", + "mxpnl.net": "mixpanel", + "swf.mixpo.com": "mixpo", + "app.mluvii.com": "mluvii", + "mncdn.com": "mncdn.com", + "moatads.com": "moat", + "moatpixel.com": "moat", + "mobicow.com": "mobicow", + "a.mobify.com": "mobify", + "mobtrks.com": "mobtrks.com", + "ads.mocean.mobi": "mocean_mobile", + "ads.moceanads.com": "mocean_mobile", + "chat.mochapp.com": "mochapp", + "intelligentpixel.modernimpact.com": "modern_impact", + "teljari.is": "modernus", + "modulepush.com": "modulepush.com", + "mogointeractive.com": "mogo_interactive", + "mokonocdn.com": "mokono_analytics", + "devappgrant.space": "monero_miner", + "monetate.net": "monetate", + "monetize-me.com": "monetize_me", + "ads.themoneytizer.com": "moneytizer", + "mongoosemetrics.com": "mongoose_metrics", + "track.monitis.com": "monitis", + "monitus.net": "monitus", + "fonts.net": "monotype_gmbh", + "fonts.com": "monotype_imaging", + "cdn.monsido.com": "monsido", + "monster.com": "monster_advertising", + "mooxar.com": "mooxar", + "mopinion.com": "mopinion.com", + "mopub.com": "mopub", + "ad.ad-arata.com": "more_communication", + "moras.jp": "moreads", + "nedstatbasic.net": "motigo_webstats", + "webstats.motigo.com": "motigo_webstats", + "analytics.convertlanguage.com": "motionpoint", + "mouseflow.com": "mouseflow", + "mousestats.com": "mousestats", + "s.mousetrace.com": "mousetrace", + "movad.de": "mov.ad", + "movad.net": "mov.ad", + "micpn.com": "movable_ink", + "mvb.me": "movable_media", + "moz.com": "moz", + "firefox.com": "mozilla", + "mozaws.net": "mozilla", + "mozgcp.net": "mozilla", + "mozilla.com": "mozilla", + "mozilla.net": "mozilla", + "mozilla.org": "mozilla", + "storage.mozoo.com": "mozoo", + "tracker.mrpfd.com": "mrp", + "mrpdata.com": "mrpdata", + "mrpdata.net": "mrpdata", + "mrskincash.com": "mrskincash", + "a-msedge.net": "msedge", + "b-msedge.net": "msedge", + "e-msedge.net": "msedge", + "k-msedge.net": "msedge", + "l-msedge.net": "msedge", + "s-msedge.net": "msedge", + "spo-msedge.net": "msedge", + "t-msedge.net": "msedge", + "wac-msedge.net": "msedge", + "msn.com": "msn", + "s-msn.com": "msn", + "musculahq.appspot.com": "muscula", + "litix.io": "mux_inc", + "mybloglog.com": "mybloglog", + "t.p.mybuys.com": "mybuys", + "mycdn.me": "mycdn.me", + "mycliplister.com": "mycliplister.com", + "mycounter.com.ua": "mycounter.ua", + "mycounter.ua": "mycounter.ua", + "myfonts.net": "myfonts", + "mypagerank.net": "mypagerank", + "stat.mystat.hu": "mystat", + "mythings.com": "mythings", + "mystat-in.net": "mytop_counter", + "nab.com": "nab", + "nab.com.au": "nab", + "nab.net": "nab", + "nabgroup.com": "nab", + "national.com.au": "nab", + "nationalaustraliabank.com.au": "nab", + "nationalbank.com.au": "nab", + "nakanohito.jp": "nakanohito.jp", + "namogoo.coom": "namogoo", + "nanigans.com": "nanigans", + "audiencemanager.de": "nano_interactive", + "nanorep.com": "nanorep", + "narando.com": "narando", + "static.bam-x.com": "narrativ", + "narrative.io": "narrative_io", + "p1.ntvk1.ru": "natimatica", + "nativeads.com": "nativeads.com", + "cdn01.nativeroll.tv": "nativeroll", + "ntv.io": "nativo", + "postrelease.com": "nativo", + "navdmp.com": "navegg_dmp", + "naver.com": "naver.com", + "naver.net": "naver.com", + "s-nbcnews.com": "nbc_news", + "richmedia247.com": "ncol", + "needle.com": "needle", + "nekudo.com": "nekudo.com", + "neodatagroup.com": "neodata", + "ad-srv.net": "neory", + "contentspread.net": "neory", + "neory-tm.com": "neory", + "simptrack.com": "neory", + "nerfherdersolo.com": "nerfherdersolo_com", + "wemfbox.ch": "net-metrix", + "cdnma.com": "net-results", + "nr7.us": "net-results", + "netavenir.com": "net_avenir", + "netcommunities.com": "net_communities", + "visibility-stats.com": "net_visibility", + "netbiscuits.net": "netbiscuits", + "bbtrack.net": "netbooster_group", + "netbooster.com": "netbooster_group", + "netflix.com": "netflix", + "nflxext.com": "netflix", + "nflximg.net": "netflix", + "nflxso.net": "netflix", + "nflxvideo.net": "netflix", + "flxvpn.net": "netflix", + "netflix.ca": "netflix", + "netflix.com.au": "netflix", + "netflix.net": "netflix", + "netflixdnstest1.com": "netflix", + "netflixdnstest10.com": "netflix", + "netflixdnstest2.com": "netflix", + "netflixdnstest3.com": "netflix", + "netflixdnstest4.com": "netflix", + "netflixdnstest5.com": "netflix", + "netflixdnstest6.com": "netflix", + "netflixdnstest7.com": "netflix", + "netflixdnstest8.com": "netflix", + "netflixdnstest9.com": "netflix", + "netflixinvestor.com": "netflix", + "netflixstudios.com": "netflix", + "netflixtechblog.com": "netflix", + "nflximg.com": "netflix", + "netify.ai": "netify", + "netzathleten-media.de": "netletix", + "netminers.dk": "netminers", + "netmining.com": "netmining", + "netmng.com": "netmining", + "stat.netmonitor.fi": "netmonitor", + "glanceguide.com": "netratings_sitecensus", + "imrworldwide.com": "netratings_sitecensus", + "vizu.com": "netratings_sitecensus", + "netrk.net": "netrk.net", + "netseer.com": "netseer", + "netshelter.net": "netshelter", + "nsaudience.pl": "netsprint_audience", + "nwidget.networkedblogs.com": "networkedblogs", + "adadvisor.net": "neustar_adadvisor", + "d1ros97qkrwjf5.cloudfront.net": "new_relic", + "newrelic.com": "new_relic", + "nr-data.net": "new_relic", + "codestream.com": "new_relic", + "newscgp.com": "newscgp.com", + "nmcdn.us": "newsmax", + "newstogram.com": "newstogram", + "newsupdatedir.info": "newsupdatedir.info", + "newsupdatewe.info": "newsupdatewe.info", + "ads.newtention.net": "newtention", + "ads.newtentionassets.net": "newtention", + "nexage.com": "nexage", + "nexeps.com": "nexeps.com", + "nxtck.com": "next_performance", + "track.nextuser.com": "next_user", + "imgsrv.nextag.com": "nextag_roi_optimizer", + "nextclick.pl": "nextclick", + "nextstat.com": "nextstat", + "d1d8vn0fpluuz7.cloudfront.net": "neytiv", + "ads.ngageinc.com": "ngage_inc.", + "nice264.com": "nice264.com", + "nimblecommerce.com": "nimblecommerce", + "nineanalytics.io": "nine_direct_digital", + "cho-chin.com": "ninja_access_analysis", + "donburako.com": "ninja_access_analysis", + "hishaku.com": "ninja_access_analysis", + "shinobi.jp": "ninja_access_analysis", + "static.nirror.com": "nirror", + "nitropay.com": "nitropay", + "nk.pl": "nk.pl_widgets", + "noaa.gov": "noaa.gov", + "track.noddus.com": "noddus", + "contextbar.ru": "nolix", + "nonli.com": "nonli", + "non.li": "nonli", + "trkme.net": "nonstop_consulting", + "noop.style": "noop.style", + "nosto.com": "nosto.com", + "adleadevent.com": "notify", + "notifyfox.com": "notifyfox", + "notion.so": "notion", + "nowinteract.com": "now_interact", + "npario-inc.net": "npario", + "nplexmedia.com": "nplexmedia", + "nrelate.com": "nrelate", + "ns8.com": "ns8", + "nt.vc": "nt.vc", + "featurelink.com": "ntent", + "ntp.org": "ntppool", + "ntppool.org": "ntppool", + "tracer.jp": "nttcom_online_marketing_solutions", + "nuffnang.com": "nuffnang", + "nuggad.net": "nugg.ad", + "rotator.adjuggler.com": "nui_media", + "numbers.md": "numbers.md", + "channeliq.com": "numerator", + "nyacampwk.com": "nyacampwk.com", + "nyetm2mkch.com": "nyetm2mkch.com", + "nyt.com": "nyt.com", + "nytimes.com": "nyt.com", + "o12zs3u2n.com": "o12zs3u2n.com", + "o2.pl": "o2.pl", + "o2online.de": "o2online.de", + "oath.com": "oath_inc", + "observerapp.com": "observer", + "ocioso.com.br": "ocioso", + "oclasrv.com": "oclasrv.com", + "octapi.net": "octapi.net", + "service.octavius.rocks": "octavius", + "office.com": "office.com", + "office.net": "office.net", + "office365.com": "office365.com", + "oghub.io": "oghub.io", + "ohmystats.com": "oh_my_stats", + "adohana.com": "ohana_advertising_network", + "photorank.me": "olapic", + "olark.com": "olark", + "olx-st.com": "olx-st.com", + "onap.io": "olx-st.com", + "omarsys.com": "omarsys.com", + "ometria.com": "ometria", + "omgpm.com": "omg", + "omniconvert.com": "omniconvert.com", + "omnidsp.com": "omniscienta", + "oms.eu": "oms", + "omsnative.de": "oms", + "onaudience.com": "onaudience", + "btc-echode.api.oneall.com": "oneall", + "tracking.onefeed.co.uk": "onefeed", + "onesignal.com": "onesignal", + "os.tc": "onesignal", + "stat.onestat.com": "onestat", + "ocdn.eu": "onet.pl", + "onet.pl": "onet.pl", + "onetag.com": "onetag", + "s-onetag.com": "onetag", + "onetrust.com": "onetrust", + "fogl1onf.com": "onfocus.io", + "onfocus.io": "onfocus.io", + "onlinewebstat.com": "onlinewebstat", + "onlinewebstats.com": "onlinewebstat", + "onswipe.com": "onswipe", + "onthe.io": "onthe.io", + "moon-ray.com": "ontraport_autopilot", + "moonraymarketing.com": "ontraport_autopilot", + "ooyala.com": "ooyala.com", + "openadex.dk": "open_adexchange", + "247realmedia.com": "open_adstream", + "oaserve.com": "open_adstream", + "realmedia.com": "open_adstream", + "realmediadigital.com": "open_adstream", + "opensharecount.com": "open_share_count", + "chatgpt.com": "openai", + "oaistatic.com": "openai", + "oaiusercontent.com": "openai", + "openai.com": "openai", + "oloadcdn.net": "openload", + "openload.co": "openload", + "openstat.net": "openstat", + "spylog.com": "openstat", + "spylog.ru": "openstat", + "opentracker.net": "opentracker", + "openwebanalytics.com": "openwebanalytics", + "odnxs.net": "openx", + "openx.net": "openx", + "openx.org": "openx", + "openxenterprise.com": "openx", + "servedbyopenx.com": "openx", + "adsummos.net": "operative_media", + "opinary.com": "opinary", + "opinionbar.com": "opinionbar", + "emagazines.com": "oplytic", + "allawnos.com": "oppo", + "allawntech.com": "oppo", + "heytapdl.com": "oppo", + "heytapmobi.com": "oppo", + "heytapmobile.com": "oppo", + "oppomobile.com": "oppo", + "opta.net": "opta.net", + "optaim.com": "optaim", + "cookielaw.org": "optanaon", + "service.optify.net": "optify", + "optimatic.com": "optimatic", + "optmd.com": "optimax_media_delivery", + "optimicdn.com": "optimicdn.com", + "optimizely.com": "optimizely", + "episerver.net": "optimizely", + "optimonk.com": "optimonk", + "mstrlytcs.com": "optinmonster", + "optmnstr.com": "optinmonster", + "optmstr.com": "optinmonster", + "optnmstr.com": "optinmonster", + "optincollect.com": "optinproject.com", + "volvelle.tech": "optomaton", + "ora.tv": "ora.tv", + "oracleinfinity.io": "oracle_infinity", + "instantservice.com": "oracle_live_help", + "ts.istrack.com": "oracle_live_help", + "rightnowtech.com": "oracle_rightnow", + "rnengage.com": "oracle_rightnow", + "orange.fr": "orange", + "orangeads.fr": "orange", + "ads.orange142.com": "orange142", + "wanadoo.fr": "orange_france", + "otracking.com": "orangesoda", + "emxdgt.com": "orc_international", + "static.ordergroove.com": "order_groove", + "orelsite.ru": "orel_site", + "otclick-adv.ru": "otclick", + "othersearch.info": "othersearch.info", + "otm-r.com": "otm-r.com", + "otto.de": "otto.de", + "ottogroup.media": "otto.de", + "outbrain.com": "outbrain", + "outbrainimg.com": "outbrain", + "live.com": "outlook", + "cloud.microsoft": "outlook", + "hotmail.com": "outlook", + "outlook.com": "outlook", + "svc.ms": "outlook", + "overheat.it": "overheat.it", + "oewabox.at": "owa", + "owneriq.net": "owneriq", + "ownpage.fr": "ownpage", + "owox.com": "owox.com", + "adconnexa.com": "oxamedia", + "adsbwm.com": "oxamedia", + "oxomi.com": "oxomi.com", + "oztam.com.au": "oztam", + "pageanalytics.space": "pageanalytics.space", + "blockmetrics.com": "pagefair", + "pagefair.com": "pagefair", + "pagefair.net": "pagefair", + "ghmedia.com": "pagescience", + "777seo.com": "paid-to-promote", + "paid-to-promote.net": "paid-to-promote", + "ptp22.com": "paid-to-promote", + "ptp33.com": "paid-to-promote", + "paperg.com": "paperg", + "pardot.com": "pardot", + "d1z2jf7jlzjs58.cloudfront.net": "parsely", + "parsely.com": "parsely", + "partner-ads.com": "partner-ads", + "passionfruitads.com": "passionfruit", + "pathful.com": "pathful", + "pay-hit.com": "pay-hit", + "payclick.it": "payclick", + "app.paykickstart.com": "paykickstart", + "paypal.com": "paypal", + "paypalobjects.com": "paypal", + "pcvark.com": "pcvark.com", + "peer39.com": "peer39", + "peer39.net": "peer39", + "peer5.com": "peer5.com", + "peerius.com": "peerius", + "pendo.io": "pendo.io", + "pepper.com": "pepper.com", + "gopjn.com": "pepperjam", + "pjatr.com": "pepperjam", + "pjtra.com": "pepperjam", + "pntra.com": "pepperjam", + "pntrac.com": "pepperjam", + "pntrs.com": "pepperjam", + "player.pepsia.com": "pepsia", + "perfdrive.com": "perfdrive.com", + "perfectaudience.com": "perfect_audience", + "prfct.co": "perfect_audience", + "perfectmarket.com": "perfect_market", + "perfops.io": "perfops", + "performgroup.com": "perform_group", + "analytics.performable.com": "performable", + "performancing.com": "performancing_metrics", + "performax.cz": "performax", + "perimeterx.net": "perimeterx.net", + "permutive.com": "permutive", + "persgroep.net": "persgroep", + "persianstat.com": "persianstat", + "code.pers.io": "persio", + "counter.personyze.com": "personyze", + "petametrics.com": "petametrics", + "ads.pheedo.com": "pheedo", + "app.phonalytics.com": "phonalytics", + "d2bgg7rjywcwsy.cloudfront.net": "phunware", + "piguiqproxy.com": "piguiqproxy.com", + "trgt.eu": "pilot", + "pingdom.net": "pingdom", + "pinimg.com": "pinterest", + "pinterest.com": "pinterest", + "app.pipz.io": "pipz", + "disabled.invalid": "piwik", + "piwik.pro": "piwik_pro_analytics_suite", + "adrta.com": "pixalate", + "app.pixelpop.co": "pixel_union", + "pixfuture.net": "pixfuture", + "vast1.pixfuture.com": "pixfuture", + "piximedia.com": "piximedia", + "pizzaandads.com": "pizzaandads_com", + "ads.placester.net": "placester", + "d3uemyw1e5n0jw.cloudfront.net": "placester", + "pladform.com": "pladform.ru", + "tag.bi.serviceplan.com": "plan.net_experience_cloud", + "pfrm.co": "platform360", + "impact-ad.jp": "platformone", + "loveadvert.ru": "play_by_mamba", + "playbuzz.com": "playbuzz.com", + "pof.com": "plenty_of_fish", + "plex.bz": "plex", + "plex.direct": "plex", + "plex.tv": "plex", + "analytics.plex.tv": "plex_metrics", + "metrics.plex.tv": "plex_metrics", + "plista.com": "plista", + "plugrush.com": "plugrush", + "pluso.ru": "pluso.ru", + "plutusads.com": "plutusads", + "pmddby.com": "pmddby.com", + "pnamic.com": "pnamic.com", + "po.st": "po.st", + "widgets.getpocket.com": "pocket", + "pocketcents.com": "pocketcents", + "pointificsecure.com": "pointific", + "pointroll.com": "pointroll", + "poirreleast.club": "poirreleast.club", + "mediavoice.com": "polar.me", + "polar.me": "polar.me", + "polarmobile.com": "polar.me", + "polldaddy.com": "polldaddy", + "polyad.net": "polyad", + "polyfill.io": "polyfill.io", + "popads.net": "popads", + "popadscdn.net": "popads", + "popcash.net": "popcash", + "popcashjs.b-cdn.net": "popcash", + "desv383oqqc0.cloudfront.net": "popcorn_metrics", + "popin.cc": "popin.cc", + "cdn.popmyads.com": "popmyads", + "poponclick.com": "poponclick", + "populis.com": "populis", + "populisengage.com": "populis", + "phncdn.com": "pornhub", + "pornhub.com": "pornhub", + "prscripts.com": "pornwave", + "prstatics.com": "pornwave", + "prwidgets.com": "pornwave", + "barra.brasil.gov.br": "porta_brazil", + "postaffiliatepro.com": "post_affiliate_pro", + "powerlinks.com": "powerlinks", + "powerreviews.com": "powerreviews", + "powr.io": "powr.io", + "api.pozvonim.com": "pozvonim", + "prebid.org": "prebid", + "precisionclick.com": "precisionclick", + "adserver.com.br": "predicta", + "predicta.net": "predicta", + "prnx.net": "premonix", + "ppjol.com": "press", + "ppjol.net": "press", + "api.pressly.com": "pressly", + "pricegrabber.com": "pricegrabber", + "cdn.pricespider.com": "pricespider", + "pmdrecrute.com": "prismamediadigital.com", + "prismamediadigital.com": "prismamediadigital.com", + "privy.com": "privy.com", + "pswec.com": "proclivity", + "prodperfect.com": "prodperfect", + "lib.productsup.io": "productsup", + "proadsnet.com": "profiliad", + "profitshare.ro": "profitshare", + "tracking.proformics.com": "proformics", + "programattik.com": "programattik", + "projectwonderful.com": "project_wonderful", + "propelmarketing.com": "propel_marketing", + "oclaserver.com": "propeller_ads", + "onclasrv.com": "propeller_ads", + "onclickads.net": "propeller_ads", + "onclkds.com": "propeller_ads", + "propellerads.com": "propeller_ads", + "propellerpops.com": "propeller_ads", + "proper.io": "propermedia", + "st-a.props.id": "props", + "propvideo.net": "propvideo_net", + "tr.prospecteye.com": "prospecteye", + "prosperent.com": "prosperent", + "prostor-lite.ru": "prostor", + "providesupport.com": "provide_support", + "proximic.com": "proximic", + "proxistore.com": "proxistore.com", + "pscp.tv": "pscp.tv", + "pstatic.net": "pstatic.net", + "psyma.com": "psyma", + "ptengine.jp": "pt_engine", + "pub-fit.com": "pub-fit", + "pub.network": "pub.network", + "learnpipe.com": "pubble", + "pubble.co": "pubble", + "pubdirecte.com": "pubdirecte", + "pubgears.com": "pubgears", + "publicidees.com": "public_ideas", + "publicidad.net": "publicidad.net", + "intgr.net": "publir", + "pubmatic.com": "pubmatic", + "pubnub.com": "pubnub.com", + "puboclic.com": "puboclic", + "pulpix.com": "pulpix.com", + "tentaculos.net": "pulpo_media", + "pulse360.com": "pulse360", + "pulseinsights.com": "pulse_insights", + "contextweb.com": "pulsepoint", + "pulsepoint.com": "pulsepoint", + "punchtab.com": "punchtab", + "purch.com": "purch", + "servebom.com": "purch", + "purechat.com": "pure_chat", + "cdn.pprl.io": "pureprofile", + "oopt.fr": "purlive", + "puserving.com": "puserving.com", + "push.world": "push.world", + "pushengage.com": "push_engage", + "pushame.com": "pushame.com", + "zebra.pushbullet.com": "pushbullet", + "pushcrew.com": "pushcrew", + "pusher.com": "pusher.com", + "pusherapp.com": "pusher.com", + "pushnative.com": "pushnative.com", + "cdn.pushnews.eu": "pushnews", + "pushno.com": "pushno.com", + "pushwhy.com": "pushwhy.com", + "pushwoosh.com": "pushwoosh.com", + "pvclouds.com": "pvclouds.com", + "ads.q1media.com": "q1media", + "q1mediahydraplatform.com": "q1media", + "q-divisioncdn.de": "q_division", + "qbaka.net": "qbaka", + "track.qcri.org": "qcri_analytics", + "collect.qeado.com": "qeado", + "s.lianmeng.360.cn": "qihoo_360", + "qq.com": "qq.com", + "qrius.me": "qrius", + "qualaroo.com": "qualaroo", + "qualcomm.com": "qualcomm", + "gpsonextra.net": "qualcomm_location_service", + "izatcloud.net": "qualcomm_location_service", + "xtracloud.net": "qualcomm_location_service", + "bluecava.com": "qualia", + "qualtrics.com": "qualtrics", + "quantcast.com": "quantcast", + "quantserve.com": "quantcast", + "quantcount.com": "quantcount", + "quantummetric.com": "quantum_metric", + "quartic.pl": "quartic.pl", + "quarticon.com": "quartic.pl", + "d3c3cq33003psk.cloudfront.net": "qubit", + "qubit.com": "qubit", + "easyresearch.se": "questback", + "queue-it.net": "queue-it", + "quick-counter.net": "quick-counter.net", + "adsonar.com": "quigo_adsonar", + "qnsr.com": "quinstreet", + "quinstreet.com": "quinstreet", + "thecounter.com": "quinstreet", + "quintelligence.com": "quintelligence", + "qservz.com": "quisma", + "quisma.com": "quisma", + "quora.com": "quora.com", + "ads-digitalkeys.com": "r_advertising", + "rackcdn.com": "rackcdn.com", + "radarurl.com": "radarurl", + "dsa.csdata1.com": "radial", + "gwallet.com": "radiumone", + "r1-cdn.net": "radiumone", + "widget.raisenow.com": "raisenow", + "mediaforge.com": "rakuten_display", + "rmtag.com": "rakuten_display", + "rakuten.co.jp": "rakuten_globalmarket", + "trafficgate.net": "rakuten_globalmarket", + "mtwidget04.affiliate.rakuten.co.jp": "rakuten_widget", + "xml.affilliate.rakuten.co.jp": "rakuten_widget", + "rambler.ru": "rambler", + "top100.ru": "rambler", + "rapidspike.com": "rapidspike", + "ravelin.com": "ravelin", + "rawgit.com": "rawgit", + "raygun.io": "raygun", + "count.rbc.ru": "rbc_counter", + "rcs.it": "rcs.it", + "rcsmediagroup.it": "rcs.it", + "d335luupugsy2.cloudfront.net": "rd_station", + "rea-group.com": "rea_group", + "reagroupdata.com.au": "rea_group", + "reastatic.net": "rea_group", + "d12ulf131zb0yj.cloudfront.net": "reachforce", + "reachforce.com": "reachforce", + "reachjunction.com": "reachjunction", + "cdn.rlets.com": "reachlocal", + "reachlocal.com": "reachlocal", + "reachlocallivechat.com": "reachlocal", + "rlcdn.net": "reachlocal", + "plugin.reactful.com": "reactful", + "reactivpub.fr": "reactivpub", + "skinected.com": "reactx", + "readrboard.com": "readerboard", + "readme.com": "readme", + "readme.io": "readme", + "readspeaker.com": "readspeaker.com", + "realclick.co.kr": "realclick", + "realestate.com.au": "realestate.com.au", + "realperson.de": "realperson.de", + "powermarketing.com": "realtime", + "realtime.co": "realtime", + "webspectator.com": "realtime", + "dcniko1cv0rz.cloudfront.net": "realytics", + "realytics.io": "realytics", + "static.rbl.ms": "rebel_mouse", + "recaptcha.net": "recaptcha", + "recettes.net": "recettes.net", + "static.recopick.com": "recopick", + "recreativ.ru": "recreativ", + "analytics.recruitics.com": "recruitics", + "analytics.cohesionapps.com": "red_ventures", + "cdn.cohesionapps.com": "red_ventures", + "redblue.de": "redblue_de", + "atendesoftware.pl": "redcdn.pl", + "redd.it": "reddit", + "reddit-image.s3.amazonaws.com": "reddit", + "reddit.com": "reddit", + "redditmedia.com": "reddit", + "redditstatic.com": "reddit", + "redhelper.ru": "redhelper", + "pixelinteractivemedia.com": "redlotus", + "triggit.com": "redlotus", + "grt01.com": "redtram", + "grt02.com": "redtram", + "redtram.com": "redtram", + "rdtcdn.com": "redtube.com", + "redtube.com": "redtube.com", + "reduxmedia.com": "redux_media", + "reduxmediagroup.com": "redux_media", + "reedbusiness.net": "reed_business_information", + "reembed.com": "reembed.com", + "reevoo.com": "reevoo.com", + "refericon.pl": "refericon", + "ads.referlocal.com": "referlocal", + "refersion.com": "refersion", + "refinedads.com": "refined_labs", + "product.reflektion.com": "reflektion", + "reformal.ru": "reformal", + "reinvigorate.net": "reinvigorate", + "convertglobal.com": "rekko", + "convertglobal.s3.amazonaws.com": "rekko", + "dnhgz729v27ca.cloudfront.net": "rekko", + "reklamstore.com": "reklam_store", + "ad.reklamport.com": "reklamport", + "delivery.reklamz.com": "reklamz", + "adimg.rekmob.com": "rekmob", + "relap.io": "relap", + "svtrd.com": "relay42", + "synovite-scripts.com": "relay42", + "tdn.r42tag.com": "relay42", + "relestar.com": "relestar", + "relevant4.com": "relevant4.com", + "remintrex.com": "remintrex", + "remove.video": "remove.video", + "rp-api.com": "repost.us", + "republer.com": "republer.com", + "resmeter.respublica.al": "res-meter", + "researchnow.com": "research_now", + "reson8.com": "resonate_networks", + "respondhq.com": "respond", + "adinsight.com": "responsetap", + "adinsight.eu": "responsetap", + "responsetap.com": "responsetap", + "data.resultlinks.com": "result_links", + "sli-system.com": "resultspage.com", + "retailrocket.net": "retailrocket.net", + "retailrocket.ru": "retailrocket.net", + "shopify.retargetapp.com": "retarget_app", + "retargeter.com": "retargeter_beacon", + "retargeting.cl": "retargeting.cl", + "d1stxfv94hrhia.cloudfront.net": "retention_science", + "waves.retentionscience.com": "retention_science", + "reutersmedia.net": "reuters_media", + "revcontent.com": "revcontent", + "socialtwist.com": "reve_marketing", + "revenue.com": "revenue", + "clkads.com": "revenuehits", + "clkmon.com": "revenuehits", + "clkrev.com": "revenuehits", + "clksite.com": "revenuehits", + "eclkspbn.com": "revenuehits", + "imageshack.host": "revenuehits", + "revenuemantra.com": "revenuemantra", + "revive-adserver.com": "revive_adserver", + "revolvermaps.com": "revolver_maps", + "cts.tradepub.com": "revresponse", + "revresponse.com": "revresponse", + "incontext.pl": "rewords", + "pl-engine.intextad.net": "rewords", + "addesktop.com": "rhythmone", + "1rx.io": "rhythmone_beacon", + "ria.ru": "ria.ru", + "rmbn.ru": "rich_media_banner_network", + "ics0.com": "richrelevance", + "richrelevance.com": "richrelevance", + "ringier.ch": "ringier.ch", + "meteorsolutions.com": "rio_seo", + "riskified.com": "riskfield.com", + "rncdn3.com": "rncdn3.com", + "ro2.biz": "ro2.biz", + "rbxcdn.com": "roblox", + "getrockerbox.com": "rockerbox", + "rocket.la": "rocket.ia", + "trk.sodoit.com": "roi_trax", + "collector.roistat.com": "roistat", + "rollad.ru": "rollad", + "d37gvrvc0wt4s1.cloudfront.net": "rollbar", + "get.roost.me": "roost", + "getrooster.com": "rooster", + "rqtrk.eu": "roq.ad", + "rotaban.ru": "rotaban", + "routenplaner-karten.com": "routenplaner-karten.com", + "rovion.com": "rovion", + "rsspump.com": "rsspump", + "creativecdn.com": "rtb_house", + "rvty.net": "rtblab", + "rtbsuperhub.com": "rtbsuperhub.com", + "rtl.de": "rtl_group", + "static-fra.de": "rtl_group", + "technical-service.net": "rtl_group", + "rtmark.net": "rtmark.net", + "dpclk.com": "rubicon", + "mobsmith.com": "rubicon", + "nearbyad.com": "rubicon", + "rubiconproject.com": "rubicon", + "tracker.ruhrgebiet-onlineservices.de": "ruhrgebiet", + "click.rummycircle.com": "rummycircle", + "runadtag.com": "run", + "rundsp.com": "run", + "un-syndicate.com": "runative", + "cdn.secretrune.com": "rune", + "runmewivel.com": "runmewivel.com", + "rhythmxchange.com": "rythmxchange", + "s24.com": "s24_com", + "s3xified.com": "s3xified.com", + "camp.sabavision.com": "sabavision", + "sageanalyst.net": "sagemetrics", + "sail-horizon.com": "sailthru_horizon", + "sail-personalize.com": "sailthru_horizon", + "sailthru.com": "sailthru_horizon", + "d16fk4ms6rqz1v.cloudfront.net": "salecycle", + "salecycle.com": "salecycle", + "api.salesfeed.com": "sales_feed", + "salesmanago.com": "sales_manago", + "salesmanago.pl": "sales_manago", + "force.com": "salesforce.com", + "salesforce.com": "salesforce.com", + "liveagentforsalesforce.com": "salesforce_live_agent", + "salesforceliveagent.com": "salesforce_live_agent", + "msgapp.com": "salesfusion", + "salespidermedia.com": "salespider_media", + "salesviewer.com": "salesviewer", + "samba.tv": "samba.tv", + "game-mode.net": "samsung", + "gos-gsp.io": "samsung", + "lldns.net": "samsung", + "pavv.co.kr": "samsung", + "remotesamsung.com": "samsung", + "samsung-gamelauncher.com": "samsung", + "samsung.co.kr": "samsung", + "samsung.com": "samsung", + "samsung.com.cn": "samsung", + "samsungcloud.com": "samsung", + "samsungcloudcdn.com": "samsung", + "samsungcloudprint.com": "samsung", + "samsungcloudsolution.com": "samsung", + "samsungcloudsolution.net": "samsung", + "samsungelectronics.com": "samsung", + "samsunghealth.com": "samsung", + "samsungiotcloud.com": "samsung", + "samsungknox.com": "samsung", + "samsungnyc.com": "samsung", + "samsungosp.com": "samsung", + "samsungotn.net": "samsung", + "samsungpositioning.com": "samsung", + "samsungqbe.com": "samsung", + "samsungrm.net": "samsung", + "samsungrs.com": "samsung", + "samsungsemi.com": "samsung", + "samsungsetup.com": "samsung", + "samsungusa.com": "samsung", + "secb2b.com": "samsung", + "smartthings.com": "samsung", + "adgear.com": "samsungads", + "adgrx.com": "samsungads", + "samsungacr.com": "samsungads", + "samsungadhub.com": "samsungads", + "samsungads.com": "samsungads", + "samsungtifa.com": "samsungads", + "aibixby.com": "samsungapps", + "findmymobile.samsung.com": "samsungapps", + "samsapps.cust.lldns.net": "samsungapps", + "samsung-omc.com": "samsungapps", + "samsungapps.com": "samsungapps", + "samsungdiroute.net": "samsungapps", + "samsungdive.com": "samsungapps", + "samsungdm.com": "samsungapps", + "samsungdmroute.com": "samsungapps", + "samsungmdec.com": "samsungapps", + "samsungvisioncloud.com": "samsungapps", + "sbixby.com": "samsungapps", + "ospserver.net": "samsungmobile", + "samsungdms.net": "samsungmobile", + "samsungmax.com": "samsungmobile", + "samsungmobile.com": "samsungmobile", + "secmobilesvc.com": "samsungmobile", + "push.samsungosp.com": "samsungpush", + "pushmessage.samsung.com": "samsungpush", + "scs.samsungqbe.com": "samsungpush", + "ssp.samsung.com": "samsungpush", + "samsungsds.com": "samsungsds", + "internetat.tv": "samsungtv", + "samsungcloud.tv": "samsungtv", + "tizenservice.com": "samsungtv", + "ilsemedia.nl": "sanoma.fi", + "sanoma.fi": "sanoma.fi", + "d13im3ek7neeqp.cloudfront.net": "sap_crm", + "d28ethi6slcjbm.cloudfront.net": "sap_crm", + "d2uevgmgh16uk4.cloudfront.net": "sap_crm", + "d3m83gvgzupli.cloudfront.net": "sap_crm", + "saas.seewhy.com": "sap_crm", + "leadforce1.com": "sap_sales_cloud", + "vlog.leadformix.com": "sap_sales_cloud", + "sap-xm.org": "sap_xm", + "sape.ru": "sape.ru", + "js.sl.pt": "sapo_ads", + "aimatch.com": "sas", + "sas.com": "sas", + "say.ac": "say.ac", + "ads.saymedia.com": "say_media", + "srv.sayyac.net": "sayyac", + "scarabresearch.com": "scarabresearch", + "schibsted.com": "schibsted", + "schibsted.io": "schibsted", + "schneevonmorgen.com": "schneevonmorgen.com", + "svonm.com": "schneevonmorgen.com", + "rockabox.co": "scoota", + "scorecardresearch.com": "scorecard_research_beacon", + "scoreresearch.com": "scorecard_research_beacon", + "scrsrch.com": "scorecard_research_beacon", + "securestudies.com": "scorecard_research_beacon", + "scout.scoutanalytics.net": "scout_analytics", + "scribblelive.com": "scribblelive", + "scribol.com": "scribol", + "analytics.snidigital.com": "scripps_analytics", + "scroll.com": "scroll", + "scupio.com": "scupio", + "search123.uk.com": "search123", + "searchforce.net": "searchforce", + "searchignite.com": "searchignite", + "srtk.net": "searchrev", + "tacticalrepublic.com": "second_media", + "sectigo.com": "sectigo", + "securedtouch.com": "securedtouch", + "securedvisit.com": "securedvisit", + "bacontent.de": "seeding_alliance", + "nativendo.de": "seeding_alliance", + "seedtag.com": "seedtag.com", + "svlu.net": "seevolution", + "d2dq2ahtl5zl1z.cloudfront.net": "segment", + "d47xnnr8b1rki.cloudfront.net": "segment", + "segment.com": "segment", + "segment.io": "segment", + "rutarget.ru": "segmento", + "segmint.net": "segmint", + "sekindo.com": "sekindo", + "sellpoint.net": "sellpoints", + "sellpoints.com": "sellpoints", + "semantiqo.com": "semantiqo.com", + "semasio.net": "semasio", + "semilo.com": "semilo", + "semknox.com": "semknox.com", + "sibautomation.com": "sendinblue", + "sendpulse.com": "sendpulse.com", + "sendsay.ru": "sendsay", + "track.sensedigital.in": "sense_digital", + "static.sensorsdata.cn": "sensors_data", + "sentifi.com": "sentifi.com", + "d3nslu0hdya83q.cloudfront.net": "sentry", + "getsentry.com": "sentry", + "ravenjs.com": "sentry", + "sentry.io": "sentry", + "sepyra.com": "sepyra", + "d2oh4tlt9mrke9.cloudfront.net": "sessioncam", + "sessioncam.com": "sessioncam", + "sessionly.io": "sessionly", + "71i.de": "sevenone_media", + "sexad.net": "sexadnetwork", + "ads.sexinyourcity.com": "sexinyourcity", + "sextracker.com": "sextracker", + "sexypartners.net": "sexypartners.net", + "im.cz": "seznam", + "imedia.cz": "seznam", + "szn.cz": "seznam", + "dtym7iokkjlif.cloudfront.net": "shareaholic", + "shareaholic.com": "shareaholic", + "shareasale.com": "shareasale", + "quintrics.nl": "sharecompany", + "sharecompany.nl": "sharecompany", + "sharepointonline.com": "sharepoint", + "onmicrosoft.com": "sharepoint", + "sharepoint.com": "sharepoint", + "sharethis.com": "sharethis", + "shareth.ru": "sharethrough", + "sharethrough.com": "sharethrough", + "marketingautomation.services": "sharpspring", + "sharpspring.com": "sharpspring", + "sheego.de": "sheego.de", + "services.sheerid.com": "sheerid", + "shinystat.com": "shinystat", + "shinystat.it": "shinystat", + "app.shoptarget.com.br": "shop_target", + "retargeter.com.br": "shop_target", + "shopauskunft.de": "shopauskunft.de", + "shopgate.com": "shopgate.com", + "shopify.com": "shopify", + "shopifycdn.com": "shopify", + "cdn.shopify.com": "shopify", + "myshopify.com": "shopify", + "shop.app": "shopify", + "shopify.co.za": "shopify", + "shopify.com.au": "shopify", + "shopify.com.mx": "shopify", + "shopify.dev": "shopify", + "shopifyapps.com": "shopify", + "shopifycdn.net": "shopify", + "shopifynetwork.com": "shopify", + "shopifypreview.com": "shopify", + "shopifysvc.com": "shopify_stats", + "stats.shopify.com": "shopify_stats", + "v.shopify.com": "shopify_stats", + "shopifycloud.com": "shopifycloud.com", + "shopperapproved.com": "shopper_approved", + "shoppingshadow.com": "shopping_com", + "tracking.shopping-flux.com": "shopping_flux", + "shoprunner.com": "shoprunner", + "shopsocially.com": "shopsocially", + "shopzilla.com": "shopzilla", + "shortnews.de": "shortnews", + "showrss.info": "showrss", + "shink.in": "shrink", + "shutterstock.com": "shutterstock", + "siblesectiveal.club": "siblesectiveal.club", + "d3v27wwd40f0xu.cloudfront.net": "sidecar", + "getsidecar.com": "sidecar", + "dtlilztwypawv.cloudfront.net": "sift_science", + "siftscience.com": "sift_science", + "btstatic.com": "signal", + "signal.co": "signal", + "thebrighttag.com": "signal", + "cdn-scripts.signifyd.com": "signifyd", + "signifyd.com": "signifyd", + "gw-services.vtrenz.net": "silverpop", + "mkt51.net": "silverpop", + "mkt912.com": "silverpop", + "mkt922.com": "silverpop", + "mkt941.com": "silverpop", + "pages01.net": "silverpop", + "pages02.net": "silverpop", + "pages04.net": "silverpop", + "pages05.net": "silverpop", + "similardeals.net": "similardeals.net", + "similarweb.com": "similarweb", + "similarweb.io": "similarweb", + "d8rk54i4mohrb.cloudfront.net": "simplereach", + "simplereach.com": "simplereach", + "simpli.fi": "simpli.fi", + "sina.com.cn": "sina", + "sinaimg.cn": "sina_cdn", + "reporting.singlefeed.com": "singlefeed", + "sddan.com": "sirdata", + "site24x7rum.com": "site24x7", + "site24x7rum.eu": "site24x7", + "sitebooster-fjfmworld-production.azureedge.net": "site_booster", + "a5.ogt.jp": "site_stratos", + "siteapps.com": "siteapps", + "sitebro.com": "sitebro", + "sitebro.com.tw": "sitebro", + "sitebro.net": "sitebro", + "sitebro.tw": "sitebro", + "siteheart.com": "siteheart", + "siteimprove.com": "siteimprove", + "siteimproveanalytics.com": "siteimprove_analytics", + "sitelabweb.com": "sitelabweb.com", + "sitemeter.com": "sitemeter", + "pixel.ad": "sitescout", + "sitescout.com": "sitescout", + "ad.sitemaji.com": "sitetag", + "sitetag.us": "sitetag", + "analytics.sitewit.com": "sitewit", + "ads.sixapart.com": "six_apart_advertising", + "sixt-neuwagen.de": "sixt-neuwagen.de", + "skadtec.com": "skadtec.com", + "redirectingat.com": "skimlinks", + "skimlinks.com": "skimlinks", + "skimresources.com": "skimlinks", + "analytics.skroutz.gr": "skroutz", + "skyglue.com": "skyglue", + "skype.com": "skype", + "skypeassets.com": "skype", + "skysa.com": "skysa", + "skyscnr.com": "skyscnr.com", + "slack-edge.com": "slack", + "slack-imgs.com": "slack", + "slack.com": "slack", + "slackb.com": "slack", + "slashdot.org": "slashdot_widget", + "sleeknotestaticcontent.sleeknote.com": "sleeknote", + "resultspage.com": "sli_systems", + "builder.extensionfactory.com": "slice_factory", + "freeskreen.com": "slimcutmedia", + "slingpic.com": "slingpic", + "smaato.net": "smaato", + "smart4ads.com": "smart4ads", + "sascdn.com": "smart_adserver", + "smartadserver.com": "smart_adserver", + "styria-digital.com": "smart_adserver", + "yoc-adserver.com": "smart_adserver", + "smartcall.kz": "smart_call", + "getsmartcontent.com": "smart_content", + "smartdevicemedia.com": "smart_device_media", + "x.cnt.my": "smart_leads", + "tracking.smartselling.cz": "smart_selling", + "bepolite.eu": "smartad", + "smartbn.ru": "smartbn", + "smartclick.net": "smartclick.net", + "smartclip.net": "smartclip", + "smartcontext.pl": "smartcontext", + "d1n00d49gkbray.cloudfront.net": "smarter_remarketer", + "dhxtx5wtu812h.cloudfront.net": "smarter_remarketer", + "smartertravel.com": "smarter_travel", + "travelsmarter.net": "smarter_travel", + "smct.co": "smarterclick", + "smartertrack.com": "smartertrack", + "smartlink.cool": "smartlink.cool", + "getsmartlook.com": "smartlook", + "smartlook.com": "smartlook", + "smartstream.tv": "smartstream.tv", + "smartsuppchat.com": "smartsupp_chat", + "smi2.net": "smi2.ru", + "smi2.ru": "smi2.ru", + "stat.media": "smi2.ru", + "cdn.smooch.io": "smooch", + "smowtion.com": "smowtion", + "smxindia.in": "smx_ventures", + "smyte.com": "smyte", + "snacktv.de": "snacktv", + "snap.com": "snap", + "addlive.io": "snap", + "feelinsonice.com": "snap", + "sc-cdn.net": "snap", + "sc-corp.net": "snap", + "sc-gw.com": "snap", + "sc-jpl.com": "snap", + "sc-prod.net": "snap", + "snap-dev.net": "snap", + "snapads.com": "snap", + "snapkit.com": "snap", + "snapengage.com": "snap_engage", + "sc-static.net": "snapchat", + "snapchat.com": "snapchat", + "snapcraft.io": "snapcraft", + "snapcraftcontent.com": "snapcraft", + "h-bid.com": "snigelweb", + "eu2.snoobi.eu": "snoobi", + "snoobi.com": "snoobi_analytics", + "d346whrrklhco7.cloudfront.net": "snowplow", + "d78fikflryjgj.cloudfront.net": "snowplow", + "dc8xl0ndzn2cb.cloudfront.net": "snowplow", + "playwire.com": "snowplow", + "snplow.net": "snowplow", + "go-mpulse.net": "soasta_mpulse", + "mpstat.us": "soasta_mpulse", + "tiaa-cref.org": "soasta_mpulse", + "sociablelabs.com": "sociable_labs", + "socialamp.com": "social_amp", + "socialannex.com": "social_annex", + "soclminer.com.br": "social_miner", + "duu8lzqdm8tsz.cloudfront.net": "socialbeat", + "ratevoice.com": "socialrms", + "sociaplus.com": "sociaplus.com", + "sociomantic.com": "sociomantic", + "images.sohu.com": "sohu", + "sojern.com": "sojern", + "sokrati.com": "sokrati", + "solads.media": "solads.media", + "solaredge.com": "solaredge", + "solidopinion.com": "solidopinion", + "pixel.solvemedia.com": "solve_media", + "soma2.de": "soma_2", + "mobileadtrading.com": "somoaudience", + "sonobi.com": "sonobi", + "sonos.com": "sonos", + "sophus3.com": "sophus3", + "deployads.com": "sortable", + "sndcdn.com": "soundcloud", + "soundcloud.com": "soundcloud", + "provenpixel.com": "sourceknowledge_pixel", + "decenthat.com": "sourcepoint", + "summerhamster.com": "sourcepoint", + "d3pkae9owd2lcf.cloudfront.net": "sovrn", + "lijit.com": "sovrn", + "onscroll.com": "sovrn_viewability_solutions", + "rts.sparkstudios.com": "spark_studios", + "sparkasse.de": "sparkasse.de", + "speakpipe.com": "speakpipe", + "adviva.net": "specific_media", + "specificclick.net": "specific_media", + "specificmedia.com": "specific_media", + "spectate.com": "spectate", + "speedshiftmedia.com": "speed_shift_media", + "speedcurve.com": "speedcurve", + "admarket.entireweb.com": "speedyads", + "affiliate.entireweb.com": "speedyads", + "sa.entireweb.com": "speedyads", + "speee-ad.akamaized.net": "speee", + "sphere.com": "sphere", + "surphace.com": "sphere", + "api.spheremall.com": "spheremall", + "zdwidget3-bs.sphereup.com": "sphereup", + "static.sspicy.ru": "spicy", + "spider.ad": "spider.ad", + "metrics.spiderads.eu": "spider_ads", + "spn.ee": "spinnakr", + "embed.spokenlayer.com": "spokenlayer", + "spongecell.com": "spongecell", + "sponsorads.de": "sponsorads.de", + "sportsbetaffiliates.com.au": "sportsbet_affiliates", + "spot.im": "spot.im", + "spoteffects.net": "spoteffect", + "scdn.co": "spotify", + "spotify.com": "spotify", + "pscdn.co": "spotify", + "spotifycdn.com": "spotify", + "spotifycdn.net": "spotify", + "spotilocal.com": "spotify", + "embed.spotify.com": "spotify_embed", + "spotscenered.info": "spotscenered.info", + "spotx.tv": "spotxchange", + "spotxcdn.com": "spotxchange", + "spotxchange.com": "spotxchange", + "spoutable.com": "spoutable", + "cdn.springboardplatform.com": "springboard", + "springserve.com": "springserve", + "pixel.sprinklr.com": "sprinklr", + "stat.sputnik.ru": "sputnik", + "email-match.com": "squadata", + "squarespace.com": "squarespace.com", + "srvtrck.com": "srvtrck.com", + "srvvtrk.com": "srvvtrk.com", + "sstatic.net": "sstatic.net", + "hatena.ne.jp": "st-hatena", + "st-hatena.com": "st-hatena", + "stackadapt.com": "stackadapt", + "stackpathdns.com": "stackpathdns.com", + "stailamedia.com": "stailamedia_com", + "stalluva.pro": "stalluva.pro", + "startappservice.com": "startapp", + "hit.stat24.com": "stat24", + "adstat.4u.pl": "stat4u", + "stat.4u.pl": "stat4u", + "statcounter.com": "statcounter", + "stathat.com": "stathat", + "statisfy.net": "statisfy", + "statsy.net": "statsy.net", + "statuscake.com": "statuscake", + "statuspage.io": "statuspage.io", + "stspg-customer.com": "statuspage.io", + "stayfriends.de": "stayfriends.de", + "steelhousemedia.com": "steelhouse", + "steepto.com": "steepto.com", + "stepstone.com": "stepstone.com", + "4stats.de": "stetic", + "stetic.com": "stetic", + "stickyadstv.com": "stickyads", + "stocktwits.com": "stocktwits", + "storify.com": "storify", + "storygize.net": "storygize", + "bizsolutions.strands.com": "strands_recommender", + "strava.com": "strava", + "mailfoogae.appspot.com": "streak", + "streamotion.com.au": "streamotion", + "streamrail.com": "streamrail.com", + "streamrail.net": "streamrail.com", + "stridespark.com": "stride", + "stripcdn.com": "stripchat.com", + "stripchat.com": "stripchat.com", + "stripe.com": "stripe.com", + "stripe.network": "stripe.com", + "stripst.com": "stripst.com", + "interactivemedia.net": "stroer_digital_media", + "stroeerdigitalgroup.de": "stroer_digital_media", + "stroeerdigitalmedia.de": "stroer_digital_media", + "stroeerdp.de": "stroer_digital_media", + "stroeermediabrands.de": "stroer_digital_media", + "spklw.com": "strossle", + "sprinklecontent.com": "strossle", + "strossle.it": "strossle", + "struq.com": "struq", + "stumble-upon.com": "stumbleupon_widgets", + "stumbleupon.com": "stumbleupon_widgets", + "su.pr": "stumbleupon_widgets", + "sub2tech.com": "sub2", + "ayads.co": "sublime_skinz", + "suggest.io": "suggest.io", + "sumologic.com": "sumologic.com", + "sumo.com": "sumome", + "sumome.com": "sumome", + "sundaysky.com": "sundaysky", + "supercell.com": "supercell", + "supercellsupport.com": "supercell", + "supercounters.com": "supercounters", + "superfastcdn.com": "superfastcdn.com", + "socdm.com": "supership", + "supplyframe.com": "supplyframe", + "surfingbird.ru": "surf_by_surfingbird", + "px.surveywall-api.survata.com": "survata", + "cdn.sweettooth.io": "sweettooth", + "swiftypecdn.com": "swiftype", + "swisscom.ch": "swisscom", + "myswitchads.com": "switch_concepts", + "switchadhub.com": "switch_concepts", + "switchads.com": "switch_concepts", + "switchafrica.com": "switch_concepts", + "switch.tv": "switchtv", + "shopximity.com": "swoop", + "swoop.com": "swoop", + "analytics-cdn.sykescottages.co.uk": "sykes", + "norton.com": "symantec", + "seal.verisign.com": "symantec", + "symantec.com": "symantec", + "d.hodes.com": "symphony_talent", + "technorati.com": "synacor", + "technoratimedia.com": "synacor", + "cn.clickable.net": "syncapse", + "synergy-e.com": "synergy-e", + "sdp-campaign.de": "t-mobile", + "t-online.de": "t-mobile", + "telekom-dienste.de": "t-mobile", + "telekom.com": "t-mobile", + "telekom.de": "t-mobile", + "toi.de": "t-mobile", + "t8cdn.com": "t8cdn.com", + "tableteducation.com": "tableteducation.com", + "basebanner.com": "taboola", + "taboola.com": "taboola", + "taboolasyndication.com": "taboola", + "tacoda.net": "tacoda", + "commander1.com": "tag_commander", + "tagcommander.com": "tag_commander", + "tags.tagcade.com": "tagcade", + "taggify.net": "taggify", + "taggyad.jp": "taggy", + "levexis.com": "tagman", + "tailtarget.com": "tail_target", + "tailsweep.com": "tailsweep", + "tamedia.ch": "tamedia.ch", + "tanx.com": "tanx", + "alipcsec.com": "taobao", + "taobao.com": "taobao", + "tapad.com": "tapad", + "theblogfrog.com": "tapinfluence", + "tarafdari.com": "tarafdari", + "target2sell.com": "target_2_sell", + "trackmytarget.com": "target_circle", + "cdn.targetfuel.com": "target_fuel", + "tawk.to": "tawk", + "tbn.ru": "tbn.ru", + "tchibo-content.de": "tchibo_de", + "tchibo.de": "tchibo_de", + "tdsrmbl.net": "tdsrmbl_net", + "teads.tv": "teads", + "tealeaf.ibmcloud.com": "tealeaf", + "tealium.com": "tealium", + "tealium.hs.llnwd.net": "tealium", + "tealiumiq.com": "tealium", + "tiqcdn.com": "tealium", + "teaser.cc": "teaser.cc", + "emailretargeting.com": "tedemis", + "tracking.dsmmadvantage.com": "teletech", + "telstra.com": "telstra", + "telstra.com.au": "telstra", + "tenderapp.com": "tender", + "tensitionschoo.club": "tensitionschoo.club", + "watch.teroti.com": "teroti", + "webterren.com": "terren", + "teufel.de": "teufel.de", + "theadex.com": "the_adex", + "connect.decknetwork.net": "the_deck", + "gu-web.net": "the_guardian", + "guardianapps.co.uk": "the_guardian", + "guim.co.uk": "the_guardian", + "deepthought.online": "the_reach_group", + "reachgroup.com": "the_reach_group", + "redintelligence.net": "the_reach_group", + "thesearchagency.net": "the_search_agency", + "thesun.co.uk": "the_sun", + "w-x.co": "the_weather_company", + "weather.com": "the_weather_company", + "wfxtriggers.com": "the_weather_company", + "tmdb.org": "themoviedb", + "thinglink.com": "thinglink", + "online-metrix.net": "threatmetrix", + "tidbit.co.in": "tidbit", + "code.tidio.co": "tidio", + "widget-v4.tidiochat.com": "tidio", + "analytics.tiktok.com": "tiktok_analytics", + "optimized.by.tiller.co": "tiller", + "vip.timezonedb.com": "timezondb", + "npttech.com": "tinypass", + "tinypass.com": "tinypass", + "tisoomi-services.com": "tisoomi", + "ad.tlvmedia.com": "tlv_media", + "ads.tlvmedia.com": "tlv_media", + "tag.tlvmedia.com": "tlv_media", + "research-int.se": "tns", + "sesamestats.com": "tns", + "spring-tns.net": "tns", + "statistik-gallup.net": "tns", + "tns-cs.net": "tns", + "tns-gallup.dk": "tns", + "tomnewsupdate.info": "tomnewsupdate.info", + "tfag.de": "tomorrow_focus", + "srv.clickfuse.com": "tonefuse", + "toplist.cz": "toplist.cz", + "toponclick.com": "toponclick_com", + "topsy.com": "topsy", + "insight.torbit.com": "torbit", + "toro-tags.com": "toro", + "toroadvertising.com": "toro", + "toroadvertisingmedia.com": "toro", + "tororango.com": "tororango.com", + "i.total-media.net": "total_media", + "inq.com": "touchcommerce", + "tovarro.com": "tovarro.com", + "rialpay.com": "tp-cdn.com", + "tp-cdn.com": "tp-cdn.com", + "kiwe.io": "tracc.it", + "tracc.it": "tracc.it", + "ipnoid.com": "tracemyip", + "tracemyip.org": "tracemyip", + "d2gfdmu30u15x7.cloudfront.net": "traceview", + "tracelytics.com": "traceview", + "cdn.trackduck.com": "track_duck", + "d2zah9y47r7bi2.cloudfront.net": "trackjs", + "dl1d2m8ri9v3j.cloudfront.net": "trackjs", + "trackjs.com": "trackjs", + "conversionlab.trackset.com": "trackset_conversionlab", + "trackuity.com": "trackuity", + "adsrvr.org": "tradedesk", + "tradedoubler.com": "tradedoubler", + "tradelab.fr": "tradelab", + "tradetracker.net": "tradetracker", + "cdntrf.com": "traffective", + "traffective.com": "traffective", + "my.trafficfuel.com": "traffic_fuel", + "trafficrevenue.net": "traffic_revenue", + "trafficstars.com": "traffic_stars", + "tsyndicate.com": "traffic_stars", + "trafficbroker.com": "trafficbroker", + "trafficfabrik.com": "trafficfabrik.com", + "trafficfactory.biz": "trafficfactory", + "trafficforce.com": "trafficforce", + "traffichaus.com": "traffichaus", + "trafficjunky.net": "trafficjunky", + "traffiliate.com": "traffiliate", + "storage.trafic.ro": "trafic", + "trafmag.com": "trafmag.com", + "api.transcend.io": "transcend", + "cdn.transcend.io": "transcend", + "sync-transcend-cdn.com": "transcend", + "transcend-cdn.com": "transcend", + "transcend.io": "transcend", + "telemetry.transcend.io": "transcend_telemetry", + "backoffice.transmatico.com": "transmatic", + "travelaudience.com": "travel_audience", + "trbo.com": "trbo", + "treasuredata.com": "treasuredata", + "scanscout.com": "tremor_video", + "tremorhub.com": "tremor_video", + "tremormedia.com": "tremor_video", + "tremorvideo.com": "tremor_video", + "videohub.tv": "tremor_video", + "s.tcimg.com": "trendcounter", + "tcimg.com": "trendcounter", + "trendemon.com": "trendemon", + "exponential.com": "tribal_fusion", + "tribalfusion.com": "tribal_fusion", + "tribl.io": "triblio", + "api.temails.com": "trigger_mail_marketing", + "t.myvisitors.se": "triggerbee", + "jscache.com": "tripadvisor", + "tacdn.com": "tripadvisor", + "tamgrt.com": "tripadvisor", + "tripadvisor.co.uk": "tripadvisor", + "tripadvisor.com": "tripadvisor", + "tripadvisor.de": "tripadvisor", + "3lift.com": "triplelift", + "d3iwjrnl4m67rd.cloudfront.net": "triplelift", + "triplelift.com": "triplelift", + "static.triptease.io": "triptease", + "andomedia.com": "triton_digital", + "tritondigital.com": "triton_digital", + "revelations.trovus.co.uk": "trovus_revelations", + "trsv3.com": "trsv3.com", + "truefitcorp.com": "true_fit", + "tru.am": "trueanthem", + "adlegend.com": "trueffect", + "addoer.com": "truehits.net", + "truehits.in.th": "truehits.net", + "truehits.net": "truehits.net", + "trumba.com": "trumba", + "truoptik.com": "truoptik", + "trustarc.com": "trustarc", + "truste.com": "trustarc", + "consent.truste.com": "truste_consent", + "choices-or.truste.com": "truste_notice", + "choices.truste.com": "truste_notice", + "privacy-policy.truste.com": "truste_seal", + "trustedshops.com": "trusted_shops", + "trustev.com": "trustev", + "secure.comodo.net": "trustlogo", + "trustlogo.com": "trustlogo", + "usertrust.com": "trustlogo", + "trustpilot.com": "trustpilot", + "trustwave.com": "trustwave.com", + "tubecorporate.com": "tubecorporate", + "tubecup.org": "tubecup.org", + "tubemogul.com": "tubemogul", + "sre-perim.com": "tumblr_analytics", + "txmblr.com": "tumblr_analytics", + "platform.tumblr.com": "tumblr_buttons", + "lib.tunein.com": "tune_in", + "adagio.turboadv.com": "turbo", + "turn.com": "turn_inc.", + "ngtv.io": "turner", + "turner.com": "turner", + "warnermedia.com": "turner", + "turnsocial.com": "turnsocial", + "turnto.com": "turnto", + "tvsquared.com": "tvsquared.com", + "tweetboard.com": "tweetboard", + "tweetmeme.com": "tweetmeme", + "c4tw.net": "twenga", + "twiago.com": "twiago", + "twinedigital.go2cloud.org": "twine", + "ext-twitch.tv": "twitch.tv", + "twitch.tv": "twitch.tv", + "jtvnw.net": "twitch_cdn", + "ttvnw.net": "twitch_cdn", + "twitchcdn.net": "twitch_cdn", + "twitchsvc.net": "twitch_cdn", + "t.co": "twitter", + "twimg.com": "twitter", + "twitter.com": "twitter", + "twttr.com": "twitter", + "x.com": "twitter", + "ads-twitter.com": "twitter_ads", + "analytics.twitter.com": "twitter_analytics", + "tellapart.com": "twitter_for_business", + "syndication.twitter.com": "twitter_syndication", + "twittercounter.com": "twittercounter", + "twyn.com": "twyn", + "txxx.com": "txxx.com", + "tynt.com": "tynt", + "typeform.com": "typeform", + "typepad.com": "typepad_stats", + "typography.com": "typography.com", + "tyroodirect.com": "tyroo", + "tyroodr.com": "tyroo", + "tzetze.it": "tzetze", + "ubersetzung-app.com": "ubersetzung-app.com", + "ubuntu.com": "ubuntu", + "ubuntucompanyservices.co.za": "ubuntu", + "aralego.net": "ucfunnel", + "ucfunnel.com": "ucfunnel", + "at.ua": "ucoz", + "do.am": "ucoz", + "ucoz.net": "ucoz", + "ad-api-v01.uliza.jp": "uliza", + "api.umbel.com": "umbel", + "umebiggestern.club": "umebiggestern.club", + "unanimis.co.uk": "unanimis", + "d3pkntwtp2ukl5.cloudfront.net": "unbounce", + "t.unbounce.com": "unbounce", + "d21gpk1vhmjuf5.cloudfront.net": "unbxd", + "tracker.unbxdapi.com": "unbxd", + "under-box.com": "under-box.com", + "undercomputer.com": "undercomputer.com", + "udmserve.net": "underdog_media", + "undertone.com": "undertone", + "roitesting.com": "unica", + "unica.com": "unica", + "unister-adservices.com": "unister", + "unister-gmbh.de": "unister", + "uadx.com": "unite", + "nonstoppartner.net": "united_digital_group", + "tifbs.net": "united_internet_media_gmbh", + "ui-portal.de": "united_internet_media_gmbh", + "uimserv.net": "united_internet_media_gmbh", + "unity.com": "unity", + "unity3d.com": "unity", + "unity3dusercontent.com": "unity", + "unityads.unity3d.com": "unity_ads", + "univide.com": "univide", + "unpkg.com": "unpkg.com", + "unrulymedia.com": "unruly_media", + "src.kitcode.net": "untriel_finger_printing", + "s.clickability.com": "upland_clickability_beacon", + "uppr.de": "uppr.de", + "upravel.com": "upravel.com", + "upsellit.com": "upsellit", + "kontagent.net": "upsight", + "app.uptain.de": "uptain", + "uptolike.com": "uptolike.com", + "uptrends.com": "uptrends", + "urban-media.com": "urban-media.com", + "urbanairship.com": "urban_airship", + "mobile.usabilitytools.com": "usability_tools", + "usabilla.com": "usabilla", + "usemax.de": "usemax", + "usemaxserver.de": "usemax", + "usemessages.com": "usemessages.com", + "api.usercycle.com": "usercycle", + "userdive.com": "userdive", + "userecho.com": "userecho", + "dq4irj27fs462.cloudfront.net": "userlike.com", + "userlike-cdn-widgets.s3-eu-west-1.amazonaws.com": "userlike.com", + "userlike.com": "userlike.com", + "contactusplus.com": "userpulse", + "user-pulse.appspot.com": "userpulse", + "userpulse.com": "userpulse", + "userreplay.net": "userreplay", + "sdsbucket.s3.amazonaws.com": "userreport", + "userreport.com": "userreport", + "dtkm4pd19nw6z.cloudfront.net": "userrules", + "api.usersnap.com": "usersnap", + "d3mvnvhjmkxpjz.cloudfront.net": "usersnap", + "uservoice.com": "uservoice", + "userzoom.com": "userzoom.com", + "usocial.pro": "usocial", + "utarget.ru": "utarget", + "uuidksinc.net": "uuidksinc.net", + "v12group.com": "v12_group", + "vacaneedasap.com": "vacaneedasap.com", + "ads.brand.net": "valassis", + "vdrn.redplum.com": "valassis", + "api.searchlinks.com": "validclick", + "js.searchlinks.com": "validclick", + "vinsight.de": "valiton", + "valueclick.net": "valueclick_media", + "valuecommerce.com": "valuecommerce", + "valuedopinions.co.uk": "valued_opinions", + "buzzparadise.com": "vanksen", + "vmmpxl.com": "varick_media_management", + "vcita.com": "vcita", + "tracking.vcommission.com": "vcommission", + "vdopia.com": "vdopia", + "veinteractive.com": "ve_interactive", + "vee24.com": "vee24", + "velocecdn.com": "velocecdn.com", + "mdcn.mobi": "velti_mgage_visualize", + "velti.com": "velti_mgage_visualize", + "vendemore.com": "vendemore", + "venturead.com": "venturead.com", + "api.venyoo.ru": "venyoo", + "veoxa.com": "veoxa", + "vergic.com": "vergic.com", + "d3qxef4rp70elm.cloudfront.net": "vero", + "getvero.com": "vero", + "verticalacuity.com": "vertical_acuity", + "roi.vertical-leap.co.uk": "vertical_leap", + "cts.vresp.com": "verticalresponse", + "verticalscope.com": "verticalscope", + "ads.vertoz.com": "vertoz", + "banner.vrtzads.com": "vertoz", + "veruta.com": "veruta", + "vrvm.com": "verve_mobile", + "vgwort.de": "vg_wort", + "digitaltarget.ru": "vi", + "btg.mtvnservices.com": "viacom_tag_container", + "viafoura.com": "viafoura", + "viafoura.net": "viafoura", + "intellitxt.com": "vibrant_ads", + "vicomi.com": "vicomi.com", + "vidazoo.com": "vidazoo.com", + "module-videodesk.com": "video_desk", + "vidtok.ru": "video_potok", + "videoadex.com": "videoadex.com", + "tidaltv.com": "videology", + "videonow.ru": "videonow", + "videoplayerhub.com": "videoplayerhub.com", + "videoplaza.tv": "videoplaza", + "kweb.videostep.com": "videostep", + "content.vidgyor.com": "vidgyor", + "vidible.tv": "vidible", + "assets.vidora.com": "vidora", + "vietad.vn": "vietad", + "viglink.com": "viglink", + "vigo.one": "vigo", + "vigo.ru": "vigo", + "vimeo.com": "vimeo", + "vimeocdn.com": "vimeo", + "vindicosuite.com": "vindico_group", + "vinted.net": "vinted", + "viraladnetwork.net": "viral_ad_network", + "app.viral-loops.com": "viral_loops", + "viralgains.com": "viralgains", + "viralmint.com": "viralmint", + "virgul.com": "virgul", + "ssp.virool.com": "virool_player", + "virtusize.com": "virtusize", + "viewablemedia.net": "visible_measures", + "visiblemeasures.com": "visible_measures", + "visioncriticalpanels.com": "vision_critical", + "visitstreamer.com": "visit_streamer", + "visitortracklog.com": "visitortrack", + "visitorville.com": "visitorville", + "d2hkbi3gan6yg6.cloudfront.net": "visscore", + "myvisualiq.net": "visual_iq", + "visualrevenue.com": "visual_revenue", + "d5phz18u4wuww.cloudfront.net": "visual_website_optimizer", + "visualwebsiteoptimizer.com": "visual_website_optimizer", + "wingify.com": "visual_website_optimizer", + "vdna-assets.com": "visualdna", + "visualdna.com": "visualdna", + "visualstudio.com": "visualstudio.com", + "id-visitors.com": "visualvisitor", + "vi-tag.net": "vivalu", + "vivistats.com": "vivistats", + "vizury.com": "vizury", + "vizzit.se": "vizzit", + "cdn-vk.com": "vk.com", + "vk-analytics.com": "vk.com", + "vkuservideo.net": "vk.com", + "userapi.com": "vkontakte", + "vk.com": "vkontakte", + "vkontakte.ru": "vkontakte", + "vntsm.com": "vntsm.com", + "vodafone.de": "vodafone.de", + "voicefive.com": "voicefive", + "volusion.com": "volusion_chat", + "cwkuki.com": "voluum", + "volumtrk.com": "voluum", + "voluumtrk3.com": "voluum", + "vooxe.com": "vooxe.com", + "vorwerk.de": "vorwerk.de", + "vox-cdn.com": "vox", + "embed.voxus.tv": "voxus", + "voxus-targeting-voxusmidia.netdna-ssl.com": "voxus", + "c-dsp.vpadn.com": "vpon", + "tools.vpscash.nl": "vpscash", + "vsassets.io": "vs", + "exp-tas.com": "vscode", + "v0cdn.net": "vscode", + "vscode-cdn.net": "vscode", + "vscode-unpkg.net": "vscode", + "vtracy.de": "vtracy.de", + "liftoff.io": "vungle", + "vungle.com": "vungle", + "vuukle.com": "vuukle", + "view.vzaar.com": "vzaar", + "w3counter.com": "w3counter", + "w3roi.com": "w3roi", + "contentwidgets.net": "wahoha", + "wahoha.com": "wahoha", + "walkme.com": "walkme.com", + "wsod.com": "wall_street_on_demand", + "walmart.com": "walmart", + "wamcash.com": "wamcash", + "cdn-saveit.wanelo.com": "wanelo", + "static.warp.ly": "warp.ly", + "way2traffic.com": "way2traffic", + "wayfair.com": "wayfair_com", + "wdr.de": "wdr.de", + "web-stat.com": "web-stat", + "web.de": "web.de", + "webde.de": "web.de", + "webstat.net": "web.stat", + "ssl.webserviceaward.com": "web_service_award", + "webtraxs.com": "web_traxs", + "wipe.de": "web_wipe_analytics", + "webads.nl": "webads", + "tr.webantenna.info": "webantenna", + "webclicks24.com": "webclicks24_com", + "webclose.net": "webclose.net", + "webcollage.net": "webcollage", + "goutee.top": "webedia", + "mediaathay.org.uk": "webedia", + "wbdx.fr": "webedia", + "webeffective.keynote.com": "webeffective", + "widgets.webengage.com": "webengage", + "webgains.com": "webgains", + "webgozar.com": "webgozar", + "webgozar.ir": "webgozar", + "webhelpje.be": "webhelpje", + "webhelpje.nl": "webhelpje", + "webleads-tracker.com": "webleads_tracker", + "automation.webmecanik.com": "webmecanik", + "adrcdn.com": "weborama", + "adrcntr.com": "weborama", + "weborama.com": "weborama", + "weborama.fr": "weborama", + "webprospector.de": "webprospector", + "webstat.com": "webstat", + "webstat.se": "webstat.se", + "stat.webtrack.biz": "webtrack", + "webtraffic.no": "webtraffic", + "webtraffic.se": "webtraffic", + "d1r27qvpjiaqj3.cloudfront.net": "webtrekk", + "mateti.net": "webtrekk", + "wbtrk.net": "webtrekk", + "wcfbc.net": "webtrekk", + "webtrekk-asia.net": "webtrekk", + "webtrekk.com": "webtrekk", + "webtrekk.de": "webtrekk", + "webtrekk.net": "webtrekk", + "wt-eu02.net": "webtrekk", + "wt-safetag.com": "webtrekk", + "webtrends.com": "webtrends", + "webtrendslive.com": "webtrends", + "rd.clickshift.com": "webtrends_ads", + "web-visor.com": "webvisor", + "weebly.com": "weebly_ads", + "widget.weibo.com": "weibo_widget", + "westlotto.com": "westlotto_com", + "wetter.com": "wetter_com", + "wettercomassets.com": "wetter_com", + "whatsbroadcast.com": "whatbroadcast", + "whatsapp.com": "whatsapp", + "whatsapp.net": "whatsapp", + "whisper.onelink.me": "whisper", + "whisper.sh": "whisper", + "amung.us": "whos.amung.us", + "whoson.com": "whoson", + "api.wibbitz.com": "wibbitz", + "cdn4.wibbitz.com": "wibbitz", + "cdn.wibiya.com": "wibiya_toolbar", + "predictad.com": "widdit", + "widerplanet.com": "widerplanet", + "widespace.com": "widespace", + "widgetserver.com": "widgetbox", + "3c45d848d99.se": "wiget_media", + "wigetmedia.com": "wiget_media", + "tracker.wigzopush.com": "wigzo", + "wikia-services.com": "wikia-services.com", + "wikia-beacon.com": "wikia_beacon", + "nocookie.net": "wikia_cdn", + "wikimedia.org": "wikimedia.org", + "wikipedia.org": "wikimedia.org", + "wikiquote.org": "wikimedia.org", + "tracking.winaffiliates.com": "winaffiliates", + "maps.windows.com": "windows_maps", + "client.wns.windows.com": "windows_notifications", + "time.windows.com": "windows_time", + "windowsupdate.com": "windowsupdate", + "api.wipmania.com": "wipmania", + "col1.wiqhit.com": "wiqhit", + "wirecard.com": "wirecard", + "wirecard.de": "wirecard", + "leadlab.click": "wiredminds", + "wiredminds.com": "wiredminds", + "wiredminds.de": "wiredminds", + "adtotal.pl": "wirtualna_polska", + "wisepops.com": "wisepops", + "cdn.wishpond.net": "wishpond", + "wistia.com": "wistia", + "wistia.net": "wistia", + "parastorage.com": "wix.com", + "wix.com": "wix.com", + "public.wixab-cloud.com": "wixab", + "wixmp.com": "wixmp", + "wnzmauurgol.com": "wnzmauurgol.com", + "wonderpush.com": "wonderpush", + "woopic.com": "woopic.com", + "woopra.com": "woopra", + "pubmine.com": "wordpress_ads", + "w.org": "wordpress_stats", + "wordpress.com": "wordpress_stats", + "wp.com": "wordpress_stats", + "tracker.wordstream.com": "wordstream", + "worldnaturenet.xyz": "worldnaturenet_xyz", + "wp.pl": "wp.pl", + "wpimg.pl": "wp.pl", + "wpengine.com": "wp_engine", + "clickanalyzer.jp": "writeup_clickanalyzer", + "wurfl.io": "wurfl", + "wwwpromoter.com": "wwwpromoter", + "imgwykop.pl": "wykop", + "wykop.pl": "wykop", + "wysistat.com": "wysistat.com", + "wysistat.net": "wysistat.com", + "wywy.com": "wywy.com", + "wywyuserservice.com": "wywy.com", + "cdn.x-lift.jp": "x-lift", + "xapads.com": "xapads", + "xen-media.com": "xen-media.com", + "xfreeservice.com": "xfreeservice.com", + "xhamster.com": "xhamster", + "xhamsterlive.com": "xhamster", + "xhamsterpremium.com": "xhamster", + "xhcdn.com": "xhamster", + "huami.com": "xiaomi", + "mi-img.com": "xiaomi", + "mi.com": "xiaomi", + "miui.com": "xiaomi", + "xiaomi.com": "xiaomi", + "xiaomi.net": "xiaomi", + "xiaomiyoupin.com": "xiaomi", + "xing-share.com": "xing", + "xing.com": "xing", + "xmediaclicks.com": "xmediaclicks", + "xnxx-cdn.com": "xnxx_cdn", + "xplosion.de": "xplosion", + "xtendmedia.com": "xtend", + "xvideos-cdn.com": "xvideos_com", + "xvideos.com": "xvideos_com", + "xxxlshop.de": "xxxlshop.de", + "xxxlutz.de": "xxxlutz", + "adx.com.ru": "yabbi", + "yabbi.me": "yabbi", + "yabuka.com": "yabuka", + "tumblr.com": "yahoo", + "yahoo.com": "yahoo", + "yahooapis.com": "yahoo", + "yimg.com": "yahoo", + "oath.cloud": "yahoo", + "yahoo.net": "yahoo", + "yahooinc.com": "yahoo", + "yahoodns.net": "yahoo", + "yads.yahoo.com": "yahoo_ad_exchange", + "yieldmanager.com": "yahoo_ad_exchange", + "pr-bh.ybp.yahoo.com": "yahoo_ad_manager", + "ads.yahoo.com": "yahoo_advertising", + "adtech.yahooinc.com": "yahoo_advertising", + "analytics.yahoo.com": "yahoo_analytics", + "np.lexity.com": "yahoo_commerce_central", + "storage-yahoo.jp": "yahoo_japan_retargeting", + "yahoo.co.jp": "yahoo_japan_retargeting", + "yahooapis.jp": "yahoo_japan_retargeting", + "yimg.jp": "yahoo_japan_retargeting", + "yjtag.jp": "yahoo_japan_retargeting", + "ov.yahoo.co.jp": "yahoo_overture", + "overture.com": "yahoo_overture", + "search.yahooinc.com": "yahoo_search", + "luminate.com": "yahoo_small_business", + "pixazza.com": "yahoo_small_business", + "awaps.yandex.ru": "yandex", + "d31j93rd8oukbv.cloudfront.net": "yandex", + "webvisor.org": "yandex", + "yandex.net": "yandex", + "yandex.ru": "yandex", + "yastatic.net": "yandex", + "ya.ru": "yandex", + "yandex.by": "yandex", + "yandex.com": "yandex", + "yandex.com.tr": "yandex", + "yandex.fr": "yandex", + "yandex.kz": "yandex", + "yandex.st": "yandex.api", + "yandexadexchange.net": "yandex_adexchange", + "metabar.ru": "yandex_advisor", + "appmetrica.yandex.com": "yandex_appmetrica", + "an.webvisor.org": "yandex_direct", + "an.yandex.ru": "yandex_direct", + "bs.yandex.ru": "yandex_direct", + "mc.yandex.ru": "yandex_metrika", + "passport.yandex.ru": "yandex_passport", + "yapfiles.ru": "yapfiles.ru", + "yashi.com": "yashi", + "ad.adserverplus.com": "ybrant_media", + "player.sambaads.com": "ycontent", + "cdn.yektanet.com": "yektanet", + "fetch.yektanet.com": "yektanet", + "yengo.com": "yengo", + "yengointernational.com": "yengo", + "link.p0.com": "yesmail", + "adsrevenue.net": "yesup_advertising", + "infinityads.com": "yesup_advertising", + "momentsharing.com": "yesup_advertising", + "multipops.com": "yesup_advertising", + "onlineadultadvertising.com": "yesup_advertising", + "paypopup.com": "yesup_advertising", + "popupxxx.com": "yesup_advertising", + "xtargeting.com": "yesup_advertising", + "xxxwebtraffic.com": "yesup_advertising", + "app.yesware.com": "yesware", + "yldbt.com": "yieldbot", + "yieldify.com": "yieldify", + "yieldlab.net": "yieldlab", + "yieldlove-ad-serving.net": "yieldlove", + "yieldlove.com": "yieldlove", + "yieldmo.com": "yieldmo", + "254a.com": "yieldr", + "collect.yldr.io": "yieldr_air", + "yieldsquare.com": "yieldsquare", + "analytics-sdk.yle.fi": "yle", + "yllix.com": "yllixmedia", + "ymetrica1.com": "ymetrica1.com", + "ymzrrizntbhde.com": "ymzrrizntbhde.com", + "yoapp.s3.amazonaws.com": "yo_button", + "natpal.com": "yodle", + "analytics.yola.net": "yola_analytics", + "pixel.yola.net": "yola_analytics", + "delivery.yomedia.vn": "yomedia", + "yoochoose.net": "yoochoose.net", + "yotpo.com": "yotpo", + "yottaa.net": "yottaa", + "yottlyscript.com": "yottly", + "api.youcanbook.me": "youcanbookme", + "youcanbook.me": "youcanbookme", + "player.youku.com": "youku", + "youporn.com": "youporn", + "ypncdn.com": "youporn", + "googlevideo.com": "youtube", + "youtube-nocookie.com": "youtube", + "youtube.com": "youtube", + "ytimg.com": "youtube", + "c.ypcdn.com": "yp", + "i1.ypcdn.com": "yp", + "yellowpages.com": "yp", + "prod-js.aws.y-track.com": "ysance", + "y-track.com": "ysance", + "yume.com": "yume", + "yumenetworks.com": "yume,_inc.", + "gravityrd-services.com": "yusp", + "api.zadarma.com": "zadarma", + "zalan.do": "zalando_de", + "zalando.de": "zalando_de", + "ztat.net": "zalando_de", + "zaloapp.com": "zalo", + "zanox-affiliate.de": "zanox", + "zanox.com": "zanox", + "zanox.ws": "zanox", + "zaparena.com": "zaparena", + "zapunited.com": "zaparena", + "track.zappos.com": "zappos", + "zdassets.com": "zdassets.com", + "zebestof.com": "zebestof.com", + "zedo.com": "zedo", + "zemanta.com": "zemanta", + "zencdn.net": "zencoder", + "zendesk.com": "zendesk", + "zergnet.com": "zergnet", + "zero.kz": "zero.kz", + "app.insightgrit.com": "zeta", + "app.ubertags.com": "zeta", + "cdn.boomtrain.com": "zeta", + "events.api.boomtrain.com": "zeta", + "rfihub.com": "zeta", + "rfihub.net": "zeta", + "ru4.com": "zeta", + "xplusone.com": "zeta", + "zeusclicks.com": "zeusclicks", + "webtest.net": "ziff_davis", + "zdbb.net": "ziff_davis", + "ziffdavis.com": "ziff_davis", + "ziffdavisinternational.com": "ziff_davis", + "ziffprod.com": "ziff_davis", + "ziffstatic.com": "ziff_davis", + "analytics.ziftsolutions.com": "zift_solutions", + "zimbio.com": "zimbio.com", + "api.zippyshare.com": "zippyshare_widget", + "zmags.com": "zmags", + "zmctrack.net": "zmctrack.net", + "zog.link": "zog.link", + "js.zohostatic.eu": "zoho", + "zononi.com": "zononi.com", + "zopim.com": "zopim", + "zukxd6fkxqn.com": "zukxd6fkxqn.com", + "zwaar.net": "zwaar", + "zwaar.org": "zwaar", + "extend.tv": "zypmedia" + } } diff --git a/go.mod b/go.mod index 569e7bc4..ad0b523b 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,10 @@ module github.com/AdguardTeam/AdGuardHome -go 1.22.5 +go 1.23.1 require ( - github.com/AdguardTeam/dnsproxy v0.71.2 - github.com/AdguardTeam/golibs v0.24.0 + github.com/AdguardTeam/dnsproxy v0.73.0 + github.com/AdguardTeam/golibs v0.26.0 github.com/AdguardTeam/urlfilter v0.19.0 github.com/NYTimes/gziphandler v1.1.1 github.com/ameshkov/dnscrypt/v2 v2.3.0 @@ -28,14 +28,14 @@ require ( // own code for that. Perhaps, use gopacket. github.com/mdlayher/raw v0.1.0 github.com/miekg/dns v1.1.61 - github.com/quic-go/quic-go v0.44.0 + github.com/quic-go/quic-go v0.47.0 github.com/stretchr/testify v1.9.0 github.com/ti-mo/netfilter v0.5.2 go.etcd.io/bbolt v1.3.10 - golang.org/x/crypto v0.24.0 - golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 - golang.org/x/net v0.26.0 - golang.org/x/sys v0.21.0 + golang.org/x/crypto v0.26.0 + golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa + golang.org/x/net v0.28.0 + golang.org/x/sys v0.24.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v3 v3.0.1 howett.net/plist v1.0.1 @@ -55,12 +55,15 @@ require ( github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/quic-go/qpack v0.4.0 // indirect + github.com/quic-go/qpack v0.5.1 // indirect github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect go.uber.org/mock v0.4.0 // indirect - golang.org/x/mod v0.18.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/text v0.16.0 // indirect - golang.org/x/tools v0.22.0 // indirect + golang.org/x/mod v0.20.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/text v0.17.0 // indirect + golang.org/x/tools v0.24.0 // indirect gonum.org/v1/gonum v0.15.0 // indirect ) + +// TODO(a.garipov): Remove once https://github.com/quic-go/quic-go/pull/4685 is merged. +replace github.com/quic-go/quic-go => github.com/ainar-g/quic-go v0.0.0-20240930125330-446bd86056fd diff --git a/go.sum b/go.sum index b3f06967..cc2d4459 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ -github.com/AdguardTeam/dnsproxy v0.71.2 h1:dFG2wga4GDdj1eI3rU2wqjQ6QGQm9MjLRb5ZzyH3Vgg= -github.com/AdguardTeam/dnsproxy v0.71.2/go.mod h1:huI5zyWhlimHBhg0jt2CMinXzsEHymI+WlvxIfmfEGA= -github.com/AdguardTeam/golibs v0.24.0 h1:qAnOq7BQtwSVo7Co9q703/n+nZ2Ap6smkugU9G9MomY= -github.com/AdguardTeam/golibs v0.24.0/go.mod h1:9/vJcYznW7RlmCT/Qzi8XNZGj+ZbWfHZJmEXKnRpCAU= +github.com/AdguardTeam/dnsproxy v0.73.0 h1:E1fxzosMqExZH8h7OJnKXLxyktcAFRJapLF4+nKULms= +github.com/AdguardTeam/dnsproxy v0.73.0/go.mod h1:ZcvmyQY2EiX5B0yCTkiYTgtm+1lBWA0lajbEI9dOhW4= +github.com/AdguardTeam/golibs v0.26.0 h1:uLL0XggEjB+87lL1tPpEAQNoKAlHDq5AyBUVWEgf63E= +github.com/AdguardTeam/golibs v0.26.0/go.mod h1:iWdjXPCwmK2g2FKIb/OwEPnovSXeMqRhI8FWLxF5oxE= github.com/AdguardTeam/urlfilter v0.19.0 h1:q7eH13+yNETlpD/VD3u5rLQOripcUdEktqZFy+KiQLk= github.com/AdguardTeam/urlfilter v0.19.0/go.mod h1:+N54ZvxqXYLnXuvpaUhK2exDQW+djZBRSb6F6j0rkBY= github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= @@ -10,6 +10,8 @@ github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmH github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 h1:52m0LGchQBBVqJRyYYufQuIbVqRawmubW3OFGqK1ekw= github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635/go.mod h1:lmLxL+FV291OopO93Bwf9fQLQeLyt33VJRUg5VJ30us= +github.com/ainar-g/quic-go v0.0.0-20240930125330-446bd86056fd h1:mw4LqrCiv3vcKuCxBRg7kA17xfHKM+9hZgFWmyhe/AY= +github.com/ainar-g/quic-go v0.0.0-20240930125330-446bd86056fd/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= github.com/ameshkov/dnscrypt/v2 v2.3.0 h1:pDXDF7eFa6Lw+04C0hoMh8kCAQM8NwUdFEllSP2zNLs= github.com/ameshkov/dnscrypt/v2 v2.3.0/go.mod h1:N5hDwgx2cNb4Ay7AhvOSKst+eUiOZ/vbKRO9qMpQttE= github.com/ameshkov/dnsstamps v1.0.3 h1:Srzik+J9mivH1alRACTbys2xOxs0lRH9qnTA7Y1OYVo= @@ -97,10 +99,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/quic-go v0.44.0 h1:So5wOr7jyO4vzL2sd8/pD9Kesciv91zSk8BoFngItQ0= -github.com/quic-go/quic-go v0.44.0/go.mod h1:z4cx/9Ny9UtGITIPzmPTXh1ULfOyWh4qGQlpnPcWmek= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= @@ -128,26 +128,26 @@ go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= -golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 h1:LoYXNGAShUG3m/ehNk4iFctuhGX/+R1ZpfJ4/ia80JM= -golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -158,19 +158,19 @@ golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.1-0.20230131160137-e7d7f63158de/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ= diff --git a/internal/aghalg/ringbuffer.go b/internal/aghalg/ringbuffer.go deleted file mode 100644 index 3faa8cb5..00000000 --- a/internal/aghalg/ringbuffer.go +++ /dev/null @@ -1,94 +0,0 @@ -package aghalg - -// RingBuffer is the implementation of ring buffer data structure. -type RingBuffer[T any] struct { - buf []T - cur uint - full bool -} - -// NewRingBuffer initializes the new instance of ring buffer. size must be -// greater or equal to zero. -func NewRingBuffer[T any](size uint) (rb *RingBuffer[T]) { - return &RingBuffer[T]{ - buf: make([]T, size), - } -} - -// Append appends an element to the buffer. -func (rb *RingBuffer[T]) Append(e T) { - if len(rb.buf) == 0 { - return - } - - rb.buf[rb.cur] = e - rb.cur = (rb.cur + 1) % uint(cap(rb.buf)) - if rb.cur == 0 { - rb.full = true - } -} - -// Range calls cb for each element of the buffer. If cb returns false it stops. -func (rb *RingBuffer[T]) Range(cb func(T) (cont bool)) { - before, after := rb.splitCur() - - for _, e := range before { - if !cb(e) { - return - } - } - - for _, e := range after { - if !cb(e) { - return - } - } -} - -// ReverseRange calls cb for each element of the buffer in reverse order. If -// cb returns false it stops. -func (rb *RingBuffer[T]) ReverseRange(cb func(T) (cont bool)) { - before, after := rb.splitCur() - - for i := len(after) - 1; i >= 0; i-- { - if !cb(after[i]) { - return - } - } - - for i := len(before) - 1; i >= 0; i-- { - if !cb(before[i]) { - return - } - } -} - -// splitCur splits the buffer in two, before and after current position in -// chronological order. If buffer is not full, after is nil. -func (rb *RingBuffer[T]) splitCur() (before, after []T) { - if len(rb.buf) == 0 { - return nil, nil - } - - cur := rb.cur - if !rb.full { - return rb.buf[:cur], nil - } - - return rb.buf[cur:], rb.buf[:cur] -} - -// Len returns a length of the buffer. -func (rb *RingBuffer[T]) Len() (l uint) { - if !rb.full { - return rb.cur - } - - return uint(cap(rb.buf)) -} - -// Clear clears the buffer. -func (rb *RingBuffer[T]) Clear() { - rb.full = false - rb.cur = 0 -} diff --git a/internal/aghalg/ringbuffer_test.go b/internal/aghalg/ringbuffer_test.go deleted file mode 100644 index 31ae4d7b..00000000 --- a/internal/aghalg/ringbuffer_test.go +++ /dev/null @@ -1,169 +0,0 @@ -package aghalg_test - -import ( - "slices" - "testing" - - "github.com/AdguardTeam/AdGuardHome/internal/aghalg" - "github.com/stretchr/testify/assert" -) - -// elements is a helper function that returns n elements of the buffer. -func elements(b *aghalg.RingBuffer[int], n uint, reverse bool) (es []int) { - fn := b.Range - if reverse { - fn = b.ReverseRange - } - - var i uint - fn(func(e int) (cont bool) { - if i >= n { - return false - } - - es = append(es, e) - i++ - - return true - }) - - return es -} - -func TestNewRingBuffer(t *testing.T) { - t.Run("success_and_clear", func(t *testing.T) { - b := aghalg.NewRingBuffer[int](5) - for i := range 10 { - b.Append(i) - } - assert.Equal(t, []int{5, 6, 7, 8, 9}, elements(b, b.Len(), false)) - - b.Clear() - assert.Zero(t, b.Len()) - }) - - t.Run("zero", func(t *testing.T) { - b := aghalg.NewRingBuffer[int](0) - for i := range 10 { - b.Append(i) - bufLen := b.Len() - assert.EqualValues(t, 0, bufLen) - assert.Empty(t, elements(b, bufLen, false)) - assert.Empty(t, elements(b, bufLen, true)) - } - }) - - t.Run("single", func(t *testing.T) { - b := aghalg.NewRingBuffer[int](1) - for i := range 10 { - b.Append(i) - bufLen := b.Len() - assert.EqualValues(t, 1, bufLen) - assert.Equal(t, []int{i}, elements(b, bufLen, false)) - assert.Equal(t, []int{i}, elements(b, bufLen, true)) - } - }) -} - -func TestRingBuffer_Range(t *testing.T) { - const size = 5 - - b := aghalg.NewRingBuffer[int](size) - - testCases := []struct { - name string - want []int - count int - length uint - }{{ - name: "three", - count: 3, - length: 3, - want: []int{0, 1, 2}, - }, { - name: "ten", - count: 10, - length: size, - want: []int{5, 6, 7, 8, 9}, - }, { - name: "hundred", - count: 100, - length: size, - want: []int{95, 96, 97, 98, 99}, - }} - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - for i := range tc.count { - b.Append(i) - } - - bufLen := b.Len() - assert.Equal(t, tc.length, bufLen) - - want := tc.want - assert.Equal(t, want, elements(b, bufLen, false)) - assert.Equal(t, want[:len(want)-1], elements(b, bufLen-1, false)) - assert.Equal(t, want[:len(want)/2], elements(b, bufLen/2, false)) - - want = want[:cap(want)] - slices.Reverse(want) - - assert.Equal(t, want, elements(b, bufLen, true)) - assert.Equal(t, want[:len(want)-1], elements(b, bufLen-1, true)) - assert.Equal(t, want[:len(want)/2], elements(b, bufLen/2, true)) - }) - } -} - -func TestRingBuffer_Range_increment(t *testing.T) { - const size = 5 - - b := aghalg.NewRingBuffer[int](size) - - testCases := []struct { - name string - want []int - }{{ - name: "one", - want: []int{0}, - }, { - name: "two", - want: []int{0, 1}, - }, { - name: "three", - want: []int{0, 1, 2}, - }, { - name: "four", - want: []int{0, 1, 2, 3}, - }, { - name: "five", - want: []int{0, 1, 2, 3, 4}, - }, { - name: "six", - want: []int{1, 2, 3, 4, 5}, - }, { - name: "seven", - want: []int{2, 3, 4, 5, 6}, - }, { - name: "eight", - want: []int{3, 4, 5, 6, 7}, - }, { - name: "nine", - want: []int{4, 5, 6, 7, 8}, - }, { - name: "ten", - want: []int{5, 6, 7, 8, 9}, - }} - - for i, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - b.Append(i) - bufLen := b.Len() - assert.Equal(t, tc.want, elements(b, bufLen, false)) - - slices.Reverse(tc.want) - assert.Equal(t, tc.want, elements(b, bufLen, true)) - }) - } -} diff --git a/internal/aghhttp/aghhttp.go b/internal/aghhttp/aghhttp.go index 88dfe7a7..48694a8e 100644 --- a/internal/aghhttp/aghhttp.go +++ b/internal/aghhttp/aghhttp.go @@ -2,13 +2,16 @@ package aghhttp import ( + "context" "fmt" "io" + "log/slog" "net/http" "github.com/AdguardTeam/AdGuardHome/internal/version" "github.com/AdguardTeam/golibs/httphdr" "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" ) // HTTP scheme constants. @@ -31,12 +34,39 @@ func OK(w http.ResponseWriter) { } // Error writes formatted message to w and also logs it. +// +// TODO(s.chzhen): Remove it. func Error(r *http.Request, w http.ResponseWriter, code int, format string, args ...any) { text := fmt.Sprintf(format, args...) log.Error("%s %s %s: %s", r.Method, r.Host, r.URL, text) http.Error(w, text, code) } +// ErrorAndLog writes formatted message to w and also logs it with the specified +// logging level. +func ErrorAndLog( + ctx context.Context, + l *slog.Logger, + r *http.Request, + w http.ResponseWriter, + code int, + format string, + args ...any, +) { + text := fmt.Sprintf(format, args...) + l.ErrorContext( + ctx, + "http error", + "host", r.Host, + "method", r.Method, + "raddr", r.RemoteAddr, + "request_uri", r.RequestURI, + slogutil.KeyError, text, + ) + + http.Error(w, text, code) +} + // UserAgent returns the ID of the service as a User-Agent string. It can also // be used as the value of the Server HTTP header. func UserAgent() (ua string) { diff --git a/internal/aghnet/net_freebsd.go b/internal/aghnet/net_freebsd.go index 94ce77c7..6b205639 100644 --- a/internal/aghnet/net_freebsd.go +++ b/internal/aghnet/net_freebsd.go @@ -6,10 +6,10 @@ import ( "bufio" "fmt" "io" - "net" "strings" "github.com/AdguardTeam/AdGuardHome/internal/aghos" + "github.com/AdguardTeam/golibs/netutil" ) func ifaceHasStaticIP(ifaceName string) (ok bool, err error) { @@ -38,9 +38,13 @@ func (n interfaceName) rcConfStaticConfig(r io.Reader) (_ []string, cont bool, e // TODO(e.burkov): Expand the check to cover possible // configurations from man rc.conf(5). fields := strings.Fields(line[cfgLeft:cfgRight]) - if len(fields) >= 2 && - strings.EqualFold(fields[0], "inet") && - net.ParseIP(fields[1]) != nil { + switch { + case + len(fields) < 2, + !strings.EqualFold(fields[0], "inet"), + !netutil.IsValidIPString(fields[1]): + continue + default: return nil, false, s.Err() } } diff --git a/internal/aghnet/net_openbsd.go b/internal/aghnet/net_openbsd.go index a2650aee..073ff109 100644 --- a/internal/aghnet/net_openbsd.go +++ b/internal/aghnet/net_openbsd.go @@ -6,10 +6,10 @@ import ( "bufio" "fmt" "io" - "net" "strings" "github.com/AdguardTeam/AdGuardHome/internal/aghos" + "github.com/AdguardTeam/golibs/netutil" ) func ifaceHasStaticIP(ifaceName string) (ok bool, err error) { @@ -25,7 +25,13 @@ func hostnameIfStaticConfig(r io.Reader) (_ []string, ok bool, err error) { for s.Scan() { line := strings.TrimSpace(s.Text()) fields := strings.Fields(line) - if len(fields) >= 2 && fields[0] == "inet" && net.ParseIP(fields[1]) != nil { + switch { + case + len(fields) < 2, + fields[0] != "inet", + !netutil.IsValidIPString(fields[1]): + continue + default: return nil, false, s.Err() } } diff --git a/internal/aghos/syslog.go b/internal/aghos/syslog.go index a67a5635..a38b3e68 100644 --- a/internal/aghos/syslog.go +++ b/internal/aghos/syslog.go @@ -1,6 +1,6 @@ package aghos // ConfigureSyslog reroutes standard logger output to syslog. -func ConfigureSyslog(serviceName string) error { +func ConfigureSyslog(serviceName string) (err error) { return configureSyslog(serviceName) } diff --git a/internal/aghos/syslog_others.go b/internal/aghos/syslog_others.go index 1659ae49..9c72e66d 100644 --- a/internal/aghos/syslog_others.go +++ b/internal/aghos/syslog_others.go @@ -8,11 +8,15 @@ import ( "github.com/AdguardTeam/golibs/log" ) -func configureSyslog(serviceName string) error { +// configureSyslog sets standard log output to syslog. +func configureSyslog(serviceName string) (err error) { w, err := syslog.New(syslog.LOG_NOTICE|syslog.LOG_USER, serviceName) if err != nil { + // Don't wrap the error, because it's informative enough as is. return err } + log.SetOutput(w) + return nil } diff --git a/internal/aghos/syslog_windows.go b/internal/aghos/syslog_windows.go index c8e86e78..0a78b28d 100644 --- a/internal/aghos/syslog_windows.go +++ b/internal/aghos/syslog_windows.go @@ -19,23 +19,30 @@ func (w *eventLogWriter) Write(b []byte) (int, error) { return len(b), w.el.Info(1, string(b)) } -func configureSyslog(serviceName string) error { - // Note that the eventlog src is the same as the service name - // Otherwise, we will get "the description for event id cannot be found" warning in every log record +// configureSyslog sets standard log output to event log. +func configureSyslog(serviceName string) (err error) { + // Note that the eventlog src is the same as the service name, otherwise we + // will get "the description for event id cannot be found" warning in every + // log record. // Continue if we receive "registry key already exists" or if we get // ERROR_ACCESS_DENIED so that we can log without administrative permissions // for pre-existing eventlog sources. - if err := eventlog.InstallAsEventCreate(serviceName, eventlog.Info|eventlog.Warning|eventlog.Error); err != nil { - if !strings.Contains(err.Error(), "registry key already exists") && err != windows.ERROR_ACCESS_DENIED { - return err - } + err = eventlog.InstallAsEventCreate(serviceName, eventlog.Info|eventlog.Warning|eventlog.Error) + if err != nil && + !strings.Contains(err.Error(), "registry key already exists") && + err != windows.ERROR_ACCESS_DENIED { + // Don't wrap the error, because it's informative enough as is. + return err } + el, err := eventlog.Open(serviceName) if err != nil { + // Don't wrap the error, because it's informative enough as is. return err } log.SetOutput(&eventLogWriter{el: el}) + return nil } diff --git a/internal/aghtls/aghtls.go b/internal/aghtls/aghtls.go index 7aa35b0c..017bfc12 100644 --- a/internal/aghtls/aghtls.go +++ b/internal/aghtls/aghtls.go @@ -5,9 +5,10 @@ import ( "crypto/tls" "crypto/x509" "fmt" - "net/netip" + "slices" "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/netutil" ) // init makes sure that the cipher name map is filled. @@ -75,15 +76,5 @@ func SaferCipherSuites() (safe []uint16) { // CertificateHasIP returns true if cert has at least a single IP address among // its subjectAltNames. func CertificateHasIP(cert *x509.Certificate) (ok bool) { - if len(cert.IPAddresses) > 0 { - return true - } - - for _, name := range cert.DNSNames { - if _, err := netip.ParseAddr(name); err == nil { - return true - } - } - - return false + return len(cert.IPAddresses) > 0 || slices.ContainsFunc(cert.DNSNames, netutil.IsValidIPString) } diff --git a/internal/arpdb/arpdb.go b/internal/arpdb/arpdb.go index 8405e4ba..13cabd0c 100644 --- a/internal/arpdb/arpdb.go +++ b/internal/arpdb/arpdb.go @@ -5,6 +5,7 @@ import ( "bufio" "bytes" "fmt" + "log/slog" "net" "net/netip" "slices" @@ -12,7 +13,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghos" "github.com/AdguardTeam/golibs/errors" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/osutil" ) @@ -38,8 +39,8 @@ type Interface interface { } // New returns the [Interface] properly initialized for the OS. -func New() (arp Interface) { - return newARPDB() +func New(logger *slog.Logger) (arp Interface) { + return newARPDB(logger) } // Empty is the [Interface] implementation that does nothing. @@ -69,6 +70,30 @@ type Neighbor struct { MAC net.HardwareAddr } +// newNeighbor returns the new initialized [Neighbor] by parsing string +// representations of IP and MAC addresses. +func newNeighbor(host, ipStr, macStr string) (n *Neighbor, err error) { + defer func() { err = errors.Annotate(err, "getting arp neighbor: %w") }() + + ip, err := netip.ParseAddr(ipStr) + if err != nil { + // Don't wrap the error, as it will get annotated. + return nil, err + } + + mac, err := net.ParseMAC(macStr) + if err != nil { + // Don't wrap the error, as it will get annotated. + return nil, err + } + + return &Neighbor{ + Name: host, + IP: ip, + MAC: mac, + }, nil +} + // Clone returns the deep copy of n. func (n Neighbor) Clone() (clone Neighbor) { return Neighbor{ @@ -80,10 +105,10 @@ func (n Neighbor) Clone() (clone Neighbor) { // validatedHostname returns h if it's a valid hostname, or an empty string // otherwise, logging the validation error. -func validatedHostname(h string) (host string) { +func validatedHostname(logger *slog.Logger, h string) (host string) { err := netutil.ValidateHostname(h) if err != nil { - log.Debug("arpdb: parsing arp output: host: %s", err) + logger.Debug("parsing host of arp output", slogutil.KeyError, err) return "" } @@ -132,15 +157,18 @@ func (ns *neighs) reset(with []Neighbor) { // parseNeighsFunc parses the text from sc as if it'd be an output of some // ARP-related command. lenHint is a hint for the size of the allocated slice // of Neighbors. -type parseNeighsFunc func(sc *bufio.Scanner, lenHint int) (ns []Neighbor) +// +// TODO(s.chzhen): Return []*Neighbor instead. +type parseNeighsFunc func(logger *slog.Logger, sc *bufio.Scanner, lenHint int) (ns []Neighbor) // cmdARPDB is the implementation of the [Interface] that uses command line to // retrieve data. type cmdARPDB struct { - parse parseNeighsFunc - ns *neighs - cmd string - args []string + logger *slog.Logger + parse parseNeighsFunc + ns *neighs + cmd string + args []string } // type check @@ -158,7 +186,7 @@ func (arp *cmdARPDB) Refresh() (err error) { } sc := bufio.NewScanner(bytes.NewReader(out)) - ns := arp.parse(sc, arp.ns.len()) + ns := arp.parse(arp.logger, sc, arp.ns.len()) if err = sc.Err(); err != nil { // TODO(e.burkov): This error seems unreachable. Investigate. return fmt.Errorf("scanning the output: %w", err) diff --git a/internal/arpdb/arpdb_bsd.go b/internal/arpdb/arpdb_bsd.go index c9658dbb..e7357603 100644 --- a/internal/arpdb/arpdb_bsd.go +++ b/internal/arpdb/arpdb_bsd.go @@ -4,17 +4,17 @@ package arpdb import ( "bufio" - "net" - "net/netip" + "log/slog" "strings" "sync" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" ) -func newARPDB() (arp *cmdARPDB) { +func newARPDB(logger *slog.Logger) (arp *cmdARPDB) { return &cmdARPDB{ - parse: parseArpA, + logger: logger, + parse: parseArpA, ns: &neighs{ mu: &sync.RWMutex{}, ns: make([]Neighbor, 0), @@ -33,7 +33,7 @@ func newARPDB() (arp *cmdARPDB) { // The expected input format: // // host.name (192.168.0.1) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet] -func parseArpA(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { +func parseArpA(logger *slog.Logger, sc *bufio.Scanner, lenHint int) (ns []Neighbor) { ns = make([]Neighbor, 0, lenHint) for sc.Scan() { ln := sc.Text() @@ -48,26 +48,15 @@ func parseArpA(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { continue } - ip, err := netip.ParseAddr(ipStr[1 : len(ipStr)-1]) + host := validatedHostname(logger, fields[0]) + n, err := newNeighbor(host, ipStr[1:len(ipStr)-1], fields[3]) if err != nil { - log.Debug("arpdb: parsing arp output: ip: %s", err) + logger.Debug("parsing arp output", "line", ln, slogutil.KeyError, err) continue } - hwStr := fields[3] - mac, err := net.ParseMAC(hwStr) - if err != nil { - log.Debug("arpdb: parsing arp output: mac: %s", err) - - continue - } - - ns = append(ns, Neighbor{ - IP: ip, - MAC: mac, - Name: validatedHostname(fields[0]), - }) + ns = append(ns, *n) } return ns diff --git a/internal/arpdb/arpdb_internal_test.go b/internal/arpdb/arpdb_internal_test.go index dfd57614..50cd6661 100644 --- a/internal/arpdb/arpdb_internal_test.go +++ b/internal/arpdb/arpdb_internal_test.go @@ -11,6 +11,7 @@ import ( "testing" "github.com/AdguardTeam/golibs/errors" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -61,7 +62,7 @@ func (s mapShell) RunCmd(cmd string, args ...string) (code int, out []byte, err func Test_New(t *testing.T) { var a Interface - require.NotPanics(t, func() { a = New() }) + require.NotPanics(t, func() { a = New(slogutil.NewDiscardLogger()) }) assert.NotNil(t, a) } @@ -201,8 +202,9 @@ func Test_NewARPDBs(t *testing.T) { func TestCmdARPDB_arpa(t *testing.T) { a := &cmdARPDB{ - cmd: "cmd", - parse: parseArpA, + logger: slogutil.NewDiscardLogger(), + cmd: "cmd", + parse: parseArpA, ns: &neighs{ mu: &sync.RWMutex{}, ns: make([]Neighbor, 0), diff --git a/internal/arpdb/arpdb_linux.go b/internal/arpdb/arpdb_linux.go index 0cf7f0ef..364d2ce9 100644 --- a/internal/arpdb/arpdb_linux.go +++ b/internal/arpdb/arpdb_linux.go @@ -6,17 +6,18 @@ import ( "bufio" "fmt" "io/fs" + "log/slog" "net" "net/netip" "strings" "sync" "github.com/AdguardTeam/AdGuardHome/internal/aghos" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/stringutil" ) -func newARPDB() (arp *arpdbs) { +func newARPDB(logger *slog.Logger) (arp *arpdbs) { // Use the common storage among the implementations. ns := &neighs{ mu: &sync.RWMutex{}, @@ -39,9 +40,10 @@ func newARPDB() (arp *arpdbs) { }, // Then, try "arp -a -n". &cmdARPDB{ - parse: parseF, - ns: ns, - cmd: "arp", + logger: logger, + parse: parseF, + ns: ns, + cmd: "arp", // Use -n flag to avoid resolving the hostnames of the neighbors. // By default ARP attempts to resolve the hostnames via DNS. See // man 8 arp. @@ -51,10 +53,11 @@ func newARPDB() (arp *arpdbs) { }, // Finally, try "ip neigh". &cmdARPDB{ - parse: parseIPNeigh, - ns: ns, - cmd: "ip", - args: []string{"neigh"}, + logger: logger, + parse: parseIPNeigh, + ns: ns, + cmd: "ip", + args: []string{"neigh"}, }, ) } @@ -131,7 +134,7 @@ func (arp *fsysARPDB) Neighbors() (ns []Neighbor) { // // IP address HW type Flags HW address Mask Device // 192.168.11.98 0x1 0x2 5a:92:df:a9:7e:28 * wan -func parseArpAWrt(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { +func parseArpAWrt(logger *slog.Logger, sc *bufio.Scanner, lenHint int) (ns []Neighbor) { if !sc.Scan() { // Skip the header. return @@ -146,25 +149,14 @@ func parseArpAWrt(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { continue } - ip, err := netip.ParseAddr(fields[0]) + n, err := newNeighbor("", fields[0], fields[3]) if err != nil { - log.Debug("arpdb: parsing arp output: ip: %s", err) + logger.Debug("parsing arp output", "line", ln, slogutil.KeyError, err) continue } - hwStr := fields[3] - mac, err := net.ParseMAC(hwStr) - if err != nil { - log.Debug("arpdb: parsing arp output: mac: %s", err) - - continue - } - - ns = append(ns, Neighbor{ - IP: ip, - MAC: mac, - }) + ns = append(ns, *n) } return ns @@ -174,7 +166,7 @@ func parseArpAWrt(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { // expected input format: // // hostname (192.168.1.1) at ab:cd:ef:ab:cd:ef [ether] on enp0s3 -func parseArpA(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { +func parseArpA(logger *slog.Logger, sc *bufio.Scanner, lenHint int) (ns []Neighbor) { ns = make([]Neighbor, 0, lenHint) for sc.Scan() { ln := sc.Text() @@ -189,26 +181,15 @@ func parseArpA(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { continue } - ip, err := netip.ParseAddr(ipStr[1 : len(ipStr)-1]) + host := validatedHostname(logger, fields[0]) + n, err := newNeighbor(host, ipStr[1:len(ipStr)-1], fields[3]) if err != nil { - log.Debug("arpdb: parsing arp output: ip: %s", err) + logger.Debug("parsing arp output", "line", ln, slogutil.KeyError, err) continue } - hwStr := fields[3] - mac, err := net.ParseMAC(hwStr) - if err != nil { - log.Debug("arpdb: parsing arp output: mac: %s", err) - - continue - } - - ns = append(ns, Neighbor{ - IP: ip, - MAC: mac, - Name: validatedHostname(fields[0]), - }) + ns = append(ns, *n) } return ns @@ -218,7 +199,7 @@ func parseArpA(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { // expected input format: // // 192.168.1.1 dev enp0s3 lladdr ab:cd:ef:ab:cd:ef REACHABLE -func parseIPNeigh(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { +func parseIPNeigh(logger *slog.Logger, sc *bufio.Scanner, lenHint int) (ns []Neighbor) { ns = make([]Neighbor, 0, lenHint) for sc.Scan() { ln := sc.Text() @@ -228,27 +209,14 @@ func parseIPNeigh(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { continue } - n := Neighbor{} - - ip, err := netip.ParseAddr(fields[0]) + n, err := newNeighbor("", fields[0], fields[4]) if err != nil { - log.Debug("arpdb: parsing arp output: ip: %s", err) + logger.Debug("parsing arp output", "line", ln, slogutil.KeyError, err) continue - } else { - n.IP = ip } - mac, err := net.ParseMAC(fields[4]) - if err != nil { - log.Debug("arpdb: parsing arp output: mac: %s", err) - - continue - } else { - n.MAC = mac - } - - ns = append(ns, n) + ns = append(ns, *n) } return ns diff --git a/internal/arpdb/arpdb_linux_internal_test.go b/internal/arpdb/arpdb_linux_internal_test.go index 44c76843..cb0cb1d3 100644 --- a/internal/arpdb/arpdb_linux_internal_test.go +++ b/internal/arpdb/arpdb_linux_internal_test.go @@ -9,6 +9,7 @@ import ( "testing" "testing/fstest" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -69,9 +70,10 @@ func TestCmdARPDB_linux(t *testing.T) { t.Run("wrt", func(t *testing.T) { a := &cmdARPDB{ - parse: parseArpAWrt, - cmd: "arp", - args: []string{"-a"}, + logger: slogutil.NewDiscardLogger(), + parse: parseArpAWrt, + cmd: "arp", + args: []string{"-a"}, ns: &neighs{ mu: &sync.RWMutex{}, ns: make([]Neighbor, 0), @@ -86,9 +88,10 @@ func TestCmdARPDB_linux(t *testing.T) { t.Run("ip_neigh", func(t *testing.T) { a := &cmdARPDB{ - parse: parseIPNeigh, - cmd: "ip", - args: []string{"neigh"}, + logger: slogutil.NewDiscardLogger(), + parse: parseIPNeigh, + cmd: "ip", + args: []string{"neigh"}, ns: &neighs{ mu: &sync.RWMutex{}, ns: make([]Neighbor, 0), diff --git a/internal/arpdb/arpdb_openbsd.go b/internal/arpdb/arpdb_openbsd.go index 7b60737b..8d6ee657 100644 --- a/internal/arpdb/arpdb_openbsd.go +++ b/internal/arpdb/arpdb_openbsd.go @@ -4,17 +4,17 @@ package arpdb import ( "bufio" - "net" - "net/netip" + "log/slog" "strings" "sync" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" ) -func newARPDB() (arp *cmdARPDB) { +func newARPDB(logger *slog.Logger) (arp *cmdARPDB) { return &cmdARPDB{ - parse: parseArpA, + logger: logger, + parse: parseArpA, ns: &neighs{ mu: &sync.RWMutex{}, ns: make([]Neighbor, 0), @@ -34,7 +34,7 @@ func newARPDB() (arp *cmdARPDB) { // // Host Ethernet Address Netif Expire Flags // 192.168.1.1 ab:cd:ef:ab:cd:ef em0 19m59s -func parseArpA(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { +func parseArpA(logger *slog.Logger, sc *bufio.Scanner, lenHint int) (ns []Neighbor) { // Skip the header. if !sc.Scan() { return nil @@ -49,27 +49,14 @@ func parseArpA(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { continue } - n := Neighbor{} - - ip, err := netip.ParseAddr(fields[0]) + n, err := newNeighbor("", fields[0], fields[1]) if err != nil { - log.Debug("arpdb: parsing arp output: ip: %s", err) + logger.Debug("parsing arp output", "line", ln, slogutil.KeyError, err) continue - } else { - n.IP = ip } - mac, err := net.ParseMAC(fields[1]) - if err != nil { - log.Debug("arpdb: parsing arp output: mac: %s", err) - - continue - } else { - n.MAC = mac - } - - ns = append(ns, n) + ns = append(ns, *n) } return ns diff --git a/internal/arpdb/arpdb_windows.go b/internal/arpdb/arpdb_windows.go index 3b4bb725..878d1d31 100644 --- a/internal/arpdb/arpdb_windows.go +++ b/internal/arpdb/arpdb_windows.go @@ -4,17 +4,17 @@ package arpdb import ( "bufio" - "net" - "net/netip" + "log/slog" "strings" "sync" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" ) -func newARPDB() (arp *cmdARPDB) { +func newARPDB(logger *slog.Logger) (arp *cmdARPDB) { return &cmdARPDB{ - parse: parseArpA, + logger: logger, + parse: parseArpA, ns: &neighs{ mu: &sync.RWMutex{}, ns: make([]Neighbor, 0), @@ -31,7 +31,7 @@ func newARPDB() (arp *cmdARPDB) { // Internet Address Physical Address Type // 192.168.56.1 0a-00-27-00-00-00 dynamic // 192.168.56.255 ff-ff-ff-ff-ff-ff static -func parseArpA(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { +func parseArpA(logger *slog.Logger, sc *bufio.Scanner, lenHint int) (ns []Neighbor) { ns = make([]Neighbor, 0, lenHint) for sc.Scan() { ln := sc.Text() @@ -44,24 +44,14 @@ func parseArpA(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { continue } - ip, err := netip.ParseAddr(fields[0]) + n, err := newNeighbor("", fields[0], fields[1]) if err != nil { - log.Debug("arpdb: parsing arp output: ip: %s", err) + logger.Debug("parsing arp output", "line", ln, slogutil.KeyError, err) continue } - mac, err := net.ParseMAC(fields[1]) - if err != nil { - log.Debug("arpdb: parsing arp output: mac: %s", err) - - continue - } - - ns = append(ns, Neighbor{ - IP: ip, - MAC: mac, - }) + ns = append(ns, *n) } return ns diff --git a/internal/client/addrproc.go b/internal/client/addrproc.go index 76ff1367..35293609 100644 --- a/internal/client/addrproc.go +++ b/internal/client/addrproc.go @@ -2,6 +2,7 @@ package client import ( "context" + "log/slog" "net/netip" "sync" "time" @@ -11,6 +12,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/whois" "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" ) @@ -38,6 +40,10 @@ func (EmptyAddrProc) Close() (_ error) { return nil } // DefaultAddrProcConfig is the configuration structure for address processors. type DefaultAddrProcConfig struct { + // BaseLogger is used to create loggers with custom prefixes for sources of + // information about runtime clients. It must not be nil. + BaseLogger *slog.Logger + // DialContext is used to create TCP connections to WHOIS servers. // DialContext must not be nil if [DefaultAddrProcConfig.UseWHOIS] is true. DialContext aghnet.DialContextFunc @@ -147,6 +153,7 @@ func NewDefaultAddrProc(c *DefaultAddrProcConfig) (p *DefaultAddrProc) { if c.UseRDNS { p.rdns = rdns.New(&rdns.Config{ + Logger: c.BaseLogger.With(slogutil.KeyPrefix, "rdns"), Exchanger: c.Exchanger, CacheSize: defaultCacheSize, CacheTTL: defaultIPTTL, @@ -154,7 +161,7 @@ func NewDefaultAddrProc(c *DefaultAddrProcConfig) (p *DefaultAddrProc) { } if c.UseWHOIS { - p.whois = newWHOIS(c.DialContext) + p.whois = newWHOIS(c.BaseLogger.With(slogutil.KeyPrefix, "whois"), c.DialContext) } go p.process(c.CatchPanics) @@ -168,7 +175,7 @@ func NewDefaultAddrProc(c *DefaultAddrProcConfig) (p *DefaultAddrProc) { // newWHOIS returns a whois.Interface instance using the given function for // dialing. -func newWHOIS(dialFunc aghnet.DialContextFunc) (w whois.Interface) { +func newWHOIS(logger *slog.Logger, dialFunc aghnet.DialContextFunc) (w whois.Interface) { // TODO(s.chzhen): Consider making configurable. const ( // defaultTimeout is the timeout for WHOIS requests. @@ -186,6 +193,7 @@ func newWHOIS(dialFunc aghnet.DialContextFunc) (w whois.Interface) { ) return whois.New(&whois.Config{ + Logger: logger, DialContext: dialFunc, ServerAddr: whois.DefaultServer, Port: whois.DefaultPort, @@ -227,9 +235,11 @@ func (p *DefaultAddrProc) process(catchPanics bool) { log.Info("clients: processing addresses") + ctx := context.TODO() + for ip := range p.clientIPs { - host := p.processRDNS(ip) - info := p.processWHOIS(ip) + host := p.processRDNS(ctx, ip) + info := p.processWHOIS(ctx, ip) p.addrUpdater.UpdateAddress(ip, host, info) } @@ -239,7 +249,7 @@ func (p *DefaultAddrProc) process(catchPanics bool) { // processRDNS resolves the clients' IP addresses using reverse DNS. host is // empty if there were errors or if the information hasn't changed. -func (p *DefaultAddrProc) processRDNS(ip netip.Addr) (host string) { +func (p *DefaultAddrProc) processRDNS(ctx context.Context, ip netip.Addr) (host string) { start := time.Now() log.Debug("clients: processing %s with rdns", ip) defer func() { @@ -251,7 +261,7 @@ func (p *DefaultAddrProc) processRDNS(ip netip.Addr) (host string) { return } - host, changed := p.rdns.Process(ip) + host, changed := p.rdns.Process(ctx, ip) if !changed { host = "" } @@ -268,7 +278,7 @@ func (p *DefaultAddrProc) shouldResolve(ip netip.Addr) (ok bool) { // processWHOIS looks up the information about clients' IP addresses in the // WHOIS databases. info is nil if there were errors or if the information // hasn't changed. -func (p *DefaultAddrProc) processWHOIS(ip netip.Addr) (info *whois.Info) { +func (p *DefaultAddrProc) processWHOIS(ctx context.Context, ip netip.Addr) (info *whois.Info) { start := time.Now() log.Debug("clients: processing %s with whois", ip) defer func() { @@ -277,7 +287,7 @@ func (p *DefaultAddrProc) processWHOIS(ip netip.Addr) (info *whois.Info) { // TODO(s.chzhen): Move the timeout logic from WHOIS configuration to the // context. - info, changed := p.whois.Process(context.Background(), ip) + info, changed := p.whois.Process(ctx, ip) if !changed { info = nil } diff --git a/internal/client/addrproc_test.go b/internal/client/addrproc_test.go index f0d0a8f7..3df3a5c7 100644 --- a/internal/client/addrproc_test.go +++ b/internal/client/addrproc_test.go @@ -13,6 +13,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/client" "github.com/AdguardTeam/AdGuardHome/internal/whois" "github.com/AdguardTeam/golibs/errors" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/testutil" "github.com/AdguardTeam/golibs/testutil/fakenet" @@ -99,6 +100,7 @@ func TestDefaultAddrProc_Process_rDNS(t *testing.T) { updInfoCh := make(chan *whois.Info, 1) p := client.NewDefaultAddrProc(&client.DefaultAddrProcConfig{ + BaseLogger: slogutil.NewDiscardLogger(), DialContext: func(_ context.Context, _, _ string) (conn net.Conn, err error) { panic("not implemented") }, @@ -208,6 +210,7 @@ func TestDefaultAddrProc_Process_WHOIS(t *testing.T) { updInfoCh := make(chan *whois.Info, 1) p := client.NewDefaultAddrProc(&client.DefaultAddrProcConfig{ + BaseLogger: slogutil.NewDiscardLogger(), DialContext: func(_ context.Context, _, _ string) (conn net.Conn, err error) { return whoisConn, nil }, diff --git a/internal/client/client.go b/internal/client/client.go index d3ead923..24e8c9a2 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -8,6 +8,7 @@ import ( "encoding" "fmt" "net/netip" + "slices" "github.com/AdguardTeam/AdGuardHome/internal/whois" ) @@ -118,8 +119,9 @@ func (r *Runtime) Info() (cs Source, host string) { return cs, info[0] } -// SetInfo sets a host as a client information from the cs. -func (r *Runtime) SetInfo(cs Source, hosts []string) { +// setInfo sets a host as a client information from the cs. +func (r *Runtime) setInfo(cs Source, hosts []string) { + // TODO(s.chzhen): Use contract where hosts must contain non-empty host. if len(hosts) == 1 && hosts[0] == "" { hosts = []string{} } @@ -136,13 +138,13 @@ func (r *Runtime) SetInfo(cs Source, hosts []string) { } } -// WHOIS returns a WHOIS client information. +// WHOIS returns a copy of WHOIS client information. func (r *Runtime) WHOIS() (info *whois.Info) { - return r.whois + return r.whois.Clone() } -// SetWHOIS sets a WHOIS client information. info must be non-nil. -func (r *Runtime) SetWHOIS(info *whois.Info) { +// setWHOIS sets a WHOIS client information. info must be non-nil. +func (r *Runtime) setWHOIS(info *whois.Info) { r.whois = info } @@ -175,3 +177,15 @@ func (r *Runtime) isEmpty() (ok bool) { func (r *Runtime) Addr() (ip netip.Addr) { return r.ip } + +// clone returns a deep copy of the runtime client. +func (r *Runtime) clone() (c *Runtime) { + return &Runtime{ + ip: r.ip, + whois: r.whois.Clone(), + arp: slices.Clone(r.arp), + rdns: slices.Clone(r.rdns), + dhcp: slices.Clone(r.dhcp), + hostsFile: slices.Clone(r.hostsFile), + } +} diff --git a/internal/client/persistent.go b/internal/client/persistent.go index ce68986f..4e09c5b8 100644 --- a/internal/client/persistent.go +++ b/internal/client/persistent.go @@ -13,7 +13,6 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/filtering/safesearch" "github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/upstream" - "github.com/AdguardTeam/golibs/container" "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/netutil" @@ -136,7 +135,8 @@ type Persistent struct { } // validate returns an error if persistent client information contains errors. -func (c *Persistent) validate(allTags *container.MapSet[string]) (err error) { +// allTags must be sorted. +func (c *Persistent) validate(allTags []string) (err error) { switch { case c.Name == "": return errors.Error("empty name") @@ -157,7 +157,8 @@ func (c *Persistent) validate(allTags *container.MapSet[string]) (err error) { } for _, t := range c.Tags { - if !allTags.Has(t) { + _, ok := slices.BinarySearch(allTags, t) + if !ok { return fmt.Errorf("invalid tag: %q", t) } } diff --git a/internal/client/persistent_internal_test.go b/internal/client/persistent_internal_test.go index a96c3778..c62b76da 100644 --- a/internal/client/persistent_internal_test.go +++ b/internal/client/persistent_internal_test.go @@ -1,11 +1,8 @@ package client import ( - "net/netip" "testing" - "github.com/AdguardTeam/golibs/container" - "github.com/AdguardTeam/golibs/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -125,69 +122,3 @@ func TestPersistent_EqualIDs(t *testing.T) { }) } } - -func TestPersistent_Validate(t *testing.T) { - const ( - allowedTag = "allowed_tag" - notAllowedTag = "not_allowed_tag" - ) - - allowedTags := container.NewMapSet(allowedTag) - - testCases := []struct { - name string - cli *Persistent - wantErrMsg string - }{{ - name: "success", - cli: &Persistent{ - Name: "basic", - IPs: []netip.Addr{ - netip.MustParseAddr("1.2.3.4"), - }, - UID: MustNewUID(), - }, - wantErrMsg: "", - }, { - name: "empty_name", - cli: &Persistent{ - Name: "", - }, - wantErrMsg: "empty name", - }, { - name: "no_id", - cli: &Persistent{ - Name: "no_id", - }, - wantErrMsg: "id required", - }, { - name: "no_uid", - cli: &Persistent{ - Name: "no_uid", - IPs: []netip.Addr{ - netip.MustParseAddr("1.2.3.4"), - }, - }, - wantErrMsg: "uid required", - }, { - name: "not_allowed_tag", - cli: &Persistent{ - Name: "basic", - IPs: []netip.Addr{ - netip.MustParseAddr("1.2.3.4"), - }, - UID: MustNewUID(), - Tags: []string{ - notAllowedTag, - }, - }, - wantErrMsg: `invalid tag: "` + notAllowedTag + `"`, - }} - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - err := tc.cli.validate(allowedTags) - testutil.AssertErrorMsg(t, tc.wantErrMsg, err) - }) - } -} diff --git a/internal/client/runtimeindex.go b/internal/client/runtimeindex.go index 300fdca0..fc994bfa 100644 --- a/internal/client/runtimeindex.go +++ b/internal/client/runtimeindex.go @@ -2,39 +2,34 @@ package client import "net/netip" -// RuntimeIndex stores information about runtime clients. -type RuntimeIndex struct { +// runtimeIndex stores information about runtime clients. +type runtimeIndex struct { // index maps IP address to runtime client. index map[netip.Addr]*Runtime } -// NewRuntimeIndex returns initialized runtime index. -func NewRuntimeIndex() (ri *RuntimeIndex) { - return &RuntimeIndex{ +// newRuntimeIndex returns initialized runtime index. +func newRuntimeIndex() (ri *runtimeIndex) { + return &runtimeIndex{ index: map[netip.Addr]*Runtime{}, } } -// Client returns the saved runtime client by ip. If no such client exists, +// client returns the saved runtime client by ip. If no such client exists, // returns nil. -func (ri *RuntimeIndex) Client(ip netip.Addr) (rc *Runtime) { +func (ri *runtimeIndex) client(ip netip.Addr) (rc *Runtime) { return ri.index[ip] } -// Add saves the runtime client in the index. IP address of a client must be +// add saves the runtime client in the index. IP address of a client must be // unique. See [Runtime.Client]. rc must not be nil. -func (ri *RuntimeIndex) Add(rc *Runtime) { +func (ri *runtimeIndex) add(rc *Runtime) { ip := rc.Addr() ri.index[ip] = rc } -// Size returns the number of the runtime clients. -func (ri *RuntimeIndex) Size() (n int) { - return len(ri.index) -} - -// Range calls f for each runtime client in an undefined order. -func (ri *RuntimeIndex) Range(f func(rc *Runtime) (cont bool)) { +// rangeClients calls f for each runtime client in an undefined order. +func (ri *runtimeIndex) rangeClients(f func(rc *Runtime) (cont bool)) { for _, rc := range ri.index { if !f(rc) { return @@ -42,17 +37,31 @@ func (ri *RuntimeIndex) Range(f func(rc *Runtime) (cont bool)) { } } -// Delete removes the runtime client by ip. -func (ri *RuntimeIndex) Delete(ip netip.Addr) { - delete(ri.index, ip) +// setInfo sets the client information from cs for runtime client stored by ip. +// If no such client exists, it creates one. +func (ri *runtimeIndex) setInfo(ip netip.Addr, cs Source, hosts []string) (rc *Runtime) { + rc = ri.index[ip] + if rc == nil { + rc = NewRuntime(ip) + ri.add(rc) + } + + rc.setInfo(cs, hosts) + + return rc } -// DeleteBySource removes all runtime clients that have information only from -// the specified source and returns the number of removed clients. -func (ri *RuntimeIndex) DeleteBySource(src Source) (n int) { - for ip, rc := range ri.index { +// clearSource removes information from the specified source from all clients. +func (ri *runtimeIndex) clearSource(src Source) { + for _, rc := range ri.index { rc.unset(src) + } +} +// removeEmpty removes empty runtime clients and returns the number of removed +// clients. +func (ri *runtimeIndex) removeEmpty() (n int) { + for ip, rc := range ri.index { if rc.isEmpty() { delete(ri.index, ip) n++ diff --git a/internal/client/runtimeindex_test.go b/internal/client/runtimeindex_test.go deleted file mode 100644 index 66b975a0..00000000 --- a/internal/client/runtimeindex_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package client_test - -import ( - "net/netip" - "testing" - - "github.com/AdguardTeam/AdGuardHome/internal/client" - "github.com/stretchr/testify/assert" -) - -func TestRuntimeIndex(t *testing.T) { - const cliSrc = client.SourceARP - - var ( - ip1 = netip.MustParseAddr("1.1.1.1") - ip2 = netip.MustParseAddr("2.2.2.2") - ip3 = netip.MustParseAddr("3.3.3.3") - ) - - ri := client.NewRuntimeIndex() - currentSize := 0 - - testCases := []struct { - ip netip.Addr - name string - hosts []string - src client.Source - }{{ - src: cliSrc, - ip: ip1, - name: "1", - hosts: []string{"host1"}, - }, { - src: cliSrc, - ip: ip2, - name: "2", - hosts: []string{"host2"}, - }, { - src: cliSrc, - ip: ip3, - name: "3", - hosts: []string{"host3"}, - }} - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - rc := client.NewRuntime(tc.ip) - rc.SetInfo(tc.src, tc.hosts) - - ri.Add(rc) - currentSize++ - - got := ri.Client(tc.ip) - assert.Equal(t, rc, got) - }) - } - - t.Run("size", func(t *testing.T) { - assert.Equal(t, currentSize, ri.Size()) - }) - - t.Run("range", func(t *testing.T) { - s := 0 - - ri.Range(func(rc *client.Runtime) (cont bool) { - s++ - - return true - }) - - assert.Equal(t, currentSize, s) - }) - - t.Run("delete", func(t *testing.T) { - ri.Delete(ip1) - currentSize-- - - assert.Equal(t, currentSize, ri.Size()) - }) - - t.Run("delete_by_src", func(t *testing.T) { - assert.Equal(t, currentSize, ri.DeleteBySource(cliSrc)) - assert.Equal(t, 0, ri.Size()) - }) -} diff --git a/internal/client/storage.go b/internal/client/storage.go index 2053bdf9..da6dda5c 100644 --- a/internal/client/storage.go +++ b/internal/client/storage.go @@ -1,29 +1,113 @@ package client import ( + "context" "fmt" "net" "net/netip" + "slices" "sync" + "time" - "github.com/AdguardTeam/golibs/container" + "github.com/AdguardTeam/AdGuardHome/internal/arpdb" + "github.com/AdguardTeam/AdGuardHome/internal/dhcpsvc" + "github.com/AdguardTeam/AdGuardHome/internal/whois" "github.com/AdguardTeam/golibs/errors" + "github.com/AdguardTeam/golibs/hostsfile" "github.com/AdguardTeam/golibs/log" ) -// Config is the client storage configuration structure. -// -// TODO(s.chzhen): Expand. -type Config struct { - // AllowedTags is a list of all allowed client tags. - AllowedTags []string +// allowedTags is the list of available client tags. +var allowedTags = []string{ + "device_audio", + "device_camera", + "device_gameconsole", + "device_laptop", + "device_nas", // Network-attached Storage + "device_other", + "device_pc", + "device_phone", + "device_printer", + "device_securityalarm", + "device_tablet", + "device_tv", + + "os_android", + "os_ios", + "os_linux", + "os_macos", + "os_other", + "os_windows", + + "user_admin", + "user_child", + "user_regular", +} + +// DHCP is an interface for accessing DHCP lease data the [Storage] needs. +type DHCP interface { + // Leases returns all the DHCP leases. + Leases() (leases []*dhcpsvc.Lease) + + // HostByIP returns the hostname of the DHCP client with the given IP + // address. host will be empty if there is no such client, due to an + // assumption that a DHCP client must always have a hostname. + HostByIP(ip netip.Addr) (host string) + + // MACByIP returns the MAC address for the given IP address leased. It + // returns nil if there is no such client, due to an assumption that a DHCP + // client must always have a MAC address. + MACByIP(ip netip.Addr) (mac net.HardwareAddr) +} + +// EmptyDHCP is the empty [DHCP] implementation that does nothing. +type EmptyDHCP struct{} + +// type check +var _ DHCP = EmptyDHCP{} + +// Leases implements the [DHCP] interface for emptyDHCP. +func (EmptyDHCP) Leases() (leases []*dhcpsvc.Lease) { return nil } + +// HostByIP implements the [DHCP] interface for emptyDHCP. +func (EmptyDHCP) HostByIP(_ netip.Addr) (host string) { return "" } + +// MACByIP implements the [DHCP] interface for emptyDHCP. +func (EmptyDHCP) MACByIP(_ netip.Addr) (mac net.HardwareAddr) { return nil } + +// HostsContainer is an interface for receiving updates to the system hosts +// file. +type HostsContainer interface { + Upd() (updates <-chan *hostsfile.DefaultStorage) +} + +// StorageConfig is the client storage configuration structure. +type StorageConfig struct { + // DHCP is used to match IPs against MACs of persistent clients and update + // [SourceDHCP] runtime client information. It must not be nil. + DHCP DHCP + + // EtcHosts is used to update [SourceHostsFile] runtime client information. + EtcHosts HostsContainer + + // ARPDB is used to update [SourceARP] runtime client information. + ARPDB arpdb.Interface + + // InitialClients is a list of persistent clients parsed from the + // configuration file. Each client must not be nil. + InitialClients []*Persistent + + // ARPClientsUpdatePeriod defines how often [SourceARP] runtime client + // information is updated. + ARPClientsUpdatePeriod time.Duration + + // RuntimeSourceDHCP specifies whether to update [SourceDHCP] information + // of runtime clients. + RuntimeSourceDHCP bool } // Storage contains information about persistent and runtime clients. type Storage struct { - // allowedTags is a set of all allowed tags. - allowedTags *container.MapSet[string] - // mu protects indexes of persistent and runtime clients. mu *sync.Mutex @@ -31,21 +115,250 @@ type Storage struct { index *index // runtimeIndex contains information about runtime clients. + runtimeIndex *runtimeIndex + + // dhcp is used to update [SourceDHCP] runtime client information. + dhcp DHCP + + // etcHosts is used to update [SourceHostsFile] runtime client information. + etcHosts HostsContainer + + // arpDB is used to update [SourceARP] runtime client information. + arpDB arpdb.Interface + + // done is the shutdown signaling channel. + done chan struct{} + + // allowedTags is a sorted list of all allowed tags. It must not be + // modified after initialization. // - // TODO(s.chzhen): Use it. - runtimeIndex *RuntimeIndex + // TODO(s.chzhen): Use custom type. + allowedTags []string + + // arpClientsUpdatePeriod defines how often [SourceARP] runtime client + // information is updated. It must be greater than zero. + arpClientsUpdatePeriod time.Duration + + // runtimeSourceDHCP specifies whether to update [SourceDHCP] information + // of runtime clients. + runtimeSourceDHCP bool } // NewStorage returns initialized client storage. conf must not be nil. -func NewStorage(conf *Config) (s *Storage) { - allowedTags := container.NewMapSet(conf.AllowedTags...) +func NewStorage(conf *StorageConfig) (s *Storage, err error) { + tags := slices.Clone(allowedTags) + slices.Sort(tags) - return &Storage{ - allowedTags: allowedTags, - mu: &sync.Mutex{}, - index: newIndex(), - runtimeIndex: NewRuntimeIndex(), + s = &Storage{ + allowedTags: tags, + mu: &sync.Mutex{}, + index: newIndex(), + runtimeIndex: newRuntimeIndex(), + dhcp: conf.DHCP, + etcHosts: conf.EtcHosts, + arpDB: conf.ARPDB, + done: make(chan struct{}), + arpClientsUpdatePeriod: conf.ARPClientsUpdatePeriod, + runtimeSourceDHCP: conf.RuntimeSourceDHCP, } + + for i, p := range conf.InitialClients { + err = s.Add(p) + if err != nil { + return nil, fmt.Errorf("adding client %q at index %d: %w", p.Name, i, err) + } + } + + s.ReloadARP() + + return s, nil +} + +// Start starts the goroutines for updating the runtime client information. +// +// TODO(s.chzhen): Pass context. +func (s *Storage) Start(_ context.Context) (err error) { + go s.periodicARPUpdate() + go s.handleHostsUpdates() + + return nil +} + +// Shutdown gracefully stops the client storage. +// +// TODO(s.chzhen): Pass context. +func (s *Storage) Shutdown(_ context.Context) (err error) { + close(s.done) + + return s.closeUpstreams() +} + +// periodicARPUpdate periodically reloads runtime clients from ARP. It is +// intended to be used as a goroutine. +func (s *Storage) periodicARPUpdate() { + defer log.OnPanic("storage") + + t := time.NewTicker(s.arpClientsUpdatePeriod) + + for { + select { + case <-t.C: + s.ReloadARP() + case <-s.done: + return + } + } +} + +// ReloadARP reloads runtime clients from ARP, if configured. +func (s *Storage) ReloadARP() { + if s.arpDB != nil { + s.addFromSystemARP() + } +} + +// addFromSystemARP adds the IP-hostname pairings from the output of the arp -a +// command. +func (s *Storage) addFromSystemARP() { + s.mu.Lock() + defer s.mu.Unlock() + + if err := s.arpDB.Refresh(); err != nil { + s.arpDB = arpdb.Empty{} + log.Error("refreshing arp container: %s", err) + + return + } + + ns := s.arpDB.Neighbors() + if len(ns) == 0 { + log.Debug("refreshing arp container: the update is empty") + + return + } + + src := SourceARP + s.runtimeIndex.clearSource(src) + + for _, n := range ns { + s.runtimeIndex.setInfo(n.IP, src, []string{n.Name}) + } + + removed := s.runtimeIndex.removeEmpty() + + log.Debug("storage: added %d, removed %d client aliases from arp neighborhood", len(ns), removed) +} + +// handleHostsUpdates receives the updates from the hosts container and adds +// them to the clients storage. It is intended to be used as a goroutine. +func (s *Storage) handleHostsUpdates() { + if s.etcHosts == nil { + return + } + + defer log.OnPanic("storage") + + for { + select { + case upd, ok := <-s.etcHosts.Upd(): + if !ok { + return + } + + s.addFromHostsFile(upd) + case <-s.done: + return + } + } +} + +// addFromHostsFile fills the client-hostname pairing index from the system's +// hosts files. +func (s *Storage) addFromHostsFile(hosts *hostsfile.DefaultStorage) { + s.mu.Lock() + defer s.mu.Unlock() + + src := SourceHostsFile + s.runtimeIndex.clearSource(src) + + added := 0 + hosts.RangeNames(func(addr netip.Addr, names []string) (cont bool) { + // Only the first name of the first record is considered a canonical + // hostname for the IP address. + // + // TODO(e.burkov): Consider using all the names from all the records. + s.runtimeIndex.setInfo(addr, src, []string{names[0]}) + added++ + + return true + }) + + removed := s.runtimeIndex.removeEmpty() + log.Debug("storage: added %d, removed %d client aliases from system hosts file", added, removed) +} + +// type check +var _ AddressUpdater = (*Storage)(nil) + +// UpdateAddress implements the [AddressUpdater] interface for *Storage +func (s *Storage) UpdateAddress(ip netip.Addr, host string, info *whois.Info) { + // Common fast path optimization. + if host == "" && info == nil { + return + } + + s.mu.Lock() + defer s.mu.Unlock() + + if host != "" { + s.runtimeIndex.setInfo(ip, SourceRDNS, []string{host}) + } + + if info != nil { + s.setWHOISInfo(ip, info) + } +} + +// UpdateDHCP updates [SourceDHCP] runtime client information. +func (s *Storage) UpdateDHCP() { + if s.dhcp == nil || !s.runtimeSourceDHCP { + return + } + + s.mu.Lock() + defer s.mu.Unlock() + + src := SourceDHCP + s.runtimeIndex.clearSource(src) + + added := 0 + for _, l := range s.dhcp.Leases() { + s.runtimeIndex.setInfo(l.IP, src, []string{l.Hostname}) + added++ + } + + removed := s.runtimeIndex.removeEmpty() + log.Debug("storage: added %d, removed %d client aliases from dhcp", added, removed) +} + +// setWHOISInfo sets the WHOIS information for a runtime client. +func (s *Storage) setWHOISInfo(ip netip.Addr, wi *whois.Info) { + _, ok := s.index.findByIP(ip) + if ok { + log.Debug("storage: client for %s is already created, ignore whois info", ip) + + return + } + + rc := s.runtimeIndex.client(ip) + if rc == nil { + rc = NewRuntime(ip) + s.runtimeIndex.add(rc) + } + + rc.setWHOIS(wi) + + log.Debug("storage: set whois info for runtime client with ip %s: %+v", ip, wi) } // Add stores persistent client information or returns an error. @@ -95,6 +408,9 @@ func (s *Storage) FindByName(name string) (p *Persistent, ok bool) { // Find finds persistent client by string representation of the client ID, IP // address, or MAC. And returns its shallow copy. +// +// TODO(s.chzhen): Accept ClientIDData structure instead, which will contain +// the parsed IP address, if any. func (s *Storage) Find(id string) (p *Persistent, ok bool) { s.mu.Lock() defer s.mu.Unlock() @@ -104,6 +420,16 @@ func (s *Storage) Find(id string) (p *Persistent, ok bool) { return p.ShallowClone(), ok } + ip, err := netip.ParseAddr(id) + if err != nil { + return nil, false + } + + foundMAC := s.dhcp.MACByIP(ip) + if foundMAC != nil { + return s.FindByMAC(foundMAC) + } + return nil, false } @@ -131,11 +457,9 @@ func (s *Storage) FindLoose(ip netip.Addr, id string) (p *Persistent, ok bool) { return nil, false } -// FindByMAC finds persistent client by MAC and returns its shallow copy. +// FindByMAC finds persistent client by MAC and returns its shallow copy. s.mu +// is expected to be locked. func (s *Storage) FindByMAC(mac net.HardwareAddr) (p *Persistent, ok bool) { - s.mu.Lock() - defer s.mu.Unlock() - p, ok = s.index.findByMAC(mac) if ok { return p.ShallowClone(), ok @@ -217,8 +541,8 @@ func (s *Storage) Size() (n int) { return s.index.size() } -// CloseUpstreams closes upstream configurations of persistent clients. -func (s *Storage) CloseUpstreams() (err error) { +// closeUpstreams closes upstream configurations of persistent clients. +func (s *Storage) closeUpstreams() (err error) { s.mu.Lock() defer s.mu.Unlock() @@ -227,63 +551,39 @@ func (s *Storage) CloseUpstreams() (err error) { // ClientRuntime returns a copy of the saved runtime client by ip. If no such // client exists, returns nil. -// -// TODO(s.chzhen): Use it. func (s *Storage) ClientRuntime(ip netip.Addr) (rc *Runtime) { s.mu.Lock() defer s.mu.Unlock() - return s.runtimeIndex.Client(ip) -} + rc = s.runtimeIndex.client(ip) + if rc != nil { + return rc.clone() + } -// AddRuntime saves the runtime client information in the storage. IP address -// of a client must be unique. rc must not be nil. -// -// TODO(s.chzhen): Use it. -func (s *Storage) AddRuntime(rc *Runtime) { - s.mu.Lock() - defer s.mu.Unlock() + if !s.runtimeSourceDHCP { + return nil + } - s.runtimeIndex.Add(rc) -} + host := s.dhcp.HostByIP(ip) + if host == "" { + return nil + } -// SizeRuntime returns the number of the runtime clients. -// -// TODO(s.chzhen): Use it. -func (s *Storage) SizeRuntime() (n int) { - s.mu.Lock() - defer s.mu.Unlock() + rc = s.runtimeIndex.setInfo(ip, SourceDHCP, []string{host}) - return s.runtimeIndex.Size() + return rc.clone() } // RangeRuntime calls f for each runtime client in an undefined order. -// -// TODO(s.chzhen): Use it. func (s *Storage) RangeRuntime(f func(rc *Runtime) (cont bool)) { s.mu.Lock() defer s.mu.Unlock() - s.runtimeIndex.Range(f) + s.runtimeIndex.rangeClients(f) } -// DeleteRuntime removes the runtime client by ip. -// -// TODO(s.chzhen): Use it. -func (s *Storage) DeleteRuntime(ip netip.Addr) { - s.mu.Lock() - defer s.mu.Unlock() - - s.runtimeIndex.Delete(ip) -} - -// DeleteBySource removes all runtime clients that have information only from -// the specified source and returns the number of removed clients. -// -// TODO(s.chzhen): Use it. -func (s *Storage) DeleteBySource(src Source) (n int) { - s.mu.Lock() - defer s.mu.Unlock() - - return s.runtimeIndex.DeleteBySource(src) +// AllowedTags returns the list of available client tags. tags must not be +// modified. +func (s *Storage) AllowedTags() (tags []string) { + return s.allowedTags } diff --git a/internal/client/storage_test.go b/internal/client/storage_test.go index abfc6d62..60d766d0 100644 --- a/internal/client/storage_test.go +++ b/internal/client/storage_test.go @@ -3,28 +3,521 @@ package client_test import ( "net" "net/netip" + "runtime" + "slices" + "sync" "testing" + "time" + "github.com/AdguardTeam/AdGuardHome/internal/arpdb" "github.com/AdguardTeam/AdGuardHome/internal/client" + "github.com/AdguardTeam/AdGuardHome/internal/dhcpd" + "github.com/AdguardTeam/AdGuardHome/internal/dhcpsvc" + "github.com/AdguardTeam/AdGuardHome/internal/whois" + "github.com/AdguardTeam/golibs/hostsfile" "github.com/AdguardTeam/golibs/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) +// testHostsContainer is a mock implementation of the [client.HostsContainer] +// interface. +type testHostsContainer struct { + onUpd func() (updates <-chan *hostsfile.DefaultStorage) +} + +// type check +var _ client.HostsContainer = (*testHostsContainer)(nil) + +// Upd implements the [client.HostsContainer] interface for *testHostsContainer. +func (c *testHostsContainer) Upd() (updates <-chan *hostsfile.DefaultStorage) { + return c.onUpd() +} + +// Interface stores and refreshes the network neighborhood reported by ARP +// (Address Resolution Protocol). +type Interface interface { + // Refresh updates the stored data. It must be safe for concurrent use. + Refresh() (err error) + + // Neighbors returnes the last set of data reported by ARP. Both the method + // and it's result must be safe for concurrent use. + Neighbors() (ns []arpdb.Neighbor) +} + +// testARPDB is a mock implementation of the [arpdb.Interface]. +type testARPDB struct { + onRefresh func() (err error) + onNeighbors func() (ns []arpdb.Neighbor) +} + +// type check +var _ arpdb.Interface = (*testARPDB)(nil) + +// Refresh implements the [arpdb.Interface] interface for *testARP. +func (c *testARPDB) Refresh() (err error) { + return c.onRefresh() +} + +// Neighbors implements the [arpdb.Interface] interface for *testARP. +func (c *testARPDB) Neighbors() (ns []arpdb.Neighbor) { + return c.onNeighbors() +} + +// testDHCP is a mock implementation of the [client.DHCP]. +type testDHCP struct { + OnLeases func() (leases []*dhcpsvc.Lease) + OnHostBy func(ip netip.Addr) (host string) + OnMACBy func(ip netip.Addr) (mac net.HardwareAddr) +} + +// type check +var _ client.DHCP = (*testDHCP)(nil) + +// Lease implements the [client.DHCP] interface for *testDHCP. +func (t *testDHCP) Leases() (leases []*dhcpsvc.Lease) { return t.OnLeases() } + +// HostByIP implements the [client.DHCP] interface for *testDHCP. +func (t *testDHCP) HostByIP(ip netip.Addr) (host string) { return t.OnHostBy(ip) } + +// MACByIP implements the [client.DHCP] interface for *testDHCP. +func (t *testDHCP) MACByIP(ip netip.Addr) (mac net.HardwareAddr) { return t.OnMACBy(ip) } + +// compareRuntimeInfo is a helper function that returns true if the runtime +// client has provided info. +func compareRuntimeInfo(rc *client.Runtime, src client.Source, host string) (ok bool) { + s, h := rc.Info() + if s != src { + return false + } else if h != host { + return false + } + + return true +} + +func TestStorage_Add_hostsfile(t *testing.T) { + var ( + cliIP1 = netip.MustParseAddr("1.1.1.1") + cliName1 = "client_one" + + cliIP2 = netip.MustParseAddr("2.2.2.2") + cliName2 = "client_two" + ) + + hostCh := make(chan *hostsfile.DefaultStorage) + h := &testHostsContainer{ + onUpd: func() (updates <-chan *hostsfile.DefaultStorage) { return hostCh }, + } + + storage, err := client.NewStorage(&client.StorageConfig{ + DHCP: client.EmptyDHCP{}, + EtcHosts: h, + ARPClientsUpdatePeriod: testTimeout / 10, + }) + require.NoError(t, err) + + err = storage.Start(testutil.ContextWithTimeout(t, testTimeout)) + require.NoError(t, err) + + testutil.CleanupAndRequireSuccess(t, func() (err error) { + return storage.Shutdown(testutil.ContextWithTimeout(t, testTimeout)) + }) + + t.Run("add_hosts", func(t *testing.T) { + var s *hostsfile.DefaultStorage + s, err = hostsfile.NewDefaultStorage() + require.NoError(t, err) + + s.Add(&hostsfile.Record{ + Addr: cliIP1, + Names: []string{cliName1}, + }) + + testutil.RequireSend(t, hostCh, s, testTimeout) + + require.Eventually(t, func() (ok bool) { + cli1 := storage.ClientRuntime(cliIP1) + if cli1 == nil { + return false + } + + assert.True(t, compareRuntimeInfo(cli1, client.SourceHostsFile, cliName1)) + + return true + }, testTimeout, testTimeout/10) + }) + + t.Run("update_hosts", func(t *testing.T) { + var s *hostsfile.DefaultStorage + s, err = hostsfile.NewDefaultStorage() + require.NoError(t, err) + + s.Add(&hostsfile.Record{ + Addr: cliIP2, + Names: []string{cliName2}, + }) + + testutil.RequireSend(t, hostCh, s, testTimeout) + + require.Eventually(t, func() (ok bool) { + cli2 := storage.ClientRuntime(cliIP2) + if cli2 == nil { + return false + } + + assert.True(t, compareRuntimeInfo(cli2, client.SourceHostsFile, cliName2)) + + cli1 := storage.ClientRuntime(cliIP1) + require.Nil(t, cli1) + + return true + }, testTimeout, testTimeout/10) + }) +} + +func TestStorage_Add_arp(t *testing.T) { + var ( + mu sync.Mutex + neighbors []arpdb.Neighbor + + cliIP1 = netip.MustParseAddr("1.1.1.1") + cliName1 = "client_one" + + cliIP2 = netip.MustParseAddr("2.2.2.2") + cliName2 = "client_two" + ) + + a := &testARPDB{ + onRefresh: func() (err error) { return nil }, + onNeighbors: func() (ns []arpdb.Neighbor) { + mu.Lock() + defer mu.Unlock() + + return neighbors + }, + } + + storage, err := client.NewStorage(&client.StorageConfig{ + DHCP: client.EmptyDHCP{}, + ARPDB: a, + ARPClientsUpdatePeriod: testTimeout / 10, + }) + require.NoError(t, err) + + err = storage.Start(testutil.ContextWithTimeout(t, testTimeout)) + require.NoError(t, err) + + testutil.CleanupAndRequireSuccess(t, func() (err error) { + return storage.Shutdown(testutil.ContextWithTimeout(t, testTimeout)) + }) + + t.Run("add_hosts", func(t *testing.T) { + func() { + mu.Lock() + defer mu.Unlock() + + neighbors = []arpdb.Neighbor{{ + Name: cliName1, + IP: cliIP1, + }} + }() + + require.Eventually(t, func() (ok bool) { + cli1 := storage.ClientRuntime(cliIP1) + if cli1 == nil { + return false + } + + assert.True(t, compareRuntimeInfo(cli1, client.SourceARP, cliName1)) + + return true + }, testTimeout, testTimeout/10) + }) + + t.Run("update_hosts", func(t *testing.T) { + func() { + mu.Lock() + defer mu.Unlock() + + neighbors = []arpdb.Neighbor{{ + Name: cliName2, + IP: cliIP2, + }} + }() + + require.Eventually(t, func() (ok bool) { + cli2 := storage.ClientRuntime(cliIP2) + if cli2 == nil { + return false + } + + assert.True(t, compareRuntimeInfo(cli2, client.SourceARP, cliName2)) + + cli1 := storage.ClientRuntime(cliIP1) + require.Nil(t, cli1) + + return true + }, testTimeout, testTimeout/10) + }) +} + +func TestStorage_Add_whois(t *testing.T) { + var ( + cliIP1 = netip.MustParseAddr("1.1.1.1") + + cliIP2 = netip.MustParseAddr("2.2.2.2") + cliName2 = "client_two" + + cliIP3 = netip.MustParseAddr("3.3.3.3") + cliName3 = "client_three" + ) + + storage, err := client.NewStorage(&client.StorageConfig{ + DHCP: client.EmptyDHCP{}, + }) + require.NoError(t, err) + + whois := &whois.Info{ + Country: "AU", + Orgname: "Example Org", + } + + t.Run("new_client", func(t *testing.T) { + storage.UpdateAddress(cliIP1, "", whois) + cli1 := storage.ClientRuntime(cliIP1) + require.NotNil(t, cli1) + + assert.Equal(t, whois, cli1.WHOIS()) + }) + + t.Run("existing_runtime_client", func(t *testing.T) { + storage.UpdateAddress(cliIP2, cliName2, nil) + storage.UpdateAddress(cliIP2, "", whois) + + cli2 := storage.ClientRuntime(cliIP2) + require.NotNil(t, cli2) + + assert.True(t, compareRuntimeInfo(cli2, client.SourceRDNS, cliName2)) + + assert.Equal(t, whois, cli2.WHOIS()) + }) + + t.Run("can't_set_persistent_client", func(t *testing.T) { + err = storage.Add(&client.Persistent{ + Name: cliName3, + UID: client.MustNewUID(), + IPs: []netip.Addr{cliIP3}, + }) + require.NoError(t, err) + + storage.UpdateAddress(cliIP3, "", whois) + rc := storage.ClientRuntime(cliIP3) + require.Nil(t, rc) + }) +} + +func TestClientsDHCP(t *testing.T) { + var ( + cliIP1 = netip.MustParseAddr("1.1.1.1") + cliName1 = "one.dhcp" + + cliIP2 = netip.MustParseAddr("2.2.2.2") + cliMAC2 = mustParseMAC("22:22:22:22:22:22") + cliName2 = "two.dhcp" + + cliIP3 = netip.MustParseAddr("3.3.3.3") + cliMAC3 = mustParseMAC("33:33:33:33:33:33") + cliName3 = "three.dhcp" + + prsCliIP = netip.MustParseAddr("4.3.2.1") + prsCliMAC = mustParseMAC("AA:AA:AA:AA:AA:AA") + prsCliName = "persistent.dhcp" + ) + + ipToHost := map[netip.Addr]string{ + cliIP1: cliName1, + } + ipToMAC := map[netip.Addr]net.HardwareAddr{ + prsCliIP: prsCliMAC, + } + + leases := []*dhcpsvc.Lease{{ + IP: cliIP2, + Hostname: cliName2, + HWAddr: cliMAC2, + }, { + IP: cliIP3, + Hostname: cliName3, + HWAddr: cliMAC3, + }} + + d := &testDHCP{ + OnLeases: func() (ls []*dhcpsvc.Lease) { + return leases + }, + OnHostBy: func(ip netip.Addr) (host string) { + return ipToHost[ip] + }, + OnMACBy: func(ip netip.Addr) (mac net.HardwareAddr) { + return ipToMAC[ip] + }, + } + + storage, err := client.NewStorage(&client.StorageConfig{ + DHCP: d, + RuntimeSourceDHCP: true, + }) + require.NoError(t, err) + + t.Run("find_runtime", func(t *testing.T) { + cli1 := storage.ClientRuntime(cliIP1) + require.NotNil(t, cli1) + + assert.True(t, compareRuntimeInfo(cli1, client.SourceDHCP, cliName1)) + }) + + t.Run("find_persistent", func(t *testing.T) { + err = storage.Add(&client.Persistent{ + Name: prsCliName, + UID: client.MustNewUID(), + MACs: []net.HardwareAddr{prsCliMAC}, + }) + require.NoError(t, err) + + prsCli, ok := storage.Find(prsCliIP.String()) + require.True(t, ok) + + assert.Equal(t, prsCliName, prsCli.Name) + }) + + t.Run("leases", func(t *testing.T) { + delete(ipToHost, cliIP1) + storage.UpdateDHCP() + + cli1 := storage.ClientRuntime(cliIP1) + require.Nil(t, cli1) + + for i, l := range leases { + cli := storage.ClientRuntime(l.IP) + require.NotNil(t, cli) + + src, host := cli.Info() + assert.Equal(t, client.SourceDHCP, src) + assert.Equal(t, leases[i].Hostname, host) + } + }) + + t.Run("range", func(t *testing.T) { + s := 0 + storage.RangeRuntime(func(rc *client.Runtime) (cont bool) { + s++ + + return true + }) + + assert.Equal(t, len(leases), s) + }) +} + +func TestClientsAddExisting(t *testing.T) { + t.Run("simple", func(t *testing.T) { + storage, err := client.NewStorage(&client.StorageConfig{ + DHCP: client.EmptyDHCP{}, + }) + require.NoError(t, err) + + ip := netip.MustParseAddr("1.1.1.1") + + // Add a client. + err = storage.Add(&client.Persistent{ + Name: "client1", + UID: client.MustNewUID(), + IPs: []netip.Addr{ip, netip.MustParseAddr("1:2:3::4")}, + Subnets: []netip.Prefix{netip.MustParsePrefix("2.2.2.0/24")}, + MACs: []net.HardwareAddr{{0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}}, + }) + require.NoError(t, err) + + // Now add an auto-client with the same IP. + storage.UpdateAddress(ip, "test", nil) + rc := storage.ClientRuntime(ip) + assert.True(t, compareRuntimeInfo(rc, client.SourceRDNS, "test")) + }) + + t.Run("complicated", func(t *testing.T) { + // TODO(a.garipov): Properly decouple the DHCP server from the client + // storage. + if runtime.GOOS == "windows" { + t.Skip("skipping dhcp test on windows") + } + + // First, init a DHCP server with a single static lease. + config := &dhcpd.ServerConfig{ + Enabled: true, + DataDir: t.TempDir(), + Conf4: dhcpd.V4ServerConf{ + Enabled: true, + GatewayIP: netip.MustParseAddr("1.2.3.1"), + SubnetMask: netip.MustParseAddr("255.255.255.0"), + RangeStart: netip.MustParseAddr("1.2.3.2"), + RangeEnd: netip.MustParseAddr("1.2.3.10"), + }, + } + + dhcpServer, err := dhcpd.Create(config) + require.NoError(t, err) + + storage, err := client.NewStorage(&client.StorageConfig{ + DHCP: dhcpServer, + }) + require.NoError(t, err) + + ip := netip.MustParseAddr("1.2.3.4") + + err = dhcpServer.AddStaticLease(&dhcpsvc.Lease{ + HWAddr: net.HardwareAddr{0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}, + IP: ip, + Hostname: "testhost", + Expiry: time.Now().Add(time.Hour), + }) + require.NoError(t, err) + + // Add a new client with the same IP as for a client with MAC. + err = storage.Add(&client.Persistent{ + Name: "client2", + UID: client.MustNewUID(), + IPs: []netip.Addr{ip}, + }) + require.NoError(t, err) + + // Add a new client with the IP from the first client's IP range. + err = storage.Add(&client.Persistent{ + Name: "client3", + UID: client.MustNewUID(), + IPs: []netip.Addr{netip.MustParseAddr("2.2.2.2")}, + }) + require.NoError(t, err) + }) +} + // newStorage is a helper function that returns a client storage filled with // persistent clients from the m. It also generates a UID for each client. func newStorage(tb testing.TB, m []*client.Persistent) (s *client.Storage) { tb.Helper() - s = client.NewStorage(&client.Config{ - AllowedTags: nil, + s, err := client.NewStorage(&client.StorageConfig{ + DHCP: client.EmptyDHCP{}, }) + require.NoError(tb, err) for _, c := range m { c.UID = client.MustNewUID() require.NoError(tb, s.Add(c)) } + require.Equal(tb, len(m), s.Size()) + return s } @@ -43,6 +536,9 @@ func TestStorage_Add(t *testing.T) { const ( existingName = "existing_name" existingClientID = "existing_client_id" + + allowedTag = "user_admin" + notAllowedTag = "not_allowed_tag" ) var ( @@ -59,10 +555,20 @@ func TestStorage_Add(t *testing.T) { UID: existingClientUID, } - s := client.NewStorage(&client.Config{ - AllowedTags: nil, - }) - err := s.Add(existingClient) + s, err := client.NewStorage(&client.StorageConfig{}) + require.NoError(t, err) + + tags := s.AllowedTags() + require.NotZero(t, len(tags)) + require.True(t, slices.IsSorted(tags)) + + _, ok := slices.BinarySearch(tags, allowedTag) + require.True(t, ok) + + _, ok = slices.BinarySearch(tags, notAllowedTag) + require.False(t, ok) + + err = s.Add(existingClient) require.NoError(t, err) testCases := []struct { @@ -119,6 +625,46 @@ func TestStorage_Add(t *testing.T) { }, wantErrMsg: `adding client: another client "existing_name" ` + `uses the same ClientID "existing_client_id"`, + }, { + name: "not_allowed_tag", + cli: &client.Persistent{ + Name: "not_allowed_tag", + Tags: []string{notAllowedTag}, + IPs: []netip.Addr{netip.MustParseAddr("4.4.4.4")}, + UID: client.MustNewUID(), + }, + wantErrMsg: `adding client: invalid tag: "not_allowed_tag"`, + }, { + name: "allowed_tag", + cli: &client.Persistent{ + Name: "allowed_tag", + Tags: []string{allowedTag}, + IPs: []netip.Addr{netip.MustParseAddr("5.5.5.5")}, + UID: client.MustNewUID(), + }, + wantErrMsg: "", + }, { + name: "", + cli: &client.Persistent{ + Name: "", + IPs: []netip.Addr{netip.MustParseAddr("6.6.6.6")}, + UID: client.MustNewUID(), + }, + wantErrMsg: "adding client: empty name", + }, { + name: "no_id", + cli: &client.Persistent{ + Name: "no_id", + UID: client.MustNewUID(), + }, + wantErrMsg: "adding client: id required", + }, { + name: "no_uid", + cli: &client.Persistent{ + Name: "no_uid", + IPs: []netip.Addr{netip.MustParseAddr("7.7.7.7")}, + }, + wantErrMsg: "adding client: uid required", }} for _, tc := range testCases { @@ -141,10 +687,10 @@ func TestStorage_RemoveByName(t *testing.T) { UID: client.MustNewUID(), } - s := client.NewStorage(&client.Config{ - AllowedTags: nil, - }) - err := s.Add(existingClient) + s, err := client.NewStorage(&client.StorageConfig{}) + require.NoError(t, err) + + err = s.Add(existingClient) require.NoError(t, err) testCases := []struct { @@ -168,9 +714,9 @@ func TestStorage_RemoveByName(t *testing.T) { } t.Run("duplicate_remove", func(t *testing.T) { - s = client.NewStorage(&client.Config{ - AllowedTags: nil, - }) + s, err = client.NewStorage(&client.StorageConfig{}) + require.NoError(t, err) + err = s.Add(existingClient) require.NoError(t, err) @@ -341,6 +887,127 @@ func TestStorage_FindLoose(t *testing.T) { } } +func TestStorage_FindByName(t *testing.T) { + const ( + cliIP1 = "1.1.1.1" + cliIP2 = "2.2.2.2" + ) + + const ( + clientExistingName = "client_existing" + clientAnotherExistingName = "client_another_existing" + nonExistingClientName = "client_non_existing" + ) + + var ( + clientExisting = &client.Persistent{ + Name: clientExistingName, + IPs: []netip.Addr{netip.MustParseAddr(cliIP1)}, + } + + clientAnotherExisting = &client.Persistent{ + Name: clientAnotherExistingName, + IPs: []netip.Addr{netip.MustParseAddr(cliIP2)}, + } + ) + + clients := []*client.Persistent{ + clientExisting, + clientAnotherExisting, + } + s := newStorage(t, clients) + + testCases := []struct { + want *client.Persistent + name string + clientName string + }{{ + name: "existing", + clientName: clientExistingName, + want: clientExisting, + }, { + name: "another_existing", + clientName: clientAnotherExistingName, + want: clientAnotherExisting, + }, { + name: "non_existing", + clientName: nonExistingClientName, + want: nil, + }} + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + c, ok := s.FindByName(tc.clientName) + if tc.want == nil { + assert.False(t, ok) + + return + } + + assert.True(t, ok) + assert.Equal(t, tc.want, c) + }) + } +} + +func TestStorage_FindByMAC(t *testing.T) { + var ( + cliMAC = mustParseMAC("11:11:11:11:11:11") + cliAnotherMAC = mustParseMAC("22:22:22:22:22:22") + nonExistingClientMAC = mustParseMAC("33:33:33:33:33:33") + ) + + var ( + clientExisting = &client.Persistent{ + Name: "client", + MACs: []net.HardwareAddr{cliMAC}, + } + + clientAnotherExisting = &client.Persistent{ + Name: "another_client", + MACs: []net.HardwareAddr{cliAnotherMAC}, + } + ) + + clients := []*client.Persistent{ + clientExisting, + clientAnotherExisting, + } + s := newStorage(t, clients) + + testCases := []struct { + want *client.Persistent + name string + clientMAC net.HardwareAddr + }{{ + name: "existing", + clientMAC: cliMAC, + want: clientExisting, + }, { + name: "another_existing", + clientMAC: cliAnotherMAC, + want: clientAnotherExisting, + }, { + name: "non_existing", + clientMAC: nonExistingClientMAC, + want: nil, + }} + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + c, ok := s.FindByMAC(tc.clientMAC) + if tc.want == nil { + assert.False(t, ok) + + return + } + + assert.True(t, ok) + assert.Equal(t, tc.want, c) + }) + } +} + func TestStorage_Update(t *testing.T) { const ( clientName = "client_name" diff --git a/internal/dhcpsvc/config.go b/internal/dhcpsvc/config.go index c1d7910d..464c497d 100644 --- a/internal/dhcpsvc/config.go +++ b/internal/dhcpsvc/config.go @@ -3,6 +3,7 @@ package dhcpsvc import ( "fmt" "log/slog" + "os" "time" "github.com/AdguardTeam/golibs/errors" @@ -23,7 +24,8 @@ type Config struct { // clients' hostnames. LocalDomainName string - // TODO(e.burkov): Add DB path. + // DBFilePath is the path to the database file containing the DHCP leases. + DBFilePath string // ICMPTimeout is the timeout for checking another DHCP server's presence. ICMPTimeout time.Duration @@ -64,6 +66,12 @@ func (conf *Config) Validate() (err error) { errs = append(errs, err) } + // This is a best-effort check for the file accessibility. The file will be + // checked again when it is opened later. + if _, err = os.Stat(conf.DBFilePath); err != nil && !errors.Is(err, os.ErrNotExist) { + errs = append(errs, fmt.Errorf("db file path %q: %w", conf.DBFilePath, err)) + } + if len(conf.Interfaces) == 0 { errs = append(errs, errNoInterfaces) diff --git a/internal/dhcpsvc/config_test.go b/internal/dhcpsvc/config_test.go index aa87b0d6..85dab4a9 100644 --- a/internal/dhcpsvc/config_test.go +++ b/internal/dhcpsvc/config_test.go @@ -1,6 +1,7 @@ package dhcpsvc_test import ( + "path/filepath" "testing" "github.com/AdguardTeam/AdGuardHome/internal/dhcpsvc" @@ -8,6 +9,8 @@ import ( ) func TestConfig_Validate(t *testing.T) { + leasesPath := filepath.Join(t.TempDir(), "leases.json") + testCases := []struct { name string conf *dhcpsvc.Config @@ -25,6 +28,7 @@ func TestConfig_Validate(t *testing.T) { conf: &dhcpsvc.Config{ Enabled: true, Interfaces: testInterfaceConf, + DBFilePath: leasesPath, }, wantErrMsg: `bad domain name "": domain name is empty`, }, { @@ -32,6 +36,7 @@ func TestConfig_Validate(t *testing.T) { Enabled: true, LocalDomainName: testLocalTLD, Interfaces: nil, + DBFilePath: leasesPath, }, name: "no_interfaces", wantErrMsg: "no interfaces specified", @@ -40,6 +45,7 @@ func TestConfig_Validate(t *testing.T) { Enabled: true, LocalDomainName: testLocalTLD, Interfaces: nil, + DBFilePath: leasesPath, }, name: "no_interfaces", wantErrMsg: "no interfaces specified", @@ -50,6 +56,7 @@ func TestConfig_Validate(t *testing.T) { Interfaces: map[string]*dhcpsvc.InterfaceConfig{ "eth0": nil, }, + DBFilePath: leasesPath, }, name: "nil_interface", wantErrMsg: `interface "eth0": config is nil`, @@ -63,6 +70,7 @@ func TestConfig_Validate(t *testing.T) { IPv6: &dhcpsvc.IPv6Config{Enabled: false}, }, }, + DBFilePath: leasesPath, }, name: "nil_ipv4", wantErrMsg: `interface "eth0": ipv4: config is nil`, @@ -76,6 +84,7 @@ func TestConfig_Validate(t *testing.T) { IPv6: nil, }, }, + DBFilePath: leasesPath, }, name: "nil_ipv6", wantErrMsg: `interface "eth0": ipv6: config is nil`, diff --git a/internal/dhcpsvc/db.go b/internal/dhcpsvc/db.go new file mode 100644 index 00000000..f1ee7d55 --- /dev/null +++ b/internal/dhcpsvc/db.go @@ -0,0 +1,195 @@ +package dhcpsvc + +import ( + "context" + "encoding/json" + "fmt" + "io/fs" + "net" + "net/netip" + "os" + "slices" + "strings" + "time" + + "github.com/AdguardTeam/golibs/errors" + "github.com/AdguardTeam/golibs/logutil/slogutil" + "github.com/google/renameio/v2/maybe" +) + +// dataVersion is the current version of the stored DHCP leases structure. +const dataVersion = 1 + +// databasePerm is the permissions for the database file. +const databasePerm fs.FileMode = 0o640 + +// dataLeases is the structure of the stored DHCP leases. +type dataLeases struct { + // Leases is the list containing stored DHCP leases. + Leases []*dbLease `json:"leases"` + + // Version is the current version of the structure. + Version int `json:"version"` +} + +// dbLease is the structure of stored lease. +type dbLease struct { + Expiry string `json:"expires"` + IP netip.Addr `json:"ip"` + Hostname string `json:"hostname"` + HWAddr string `json:"mac"` + IsStatic bool `json:"static"` +} + +// compareNames returns the result of comparing the hostnames of dl and other +// lexicographically. +func (dl *dbLease) compareNames(other *dbLease) (res int) { + return strings.Compare(dl.Hostname, other.Hostname) +} + +// toDBLease converts *Lease to *dbLease. +func toDBLease(l *Lease) (dl *dbLease) { + var expiryStr string + if !l.IsStatic { + // The front-end is waiting for RFC 3999 format of the time value. It + // also shouldn't got an Expiry field for static leases. + // + // See https://github.com/AdguardTeam/AdGuardHome/issues/2692. + expiryStr = l.Expiry.Format(time.RFC3339) + } + + return &dbLease{ + Expiry: expiryStr, + Hostname: l.Hostname, + HWAddr: l.HWAddr.String(), + IP: l.IP, + IsStatic: l.IsStatic, + } +} + +// toInternal converts dl to *Lease. +func (dl *dbLease) toInternal() (l *Lease, err error) { + mac, err := net.ParseMAC(dl.HWAddr) + if err != nil { + return nil, fmt.Errorf("parsing hardware address: %w", err) + } + + expiry := time.Time{} + if !dl.IsStatic { + expiry, err = time.Parse(time.RFC3339, dl.Expiry) + if err != nil { + return nil, fmt.Errorf("parsing expiry time: %w", err) + } + } + + return &Lease{ + Expiry: expiry, + IP: dl.IP, + Hostname: dl.Hostname, + HWAddr: mac, + IsStatic: dl.IsStatic, + }, nil +} + +// dbLoad loads stored leases. It must only be called before the service has +// been started. +func (srv *DHCPServer) dbLoad(ctx context.Context) (err error) { + defer func() { err = errors.Annotate(err, "loading db: %w") }() + + file, err := os.Open(srv.dbFilePath) + if err != nil { + if !errors.Is(err, os.ErrNotExist) { + return fmt.Errorf("reading db: %w", err) + } + + srv.logger.DebugContext(ctx, "no db file found") + + return nil + } + defer func() { + err = errors.WithDeferred(err, file.Close()) + }() + + dl := &dataLeases{} + err = json.NewDecoder(file).Decode(dl) + if err != nil { + return fmt.Errorf("decoding db: %w", err) + } + + srv.resetLeases() + srv.addDBLeases(ctx, dl.Leases) + + return nil +} + +// addDBLeases adds leases to the server. +func (srv *DHCPServer) addDBLeases(ctx context.Context, leases []*dbLease) { + var v4, v6 uint + for i, l := range leases { + lease, err := l.toInternal() + if err != nil { + srv.logger.WarnContext(ctx, "converting lease", "idx", i, slogutil.KeyError, err) + + continue + } + + iface, err := srv.ifaceForAddr(l.IP) + if err != nil { + srv.logger.WarnContext(ctx, "searching lease iface", "idx", i, slogutil.KeyError, err) + + continue + } + + err = srv.leases.add(lease, iface) + if err != nil { + srv.logger.WarnContext(ctx, "adding lease", "idx", i, slogutil.KeyError, err) + + continue + } + + if l.IP.Is4() { + v4++ + } else { + v6++ + } + } + + // TODO(e.burkov): Group by interface. + srv.logger.InfoContext(ctx, "loaded leases", "v4", v4, "v6", v6, "total", len(leases)) +} + +// writeDB writes leases to the database file. It expects the +// [DHCPServer.leasesMu] to be locked. +func (srv *DHCPServer) dbStore(ctx context.Context) (err error) { + defer func() { err = errors.Annotate(err, "writing db: %w") }() + + dl := &dataLeases{ + // Avoid writing null into the database file if there are no leases. + Leases: make([]*dbLease, 0, srv.leases.len()), + Version: dataVersion, + } + + srv.leases.rangeLeases(func(l *Lease) (cont bool) { + lease := toDBLease(l) + i, _ := slices.BinarySearchFunc(dl.Leases, lease, (*dbLease).compareNames) + dl.Leases = slices.Insert(dl.Leases, i, lease) + + return true + }) + + buf, err := json.Marshal(dl) + if err != nil { + // Don't wrap the error since it's informative enough as is. + return err + } + + err = maybe.WriteFile(srv.dbFilePath, buf, databasePerm) + if err != nil { + // Don't wrap the error since it's informative enough as is. + return err + } + + srv.logger.InfoContext(ctx, "stored leases", "num", len(dl.Leases), "file", srv.dbFilePath) + + return nil +} diff --git a/internal/dhcpsvc/db_internal_test.go b/internal/dhcpsvc/db_internal_test.go new file mode 100644 index 00000000..aa47c0da --- /dev/null +++ b/internal/dhcpsvc/db_internal_test.go @@ -0,0 +1,4 @@ +package dhcpsvc + +// DatabasePerm is the permissions for the test database file. +const DatabasePerm = databasePerm diff --git a/internal/dhcpsvc/dhcpsvc.go b/internal/dhcpsvc/dhcpsvc.go index a7d76ab5..b6c77786 100644 --- a/internal/dhcpsvc/dhcpsvc.go +++ b/internal/dhcpsvc/dhcpsvc.go @@ -50,7 +50,7 @@ type Interface interface { IPByHost(host string) (ip netip.Addr) // Leases returns all the active DHCP leases. The returned slice should be - // a clone. + // a clone. The order of leases is undefined. // // TODO(e.burkov): Consider implementing iterating methods with appropriate // signatures instead of cloning the whole list. diff --git a/internal/dhcpsvc/dhcpsvc_test.go b/internal/dhcpsvc/dhcpsvc_test.go new file mode 100644 index 00000000..f8b993f6 --- /dev/null +++ b/internal/dhcpsvc/dhcpsvc_test.go @@ -0,0 +1,66 @@ +package dhcpsvc_test + +import ( + "net" + "net/netip" + "time" + + "github.com/AdguardTeam/AdGuardHome/internal/dhcpsvc" + "github.com/AdguardTeam/golibs/logutil/slogutil" + "github.com/stretchr/testify/require" +) + +// testLocalTLD is a common local TLD for tests. +const testLocalTLD = "local" + +// testTimeout is a common timeout for tests and contexts. +const testTimeout time.Duration = 10 * time.Second + +// discardLog is a logger to discard test output. +var discardLog = slogutil.NewDiscardLogger() + +// testInterfaceConf is a common set of interface configurations for tests. +var testInterfaceConf = map[string]*dhcpsvc.InterfaceConfig{ + "eth0": { + IPv4: &dhcpsvc.IPv4Config{ + Enabled: true, + GatewayIP: netip.MustParseAddr("192.168.0.1"), + SubnetMask: netip.MustParseAddr("255.255.255.0"), + RangeStart: netip.MustParseAddr("192.168.0.2"), + RangeEnd: netip.MustParseAddr("192.168.0.254"), + LeaseDuration: 1 * time.Hour, + }, + IPv6: &dhcpsvc.IPv6Config{ + Enabled: true, + RangeStart: netip.MustParseAddr("2001:db8::1"), + LeaseDuration: 1 * time.Hour, + RAAllowSLAAC: true, + RASLAACOnly: true, + }, + }, + "eth1": { + IPv4: &dhcpsvc.IPv4Config{ + Enabled: true, + GatewayIP: netip.MustParseAddr("172.16.0.1"), + SubnetMask: netip.MustParseAddr("255.255.255.0"), + RangeStart: netip.MustParseAddr("172.16.0.2"), + RangeEnd: netip.MustParseAddr("172.16.0.255"), + LeaseDuration: 1 * time.Hour, + }, + IPv6: &dhcpsvc.IPv6Config{ + Enabled: true, + RangeStart: netip.MustParseAddr("2001:db9::1"), + LeaseDuration: 1 * time.Hour, + RAAllowSLAAC: true, + RASLAACOnly: true, + }, + }, +} + +// mustParseMAC parses a hardware address from s and requires no errors. +func mustParseMAC(t require.TestingT, s string) (mac net.HardwareAddr) { + mac, err := net.ParseMAC(s) + require.NoError(t, err) + + return mac +} diff --git a/internal/dhcpsvc/interface.go b/internal/dhcpsvc/interface.go index 13dadb4a..87c3de4d 100644 --- a/internal/dhcpsvc/interface.go +++ b/internal/dhcpsvc/interface.go @@ -3,42 +3,74 @@ package dhcpsvc import ( "fmt" "log/slog" - "slices" + "net" "time" ) -// netInterface is a common part of any network interface within the DHCP -// server. +// macKey contains hardware address as byte array of 6, 8, or 20 bytes. +// +// TODO(e.burkov): Move to aghnet or even to netutil. +type macKey any + +// macToKey converts mac into macKey, which is used as the key for the lease +// maps. mac must be a valid hardware address of length 6, 8, or 20 bytes, see +// [netutil.ValidateMAC]. +func macToKey(mac net.HardwareAddr) (key macKey) { + switch len(mac) { + case 6: + return [6]byte(mac) + case 8: + return [8]byte(mac) + case 20: + return [20]byte(mac) + default: + panic(fmt.Errorf("invalid mac address %#v", mac)) + } +} + +// netInterface is a common part of any interface within the DHCP server. // // TODO(e.burkov): Add other methods as [DHCPServer] evolves. type netInterface struct { // logger logs the events related to the network interface. logger *slog.Logger + // leases is the set of DHCP leases assigned to this interface. + leases map[macKey]*Lease + // name is the name of the network interface. name string - // leases is a set of leases sorted by hardware address. - leases []*Lease - // leaseTTL is the default Time-To-Live value for leases. leaseTTL time.Duration } -// reset clears all the slices in iface for reuse. -func (iface *netInterface) reset() { - iface.leases = iface.leases[:0] +// newNetInterface creates a new netInterface with the given name, leaseTTL, and +// logger. +func newNetInterface(name string, l *slog.Logger, leaseTTL time.Duration) (iface *netInterface) { + return &netInterface{ + logger: l, + leases: map[macKey]*Lease{}, + name: name, + leaseTTL: leaseTTL, + } } -// insertLease inserts the given lease into iface. It returns an error if the +// reset clears all the slices in iface for reuse. +func (iface *netInterface) reset() { + clear(iface.leases) +} + +// addLease inserts the given lease into iface. It returns an error if the // lease can't be inserted. -func (iface *netInterface) insertLease(l *Lease) (err error) { - i, found := slices.BinarySearchFunc(iface.leases, l, compareLeaseMAC) +func (iface *netInterface) addLease(l *Lease) (err error) { + mk := macToKey(l.HWAddr) + _, found := iface.leases[mk] if found { return fmt.Errorf("lease for mac %s already exists", l.HWAddr) } - iface.leases = slices.Insert(iface.leases, i, l) + iface.leases[mk] = l return nil } @@ -46,12 +78,13 @@ func (iface *netInterface) insertLease(l *Lease) (err error) { // updateLease replaces an existing lease within iface with the given one. It // returns an error if there is no lease with such hardware address. func (iface *netInterface) updateLease(l *Lease) (prev *Lease, err error) { - i, found := slices.BinarySearchFunc(iface.leases, l, compareLeaseMAC) + mk := macToKey(l.HWAddr) + prev, found := iface.leases[mk] if !found { return nil, fmt.Errorf("no lease for mac %s", l.HWAddr) } - prev, iface.leases[i] = iface.leases[i], l + iface.leases[mk] = l return prev, nil } @@ -59,12 +92,13 @@ func (iface *netInterface) updateLease(l *Lease) (prev *Lease, err error) { // removeLease removes an existing lease from iface. It returns an error if // there is no lease equal to l. func (iface *netInterface) removeLease(l *Lease) (err error) { - i, found := slices.BinarySearchFunc(iface.leases, l, compareLeaseMAC) + mk := macToKey(l.HWAddr) + _, found := iface.leases[mk] if !found { return fmt.Errorf("no lease for mac %s", l.HWAddr) } - iface.leases = slices.Delete(iface.leases, i, i+1) + delete(iface.leases, mk) return nil } diff --git a/internal/dhcpsvc/lease.go b/internal/dhcpsvc/lease.go index a920a4f2..a855b7d5 100644 --- a/internal/dhcpsvc/lease.go +++ b/internal/dhcpsvc/lease.go @@ -1,7 +1,6 @@ package dhcpsvc import ( - "bytes" "net" "net/netip" "slices" @@ -45,8 +44,3 @@ func (l *Lease) Clone() (clone *Lease) { IsStatic: l.IsStatic, } } - -// compareLeaseMAC compares two [Lease]s by hardware address. -func compareLeaseMAC(a, b *Lease) (res int) { - return bytes.Compare(a.HWAddr, b.HWAddr) -} diff --git a/internal/dhcpsvc/leaseindex.go b/internal/dhcpsvc/leaseindex.go index c9487b75..5502d2cf 100644 --- a/internal/dhcpsvc/leaseindex.go +++ b/internal/dhcpsvc/leaseindex.go @@ -61,7 +61,7 @@ func (idx *leaseIndex) add(l *Lease, iface *netInterface) (err error) { return fmt.Errorf("lease for hostname %s already exists", l.Hostname) } - err = iface.insertLease(l) + err = iface.addLease(l) if err != nil { return err } @@ -124,3 +124,18 @@ func (idx *leaseIndex) update(l *Lease, iface *netInterface) (err error) { return nil } + +// rangeLeases calls f for each lease in idx in an unspecified order until f +// returns false. +func (idx *leaseIndex) rangeLeases(f func(l *Lease) (cont bool)) { + for _, l := range idx.byName { + if !f(l) { + break + } + } +} + +// len returns the number of leases in idx. +func (idx *leaseIndex) len() (l uint) { + return uint(len(idx.byAddr)) +} diff --git a/internal/dhcpsvc/server.go b/internal/dhcpsvc/server.go index cd1e93b2..c8bab6e6 100644 --- a/internal/dhcpsvc/server.go +++ b/internal/dhcpsvc/server.go @@ -27,6 +27,13 @@ type DHCPServer struct { // hostnames. localTLD string + // dbFilePath is the path to the database file containing the DHCP leases. + // + // TODO(e.burkov): Consider extracting the database logic into a separate + // interface to prevent packages that only need lease data from depending on + // the entire server and to simplify testing. + dbFilePath string + // leasesMu protects the leases index as well as leases in the interfaces. leasesMu *sync.RWMutex @@ -34,10 +41,10 @@ type DHCPServer struct { leases *leaseIndex // interfaces4 is the set of IPv4 interfaces sorted by interface name. - interfaces4 netInterfacesV4 + interfaces4 dhcpInterfacesV4 // interfaces6 is the set of IPv6 interfaces sorted by interface name. - interfaces6 netInterfacesV6 + interfaces6 dhcpInterfacesV6 // icmpTimeout is the timeout for checking another DHCP server's presence. icmpTimeout time.Duration @@ -56,28 +63,9 @@ func New(ctx context.Context, conf *Config) (srv *DHCPServer, err error) { return nil, nil } - // TODO(e.burkov): Add validations scoped to the network interfaces set. - ifaces4 := make(netInterfacesV4, 0, len(conf.Interfaces)) - ifaces6 := make(netInterfacesV6, 0, len(conf.Interfaces)) - var errs []error - - mapsutil.SortedRange(conf.Interfaces, func(name string, iface *InterfaceConfig) (cont bool) { - var i4 *netInterfaceV4 - i4, err = newNetInterfaceV4(ctx, l, name, iface.IPv4) - if err != nil { - errs = append(errs, fmt.Errorf("interface %q: ipv4: %w", name, err)) - } else if i4 != nil { - ifaces4 = append(ifaces4, i4) - } - - i6 := newNetInterfaceV6(ctx, l, name, iface.IPv6) - if i6 != nil { - ifaces6 = append(ifaces6, i6) - } - - return true - }) - if err = errors.Join(errs...); err != nil { + ifaces4, ifaces6, err := newInterfaces(ctx, l, conf.Interfaces) + if err != nil { + // Don't wrap the error since it's informative enough as is. return nil, err } @@ -93,13 +81,55 @@ func New(ctx context.Context, conf *Config) (srv *DHCPServer, err error) { interfaces4: ifaces4, interfaces6: ifaces6, icmpTimeout: conf.ICMPTimeout, + dbFilePath: conf.DBFilePath, } - // TODO(e.burkov): Load leases. + err = srv.dbLoad(ctx) + if err != nil { + // Don't wrap the error since it's informative enough as is. + return nil, err + } return srv, nil } +// newInterfaces creates interfaces for the given map of interface names to +// their configurations. +func newInterfaces( + ctx context.Context, + l *slog.Logger, + ifaces map[string]*InterfaceConfig, +) (v4 dhcpInterfacesV4, v6 dhcpInterfacesV6, err error) { + defer func() { err = errors.Annotate(err, "creating interfaces: %w") }() + + // TODO(e.burkov): Add validations scoped to the network interfaces set. + v4 = make(dhcpInterfacesV4, 0, len(ifaces)) + v6 = make(dhcpInterfacesV6, 0, len(ifaces)) + + var errs []error + mapsutil.SortedRange(ifaces, func(name string, iface *InterfaceConfig) (cont bool) { + var i4 *dhcpInterfaceV4 + i4, err = newDHCPInterfaceV4(ctx, l, name, iface.IPv4) + if err != nil { + errs = append(errs, fmt.Errorf("interface %q: ipv4: %w", name, err)) + } else if i4 != nil { + v4 = append(v4, i4) + } + + i6 := newDHCPInterfaceV6(ctx, l, name, iface.IPv6) + if i6 != nil { + v6 = append(v6, i6) + } + + return true + }) + if err = errors.Join(errs...); err != nil { + return nil, nil, err + } + + return v4, v6, nil +} + // type check // // TODO(e.burkov): Uncomment when the [Interface] interface is implemented. @@ -115,16 +145,11 @@ func (srv *DHCPServer) Leases() (leases []*Lease) { srv.leasesMu.RLock() defer srv.leasesMu.RUnlock() - for _, iface := range srv.interfaces4 { - for _, lease := range iface.leases { - leases = append(leases, lease.Clone()) - } - } - for _, iface := range srv.interfaces6 { - for _, lease := range iface.leases { - leases = append(leases, lease.Clone()) - } - } + srv.leases.rangeLeases(func(l *Lease) (cont bool) { + leases = append(leases, l.Clone()) + + return true + }) return leases } @@ -167,22 +192,35 @@ func (srv *DHCPServer) IPByHost(host string) (ip netip.Addr) { // Reset implements the [Interface] interface for *DHCPServer. func (srv *DHCPServer) Reset(ctx context.Context) (err error) { + defer func() { err = errors.Annotate(err, "resetting leases: %w") }() + srv.leasesMu.Lock() defer srv.leasesMu.Unlock() - for _, iface := range srv.interfaces4 { - iface.reset() + srv.resetLeases() + err = srv.dbStore(ctx) + if err != nil { + // Don't wrap the error since there is already an annotation deferred. + return err } - for _, iface := range srv.interfaces6 { - iface.reset() - } - srv.leases.clear() srv.logger.DebugContext(ctx, "reset leases") return nil } +// resetLeases resets the leases for all network interfaces of the server. It +// expects the DHCPServer.leasesMu to be locked. +func (srv *DHCPServer) resetLeases() { + for _, iface := range srv.interfaces4 { + iface.common.reset() + } + for _, iface := range srv.interfaces6 { + iface.common.reset() + } + srv.leases.clear() +} + // AddLease implements the [Interface] interface for *DHCPServer. func (srv *DHCPServer) AddLease(ctx context.Context, l *Lease) (err error) { defer func() { err = errors.Annotate(err, "adding lease: %w") }() @@ -190,7 +228,7 @@ func (srv *DHCPServer) AddLease(ctx context.Context, l *Lease) (err error) { addr := l.IP iface, err := srv.ifaceForAddr(addr) if err != nil { - // Don't wrap the error since there is already an annotation deferred. + // Don't wrap the error since it's already informative enough as is. return err } @@ -203,6 +241,12 @@ func (srv *DHCPServer) AddLease(ctx context.Context, l *Lease) (err error) { return err } + err = srv.dbStore(ctx) + if err != nil { + // Don't wrap the error since it's already informative enough as is. + return err + } + iface.logger.DebugContext( ctx, "added lease", "hostname", l.Hostname, @@ -223,7 +267,7 @@ func (srv *DHCPServer) UpdateStaticLease(ctx context.Context, l *Lease) (err err addr := l.IP iface, err := srv.ifaceForAddr(addr) if err != nil { - // Don't wrap the error since there is already an annotation deferred. + // Don't wrap the error since it's already informative enough as is. return err } @@ -236,6 +280,12 @@ func (srv *DHCPServer) UpdateStaticLease(ctx context.Context, l *Lease) (err err return err } + err = srv.dbStore(ctx) + if err != nil { + // Don't wrap the error since it's already informative enough as is. + return err + } + iface.logger.DebugContext( ctx, "updated lease", "hostname", l.Hostname, @@ -254,7 +304,7 @@ func (srv *DHCPServer) RemoveLease(ctx context.Context, l *Lease) (err error) { addr := l.IP iface, err := srv.ifaceForAddr(addr) if err != nil { - // Don't wrap the error since there is already an annotation deferred. + // Don't wrap the error since it's already informative enough as is. return err } @@ -267,6 +317,12 @@ func (srv *DHCPServer) RemoveLease(ctx context.Context, l *Lease) (err error) { return err } + err = srv.dbStore(ctx) + if err != nil { + // Don't wrap the error since it's already informative enough as is. + return err + } + iface.logger.DebugContext( ctx, "removed lease", "hostname", l.Hostname, diff --git a/internal/dhcpsvc/server_test.go b/internal/dhcpsvc/server_test.go index 5f6f002f..94509e37 100644 --- a/internal/dhcpsvc/server_test.go +++ b/internal/dhcpsvc/server_test.go @@ -1,72 +1,41 @@ package dhcpsvc_test import ( - "net" + "io/fs" "net/netip" + "os" + "path" + "path/filepath" "strings" "testing" "time" "github.com/AdguardTeam/AdGuardHome/internal/dhcpsvc" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) -// testLocalTLD is a common local TLD for tests. -const testLocalTLD = "local" +// testdata is a filesystem containing data for tests. +var testdata = os.DirFS("testdata") -// testTimeout is a common timeout for tests and contexts. -const testTimeout time.Duration = 10 * time.Second +// newTempDB copies the leases database file located in the testdata FS, under +// tb.Name()/leases.json, to a temporary directory and returns the path to the +// copied file. +func newTempDB(tb testing.TB) (dst string) { + tb.Helper() -// discardLog is a logger to discard test output. -var discardLog = slogutil.NewDiscardLogger() + const filename = "leases.json" -// testInterfaceConf is a common set of interface configurations for tests. -var testInterfaceConf = map[string]*dhcpsvc.InterfaceConfig{ - "eth0": { - IPv4: &dhcpsvc.IPv4Config{ - Enabled: true, - GatewayIP: netip.MustParseAddr("192.168.0.1"), - SubnetMask: netip.MustParseAddr("255.255.255.0"), - RangeStart: netip.MustParseAddr("192.168.0.2"), - RangeEnd: netip.MustParseAddr("192.168.0.254"), - LeaseDuration: 1 * time.Hour, - }, - IPv6: &dhcpsvc.IPv6Config{ - Enabled: true, - RangeStart: netip.MustParseAddr("2001:db8::1"), - LeaseDuration: 1 * time.Hour, - RAAllowSLAAC: true, - RASLAACOnly: true, - }, - }, - "eth1": { - IPv4: &dhcpsvc.IPv4Config{ - Enabled: true, - GatewayIP: netip.MustParseAddr("172.16.0.1"), - SubnetMask: netip.MustParseAddr("255.255.255.0"), - RangeStart: netip.MustParseAddr("172.16.0.2"), - RangeEnd: netip.MustParseAddr("172.16.0.255"), - LeaseDuration: 1 * time.Hour, - }, - IPv6: &dhcpsvc.IPv6Config{ - Enabled: true, - RangeStart: netip.MustParseAddr("2001:db9::1"), - LeaseDuration: 1 * time.Hour, - RAAllowSLAAC: true, - RASLAACOnly: true, - }, - }, -} + data, err := fs.ReadFile(testdata, path.Join(tb.Name(), filename)) + require.NoError(tb, err) -// mustParseMAC parses a hardware address from s and requires no errors. -func mustParseMAC(t require.TestingT, s string) (mac net.HardwareAddr) { - mac, err := net.ParseMAC(s) - require.NoError(t, err) + dst = filepath.Join(tb.TempDir(), filename) - return mac + err = os.WriteFile(dst, data, dhcpsvc.DatabasePerm) + require.NoError(tb, err) + + return dst } func TestNew(t *testing.T) { @@ -103,6 +72,8 @@ func TestNew(t *testing.T) { RASLAACOnly: true, } + leasesPath := filepath.Join(t.TempDir(), "leases.json") + testCases := []struct { conf *dhcpsvc.Config name string @@ -118,6 +89,7 @@ func TestNew(t *testing.T) { IPv6: validIPv6Conf, }, }, + DBFilePath: leasesPath, }, name: "valid", wantErrMsg: "", @@ -132,6 +104,7 @@ func TestNew(t *testing.T) { IPv6: &dhcpsvc.IPv6Config{Enabled: false}, }, }, + DBFilePath: leasesPath, }, name: "disabled_interfaces", wantErrMsg: "", @@ -146,9 +119,10 @@ func TestNew(t *testing.T) { IPv6: validIPv6Conf, }, }, + DBFilePath: leasesPath, }, name: "gateway_within_range", - wantErrMsg: `interface "eth0": ipv4: ` + + wantErrMsg: `creating interfaces: interface "eth0": ipv4: ` + `gateway ip 192.168.0.100 in the ip range 192.168.0.1-192.168.0.254`, }, { conf: &dhcpsvc.Config{ @@ -161,9 +135,10 @@ func TestNew(t *testing.T) { IPv6: validIPv6Conf, }, }, + DBFilePath: leasesPath, }, name: "bad_start", - wantErrMsg: `interface "eth0": ipv4: ` + + wantErrMsg: `creating interfaces: interface "eth0": ipv4: ` + `range start 127.0.0.1 is not within 192.168.0.1/24`, }} @@ -180,32 +155,36 @@ func TestNew(t *testing.T) { func TestDHCPServer_AddLease(t *testing.T) { ctx := testutil.ContextWithTimeout(t, testTimeout) + leasesPath := filepath.Join(t.TempDir(), "leases.json") srv, err := dhcpsvc.New(ctx, &dhcpsvc.Config{ Enabled: true, Logger: discardLog, LocalDomainName: testLocalTLD, Interfaces: testInterfaceConf, + DBFilePath: leasesPath, }) require.NoError(t, err) const ( - host1 = "host1" - host2 = "host2" - host3 = "host3" + existHost = "host1" + newHost = "host2" + ipv6Host = "host3" ) - ip1 := netip.MustParseAddr("192.168.0.2") - ip2 := netip.MustParseAddr("192.168.0.3") - ip3 := netip.MustParseAddr("2001:db8::2") + var ( + existIP = netip.MustParseAddr("192.168.0.2") + newIP = netip.MustParseAddr("192.168.0.3") + newIPv6 = netip.MustParseAddr("2001:db8::2") - mac1 := mustParseMAC(t, "01:02:03:04:05:06") - mac2 := mustParseMAC(t, "06:05:04:03:02:01") - mac3 := mustParseMAC(t, "02:03:04:05:06:07") + existMAC = mustParseMAC(t, "01:02:03:04:05:06") + newMAC = mustParseMAC(t, "06:05:04:03:02:01") + ipv6MAC = mustParseMAC(t, "02:03:04:05:06:07") + ) require.NoError(t, srv.AddLease(ctx, &dhcpsvc.Lease{ - Hostname: host1, - IP: ip1, - HWAddr: mac1, + Hostname: existHost, + IP: existIP, + HWAddr: existMAC, IsStatic: true, })) @@ -216,61 +195,61 @@ func TestDHCPServer_AddLease(t *testing.T) { }{{ name: "outside_range", lease: &dhcpsvc.Lease{ - Hostname: host2, + Hostname: newHost, IP: netip.MustParseAddr("1.2.3.4"), - HWAddr: mac2, + HWAddr: newMAC, }, wantErrMsg: "adding lease: no interface for ip 1.2.3.4", }, { name: "duplicate_ip", lease: &dhcpsvc.Lease{ - Hostname: host2, - IP: ip1, - HWAddr: mac2, + Hostname: newHost, + IP: existIP, + HWAddr: newMAC, }, - wantErrMsg: "adding lease: lease for ip " + ip1.String() + + wantErrMsg: "adding lease: lease for ip " + existIP.String() + " already exists", }, { name: "duplicate_hostname", lease: &dhcpsvc.Lease{ - Hostname: host1, - IP: ip2, - HWAddr: mac2, + Hostname: existHost, + IP: newIP, + HWAddr: newMAC, }, - wantErrMsg: "adding lease: lease for hostname " + host1 + + wantErrMsg: "adding lease: lease for hostname " + existHost + " already exists", }, { name: "duplicate_hostname_case", lease: &dhcpsvc.Lease{ - Hostname: strings.ToUpper(host1), - IP: ip2, - HWAddr: mac2, + Hostname: strings.ToUpper(existHost), + IP: newIP, + HWAddr: newMAC, }, wantErrMsg: "adding lease: lease for hostname " + - strings.ToUpper(host1) + " already exists", + strings.ToUpper(existHost) + " already exists", }, { name: "duplicate_mac", lease: &dhcpsvc.Lease{ - Hostname: host2, - IP: ip2, - HWAddr: mac1, + Hostname: newHost, + IP: newIP, + HWAddr: existMAC, }, - wantErrMsg: "adding lease: lease for mac " + mac1.String() + + wantErrMsg: "adding lease: lease for mac " + existMAC.String() + " already exists", }, { name: "valid", lease: &dhcpsvc.Lease{ - Hostname: host2, - IP: ip2, - HWAddr: mac2, + Hostname: newHost, + IP: newIP, + HWAddr: newMAC, }, wantErrMsg: "", }, { name: "valid_v6", lease: &dhcpsvc.Lease{ - Hostname: host3, - IP: ip3, - HWAddr: mac3, + Hostname: ipv6Host, + IP: newIPv6, + HWAddr: ipv6MAC, }, wantErrMsg: "", }} @@ -280,16 +259,21 @@ func TestDHCPServer_AddLease(t *testing.T) { testutil.AssertErrorMsg(t, tc.wantErrMsg, srv.AddLease(ctx, tc.lease)) }) } + + assert.NotEmpty(t, srv.Leases()) + assert.FileExists(t, leasesPath) } func TestDHCPServer_index(t *testing.T) { ctx := testutil.ContextWithTimeout(t, testTimeout) + leasesPath := newTempDB(t) srv, err := dhcpsvc.New(ctx, &dhcpsvc.Config{ Enabled: true, Logger: discardLog, LocalDomainName: testLocalTLD, Interfaces: testInterfaceConf, + DBFilePath: leasesPath, }) require.NoError(t, err) @@ -301,46 +285,23 @@ func TestDHCPServer_index(t *testing.T) { host5 = "host5" ) - ip1 := netip.MustParseAddr("192.168.0.2") - ip2 := netip.MustParseAddr("192.168.0.3") - ip3 := netip.MustParseAddr("172.16.0.3") - ip4 := netip.MustParseAddr("172.16.0.4") + var ( + ip1 = netip.MustParseAddr("192.168.0.2") + ip2 = netip.MustParseAddr("192.168.0.3") + ip3 = netip.MustParseAddr("172.16.0.3") + ip4 = netip.MustParseAddr("172.16.0.4") - mac1 := mustParseMAC(t, "01:02:03:04:05:06") - mac2 := mustParseMAC(t, "06:05:04:03:02:01") - mac3 := mustParseMAC(t, "02:03:04:05:06:07") - - leases := []*dhcpsvc.Lease{{ - Hostname: host1, - IP: ip1, - HWAddr: mac1, - IsStatic: true, - }, { - Hostname: host2, - IP: ip2, - HWAddr: mac2, - IsStatic: true, - }, { - Hostname: host3, - IP: ip3, - HWAddr: mac3, - IsStatic: true, - }, { - Hostname: host4, - IP: ip4, - HWAddr: mac1, - IsStatic: true, - }} - for _, l := range leases { - require.NoError(t, srv.AddLease(ctx, l)) - } + mac1 = mustParseMAC(t, "01:02:03:04:05:06") + mac2 = mustParseMAC(t, "06:05:04:03:02:01") + mac3 = mustParseMAC(t, "02:03:04:05:06:07") + ) t.Run("ip_idx", func(t *testing.T) { assert.Equal(t, ip1, srv.IPByHost(host1)) assert.Equal(t, ip2, srv.IPByHost(host2)) assert.Equal(t, ip3, srv.IPByHost(host3)) assert.Equal(t, ip4, srv.IPByHost(host4)) - assert.Equal(t, netip.Addr{}, srv.IPByHost(host5)) + assert.Zero(t, srv.IPByHost(host5)) }) t.Run("name_idx", func(t *testing.T) { @@ -348,7 +309,7 @@ func TestDHCPServer_index(t *testing.T) { assert.Equal(t, host2, srv.HostByIP(ip2)) assert.Equal(t, host3, srv.HostByIP(ip3)) assert.Equal(t, host4, srv.HostByIP(ip4)) - assert.Equal(t, "", srv.HostByIP(netip.Addr{})) + assert.Zero(t, srv.HostByIP(netip.Addr{})) }) t.Run("mac_idx", func(t *testing.T) { @@ -356,18 +317,20 @@ func TestDHCPServer_index(t *testing.T) { assert.Equal(t, mac2, srv.MACByIP(ip2)) assert.Equal(t, mac3, srv.MACByIP(ip3)) assert.Equal(t, mac1, srv.MACByIP(ip4)) - assert.Nil(t, srv.MACByIP(netip.Addr{})) + assert.Zero(t, srv.MACByIP(netip.Addr{})) }) } func TestDHCPServer_UpdateStaticLease(t *testing.T) { ctx := testutil.ContextWithTimeout(t, testTimeout) + leasesPath := newTempDB(t) srv, err := dhcpsvc.New(ctx, &dhcpsvc.Config{ Enabled: true, Logger: discardLog, LocalDomainName: testLocalTLD, Interfaces: testInterfaceConf, + DBFilePath: leasesPath, }) require.NoError(t, err) @@ -380,36 +343,16 @@ func TestDHCPServer_UpdateStaticLease(t *testing.T) { host6 = "host6" ) - ip1 := netip.MustParseAddr("192.168.0.2") - ip2 := netip.MustParseAddr("192.168.0.3") - ip3 := netip.MustParseAddr("192.168.0.4") - ip4 := netip.MustParseAddr("2001:db8::2") - ip5 := netip.MustParseAddr("2001:db8::3") + var ( + ip1 = netip.MustParseAddr("192.168.0.2") + ip2 = netip.MustParseAddr("192.168.0.3") + ip3 = netip.MustParseAddr("192.168.0.4") + ip4 = netip.MustParseAddr("2001:db8::3") - mac1 := mustParseMAC(t, "01:02:03:04:05:06") - mac2 := mustParseMAC(t, "01:02:03:04:05:07") - mac3 := mustParseMAC(t, "06:05:04:03:02:01") - mac4 := mustParseMAC(t, "06:05:04:03:02:02") - - leases := []*dhcpsvc.Lease{{ - Hostname: host1, - IP: ip1, - HWAddr: mac1, - IsStatic: true, - }, { - Hostname: host2, - IP: ip2, - HWAddr: mac2, - IsStatic: true, - }, { - Hostname: host4, - IP: ip4, - HWAddr: mac4, - IsStatic: true, - }} - for _, l := range leases { - require.NoError(t, srv.AddLease(ctx, l)) - } + mac1 = mustParseMAC(t, "01:02:03:04:05:06") + mac2 = mustParseMAC(t, "06:05:04:03:02:01") + mac3 = mustParseMAC(t, "06:05:04:03:02:02") + ) testCases := []struct { name string @@ -428,9 +371,9 @@ func TestDHCPServer_UpdateStaticLease(t *testing.T) { lease: &dhcpsvc.Lease{ Hostname: host3, IP: ip3, - HWAddr: mac3, + HWAddr: mac2, }, - wantErrMsg: "updating static lease: no lease for mac " + mac3.String(), + wantErrMsg: "updating static lease: no lease for mac " + mac2.String(), }, { name: "duplicate_ip", lease: &dhcpsvc.Lease{ @@ -470,8 +413,8 @@ func TestDHCPServer_UpdateStaticLease(t *testing.T) { name: "valid_v6", lease: &dhcpsvc.Lease{ Hostname: host6, - IP: ip5, - HWAddr: mac4, + IP: ip4, + HWAddr: mac3, }, wantErrMsg: "", }} @@ -481,16 +424,20 @@ func TestDHCPServer_UpdateStaticLease(t *testing.T) { testutil.AssertErrorMsg(t, tc.wantErrMsg, srv.UpdateStaticLease(ctx, tc.lease)) }) } + + assert.FileExists(t, leasesPath) } func TestDHCPServer_RemoveLease(t *testing.T) { ctx := testutil.ContextWithTimeout(t, testTimeout) + leasesPath := newTempDB(t) srv, err := dhcpsvc.New(ctx, &dhcpsvc.Config{ Enabled: true, Logger: discardLog, LocalDomainName: testLocalTLD, Interfaces: testInterfaceConf, + DBFilePath: leasesPath, }) require.NoError(t, err) @@ -500,28 +447,15 @@ func TestDHCPServer_RemoveLease(t *testing.T) { host3 = "host3" ) - ip1 := netip.MustParseAddr("192.168.0.2") - ip2 := netip.MustParseAddr("192.168.0.3") - ip3 := netip.MustParseAddr("2001:db8::2") + var ( + existIP = netip.MustParseAddr("192.168.0.2") + newIP = netip.MustParseAddr("192.168.0.3") + newIPv6 = netip.MustParseAddr("2001:db8::2") - mac1 := mustParseMAC(t, "01:02:03:04:05:06") - mac2 := mustParseMAC(t, "02:03:04:05:06:07") - mac3 := mustParseMAC(t, "06:05:04:03:02:01") - - leases := []*dhcpsvc.Lease{{ - Hostname: host1, - IP: ip1, - HWAddr: mac1, - IsStatic: true, - }, { - Hostname: host3, - IP: ip3, - HWAddr: mac3, - IsStatic: true, - }} - for _, l := range leases { - require.NoError(t, srv.AddLease(ctx, l)) - } + existMAC = mustParseMAC(t, "01:02:03:04:05:06") + newMAC = mustParseMAC(t, "02:03:04:05:06:07") + ipv6MAC = mustParseMAC(t, "06:05:04:03:02:01") + ) testCases := []struct { name string @@ -531,40 +465,40 @@ func TestDHCPServer_RemoveLease(t *testing.T) { name: "not_found_mac", lease: &dhcpsvc.Lease{ Hostname: host1, - IP: ip1, - HWAddr: mac2, + IP: existIP, + HWAddr: newMAC, }, - wantErrMsg: "removing lease: no lease for mac " + mac2.String(), + wantErrMsg: "removing lease: no lease for mac " + newMAC.String(), }, { name: "not_found_ip", lease: &dhcpsvc.Lease{ Hostname: host1, - IP: ip2, - HWAddr: mac1, + IP: newIP, + HWAddr: existMAC, }, - wantErrMsg: "removing lease: no lease for ip " + ip2.String(), + wantErrMsg: "removing lease: no lease for ip " + newIP.String(), }, { name: "not_found_host", lease: &dhcpsvc.Lease{ Hostname: host2, - IP: ip1, - HWAddr: mac1, + IP: existIP, + HWAddr: existMAC, }, wantErrMsg: "removing lease: no lease for hostname " + host2, }, { name: "valid", lease: &dhcpsvc.Lease{ Hostname: host1, - IP: ip1, - HWAddr: mac1, + IP: existIP, + HWAddr: existMAC, }, wantErrMsg: "", }, { name: "valid_v6", lease: &dhcpsvc.Lease{ Hostname: host3, - IP: ip3, - HWAddr: mac3, + IP: newIPv6, + HWAddr: ipv6MAC, }, wantErrMsg: "", }} @@ -575,49 +509,64 @@ func TestDHCPServer_RemoveLease(t *testing.T) { }) } + assert.FileExists(t, leasesPath) assert.Empty(t, srv.Leases()) } func TestDHCPServer_Reset(t *testing.T) { - ctx := testutil.ContextWithTimeout(t, testTimeout) - - srv, err := dhcpsvc.New(ctx, &dhcpsvc.Config{ + leasesPath := newTempDB(t) + conf := &dhcpsvc.Config{ Enabled: true, Logger: discardLog, LocalDomainName: testLocalTLD, Interfaces: testInterfaceConf, - }) - require.NoError(t, err) - - leases := []*dhcpsvc.Lease{{ - Hostname: "host1", - IP: netip.MustParseAddr("192.168.0.2"), - HWAddr: mustParseMAC(t, "01:02:03:04:05:06"), - IsStatic: true, - }, { - Hostname: "host2", - IP: netip.MustParseAddr("192.168.0.3"), - HWAddr: mustParseMAC(t, "06:05:04:03:02:01"), - IsStatic: true, - }, { - Hostname: "host3", - IP: netip.MustParseAddr("2001:db8::2"), - HWAddr: mustParseMAC(t, "02:03:04:05:06:07"), - IsStatic: true, - }, { - Hostname: "host4", - IP: netip.MustParseAddr("2001:db8::3"), - HWAddr: mustParseMAC(t, "06:05:04:03:02:02"), - IsStatic: true, - }} - - for _, l := range leases { - require.NoError(t, srv.AddLease(ctx, l)) + DBFilePath: leasesPath, } - require.Len(t, srv.Leases(), len(leases)) + ctx := testutil.ContextWithTimeout(t, testTimeout) + srv, err := dhcpsvc.New(ctx, conf) + require.NoError(t, err) + + const leasesNum = 4 + + require.Len(t, srv.Leases(), leasesNum) require.NoError(t, srv.Reset(ctx)) + assert.FileExists(t, leasesPath) assert.Empty(t, srv.Leases()) } + +func TestServer_Leases(t *testing.T) { + leasesPath := newTempDB(t) + conf := &dhcpsvc.Config{ + Enabled: true, + Logger: discardLog, + LocalDomainName: testLocalTLD, + Interfaces: testInterfaceConf, + DBFilePath: leasesPath, + } + + ctx := testutil.ContextWithTimeout(t, testTimeout) + + srv, err := dhcpsvc.New(ctx, conf) + require.NoError(t, err) + + expiry, err := time.Parse(time.RFC3339, "2042-01-02T03:04:05Z") + require.NoError(t, err) + + wantLeases := []*dhcpsvc.Lease{{ + Expiry: expiry, + IP: netip.MustParseAddr("192.168.0.3"), + Hostname: "example.host", + HWAddr: mustParseMAC(t, "AA:AA:AA:AA:AA:AA"), + IsStatic: false, + }, { + Expiry: time.Time{}, + IP: netip.MustParseAddr("192.168.0.4"), + Hostname: "example.static.host", + HWAddr: mustParseMAC(t, "BB:BB:BB:BB:BB:BB"), + IsStatic: true, + }} + assert.ElementsMatch(t, wantLeases, srv.Leases()) +} diff --git a/internal/dhcpsvc/testdata/TestDHCPServer_RemoveLease/leases.json b/internal/dhcpsvc/testdata/TestDHCPServer_RemoveLease/leases.json new file mode 100644 index 00000000..ef33c846 --- /dev/null +++ b/internal/dhcpsvc/testdata/TestDHCPServer_RemoveLease/leases.json @@ -0,0 +1,19 @@ +{ + "leases": [ + { + "expires": "", + "ip": "192.168.0.2", + "hostname": "host1", + "mac": "01:02:03:04:05:06", + "static": true + }, + { + "expires": "", + "ip": "2001:db8::2", + "hostname": "host3", + "mac": "06:05:04:03:02:01", + "static": true + } + ], + "version": 1 +} diff --git a/internal/dhcpsvc/testdata/TestDHCPServer_Reset/leases.json b/internal/dhcpsvc/testdata/TestDHCPServer_Reset/leases.json new file mode 100644 index 00000000..bab868ce --- /dev/null +++ b/internal/dhcpsvc/testdata/TestDHCPServer_Reset/leases.json @@ -0,0 +1,33 @@ +{ + "leases": [ + { + "expires": "", + "ip": "192.168.0.2", + "hostname": "host1", + "mac": "01:02:03:04:05:06", + "static": true + }, + { + "expires": "", + "ip": "192.168.0.3", + "hostname": "host2", + "mac": "06:05:04:03:02:01", + "static": true + }, + { + "expires": "", + "ip": "2001:db8::2", + "hostname": "host3", + "mac": "02:03:04:05:06:07", + "static": true + }, + { + "expires": "", + "ip": "2001:db8::3", + "hostname": "host4", + "mac": "06:05:04:03:02:02", + "static": true + } + ], + "version": 1 +} diff --git a/internal/dhcpsvc/testdata/TestDHCPServer_UpdateStaticLease/leases.json b/internal/dhcpsvc/testdata/TestDHCPServer_UpdateStaticLease/leases.json new file mode 100644 index 00000000..6506b4d4 --- /dev/null +++ b/internal/dhcpsvc/testdata/TestDHCPServer_UpdateStaticLease/leases.json @@ -0,0 +1,26 @@ +{ + "leases": [ + { + "expires": "", + "ip": "192.168.0.2", + "hostname": "host1", + "mac": "01:02:03:04:05:06", + "static": true + }, + { + "expires": "", + "ip": "192.168.0.3", + "hostname": "host2", + "mac": "01:02:03:04:05:07", + "static": true + }, + { + "expires": "", + "ip": "2001:db8::2", + "hostname": "host4", + "mac": "06:05:04:03:02:02", + "static": true + } + ], + "version": 1 +} diff --git a/internal/dhcpsvc/testdata/TestDHCPServer_index/leases.json b/internal/dhcpsvc/testdata/TestDHCPServer_index/leases.json new file mode 100644 index 00000000..2c86b108 --- /dev/null +++ b/internal/dhcpsvc/testdata/TestDHCPServer_index/leases.json @@ -0,0 +1,33 @@ +{ + "leases": [ + { + "expires": "", + "ip": "192.168.0.2", + "hostname": "host1", + "mac": "01:02:03:04:05:06", + "static": true + }, + { + "expires": "", + "ip": "192.168.0.3", + "hostname": "host2", + "mac": "06:05:04:03:02:01", + "static": true + }, + { + "expires": "", + "ip": "172.16.0.3", + "hostname": "host3", + "mac": "02:03:04:05:06:07", + "static": true + }, + { + "expires": "", + "ip": "172.16.0.4", + "hostname": "host4", + "mac": "01:02:03:04:05:06", + "static": true + } + ], + "version": 1 +} diff --git a/internal/dhcpsvc/testdata/TestServer_Leases/leases.json b/internal/dhcpsvc/testdata/TestServer_Leases/leases.json new file mode 100644 index 00000000..c5ccad0d --- /dev/null +++ b/internal/dhcpsvc/testdata/TestServer_Leases/leases.json @@ -0,0 +1,15 @@ +{ + "leases": [{ + "expires": "2042-01-02T03:04:05Z", + "ip": "192.168.0.3", + "hostname": "example.host", + "mac": "AA:AA:AA:AA:AA:AA", + "static": false + }, { + "ip": "192.168.0.4", + "hostname": "example.static.host", + "mac": "BB:BB:BB:BB:BB:BB", + "static": true + }], + "version": 1 +} diff --git a/internal/dhcpsvc/v4.go b/internal/dhcpsvc/v4.go index 09df8013..b5194a9f 100644 --- a/internal/dhcpsvc/v4.go +++ b/internal/dhcpsvc/v4.go @@ -82,8 +82,12 @@ func (c *IPv4Config) validate() (err error) { return errors.Join(errs...) } -// netInterfaceV4 is a DHCP interface for IPv4 address family. -type netInterfaceV4 struct { +// dhcpInterfaceV4 is a DHCP interface for IPv4 address family. +type dhcpInterfaceV4 struct { + // common is the common part of any network interface within the DHCP + // server. + common *netInterface + // gateway is the IP address of the network gateway. gateway netip.Addr @@ -101,25 +105,22 @@ type netInterfaceV4 struct { // explicitOpts are the user-configured options. It must not have // intersections with implicitOpts. explicitOpts layers.DHCPOptions - - // netInterface is embedded here to provide some common network interface - // logic. - netInterface } -// newNetInterfaceV4 creates a new DHCP interface for IPv4 address family with +// newDHCPInterfaceV4 creates a new DHCP interface for IPv4 address family with // the given configuration. It returns an error if the given configuration // can't be used. -func newNetInterfaceV4( +func newDHCPInterfaceV4( ctx context.Context, l *slog.Logger, name string, conf *IPv4Config, -) (i *netInterfaceV4, err error) { +) (i *dhcpInterfaceV4, err error) { l = l.With( keyInterface, name, keyFamily, netutil.AddrFamilyIPv4, ) + if !conf.Enabled { l.DebugContext(ctx, "disabled") @@ -143,35 +144,31 @@ func newNetInterfaceV4( return nil, fmt.Errorf("gateway ip %s in the ip range %s", conf.GatewayIP, addrSpace) } - i = &netInterfaceV4{ + i = &dhcpInterfaceV4{ gateway: conf.GatewayIP, subnet: subnet, addrSpace: addrSpace, - netInterface: netInterface{ - name: name, - leaseTTL: conf.LeaseDuration, - logger: l, - }, + common: newNetInterface(name, l, conf.LeaseDuration), } i.implicitOpts, i.explicitOpts = conf.options(ctx, l) return i, nil } -// netInterfacesV4 is a slice of network interfaces of IPv4 address family. -type netInterfacesV4 []*netInterfaceV4 +// dhcpInterfacesV4 is a slice of network interfaces of IPv4 address family. +type dhcpInterfacesV4 []*dhcpInterfaceV4 // find returns the first network interface within ifaces containing ip. It // returns false if there is no such interface. -func (ifaces netInterfacesV4) find(ip netip.Addr) (iface4 *netInterface, ok bool) { - i := slices.IndexFunc(ifaces, func(iface *netInterfaceV4) (contains bool) { +func (ifaces dhcpInterfacesV4) find(ip netip.Addr) (iface4 *netInterface, ok bool) { + i := slices.IndexFunc(ifaces, func(iface *dhcpInterfaceV4) (contains bool) { return iface.subnet.Contains(ip) }) if i < 0 { return nil, false } - return &ifaces[i].netInterface, true + return ifaces[i].common, true } // options returns the implicit and explicit options for the interface. The two diff --git a/internal/dhcpsvc/v6.go b/internal/dhcpsvc/v6.go index a1ee56ac..dd75184e 100644 --- a/internal/dhcpsvc/v6.go +++ b/internal/dhcpsvc/v6.go @@ -62,10 +62,12 @@ func (c *IPv6Config) validate() (err error) { return errors.Join(errs...) } -// netInterfaceV6 is a DHCP interface for IPv6 address family. -// -// TODO(e.burkov): Add options. -type netInterfaceV6 struct { +// dhcpInterfaceV6 is a DHCP interface for IPv6 address family. +type dhcpInterfaceV6 struct { + // common is the common part of any network interface within the DHCP + // server. + common *netInterface + // rangeStart is the first IP address in the range. rangeStart netip.Addr @@ -78,10 +80,6 @@ type netInterfaceV6 struct { // intersections with implicitOpts. explicitOpts layers.DHCPv6Options - // netInterface is embedded here to provide some common network interface - // logic. - netInterface - // raSLAACOnly defines if DHCP should send ICMPv6.RA packets without MO // flags. raSLAACOnly bool @@ -90,16 +88,16 @@ type netInterfaceV6 struct { raAllowSLAAC bool } -// newNetInterfaceV6 creates a new DHCP interface for IPv6 address family with +// newDHCPInterfaceV6 creates a new DHCP interface for IPv6 address family with // the given configuration. // // TODO(e.burkov): Validate properly. -func newNetInterfaceV6( +func newDHCPInterfaceV6( ctx context.Context, l *slog.Logger, name string, conf *IPv6Config, -) (i *netInterfaceV6) { +) (i *dhcpInterfaceV6) { l = l.With(keyInterface, name, keyFamily, netutil.AddrFamilyIPv6) if !conf.Enabled { l.DebugContext(ctx, "disabled") @@ -107,13 +105,9 @@ func newNetInterfaceV6( return nil } - i = &netInterfaceV6{ - rangeStart: conf.RangeStart, - netInterface: netInterface{ - name: name, - leaseTTL: conf.LeaseDuration, - logger: l, - }, + i = &dhcpInterfaceV6{ + rangeStart: conf.RangeStart, + common: newNetInterface(name, l, conf.LeaseDuration), raSLAACOnly: conf.RASLAACOnly, raAllowSLAAC: conf.RAAllowSLAAC, } @@ -122,12 +116,12 @@ func newNetInterfaceV6( return i } -// netInterfacesV4 is a slice of network interfaces of IPv4 address family. -type netInterfacesV6 []*netInterfaceV6 +// dhcpInterfacesV6 is a slice of network interfaces of IPv6 address family. +type dhcpInterfacesV6 []*dhcpInterfaceV6 // find returns the first network interface within ifaces containing ip. It // returns false if there is no such interface. -func (ifaces netInterfacesV6) find(ip netip.Addr) (iface6 *netInterface, ok bool) { +func (ifaces dhcpInterfacesV6) find(ip netip.Addr) (iface6 *netInterface, ok bool) { // prefLen is the length of prefix to match ip against. // // TODO(e.burkov): DHCPv6 inherits the weird behavior of legacy @@ -136,7 +130,7 @@ func (ifaces netInterfacesV6) find(ip netip.Addr) (iface6 *netInterface, ok bool // be used instead. const prefLen = netutil.IPv6BitLen - 8 - i := slices.IndexFunc(ifaces, func(iface *netInterfaceV6) (contains bool) { + i := slices.IndexFunc(ifaces, func(iface *dhcpInterfaceV6) (contains bool) { return !ip.Less(iface.rangeStart) && netip.PrefixFrom(iface.rangeStart, prefLen).Contains(ip) }) @@ -144,7 +138,7 @@ func (ifaces netInterfacesV6) find(ip netip.Addr) (iface6 *netInterface, ok bool return nil, false } - return &ifaces[i].netInterface, true + return ifaces[i].common, true } // options returns the implicit and explicit options for the interface. The two diff --git a/internal/dnsforward/clientid_test.go b/internal/dnsforward/clientid_test.go index 5391ddc0..097930bc 100644 --- a/internal/dnsforward/clientid_test.go +++ b/internal/dnsforward/clientid_test.go @@ -8,6 +8,7 @@ import ( "testing" "github.com/AdguardTeam/dnsproxy/proxy" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/quic-go/quic-go" "github.com/stretchr/testify/assert" @@ -217,7 +218,8 @@ func TestServer_clientIDFromDNSContext(t *testing.T) { } srv := &Server{ - conf: ServerConfig{TLSConfig: tlsConf}, + conf: ServerConfig{TLSConfig: tlsConf}, + baseLogger: slogutil.NewDiscardLogger(), } var ( diff --git a/internal/dnsforward/config.go b/internal/dnsforward/config.go index 4d2924ab..c2054217 100644 --- a/internal/dnsforward/config.go +++ b/internal/dnsforward/config.go @@ -22,6 +22,7 @@ import ( "github.com/AdguardTeam/golibs/container" "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/stringutil" "github.com/AdguardTeam/golibs/timeutil" @@ -158,7 +159,7 @@ type Config struct { // IpsetList is the ipset configuration that allows AdGuard Home to add IP // addresses of the specified domain names to an ipset list. Syntax: // - // DOMAIN[,DOMAIN].../IPSET_NAME + // DOMAIN[,DOMAIN].../IPSET_NAME[,IPSET_NAME]... // // This field is ignored if [IpsetListFileName] is set. IpsetList []string `yaml:"ipset"` @@ -301,6 +302,8 @@ type ServerConfig struct { // UpstreamMode is a enumeration of upstream mode representations. See // [proxy.UpstreamModeType]. +// +// TODO(d.kolyshev): Consider using [proxy.UpstreamMode]. type UpstreamMode string const ( @@ -315,6 +318,7 @@ func (s *Server) newProxyConfig() (conf *proxy.Config, err error) { trustedPrefixes := netutil.UnembedPrefixes(srvConf.TrustedProxies) conf = &proxy.Config{ + Logger: s.baseLogger.With(slogutil.KeyPrefix, "dnsproxy"), HTTP3: srvConf.ServeHTTP3, Ratelimit: int(srvConf.Ratelimit), RatelimitSubnetLenIPv4: srvConf.RatelimitSubnetLenIPv4, @@ -420,8 +424,6 @@ func parseBogusNXDOMAIN(confBogusNXDOMAIN []string) (subnets []netip.Prefix, err return subnets, nil } -const defaultBlockedResponseTTL = 3600 - // initDefaultSettings initializes default settings if nothing // is configured func (s *Server) initDefaultSettings() { @@ -452,24 +454,24 @@ func (s *Server) initDefaultSettings() { // prepareIpsetListSettings reads and prepares the ipset configuration either // from a file or from the data in the configuration file. -func (s *Server) prepareIpsetListSettings() (err error) { +func (s *Server) prepareIpsetListSettings() (ipsets []string, err error) { fn := s.conf.IpsetListFileName if fn == "" { - return s.ipset.init(s.conf.IpsetList) + return s.conf.IpsetList, nil } // #nosec G304 -- Trust the path explicitly given by the user. data, err := os.ReadFile(fn) if err != nil { - return err + return nil, err } - ipsets := stringutil.SplitTrimmed(string(data), "\n") - ipsets = stringutil.FilterOut(ipsets, IsCommentOrEmpty) + ipsets = stringutil.SplitTrimmed(string(data), "\n") + ipsets = slices.DeleteFunc(ipsets, IsCommentOrEmpty) log.Debug("dns: using %d ipset rules from file %q", len(ipsets), fn) - return s.ipset.init(ipsets) + return ipsets, nil } // loadUpstreams parses upstream DNS servers from the configured file or from @@ -690,7 +692,7 @@ func matchesDomainWildcard(host, pat string) (ok bool) { // the DNS names and patterns from certificate. dnsNames must be sorted. func anyNameMatches(dnsNames []string, sni string) (ok bool) { // Check sni is either a valid hostname or a valid IP address. - if netutil.ValidateHostname(sni) != nil && net.ParseIP(sni) == nil { + if !netutil.IsValidHostname(sni) && !netutil.IsValidIPString(sni) { return false } diff --git a/internal/dnsforward/dialcontext.go b/internal/dnsforward/dialcontext.go index edb96b14..0ed91fb8 100644 --- a/internal/dnsforward/dialcontext.go +++ b/internal/dnsforward/dialcontext.go @@ -10,6 +10,7 @@ import ( "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/netutil" ) // DialContext is an [aghnet.DialContextFunc] that uses s to resolve hostnames. @@ -28,7 +29,7 @@ func (s *Server) DialContext(ctx context.Context, network, addr string) (conn ne Timeout: time.Minute * 5, } - if net.ParseIP(host) != nil { + if netutil.IsValidIPString(host) { return dialer.DialContext(ctx, network, addr) } diff --git a/internal/dnsforward/dnsforward.go b/internal/dnsforward/dnsforward.go index ac8807ab..107eea39 100644 --- a/internal/dnsforward/dnsforward.go +++ b/internal/dnsforward/dnsforward.go @@ -6,6 +6,7 @@ import ( "context" "fmt" "io" + "log/slog" "net" "net/http" "net/netip" @@ -27,6 +28,7 @@ import ( "github.com/AdguardTeam/golibs/cache" "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/netutil/sysresolv" "github.com/AdguardTeam/golibs/stringutil" @@ -121,12 +123,17 @@ type Server struct { // access drops disallowed clients. access *accessManager + // baseLogger is used to create loggers for other entities. It should not + // have a prefix and must not be nil. + baseLogger *slog.Logger + // localDomainSuffix is the suffix used to detect internal hosts. It // must be a valid domain name plus dots on each side. localDomainSuffix string - // ipset processes DNS requests using ipset data. - ipset ipsetCtx + // ipset processes DNS requests using ipset data. It must not be nil after + // initialization. See [newIpsetHandler]. + ipset *ipsetHandler // privateNets is the configured set of IP networks considered private. privateNets netutil.SubnetSet @@ -197,6 +204,10 @@ type DNSCreateParams struct { PrivateNets netutil.SubnetSet Anonymizer *aghnet.IPMut EtcHosts *aghnet.HostsContainer + + // Logger is used as a base logger. It must not be nil. + Logger *slog.Logger + LocalDomain string } @@ -233,6 +244,7 @@ func NewServer(p DNSCreateParams) (s *Server, err error) { stats: p.Stats, queryLog: p.QueryLog, privateNets: p.PrivateNets, + baseLogger: p.Logger, // TODO(e.burkov): Use some case-insensitive string comparison. localDomainSuffix: strings.ToLower(localDomainSuffix), etcHosts: etcHosts, @@ -596,11 +608,18 @@ func (s *Server) prepareLocalResolvers() (uc *proxy.UpstreamConfig, err error) { // the primary DNS proxy instance. It assumes s.serverLock is locked or the // Server not running. func (s *Server) prepareInternalDNS() (err error) { - err = s.prepareIpsetListSettings() + ipsetList, err := s.prepareIpsetListSettings() if err != nil { return fmt.Errorf("preparing ipset settings: %w", err) } + ipsetLogger := s.baseLogger.With(slogutil.KeyPrefix, "ipset") + s.ipset, err = newIpsetHandler(context.TODO(), ipsetLogger, ipsetList) + if err != nil { + // Don't wrap the error, because it's informative enough as is. + return err + } + bootOpts := &upstream.Options{ Timeout: DefaultTimeout, HTTPVersions: UpstreamHTTPVersions(s.conf.UseHTTP3Upstreams), @@ -664,6 +683,7 @@ func (s *Server) setupAddrProc() { s.addrProc = client.EmptyAddrProc{} } else { c := s.conf.AddrProcConf + c.BaseLogger = s.baseLogger c.DialContext = s.DialContext c.PrivateSubnets = s.privateNets c.UsePrivateRDNS = s.conf.UsePrivateRDNS @@ -707,6 +727,7 @@ func validateBlockingMode( func (s *Server) prepareInternalProxy() (err error) { srvConf := s.conf conf := &proxy.Config{ + Logger: s.baseLogger.With(slogutil.KeyPrefix, "dnsproxy"), CacheEnabled: true, CacheSizeBytes: 4096, PrivateRDNSUpstreamConfig: srvConf.PrivateRDNSUpstreamConfig, diff --git a/internal/dnsforward/dnsforward_test.go b/internal/dnsforward/dnsforward_test.go index 9e4942cc..c326f8aa 100644 --- a/internal/dnsforward/dnsforward_test.go +++ b/internal/dnsforward/dnsforward_test.go @@ -28,6 +28,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/filtering/safesearch" "github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/upstream" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/testutil" "github.com/AdguardTeam/golibs/timeutil" @@ -99,6 +100,7 @@ func createTestServer( DHCPServer: dhcp, DNSFilter: f, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), + Logger: slogutil.NewDiscardLogger(), }) require.NoError(t, err) @@ -339,7 +341,10 @@ func TestServer_timeout(t *testing.T) { ServePlainDNS: true, } - s, err := NewServer(DNSCreateParams{DNSFilter: createTestDNSFilter(t)}) + s, err := NewServer(DNSCreateParams{ + DNSFilter: createTestDNSFilter(t), + Logger: slogutil.NewDiscardLogger(), + }) require.NoError(t, err) err = s.Prepare(srvConf) @@ -349,7 +354,10 @@ func TestServer_timeout(t *testing.T) { }) t.Run("default", func(t *testing.T) { - s, err := NewServer(DNSCreateParams{DNSFilter: createTestDNSFilter(t)}) + s, err := NewServer(DNSCreateParams{ + DNSFilter: createTestDNSFilter(t), + Logger: slogutil.NewDiscardLogger(), + }) require.NoError(t, err) s.conf.Config.UpstreamMode = UpstreamModeLoadBalance @@ -376,7 +384,9 @@ func TestServer_Prepare_fallbacks(t *testing.T) { ServePlainDNS: true, } - s, err := NewServer(DNSCreateParams{}) + s, err := NewServer(DNSCreateParams{ + Logger: slogutil.NewDiscardLogger(), + }) require.NoError(t, err) err = s.Prepare(srvConf) @@ -962,6 +972,7 @@ func TestBlockedCustomIP(t *testing.T) { DHCPServer: dhcp, DNSFilter: f, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), + Logger: slogutil.NewDiscardLogger(), }) require.NoError(t, err) @@ -1127,6 +1138,7 @@ func TestRewrite(t *testing.T) { DHCPServer: dhcp, DNSFilter: f, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), + Logger: slogutil.NewDiscardLogger(), }) require.NoError(t, err) @@ -1256,6 +1268,7 @@ func TestPTRResponseFromDHCPLeases(t *testing.T) { }, }, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), + Logger: slogutil.NewDiscardLogger(), LocalDomain: localDomain, }) require.NoError(t, err) @@ -1341,6 +1354,7 @@ func TestPTRResponseFromHosts(t *testing.T) { DHCPServer: dhcp, DNSFilter: flt, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), + Logger: slogutil.NewDiscardLogger(), }) require.NoError(t, err) @@ -1392,24 +1406,29 @@ func TestNewServer(t *testing.T) { in DNSCreateParams wantErrMsg string }{{ - name: "success", - in: DNSCreateParams{}, + name: "success", + in: DNSCreateParams{ + Logger: slogutil.NewDiscardLogger(), + }, wantErrMsg: "", }, { name: "success_local_tld", in: DNSCreateParams{ + Logger: slogutil.NewDiscardLogger(), LocalDomain: "mynet", }, wantErrMsg: "", }, { name: "success_local_domain", in: DNSCreateParams{ + Logger: slogutil.NewDiscardLogger(), LocalDomain: "my.local.net", }, wantErrMsg: "", }, { name: "bad_local_domain", in: DNSCreateParams{ + Logger: slogutil.NewDiscardLogger(), LocalDomain: "!!!", }, wantErrMsg: `local domain: bad domain name "!!!": ` + diff --git a/internal/dnsforward/filter_test.go b/internal/dnsforward/filter_test.go index 9e172a32..57d265f7 100644 --- a/internal/dnsforward/filter_test.go +++ b/internal/dnsforward/filter_test.go @@ -9,6 +9,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/filtering" "github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/upstream" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/miekg/dns" "github.com/stretchr/testify/assert" @@ -57,6 +58,7 @@ func TestHandleDNSRequest_handleDNSRequest(t *testing.T) { }, DNSFilter: f, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), + Logger: slogutil.NewDiscardLogger(), }) require.NoError(t, err) @@ -229,6 +231,7 @@ func TestHandleDNSRequest_filterDNSResponse(t *testing.T) { DHCPServer: &testDHCP{}, DNSFilter: f, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), + Logger: slogutil.NewDiscardLogger(), }) require.NoError(t, err) diff --git a/internal/dnsforward/http_test.go b/internal/dnsforward/http_test.go index 56daa4bf..e92da018 100644 --- a/internal/dnsforward/http_test.go +++ b/internal/dnsforward/http_test.go @@ -228,7 +228,7 @@ func TestDNSForwardHTTP_handleSetConfig(t *testing.T) { }, { name: "upstream_dns_bad", wantSet: `validating dns config: upstream servers: parsing error at index 0: ` + - `cannot prepare the upstream: invalid address !!!: bad hostname "!!!": ` + + `cannot prepare the upstream: invalid address !!!: bad domain name "!!!": ` + `bad top-level domain name label "!!!": bad top-level domain name label rune '!'`, }, { name: "bootstraps_bad", diff --git a/internal/dnsforward/ipset.go b/internal/dnsforward/ipset.go index cd841c34..7347890a 100644 --- a/internal/dnsforward/ipset.go +++ b/internal/dnsforward/ipset.go @@ -1,28 +1,43 @@ package dnsforward import ( + "context" "fmt" + "log/slog" "net" "os" "strings" "github.com/AdguardTeam/AdGuardHome/internal/ipset" "github.com/AdguardTeam/golibs/errors" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/miekg/dns" ) -// ipsetCtx is the ipset context. ipsetMgr can be nil. -type ipsetCtx struct { +// ipsetHandler is the ipset context. ipsetMgr can be nil. +type ipsetHandler struct { ipsetMgr ipset.Manager + logger *slog.Logger } -// init initializes the ipset context. It is not safe for concurrent use. -// -// TODO(a.garipov): Rewrite into a simple constructor? -func (c *ipsetCtx) init(ipsetConf []string) (err error) { - c.ipsetMgr, err = ipset.NewManager(ipsetConf) - if errors.Is(err, os.ErrInvalid) || errors.Is(err, os.ErrPermission) { +// newIpsetHandler returns a new initialized [ipsetHandler]. It is not safe for +// concurrent use. +func newIpsetHandler( + ctx context.Context, + logger *slog.Logger, + ipsetList []string, +) (h *ipsetHandler, err error) { + h = &ipsetHandler{ + logger: logger, + } + conf := &ipset.Config{ + Logger: logger, + Lines: ipsetList, + } + h.ipsetMgr, err = ipset.NewManager(ctx, conf) + if errors.Is(err, os.ErrInvalid) || + errors.Is(err, os.ErrPermission) || + errors.Is(err, errors.ErrUnsupported) { // ipset cannot currently be initialized if the server was installed // from Snap or when the user or the binary doesn't have the required // permissions, or when the kernel doesn't support netfilter. @@ -31,30 +46,28 @@ func (c *ipsetCtx) init(ipsetConf []string) (err error) { // // TODO(a.garipov): The Snap problem can probably be solved if we add // the netlink-connector interface plug. - log.Info("ipset: warning: cannot initialize: %s", err) + logger.WarnContext(ctx, "cannot initialize", slogutil.KeyError, err) - return nil - } else if errors.Is(err, errors.ErrUnsupported) { - log.Info("ipset: warning: %s", err) - - return nil + return h, nil } else if err != nil { - return fmt.Errorf("initializing ipset: %w", err) + return nil, fmt.Errorf("initializing ipset: %w", err) + } + + return h, nil +} + +// close closes the Linux Netfilter connections. close can be called on a nil +// handler. +func (h *ipsetHandler) close() (err error) { + if h != nil && h.ipsetMgr != nil { + return h.ipsetMgr.Close() } return nil } -// close closes the Linux Netfilter connections. -func (c *ipsetCtx) close() (err error) { - if c.ipsetMgr != nil { - return c.ipsetMgr.Close() - } - - return nil -} - -func (c *ipsetCtx) dctxIsfilled(dctx *dnsContext) (ok bool) { +// dctxIsFilled returns true if dctx has enough information to process. +func dctxIsFilled(dctx *dnsContext) (ok bool) { return dctx != nil && dctx.responseFromUpstream && dctx.proxyCtx != nil && @@ -65,8 +78,8 @@ func (c *ipsetCtx) dctxIsfilled(dctx *dnsContext) (ok bool) { // skipIpsetProcessing returns true when the ipset processing can be skipped for // this request. -func (c *ipsetCtx) skipIpsetProcessing(dctx *dnsContext) (ok bool) { - if c == nil || c.ipsetMgr == nil || !c.dctxIsfilled(dctx) { +func (h *ipsetHandler) skipIpsetProcessing(dctx *dnsContext) (ok bool) { + if h == nil || h.ipsetMgr == nil || !dctxIsFilled(dctx) { return true } @@ -108,31 +121,31 @@ func ipsFromAnswer(ans []dns.RR) (ip4s, ip6s []net.IP) { } // process adds the resolved IP addresses to the domain's ipsets, if any. -func (c *ipsetCtx) process(dctx *dnsContext) (rc resultCode) { - log.Debug("dnsforward: ipset: started processing") - defer log.Debug("dnsforward: ipset: finished processing") +func (h *ipsetHandler) process(dctx *dnsContext) (rc resultCode) { + // TODO(s.chzhen): Use passed context. + ctx := context.TODO() + h.logger.DebugContext(ctx, "started processing") + defer h.logger.DebugContext(ctx, "finished processing") - if c.skipIpsetProcessing(dctx) { + if h.skipIpsetProcessing(dctx) { return resultCodeSuccess } - log.Debug("ipset: starting processing") - req := dctx.proxyCtx.Req host := req.Question[0].Name host = strings.TrimSuffix(host, ".") host = strings.ToLower(host) ip4s, ip6s := ipsFromAnswer(dctx.proxyCtx.Res.Answer) - n, err := c.ipsetMgr.Add(host, ip4s, ip6s) + n, err := h.ipsetMgr.Add(ctx, host, ip4s, ip6s) if err != nil { // Consider ipset errors non-critical to the request. - log.Error("dnsforward: ipset: adding host ips: %s", err) + h.logger.ErrorContext(ctx, "adding host ips", slogutil.KeyError, err) return resultCodeSuccess } - log.Debug("dnsforward: ipset: added %d new ipset entries", n) + h.logger.DebugContext(ctx, "added new ipset entries", "num", n) return resultCodeSuccess } diff --git a/internal/dnsforward/ipset_internal_test.go b/internal/dnsforward/ipset_internal_test.go index cdeed21b..09601ac6 100644 --- a/internal/dnsforward/ipset_internal_test.go +++ b/internal/dnsforward/ipset_internal_test.go @@ -1,10 +1,12 @@ package dnsforward import ( + "context" "net" "testing" "github.com/AdguardTeam/dnsproxy/proxy" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/miekg/dns" "github.com/stretchr/testify/assert" ) @@ -16,7 +18,7 @@ type fakeIpsetMgr struct { } // Add implements the aghnet.IpsetManager interface for *fakeIpsetMgr. -func (m *fakeIpsetMgr) Add(host string, ip4s, ip6s []net.IP) (n int, err error) { +func (m *fakeIpsetMgr) Add(_ context.Context, host string, ip4s, ip6s []net.IP) (n int, err error) { m.ip4s = append(m.ip4s, ip4s...) m.ip6s = append(m.ip6s, ip6s...) @@ -58,7 +60,9 @@ func TestIpsetCtx_process(t *testing.T) { responseFromUpstream: true, } - ictx := &ipsetCtx{} + ictx := &ipsetHandler{ + logger: slogutil.NewDiscardLogger(), + } rc := ictx.process(dctx) assert.Equal(t, resultCodeSuccess, rc) @@ -77,8 +81,9 @@ func TestIpsetCtx_process(t *testing.T) { } m := &fakeIpsetMgr{} - ictx := &ipsetCtx{ + ictx := &ipsetHandler{ ipsetMgr: m, + logger: slogutil.NewDiscardLogger(), } rc := ictx.process(dctx) @@ -101,8 +106,9 @@ func TestIpsetCtx_process(t *testing.T) { } m := &fakeIpsetMgr{} - ictx := &ipsetCtx{ + ictx := &ipsetHandler{ ipsetMgr: m, + logger: slogutil.NewDiscardLogger(), } rc := ictx.process(dctx) @@ -124,8 +130,9 @@ func TestIpsetCtx_SkipIpsetProcessing(t *testing.T) { } m := &fakeIpsetMgr{} - ictx := &ipsetCtx{ + ictx := &ipsetHandler{ ipsetMgr: m, + logger: slogutil.NewDiscardLogger(), } testCases := []struct { diff --git a/internal/dnsforward/msg.go b/internal/dnsforward/msg.go index f645ab90..e9f1f2d7 100644 --- a/internal/dnsforward/msg.go +++ b/internal/dnsforward/msg.go @@ -58,7 +58,7 @@ func (s *Server) genDNSFilterMessage( return s.replyCompressed(req) } - return s.newMsgNODATA(req) + return s.NewMsgNODATA(req) } switch res.Reason { @@ -344,51 +344,6 @@ func (s *Server) makeResponseREFUSED(req *dns.Msg) *dns.Msg { return s.reply(req, dns.RcodeRefused) } -// newMsgNODATA returns a properly initialized NODATA response. -// -// See https://www.rfc-editor.org/rfc/rfc2308#section-2.2. -func (s *Server) newMsgNODATA(req *dns.Msg) (resp *dns.Msg) { - resp = s.reply(req, dns.RcodeSuccess) - resp.Ns = s.genSOA(req) - - return resp -} - -func (s *Server) genSOA(request *dns.Msg) []dns.RR { - zone := "" - if len(request.Question) > 0 { - zone = request.Question[0].Name - } - - soa := dns.SOA{ - // values copied from verisign's nonexistent .com domain - // their exact values are not important in our use case because they are used for domain transfers between primary/secondary DNS servers - Refresh: 1800, - Retry: 900, - Expire: 604800, - Minttl: 86400, - // copied from AdGuard DNS - Ns: "fake-for-negative-caching.adguard.com.", - Serial: 100500, - // rest is request-specific - Hdr: dns.RR_Header{ - Name: zone, - Rrtype: dns.TypeSOA, - Ttl: s.dnsFilter.BlockedResponseTTL(), - Class: dns.ClassINET, - }, - Mbox: "hostmaster.", // zone will be appended later if it's not empty or "." - } - if soa.Hdr.Ttl == 0 { - soa.Hdr.Ttl = defaultBlockedResponseTTL - } - if len(zone) > 0 && zone[0] != '.' { - soa.Mbox += zone - } - - return []dns.RR{&soa} -} - // type check var _ proxy.MessageConstructor = (*Server)(nil) @@ -425,3 +380,52 @@ func (s *Server) NewMsgNOTIMPLEMENTED(req *dns.Msg) (resp *dns.Msg) { return resp } + +// NewMsgNODATA implements the [proxy.MessageConstructor] interface for *Server. +func (s *Server) NewMsgNODATA(req *dns.Msg) (resp *dns.Msg) { + resp = s.reply(req, dns.RcodeSuccess) + resp.Ns = s.genSOA(req) + + return resp +} + +func (s *Server) genSOA(req *dns.Msg) []dns.RR { + zone := "" + if len(req.Question) > 0 { + zone = req.Question[0].Name + } + + const defaultBlockedResponseTTL = 3600 + + soa := dns.SOA{ + // Values copied from verisign's nonexistent.com domain. + // + // Their exact values are not important in our use case because they are + // used for domain transfers between primary/secondary DNS servers. + Refresh: 1800, + Retry: 900, + Expire: 604800, + Minttl: 86400, + // copied from AdGuard DNS + Ns: "fake-for-negative-caching.adguard.com.", + Serial: 100500, + // rest is request-specific + Hdr: dns.RR_Header{ + Name: zone, + Rrtype: dns.TypeSOA, + Ttl: s.dnsFilter.BlockedResponseTTL(), + Class: dns.ClassINET, + }, + // zone will be appended later if it's not ".". + Mbox: "hostmaster.", + } + if soa.Hdr.Ttl == 0 { + soa.Hdr.Ttl = defaultBlockedResponseTTL + } + + if zone != "." { + soa.Mbox += zone + } + + return []dns.RR{&soa} +} diff --git a/internal/dnsforward/process.go b/internal/dnsforward/process.go index 8c66ccf9..1a3dbc2e 100644 --- a/internal/dnsforward/process.go +++ b/internal/dnsforward/process.go @@ -159,7 +159,7 @@ func (s *Server) processInitial(dctx *dnsContext) (rc resultCode) { q := pctx.Req.Question[0] qt := q.Qtype if s.conf.AAAADisabled && qt == dns.TypeAAAA { - _ = proxy.CheckDisabledAAAARequest(pctx, true) + pctx.Res = s.NewMsgNODATA(pctx.Req) return resultCodeFinish } diff --git a/internal/dnsforward/process_internal_test.go b/internal/dnsforward/process_internal_test.go index e47027a5..9781b3b0 100644 --- a/internal/dnsforward/process_internal_test.go +++ b/internal/dnsforward/process_internal_test.go @@ -10,6 +10,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/filtering" "github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/upstream" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/testutil" "github.com/AdguardTeam/urlfilter/rules" @@ -430,6 +431,7 @@ func TestServer_ProcessDHCPHosts_localRestriction(t *testing.T) { dnsFilter: createTestDNSFilter(t), dhcpServer: dhcp, localDomainSuffix: localDomainSuffix, + baseLogger: slogutil.NewDiscardLogger(), } req := &dns.Msg{ @@ -565,6 +567,7 @@ func TestServer_ProcessDHCPHosts(t *testing.T) { dnsFilter: createTestDNSFilter(t), dhcpServer: testDHCP, localDomainSuffix: tc.suffix, + baseLogger: slogutil.NewDiscardLogger(), } req := &dns.Msg{ diff --git a/internal/dnsforward/stats_test.go b/internal/dnsforward/stats_test.go index 668b885b..6e4d5d86 100644 --- a/internal/dnsforward/stats_test.go +++ b/internal/dnsforward/stats_test.go @@ -11,6 +11,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/stats" "github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/upstream" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/miekg/dns" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -202,6 +203,7 @@ func TestServer_ProcessQueryLogsAndStats(t *testing.T) { ql := &testQueryLog{} st := &testStats{} srv := &Server{ + baseLogger: slogutil.NewDiscardLogger(), queryLog: ql, stats: st, anonymizer: aghnet.NewIPMut(nil), diff --git a/internal/dnsforward/upstreams.go b/internal/dnsforward/upstreams.go index 6fbe0638..00e10125 100644 --- a/internal/dnsforward/upstreams.go +++ b/internal/dnsforward/upstreams.go @@ -150,12 +150,12 @@ func setProxyUpstreamMode( ) (err error) { switch upstreamMode { case UpstreamModeParallel: - conf.UpstreamMode = proxy.UModeParallel + conf.UpstreamMode = proxy.UpstreamModeParallel case UpstreamModeFastestAddr: - conf.UpstreamMode = proxy.UModeFastestAddr + conf.UpstreamMode = proxy.UpstreamModeFastestAddr conf.FastestPingTimeout = fastestTimeout case UpstreamModeLoadBalance: - conf.UpstreamMode = proxy.UModeLoadBalance + conf.UpstreamMode = proxy.UpstreamModeLoadBalance default: return fmt.Errorf("unexpected value %q", upstreamMode) } diff --git a/internal/filtering/hashprefix/cache.go b/internal/filtering/hashprefix/cache.go index 190f2116..7db2ae22 100644 --- a/internal/filtering/hashprefix/cache.go +++ b/internal/filtering/hashprefix/cache.go @@ -47,7 +47,6 @@ func fromCacheItem(item *cacheItem) (data []byte) { data = binary.BigEndian.AppendUint64(data, uint64(expiry)) for _, v := range item.hashes { - // nolint:looppointer // The subslice of v is used for a copy. data = append(data, v[:]...) } @@ -63,7 +62,6 @@ func (c *Checker) findInCache( i := 0 for _, hash := range hashes { - // nolint:looppointer // The has subslice is used for a cache lookup. data := c.cache.Get(hash[:prefixLen]) if data == nil { hashes[i] = hash @@ -98,7 +96,6 @@ func (c *Checker) storeInCache(hashesToRequest, respHashes []hostnameHash) { for _, hash := range respHashes { var pref prefix - // nolint:looppointer // The hash subslice is used for a copy. copy(pref[:], hash[:]) hashToStore[pref] = append(hashToStore[pref], hash) @@ -109,11 +106,9 @@ func (c *Checker) storeInCache(hashesToRequest, respHashes []hostnameHash) { } for _, hash := range hashesToRequest { - // nolint:looppointer // The hash subslice is used for a cache lookup. val := c.cache.Get(hash[:prefixLen]) if val == nil { var pref prefix - // nolint:looppointer // The hash subslice is used for a copy. copy(pref[:], hash[:]) c.setCache(pref, nil) diff --git a/internal/filtering/hashprefix/hashprefix.go b/internal/filtering/hashprefix/hashprefix.go index fb1128e4..55795f9a 100644 --- a/internal/filtering/hashprefix/hashprefix.go +++ b/internal/filtering/hashprefix/hashprefix.go @@ -173,7 +173,6 @@ func (c *Checker) getQuestion(hashes []hostnameHash) (q string) { b := &strings.Builder{} for _, hash := range hashes { - // nolint:looppointer // The hash subslice is used for hex encoding. stringutil.WriteToBuilder(b, hex.EncodeToString(hash[:prefixLen]), ".") } diff --git a/internal/filtering/safesearch.go b/internal/filtering/safesearch.go index 39c05140..50bba61d 100644 --- a/internal/filtering/safesearch.go +++ b/internal/filtering/safesearch.go @@ -22,6 +22,7 @@ type SafeSearchConfig struct { Bing bool `yaml:"bing" json:"bing"` DuckDuckGo bool `yaml:"duckduckgo" json:"duckduckgo"` + Ecosia bool `yaml:"ecosia" json:"ecosia"` Google bool `yaml:"google" json:"google"` Pixabay bool `yaml:"pixabay" json:"pixabay"` Yandex bool `yaml:"yandex" json:"yandex"` diff --git a/internal/filtering/safesearch/rules.go b/internal/filtering/safesearch/rules.go index 75e512e8..8a784ceb 100644 --- a/internal/filtering/safesearch/rules.go +++ b/internal/filtering/safesearch/rules.go @@ -14,6 +14,9 @@ var pixabay string //go:embed rules/duckduckgo.txt var duckduckgo string +//go:embed rules/ecosia.txt +var ecosia string + //go:embed rules/yandex.txt var yandex string @@ -27,6 +30,7 @@ var youtube string var safeSearchRules = map[Service]string{ Bing: bing, DuckDuckGo: duckduckgo, + Ecosia: ecosia, Google: google, Pixabay: pixabay, Yandex: yandex, diff --git a/internal/filtering/safesearch/rules/bing.txt b/internal/filtering/safesearch/rules/bing.txt index 4e1a7bc8..14aac91b 100644 --- a/internal/filtering/safesearch/rules/bing.txt +++ b/internal/filtering/safesearch/rules/bing.txt @@ -1 +1,2 @@ |www.bing.com^$dnsrewrite=NOERROR;CNAME;strict.bing.com +|edgeservices.bing.com^$dnsrewrite=NOERROR;CNAME;strict.bing.com diff --git a/internal/filtering/safesearch/rules/ecosia.txt b/internal/filtering/safesearch/rules/ecosia.txt new file mode 100644 index 00000000..d75b34d3 --- /dev/null +++ b/internal/filtering/safesearch/rules/ecosia.txt @@ -0,0 +1 @@ +|www.ecosia.org^$dnsrewrite=NOERROR;CNAME;strict-safe-search.ecosia.org diff --git a/internal/filtering/safesearch/rules/google.txt b/internal/filtering/safesearch/rules/google.txt index 60df6617..a015f73b 100644 --- a/internal/filtering/safesearch/rules/google.txt +++ b/internal/filtering/safesearch/rules/google.txt @@ -46,6 +46,9 @@ |www.google.co.uz^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com |www.google.co.ve^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com |www.google.co.vi^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.za^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.zm^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.zw^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com |www.google.com.af^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com |www.google.com.ag^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com |www.google.com.ai^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com diff --git a/internal/filtering/safesearch/safesearch.go b/internal/filtering/safesearch/safesearch.go index 7ea1e3ad..9417102f 100644 --- a/internal/filtering/safesearch/safesearch.go +++ b/internal/filtering/safesearch/safesearch.go @@ -28,6 +28,7 @@ type Service string const ( Bing Service = "bing" DuckDuckGo Service = "duckduckgo" + Ecosia Service = "ecosia" Google Service = "google" Pixabay Service = "pixabay" Yandex Service = "yandex" @@ -41,6 +42,8 @@ func isServiceProtected(s filtering.SafeSearchConfig, service Service) (ok bool) return s.Bing case DuckDuckGo: return s.DuckDuckGo + case Ecosia: + return s.Ecosia case Google: return s.Google case Pixabay: diff --git a/internal/filtering/safesearch/safesearch_internal_test.go b/internal/filtering/safesearch/safesearch_internal_test.go index c6790dc3..24282b75 100644 --- a/internal/filtering/safesearch/safesearch_internal_test.go +++ b/internal/filtering/safesearch/safesearch_internal_test.go @@ -25,6 +25,7 @@ var defaultSafeSearchConf = filtering.SafeSearchConfig{ Enabled: true, Bing: true, DuckDuckGo: true, + Ecosia: true, Google: true, Pixabay: true, Yandex: true, diff --git a/internal/filtering/safesearch/safesearch_test.go b/internal/filtering/safesearch/safesearch_test.go index 9526c791..bcd3534d 100644 --- a/internal/filtering/safesearch/safesearch_test.go +++ b/internal/filtering/safesearch/safesearch_test.go @@ -34,6 +34,7 @@ var testConf = filtering.SafeSearchConfig{ Bing: true, DuckDuckGo: true, + Ecosia: true, Google: true, Pixabay: true, Yandex: true, diff --git a/internal/filtering/servicelist.go b/internal/filtering/servicelist.go index 5d23d881..b5aa4626 100644 --- a/internal/filtering/servicelist.go +++ b/internal/filtering/servicelist.go @@ -2106,6 +2106,14 @@ var blockedServices = []blockedService{{ "||paramountplus.com^", "||pplusstatic.com^", }, +}, { + ID: "peacock_tv", + Name: "Peacock TV", + IconSVG: []byte(""), + Rules: []string{ + "||peacock.com^", + "||peacocktv.com^", + }, }, { ID: "pinterest", Name: "Pinterest", @@ -2342,6 +2350,17 @@ var blockedServices = []blockedService{{ "||skypeassets.net^", "||skypedata.akadns.net^", }, +}, { + ID: "slack", + Name: "Slack", + IconSVG: []byte(""), + Rules: []string{ + "||slack-edge.com^", + "||slack-files.com ^", + "||slack-imgs.com^", + "||slack.com^", + "||slackb.com^", + }, }, { ID: "snapchat", Name: "Snapchat", diff --git a/internal/home/authglinet.go b/internal/home/authglinet.go index 7b65a28b..5aca7e7a 100644 --- a/internal/home/authglinet.go +++ b/internal/home/authglinet.go @@ -97,6 +97,7 @@ func glGetTokenDate(file string) uint32 { buf := bytes.NewBuffer(bs) + // TODO(a.garipov): Get rid of github.com/josharian/native dependency. err = binary.Read(buf, native.Endian, &dateToken) if err != nil { log.Error("decoding token: %s", err) diff --git a/internal/home/clients.go b/internal/home/clients.go index aee32f92..66a44a62 100644 --- a/internal/home/clients.go +++ b/internal/home/clients.go @@ -1,8 +1,8 @@ package home import ( + "context" "fmt" - "net" "net/netip" "slices" "sync" @@ -11,7 +11,6 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghnet" "github.com/AdguardTeam/AdGuardHome/internal/arpdb" "github.com/AdguardTeam/AdGuardHome/internal/client" - "github.com/AdguardTeam/AdGuardHome/internal/dhcpsvc" "github.com/AdguardTeam/AdGuardHome/internal/dnsforward" "github.com/AdguardTeam/AdGuardHome/internal/filtering" "github.com/AdguardTeam/AdGuardHome/internal/querylog" @@ -20,50 +19,18 @@ import ( "github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/upstream" "github.com/AdguardTeam/golibs/errors" - "github.com/AdguardTeam/golibs/hostsfile" - "github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/stringutil" ) -// DHCP is an interface for accessing DHCP lease data the [clientsContainer] -// needs. -type DHCP interface { - // Leases returns all the DHCP leases. - Leases() (leases []*dhcpsvc.Lease) - - // HostByIP returns the hostname of the DHCP client with the given IP - // address. The address will be netip.Addr{} if there is no such client, - // due to an assumption that a DHCP client must always have a hostname. - HostByIP(ip netip.Addr) (host string) - - // MACByIP returns the MAC address for the given IP address leased. It - // returns nil if there is no such client, due to an assumption that a DHCP - // client must always have a MAC address. - MACByIP(ip netip.Addr) (mac net.HardwareAddr) -} - // clientsContainer is the storage of all runtime and persistent clients. type clientsContainer struct { // storage stores information about persistent clients. storage *client.Storage - // runtimeIndex stores information about runtime clients. - runtimeIndex *client.RuntimeIndex - - // dhcp is the DHCP service implementation. - dhcp DHCP - // clientChecker checks if a client is blocked by the current access // settings. clientChecker BlockedClientChecker - // etcHosts contains list of rewrite rules taken from the operating system's - // hosts database. - etcHosts *aghnet.HostsContainer - - // arpDB stores the neighbors retrieved from ARP. - arpDB arpdb.Interface - // lock protects all fields. // // TODO(a.garipov): Use a pointer and describe which fields are protected in @@ -95,7 +62,7 @@ type BlockedClientChecker interface { // Note: this function must be called only once func (clients *clientsContainer) Init( objects []*clientObject, - dhcpServer DHCP, + dhcpServer client.DHCP, etcHosts *aghnet.HostsContainer, arpDB arpdb.Interface, filteringConf *filtering.Config, @@ -105,28 +72,15 @@ func (clients *clientsContainer) Init( return errors.Error("clients container already initialized") } - clients.runtimeIndex = client.NewRuntimeIndex() + confClients := make([]*client.Persistent, 0, len(objects)) + for i, o := range objects { + var p *client.Persistent + p, err = o.toPersistent(filteringConf) + if err != nil { + return fmt.Errorf("init persistent client at index %d: %w", i, err) + } - clients.storage = client.NewStorage(&client.Config{ - AllowedTags: clientTags, - }) - - // TODO(e.burkov): Use [dhcpsvc] implementation when it's ready. - clients.dhcp = dhcpServer - - clients.etcHosts = etcHosts - clients.arpDB = arpDB - err = clients.addFromConfig(objects, filteringConf) - if err != nil { - // Don't wrap the error, because it's informative enough as is. - return err - } - - clients.safeSearchCacheSize = filteringConf.SafeSearchCacheSize - clients.safeSearchCacheTTL = time.Minute * time.Duration(filteringConf.CacheTime) - - if clients.testing { - return nil + confClients = append(confClients, p) } // The clients.etcHosts may be nil even if config.Clients.Sources.HostsFile @@ -135,21 +89,26 @@ func (clients *clientsContainer) Init( // TODO(e.burkov): The option should probably be returned, since hosts file // currently used not only for clients' information enrichment, but also in // the filtering module and upstream addresses resolution. - if config.Clients.Sources.HostsFile && clients.etcHosts != nil { - go clients.handleHostsUpdates() + var hosts client.HostsContainer = etcHosts + if !config.Clients.Sources.HostsFile { + hosts = nil + } + + clients.storage, err = client.NewStorage(&client.StorageConfig{ + InitialClients: confClients, + DHCP: dhcpServer, + EtcHosts: hosts, + ARPDB: arpDB, + ARPClientsUpdatePeriod: arpClientsUpdatePeriod, + RuntimeSourceDHCP: config.Clients.Sources.DHCP, + }) + if err != nil { + return fmt.Errorf("init client storage: %w", err) } return nil } -// handleHostsUpdates receives the updates from the hosts container and adds -// them to the clients container. It is intended to be used as a goroutine. -func (clients *clientsContainer) handleHostsUpdates() { - for upd := range clients.etcHosts.Upd() { - clients.addFromHostsFile(upd) - } -} - // webHandlersRegistered prevents a [clientsContainer] from registering its web // handlers more than once. // @@ -157,7 +116,7 @@ func (clients *clientsContainer) handleHostsUpdates() { var webHandlersRegistered = false // Start starts the clients container. -func (clients *clientsContainer) Start() { +func (clients *clientsContainer) Start(ctx context.Context) (err error) { if clients.testing { return } @@ -167,14 +126,7 @@ func (clients *clientsContainer) Start() { clients.registerWebHandlers() } - go clients.periodicUpdate() -} - -// reloadARP reloads runtime clients from ARP, if configured. -func (clients *clientsContainer) reloadARP() { - if clients.arpDB != nil { - clients.addFromSystemARP() - } + return clients.storage.Start(ctx) } // clientObject is the YAML representation of a persistent client. @@ -275,28 +227,6 @@ func (o *clientObject) toPersistent( return cli, nil } -// addFromConfig initializes the clients container with objects from the -// configuration file. -func (clients *clientsContainer) addFromConfig( - objects []*clientObject, - filteringConf *filtering.Config, -) (err error) { - for i, o := range objects { - var cli *client.Persistent - cli, err = o.toPersistent(filteringConf) - if err != nil { - return fmt.Errorf("clients: init persistent client at index %d: %w", i, err) - } - - err = clients.storage.Add(cli) - if err != nil { - return fmt.Errorf("adding client %q at index %d: %w", cli.Name, i, err) - } - } - - return nil -} - // forConfig returns all currently known persistent clients as objects for the // configuration file. func (clients *clientsContainer) forConfig() (objs []*clientObject) { @@ -337,39 +267,6 @@ func (clients *clientsContainer) forConfig() (objs []*clientObject) { // arpClientsUpdatePeriod defines how often ARP clients are updated. const arpClientsUpdatePeriod = 10 * time.Minute -func (clients *clientsContainer) periodicUpdate() { - defer log.OnPanic("clients container") - - for { - clients.reloadARP() - time.Sleep(arpClientsUpdatePeriod) - } -} - -// clientSource checks if client with this IP address already exists and returns -// the source which updated it last. It returns [client.SourceNone] if the -// client doesn't exist. Note that it is only used in tests. -func (clients *clientsContainer) clientSource(ip netip.Addr) (src client.Source) { - clients.lock.Lock() - defer clients.lock.Unlock() - - _, ok := clients.findLocked(ip.String()) - if ok { - return client.SourcePersistent - } - - rc := clients.runtimeIndex.Client(ip) - if rc != nil { - src, _ = rc.Info() - } - - if src < client.SourceDHCP && clients.dhcp.HostByIP(ip) != "" { - src = client.SourceDHCP - } - - return src -} - // findMultiple is a wrapper around [clientsContainer.find] to make it a valid // client finder for the query log. c is never nil; if no information about the // client is found, it returns an artificial client record by only setting the @@ -415,7 +312,7 @@ func (clients *clientsContainer) clientOrArtificial( }, false } - rc := clients.findRuntimeClient(ip) + rc := clients.storage.ClientRuntime(ip) if rc != nil { _, host := rc.Info() @@ -430,19 +327,6 @@ func (clients *clientsContainer) clientOrArtificial( }, true } -// find returns a shallow copy of the client if there is one found. -func (clients *clientsContainer) find(id string) (c *client.Persistent, ok bool) { - clients.lock.Lock() - defer clients.lock.Unlock() - - c, ok = clients.findLocked(id) - if !ok { - return nil, false - } - - return c, true -} - // shouldCountClient is a wrapper around [clientsContainer.find] to make it a // valid client information finder for the statistics. If no information about // the client is found, it returns true. @@ -451,7 +335,7 @@ func (clients *clientsContainer) shouldCountClient(ids []string) (y bool) { defer clients.lock.Unlock() for _, id := range ids { - client, ok := clients.findLocked(id) + client, ok := clients.storage.Find(id) if ok { return !client.IgnoreStatistics } @@ -473,7 +357,7 @@ func (clients *clientsContainer) UpstreamConfigByID( clients.lock.Lock() defer clients.lock.Unlock() - c, ok := clients.findLocked(id) + c, ok := clients.storage.Find(id) if !ok { return nil, nil } else if c.UpstreamConfig != nil { @@ -511,225 +395,17 @@ func (clients *clientsContainer) UpstreamConfigByID( return conf, nil } -// findLocked searches for a client by its ID. clients.lock is expected to be -// locked. -func (clients *clientsContainer) findLocked(id string) (c *client.Persistent, ok bool) { - c, ok = clients.storage.Find(id) - if ok { - return c, true - } - - ip, err := netip.ParseAddr(id) - if err != nil { - return nil, false - } - - // TODO(e.burkov): Iterate through clients.list only once. - return clients.findDHCP(ip) -} - -// findDHCP searches for a client by its MAC, if the DHCP server is active and -// there is such client. clients.lock is expected to be locked. -func (clients *clientsContainer) findDHCP(ip netip.Addr) (c *client.Persistent, ok bool) { - foundMAC := clients.dhcp.MACByIP(ip) - if foundMAC == nil { - return nil, false - } - - return clients.storage.FindByMAC(foundMAC) -} - -// runtimeClient returns a runtime client from internal index. Note that it -// doesn't include DHCP clients. -func (clients *clientsContainer) runtimeClient(ip netip.Addr) (rc *client.Runtime) { - if ip == (netip.Addr{}) { - return nil - } - - clients.lock.Lock() - defer clients.lock.Unlock() - - return clients.runtimeIndex.Client(ip) -} - -// findRuntimeClient finds a runtime client by their IP. -func (clients *clientsContainer) findRuntimeClient(ip netip.Addr) (rc *client.Runtime) { - rc = clients.runtimeClient(ip) - host := clients.dhcp.HostByIP(ip) - - if host != "" { - if rc == nil { - rc = client.NewRuntime(ip) - } - - rc.SetInfo(client.SourceDHCP, []string{host}) - - return rc - } - - return rc -} - -// setWHOISInfo sets the WHOIS information for a client. clients.lock is -// expected to be locked. -func (clients *clientsContainer) setWHOISInfo(ip netip.Addr, wi *whois.Info) { - _, ok := clients.findLocked(ip.String()) - if ok { - log.Debug("clients: client for %s is already created, ignore whois info", ip) - - return - } - - rc := clients.runtimeIndex.Client(ip) - if rc == nil { - // Create a RuntimeClient implicitly so that we don't do this check - // again. - rc = client.NewRuntime(ip) - clients.runtimeIndex.Add(rc) - - log.Debug("clients: set whois info for runtime client with ip %s: %+v", ip, wi) - } else { - host, _ := rc.Info() - log.Debug("clients: set whois info for runtime client %s: %+v", host, wi) - } - - rc.SetWHOIS(wi) -} - -// addHost adds a new IP-hostname pairing. The priorities of the sources are -// taken into account. ok is true if the pairing was added. -// -// TODO(a.garipov): Only used in internal tests. Consider removing. -func (clients *clientsContainer) addHost( - ip netip.Addr, - host string, - src client.Source, -) (ok bool) { - clients.lock.Lock() - defer clients.lock.Unlock() - - return clients.addHostLocked(ip, host, src) -} - // type check var _ client.AddressUpdater = (*clientsContainer)(nil) // UpdateAddress implements the [client.AddressUpdater] interface for // *clientsContainer func (clients *clientsContainer) UpdateAddress(ip netip.Addr, host string, info *whois.Info) { - // Common fast path optimization. - if host == "" && info == nil { - return - } - - clients.lock.Lock() - defer clients.lock.Unlock() - - if host != "" { - ok := clients.addHostLocked(ip, host, client.SourceRDNS) - if !ok { - log.Debug("clients: host for client %q already set with higher priority source", ip) - } - } - - if info != nil { - clients.setWHOISInfo(ip, info) - } -} - -// addHostLocked adds a new IP-hostname pairing. clients.lock is expected to be -// locked. -func (clients *clientsContainer) addHostLocked( - ip netip.Addr, - host string, - src client.Source, -) (ok bool) { - rc := clients.runtimeIndex.Client(ip) - if rc == nil { - if src < client.SourceDHCP { - if clients.dhcp.HostByIP(ip) != "" { - return false - } - } - - rc = client.NewRuntime(ip) - clients.runtimeIndex.Add(rc) - } - - rc.SetInfo(src, []string{host}) - - log.Debug( - "clients: adding client info %s -> %q %q [%d]", - ip, - src, - host, - clients.runtimeIndex.Size(), - ) - - return true -} - -// addFromHostsFile fills the client-hostname pairing index from the system's -// hosts files. -func (clients *clientsContainer) addFromHostsFile(hosts *hostsfile.DefaultStorage) { - clients.lock.Lock() - defer clients.lock.Unlock() - - deleted := clients.runtimeIndex.DeleteBySource(client.SourceHostsFile) - log.Debug("clients: removed %d client aliases from system hosts file", deleted) - - added := 0 - hosts.RangeNames(func(addr netip.Addr, names []string) (cont bool) { - // Only the first name of the first record is considered a canonical - // hostname for the IP address. - // - // TODO(e.burkov): Consider using all the names from all the records. - if clients.addHostLocked(addr, names[0], client.SourceHostsFile) { - added++ - } - - return true - }) - - log.Debug("clients: added %d client aliases from system hosts file", added) -} - -// addFromSystemARP adds the IP-hostname pairings from the output of the arp -a -// command. -func (clients *clientsContainer) addFromSystemARP() { - if err := clients.arpDB.Refresh(); err != nil { - log.Error("refreshing arp container: %s", err) - - clients.arpDB = arpdb.Empty{} - - return - } - - ns := clients.arpDB.Neighbors() - if len(ns) == 0 { - log.Debug("refreshing arp container: the update is empty") - - return - } - - clients.lock.Lock() - defer clients.lock.Unlock() - - deleted := clients.runtimeIndex.DeleteBySource(client.SourceARP) - log.Debug("clients: removed %d client aliases from arp neighborhood", deleted) - - added := 0 - for _, n := range ns { - if clients.addHostLocked(n.IP, n.Name, client.SourceARP) { - added++ - } - } - - log.Debug("clients: added %d client aliases from arp neighborhood", added) + clients.storage.UpdateAddress(ip, host, info) } // close gracefully closes all the client-specific upstream configurations of // the persistent clients. -func (clients *clientsContainer) close() (err error) { - return clients.storage.CloseUpstreams() +func (clients *clientsContainer) close(ctx context.Context) (err error) { + return clients.storage.Shutdown(ctx) } diff --git a/internal/home/clients_internal_test.go b/internal/home/clients_internal_test.go index 2c90a1e0..c23f4b23 100644 --- a/internal/home/clients_internal_test.go +++ b/internal/home/clients_internal_test.go @@ -3,34 +3,14 @@ package home import ( "net" "net/netip" - "runtime" "testing" - "time" "github.com/AdguardTeam/AdGuardHome/internal/client" - "github.com/AdguardTeam/AdGuardHome/internal/dhcpd" - "github.com/AdguardTeam/AdGuardHome/internal/dhcpsvc" "github.com/AdguardTeam/AdGuardHome/internal/filtering" - "github.com/AdguardTeam/AdGuardHome/internal/whois" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) -type testDHCP struct { - OnLeases func() (leases []*dhcpsvc.Lease) - OnHostBy func(ip netip.Addr) (host string) - OnMACBy func(ip netip.Addr) (mac net.HardwareAddr) -} - -// Lease implements the [DHCP] interface for testDHCP. -func (t *testDHCP) Leases() (leases []*dhcpsvc.Lease) { return t.OnLeases() } - -// HostByIP implements the [DHCP] interface for testDHCP. -func (t *testDHCP) HostByIP(ip netip.Addr) (host string) { return t.OnHostBy(ip) } - -// MACByIP implements the [DHCP] interface for testDHCP. -func (t *testDHCP) MACByIP(ip netip.Addr) (mac net.HardwareAddr) { return t.OnMACBy(ip) } - // newClientsContainer is a helper that creates a new clients container for // tests. func newClientsContainer(t *testing.T) (c *clientsContainer) { @@ -40,316 +20,11 @@ func newClientsContainer(t *testing.T) (c *clientsContainer) { testing: true, } - dhcp := &testDHCP{ - OnLeases: func() (leases []*dhcpsvc.Lease) { return nil }, - OnHostBy: func(ip netip.Addr) (host string) { return "" }, - OnMACBy: func(ip netip.Addr) (mac net.HardwareAddr) { return nil }, - } - - require.NoError(t, c.Init(nil, dhcp, nil, nil, &filtering.Config{})) + require.NoError(t, c.Init(nil, client.EmptyDHCP{}, nil, nil, &filtering.Config{})) return c } -func TestClients(t *testing.T) { - clients := newClientsContainer(t) - - t.Run("add_success", func(t *testing.T) { - var ( - cliNone = "1.2.3.4" - cli1 = "1.1.1.1" - cli2 = "2.2.2.2" - - cli1IP = netip.MustParseAddr(cli1) - cli2IP = netip.MustParseAddr(cli2) - - cliIPv6 = netip.MustParseAddr("1:2:3::4") - ) - - c := &client.Persistent{ - Name: "client1", - UID: client.MustNewUID(), - IPs: []netip.Addr{cli1IP, cliIPv6}, - } - - err := clients.storage.Add(c) - require.NoError(t, err) - - c = &client.Persistent{ - Name: "client2", - UID: client.MustNewUID(), - IPs: []netip.Addr{cli2IP}, - } - - err = clients.storage.Add(c) - require.NoError(t, err) - - c, ok := clients.find(cli1) - require.True(t, ok) - - assert.Equal(t, "client1", c.Name) - - c, ok = clients.find("1:2:3::4") - require.True(t, ok) - - assert.Equal(t, "client1", c.Name) - - c, ok = clients.find(cli2) - require.True(t, ok) - - assert.Equal(t, "client2", c.Name) - - _, ok = clients.find(cliNone) - assert.False(t, ok) - - assert.Equal(t, clients.clientSource(cli1IP), client.SourcePersistent) - assert.Equal(t, clients.clientSource(cli2IP), client.SourcePersistent) - }) - - t.Run("add_fail_name", func(t *testing.T) { - err := clients.storage.Add(&client.Persistent{ - Name: "client1", - UID: client.MustNewUID(), - IPs: []netip.Addr{netip.MustParseAddr("1.2.3.5")}, - }) - require.Error(t, err) - }) - - t.Run("add_fail_ip", func(t *testing.T) { - err := clients.storage.Add(&client.Persistent{ - Name: "client3", - UID: client.MustNewUID(), - }) - require.Error(t, err) - }) - - t.Run("update_fail_ip", func(t *testing.T) { - err := clients.storage.Update("client1", &client.Persistent{ - Name: "client1", - UID: client.MustNewUID(), - }) - assert.Error(t, err) - }) - - t.Run("update_success", func(t *testing.T) { - var ( - cliOld = "1.1.1.1" - cliNew = "1.1.1.2" - - cliNewIP = netip.MustParseAddr(cliNew) - ) - - prev, ok := clients.storage.FindByName("client1") - require.True(t, ok) - require.NotNil(t, prev) - - err := clients.storage.Update("client1", &client.Persistent{ - Name: "client1", - UID: prev.UID, - IPs: []netip.Addr{cliNewIP}, - }) - require.NoError(t, err) - - _, ok = clients.find(cliOld) - assert.False(t, ok) - - assert.Equal(t, clients.clientSource(cliNewIP), client.SourcePersistent) - - prev, ok = clients.storage.FindByName("client1") - require.True(t, ok) - require.NotNil(t, prev) - - err = clients.storage.Update("client1", &client.Persistent{ - Name: "client1-renamed", - UID: prev.UID, - IPs: []netip.Addr{cliNewIP}, - UseOwnSettings: true, - }) - require.NoError(t, err) - - c, ok := clients.find(cliNew) - require.True(t, ok) - - assert.Equal(t, "client1-renamed", c.Name) - assert.True(t, c.UseOwnSettings) - - nilCli, ok := clients.storage.FindByName("client1") - require.False(t, ok) - - assert.Nil(t, nilCli) - - require.Len(t, c.IDs(), 1) - - assert.Equal(t, cliNewIP, c.IPs[0]) - }) - - t.Run("del_success", func(t *testing.T) { - ok := clients.storage.RemoveByName("client1-renamed") - require.True(t, ok) - - _, ok = clients.find("1.1.1.2") - assert.False(t, ok) - }) - - t.Run("del_fail", func(t *testing.T) { - ok := clients.storage.RemoveByName("client3") - assert.False(t, ok) - }) - - t.Run("addhost_success", func(t *testing.T) { - ip := netip.MustParseAddr("1.1.1.1") - ok := clients.addHost(ip, "host", client.SourceARP) - assert.True(t, ok) - - ok = clients.addHost(ip, "host2", client.SourceARP) - assert.True(t, ok) - - ok = clients.addHost(ip, "host3", client.SourceHostsFile) - assert.True(t, ok) - - assert.Equal(t, clients.clientSource(ip), client.SourceHostsFile) - }) - - t.Run("dhcp_replaces_arp", func(t *testing.T) { - ip := netip.MustParseAddr("1.2.3.4") - ok := clients.addHost(ip, "from_arp", client.SourceARP) - assert.True(t, ok) - assert.Equal(t, clients.clientSource(ip), client.SourceARP) - - ok = clients.addHost(ip, "from_dhcp", client.SourceDHCP) - assert.True(t, ok) - assert.Equal(t, clients.clientSource(ip), client.SourceDHCP) - }) - - t.Run("addhost_priority", func(t *testing.T) { - ip := netip.MustParseAddr("1.1.1.1") - ok := clients.addHost(ip, "host1", client.SourceRDNS) - assert.True(t, ok) - - assert.Equal(t, client.SourceHostsFile, clients.clientSource(ip)) - }) -} - -func TestClientsWHOIS(t *testing.T) { - clients := newClientsContainer(t) - whois := &whois.Info{ - Country: "AU", - Orgname: "Example Org", - } - - t.Run("new_client", func(t *testing.T) { - ip := netip.MustParseAddr("1.1.1.255") - clients.setWHOISInfo(ip, whois) - rc := clients.runtimeIndex.Client(ip) - require.NotNil(t, rc) - - assert.Equal(t, whois, rc.WHOIS()) - }) - - t.Run("existing_auto-client", func(t *testing.T) { - ip := netip.MustParseAddr("1.1.1.1") - ok := clients.addHost(ip, "host", client.SourceRDNS) - assert.True(t, ok) - - clients.setWHOISInfo(ip, whois) - rc := clients.runtimeIndex.Client(ip) - require.NotNil(t, rc) - - assert.Equal(t, whois, rc.WHOIS()) - }) - - t.Run("can't_set_manually-added", func(t *testing.T) { - ip := netip.MustParseAddr("1.1.1.2") - - err := clients.storage.Add(&client.Persistent{ - Name: "client1", - UID: client.MustNewUID(), - IPs: []netip.Addr{netip.MustParseAddr("1.1.1.2")}, - }) - require.NoError(t, err) - - clients.setWHOISInfo(ip, whois) - rc := clients.runtimeIndex.Client(ip) - require.Nil(t, rc) - - assert.True(t, clients.storage.RemoveByName("client1")) - }) -} - -func TestClientsAddExisting(t *testing.T) { - clients := newClientsContainer(t) - - t.Run("simple", func(t *testing.T) { - ip := netip.MustParseAddr("1.1.1.1") - - // Add a client. - err := clients.storage.Add(&client.Persistent{ - Name: "client1", - UID: client.MustNewUID(), - IPs: []netip.Addr{ip, netip.MustParseAddr("1:2:3::4")}, - Subnets: []netip.Prefix{netip.MustParsePrefix("2.2.2.0/24")}, - MACs: []net.HardwareAddr{{0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}}, - }) - require.NoError(t, err) - - // Now add an auto-client with the same IP. - ok := clients.addHost(ip, "test", client.SourceRDNS) - assert.True(t, ok) - }) - - t.Run("complicated", func(t *testing.T) { - // TODO(a.garipov): Properly decouple the DHCP server from the client - // storage. - if runtime.GOOS == "windows" { - t.Skip("skipping dhcp test on windows") - } - - ip := netip.MustParseAddr("1.2.3.4") - - // First, init a DHCP server with a single static lease. - config := &dhcpd.ServerConfig{ - Enabled: true, - DataDir: t.TempDir(), - Conf4: dhcpd.V4ServerConf{ - Enabled: true, - GatewayIP: netip.MustParseAddr("1.2.3.1"), - SubnetMask: netip.MustParseAddr("255.255.255.0"), - RangeStart: netip.MustParseAddr("1.2.3.2"), - RangeEnd: netip.MustParseAddr("1.2.3.10"), - }, - } - - dhcpServer, err := dhcpd.Create(config) - require.NoError(t, err) - - clients.dhcp = dhcpServer - - err = dhcpServer.AddStaticLease(&dhcpsvc.Lease{ - HWAddr: net.HardwareAddr{0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}, - IP: ip, - Hostname: "testhost", - Expiry: time.Now().Add(time.Hour), - }) - require.NoError(t, err) - - // Add a new client with the same IP as for a client with MAC. - err = clients.storage.Add(&client.Persistent{ - Name: "client2", - UID: client.MustNewUID(), - IPs: []netip.Addr{ip}, - }) - require.NoError(t, err) - - // Add a new client with the IP from the first client's IP range. - err = clients.storage.Add(&client.Persistent{ - Name: "client3", - UID: client.MustNewUID(), - IPs: []netip.Addr{netip.MustParseAddr("2.2.2.2")}, - }) - require.NoError(t, err) - }) -} - func TestClientsCustomUpstream(t *testing.T) { clients := newClientsContainer(t) diff --git a/internal/home/clientshttp.go b/internal/home/clientshttp.go index a8b31835..73259d29 100644 --- a/internal/home/clientshttp.go +++ b/internal/home/clientshttp.go @@ -103,7 +103,9 @@ func (clients *clientsContainer) handleGetClients(w http.ResponseWriter, r *http return true }) - clients.runtimeIndex.Range(func(rc *client.Runtime) (cont bool) { + clients.storage.UpdateDHCP() + + clients.storage.RangeRuntime(func(rc *client.Runtime) (cont bool) { src, host := rc.Info() cj := runtimeClientJSON{ WHOIS: whoisOrEmpty(rc), @@ -117,18 +119,7 @@ func (clients *clientsContainer) handleGetClients(w http.ResponseWriter, r *http return true }) - for _, l := range clients.dhcp.Leases() { - cj := runtimeClientJSON{ - Name: l.Hostname, - Source: client.SourceDHCP, - IP: l.IP, - WHOIS: &whois.Info{}, - } - - data.RuntimeClients = append(data.RuntimeClients, cj) - } - - data.Tags = clientTags + data.Tags = clients.storage.AllowedTags() aghhttp.WriteJSONResponseOK(w, r, data) } @@ -248,6 +239,7 @@ func copySafeSearch( if conf.Enabled { conf.Bing = true conf.DuckDuckGo = true + conf.Ecosia = true conf.Google = true conf.Pixabay = true conf.Yandex = true @@ -429,7 +421,7 @@ func (clients *clientsContainer) handleFindClient(w http.ResponseWriter, r *http } ip, _ := netip.ParseAddr(idStr) - c, ok := clients.find(idStr) + c, ok := clients.storage.Find(idStr) var cj *clientJSON if !ok { cj = clients.findRuntime(ip, idStr) @@ -451,7 +443,7 @@ func (clients *clientsContainer) handleFindClient(w http.ResponseWriter, r *http // /etc/hosts tables, DHCP leases, or blocklists. cj is guaranteed to be // non-nil. func (clients *clientsContainer) findRuntime(ip netip.Addr, idStr string) (cj *clientJSON) { - rc := clients.findRuntimeClient(ip) + rc := clients.storage.ClientRuntime(ip) if rc == nil { // It is still possible that the IP used to be in the runtime clients // list, but then the server was reloaded. So, check the DNS server's diff --git a/internal/home/clientstags.go b/internal/home/clientstags.go deleted file mode 100644 index b4fc518a..00000000 --- a/internal/home/clientstags.go +++ /dev/null @@ -1,27 +0,0 @@ -package home - -var clientTags = []string{ - "device_audio", - "device_camera", - "device_gameconsole", - "device_laptop", - "device_nas", // Network-attached Storage - "device_other", - "device_pc", - "device_phone", - "device_printer", - "device_securityalarm", - "device_tablet", - "device_tv", - - "os_android", - "os_ios", - "os_linux", - "os_macos", - "os_other", - "os_windows", - - "user_admin", - "user_child", - "user_regular", -} diff --git a/internal/home/config.go b/internal/home/config.go index 2c15740c..b8d69dae 100644 --- a/internal/home/config.go +++ b/internal/home/config.go @@ -423,6 +423,7 @@ var config = &configuration{ Enabled: false, Bing: true, DuckDuckGo: true, + Ecosia: true, Google: true, Pixabay: true, Yandex: true, diff --git a/internal/home/controlinstall.go b/internal/home/controlinstall.go index 3d012751..f94457d0 100644 --- a/internal/home/controlinstall.go +++ b/internal/home/controlinstall.go @@ -433,7 +433,7 @@ func (web *webAPI) handleInstallConfigure(w http.ResponseWriter, r *http.Request // moment we'll allow setting up TLS in the initial configuration or the // configuration itself will use HTTPS protocol, because the underlying // functions potentially restart the HTTPS server. - err = startMods() + err = startMods(web.logger) if err != nil { Context.firstRun = true copyInstallSettings(config, curConfig) diff --git a/internal/home/dns.go b/internal/home/dns.go index 53ea5247..9dd711f5 100644 --- a/internal/home/dns.go +++ b/internal/home/dns.go @@ -1,7 +1,9 @@ package home import ( + "context" "fmt" + "log/slog" "net" "net/netip" "net/url" @@ -19,6 +21,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/stats" "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/ameshkov/dnscrypt/v2" yaml "gopkg.in/yaml.v3" @@ -43,8 +46,8 @@ func onConfigModified() { // initDNS updates all the fields of the [Context] needed to initialize the DNS // server and initializes it at last. It also must not be called unless -// [config] and [Context] are initialized. -func initDNS() (err error) { +// [config] and [Context] are initialized. l must not be nil. +func initDNS(l *slog.Logger) (err error) { anonymizer := config.anonymizer() statsDir, querylogDir, err := checkStatsAndQuerylogDirs(&Context, config) @@ -53,6 +56,7 @@ func initDNS() (err error) { } statsConf := stats.Config{ + Logger: l.With(slogutil.KeyPrefix, "stats"), Filename: filepath.Join(statsDir, "stats.db"), Limit: config.Stats.Interval.Duration, ConfigModified: onConfigModified, @@ -113,13 +117,16 @@ func initDNS() (err error) { anonymizer, httpRegister, tlsConf, + l, ) } // initDNSServer initializes the [context.dnsServer]. To only use the internal -// proxy, none of the arguments are required, but tlsConf still must not be nil, -// in other cases all the arguments also must not be nil. It also must not be -// called unless [config] and [Context] are initialized. +// proxy, none of the arguments are required, but tlsConf and l still must not +// be nil, in other cases all the arguments also must not be nil. It also must +// not be called unless [config] and [Context] are initialized. +// +// TODO(e.burkov): Use [dnsforward.DNSCreateParams] as a parameter. func initDNSServer( filters *filtering.DNSFilter, sts stats.Interface, @@ -128,8 +135,10 @@ func initDNSServer( anonymizer *aghnet.IPMut, httpReg aghhttp.RegisterFunc, tlsConf *tlsConfigSettings, + l *slog.Logger, ) (err error) { Context.dnsServer, err = dnsforward.NewServer(dnsforward.DNSCreateParams{ + Logger: l, DNSFilter: filters, Stats: sts, QueryLog: qlog, @@ -406,9 +415,9 @@ func applyAdditionalFiltering(clientIP netip.Addr, clientID string, setts *filte setts.ClientIP = clientIP - c, ok := Context.clients.find(clientID) + c, ok := Context.clients.storage.Find(clientID) if !ok { - c, ok = Context.clients.find(clientIP.String()) + c, ok = Context.clients.storage.Find(clientIP.String()) if !ok { log.Debug("%s: no clients with ip %s and clientid %q", pref, clientIP, clientID) @@ -451,11 +460,15 @@ func startDNSServer() error { Context.filters.EnableFilters(false) - Context.clients.Start() - - err := Context.dnsServer.Start() + // TODO(s.chzhen): Pass context. + err := Context.clients.Start(context.TODO()) if err != nil { - return fmt.Errorf("couldn't start forwarding DNS server: %w", err) + return fmt.Errorf("starting clients container: %w", err) + } + + err = Context.dnsServer.Start() + if err != nil { + return fmt.Errorf("starting dns server: %w", err) } Context.filters.Start() @@ -492,7 +505,7 @@ func stopDNSServer() (err error) { return fmt.Errorf("stopping forwarding dns server: %w", err) } - err = Context.clients.close() + err = Context.clients.close(context.TODO()) if err != nil { return fmt.Errorf("closing clients container: %w", err) } diff --git a/internal/home/dns_internal_test.go b/internal/home/dns_internal_test.go index 4adaec81..d3712890 100644 --- a/internal/home/dns_internal_test.go +++ b/internal/home/dns_internal_test.go @@ -18,9 +18,8 @@ var testIPv4 = netip.AddrFrom4([4]byte{1, 2, 3, 4}) func newStorage(tb testing.TB, clients []*client.Persistent) (s *client.Storage) { tb.Helper() - s = client.NewStorage(&client.Config{ - AllowedTags: nil, - }) + s, err := client.NewStorage(&client.StorageConfig{}) + require.NoError(tb, err) for _, p := range clients { p.UID = client.MustNewUID() diff --git a/internal/home/home.go b/internal/home/home.go index fc64f376..69a67223 100644 --- a/internal/home/home.go +++ b/internal/home/home.go @@ -6,6 +6,7 @@ import ( "crypto/x509" "fmt" "io/fs" + "log/slog" "net/http" "net/netip" "net/url" @@ -38,6 +39,7 @@ import ( "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/hostsfile" "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/osutil" ) @@ -90,6 +92,8 @@ func (c *homeContext) getDataDir() string { } // Context - a global context object +// +// TODO(a.garipov): Refactor. var Context homeContext // Main is the entry point @@ -115,7 +119,7 @@ func Main(clientBuildFS fs.FS) { log.Info("Received signal %q", sig) switch sig { case syscall.SIGHUP: - Context.clients.reloadARP() + Context.clients.storage.ReloadARP() Context.tls.reload() default: cleanup(context.Background()) @@ -273,7 +277,7 @@ func setupOpts(opts options) (err error) { } // initContextClients initializes Context clients and related fields. -func initContextClients() (err error) { +func initContextClients(logger *slog.Logger) (err error) { err = setupDNSFilteringConf(config.Filtering) if err != nil { // Don't wrap the error, because it's informative enough as is. @@ -297,7 +301,7 @@ func initContextClients() (err error) { var arpDB arpdb.Interface if config.Clients.Sources.ARP { - arpDB = arpdb.New() + arpDB = arpdb.New(logger.With(slogutil.KeyError, "arpdb")) } return Context.clients.Init( @@ -482,7 +486,12 @@ func checkPorts() (err error) { return nil } -func initWeb(opts options, clientBuildFS fs.FS, upd *updater.Updater) (web *webAPI, err error) { +func initWeb( + opts options, + clientBuildFS fs.FS, + upd *updater.Updater, + l *slog.Logger, +) (web *webAPI, err error) { var clientFS fs.FS if opts.localFrontend { log.Info("warning: using local frontend files") @@ -524,7 +533,7 @@ func initWeb(opts options, clientBuildFS fs.FS, upd *updater.Updater) (web *webA serveHTTP3: config.DNS.ServeHTTP3, } - web = newWebAPI(webConf) + web = newWebAPI(webConf, l) if web == nil { return nil, fmt.Errorf("initializing web: %w", err) } @@ -547,10 +556,15 @@ func run(opts options, clientBuildFS fs.FS, done chan struct{}) { // Configure config filename. initConfigFilename(opts) + ls := getLogSettings(opts) + // Configure log level and output. - err = configureLogger(opts) + err = configureLogger(ls) fatalOnError(err) + // TODO(a.garipov): Use slog everywhere. + slogLogger := newSlogLogger(ls) + // Print the first message after logger is configured. log.Info(version.Full()) log.Debug("current working directory is %s", Context.workDir) @@ -569,7 +583,7 @@ func run(opts options, clientBuildFS fs.FS, done chan struct{}) { // data first, but also to avoid relying on automatic Go init() function. filtering.InitModule() - err = initContextClients() + err = initContextClients(slogLogger) fatalOnError(err) err = setupOpts(opts) @@ -604,7 +618,7 @@ func run(opts options, clientBuildFS fs.FS, done chan struct{}) { // TODO(e.burkov): This could be made earlier, probably as the option's // effect. - cmdlineUpdate(opts, upd) + cmdlineUpdate(opts, upd, slogLogger) if !Context.firstRun { // Save the updated config. @@ -632,11 +646,11 @@ func run(opts options, clientBuildFS fs.FS, done chan struct{}) { onConfigModified() } - Context.web, err = initWeb(opts, clientBuildFS, upd) + Context.web, err = initWeb(opts, clientBuildFS, upd, slogLogger) fatalOnError(err) if !Context.firstRun { - err = initDNS() + err = initDNS(slogLogger) fatalOnError(err) Context.tls.start() @@ -697,9 +711,10 @@ func (c *configuration) anonymizer() (ipmut *aghnet.IPMut) { return aghnet.NewIPMut(anonFunc) } -// startMods initializes and starts the DNS server after installation. -func startMods() (err error) { - err = initDNS() +// startMods initializes and starts the DNS server after installation. l must +// not be nil. +func startMods(l *slog.Logger) (err error) { + err = initDNS(l) if err != nil { return err } @@ -959,8 +974,8 @@ type jsonError struct { Message string `json:"message"` } -// cmdlineUpdate updates current application and exits. -func cmdlineUpdate(opts options, upd *updater.Updater) { +// cmdlineUpdate updates current application and exits. l must not be nil. +func cmdlineUpdate(opts options, upd *updater.Updater, l *slog.Logger) { if !opts.performUpdate { return } @@ -970,7 +985,7 @@ func cmdlineUpdate(opts options, upd *updater.Updater) { // // TODO(e.burkov): We could probably initialize the internal resolver // separately. - err := initDNSServer(nil, nil, nil, nil, nil, nil, &tlsConfigSettings{}) + err := initDNSServer(nil, nil, nil, nil, nil, nil, &tlsConfigSettings{}, l) fatalOnError(err) log.Info("cmdline update: performing update") diff --git a/internal/home/log.go b/internal/home/log.go index fd18d1ec..0b3a14a8 100644 --- a/internal/home/log.go +++ b/internal/home/log.go @@ -3,11 +3,13 @@ package home import ( "cmp" "fmt" + "log/slog" "path/filepath" "runtime" "github.com/AdguardTeam/AdGuardHome/internal/aghos" "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "gopkg.in/natefinch/lumberjack.v2" "gopkg.in/yaml.v3" ) @@ -16,10 +18,21 @@ import ( // for logger output. const configSyslog = "syslog" -// configureLogger configures logger level and output. -func configureLogger(opts options) (err error) { - ls := getLogSettings(opts) +// newSlogLogger returns new [*slog.Logger] configured with the given settings. +func newSlogLogger(ls *logSettings) (l *slog.Logger) { + if !ls.Enabled { + return slogutil.NewDiscardLogger() + } + return slogutil.New(&slogutil.Config{ + Format: slogutil.FormatAdGuardLegacy, + AddTimestamp: true, + Verbose: ls.Verbose, + }) +} + +// configureLogger configures logger level and output. +func configureLogger(ls *logSettings) (err error) { // Configure logger level. if !ls.Enabled { log.SetLevel(log.OFF) @@ -60,7 +73,7 @@ func configureLogger(opts options) (err error) { MaxAge: ls.MaxAge, }) - return nil + return err } // getLogSettings returns a log settings object properly initialized from opts. diff --git a/internal/home/middlewares.go b/internal/home/middlewares.go index c6297375..2a6c3a8e 100644 --- a/internal/home/middlewares.go +++ b/internal/home/middlewares.go @@ -5,12 +5,15 @@ import ( "net/http" "github.com/AdguardTeam/golibs/ioutil" + "github.com/c2h5oh/datasize" ) // middlerware is a wrapper function signature. type middleware func(http.Handler) http.Handler // withMiddlewares consequently wraps h with all the middlewares. +// +// TODO(e.burkov): Use [httputil.Wrap]. func withMiddlewares(h http.Handler, middlewares ...middleware) (wrapped http.Handler) { wrapped = h @@ -23,11 +26,11 @@ func withMiddlewares(h http.Handler, middlewares ...middleware) (wrapped http.Ha const ( // defaultReqBodySzLim is the default maximum request body size. - defaultReqBodySzLim = 64 * 1024 + defaultReqBodySzLim datasize.ByteSize = 64 * datasize.KB // largerReqBodySzLim is the maximum request body size for APIs expecting // larger requests. - largerReqBodySzLim = 4 * 1024 * 1024 + largerReqBodySzLim datasize.ByteSize = 4 * datasize.MB ) // expectsLargerRequests shows if this request should use a larger body size @@ -38,26 +41,28 @@ const ( // See https://github.com/AdguardTeam/AdGuardHome/issues/2666 and // https://github.com/AdguardTeam/AdGuardHome/issues/2675. func expectsLargerRequests(r *http.Request) (ok bool) { - m := r.Method - if m != http.MethodPost { + if r.Method != http.MethodPost { return false } - p := r.URL.Path - return p == "/control/access/set" || - p == "/control/filtering/set_rules" + switch r.URL.Path { + case "/control/access/set", "/control/filtering/set_rules": + return true + default: + return false + } } // limitRequestBody wraps underlying handler h, making it's request's body Read // method limited. func limitRequestBody(h http.Handler) (limited http.Handler) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - var szLim uint64 = defaultReqBodySzLim + szLim := defaultReqBodySzLim if expectsLargerRequests(r) { szLim = largerReqBodySzLim } - reader := ioutil.LimitReader(r.Body, szLim) + reader := ioutil.LimitReader(r.Body, szLim.Bytes()) // HTTP handlers aren't supposed to call r.Body.Close(), so just // replace the body in a clone. diff --git a/internal/home/middlewares_test.go b/internal/home/middlewares_test.go index 5393503f..0b8d7db3 100644 --- a/internal/home/middlewares_test.go +++ b/internal/home/middlewares_test.go @@ -14,29 +14,29 @@ import ( func TestLimitRequestBody(t *testing.T) { errReqLimitReached := &ioutil.LimitError{ - Limit: defaultReqBodySzLim, + Limit: defaultReqBodySzLim.Bytes(), } testCases := []struct { + wantErr error name string body string want []byte - wantErr error }{{ + wantErr: nil, name: "not_so_big", body: "somestr", want: []byte("somestr"), - wantErr: nil, }, { + wantErr: errReqLimitReached, name: "so_big", body: string(make([]byte, defaultReqBodySzLim+1)), want: make([]byte, defaultReqBodySzLim), - wantErr: errReqLimitReached, }, { + wantErr: nil, name: "empty", body: "", want: []byte(nil), - wantErr: nil, }} makeHandler := func(t *testing.T, err *error) http.HandlerFunc { diff --git a/internal/home/web.go b/internal/home/web.go index 3c403e4b..37f5a5dc 100644 --- a/internal/home/web.go +++ b/internal/home/web.go @@ -4,6 +4,7 @@ import ( "context" "crypto/tls" "io/fs" + "log/slog" "net/http" "net/netip" "runtime" @@ -16,7 +17,7 @@ import ( "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/netutil" - "github.com/AdguardTeam/golibs/pprofutil" + "github.com/AdguardTeam/golibs/netutil/httputil" "github.com/NYTimes/gziphandler" "github.com/quic-go/quic-go/http3" "golang.org/x/net/http2" @@ -90,17 +91,22 @@ type webAPI struct { // TODO(a.garipov): Refactor all these servers. httpServer *http.Server + // logger is a slog logger used in webAPI. It must not be nil. + logger *slog.Logger + // httpsServer is the server that handles HTTPS traffic. If it is not nil, // [Web.http3Server] must also not be nil. httpsServer httpsServer } -// newWebAPI creates a new instance of the web UI and API server. -func newWebAPI(conf *webConfig) (w *webAPI) { +// newWebAPI creates a new instance of the web UI and API server. l must not be +// nil. +func newWebAPI(conf *webConfig, l *slog.Logger) (w *webAPI) { log.Info("web: initializing") w = &webAPI{ - conf: conf, + conf: conf, + logger: l, } clientFS := http.FileServer(http.FS(conf.clientFS)) @@ -327,7 +333,7 @@ func startPprof(port uint16) { runtime.SetMutexProfileFraction(1) mux := http.NewServeMux() - pprofutil.RoutePprof(mux) + httputil.RoutePprof(mux) go func() { defer log.OnPanic("pprof server") diff --git a/internal/ipset/ipset.go b/internal/ipset/ipset.go index 44f519f1..839497df 100644 --- a/internal/ipset/ipset.go +++ b/internal/ipset/ipset.go @@ -2,6 +2,8 @@ package ipset import ( + "context" + "log/slog" "net" ) @@ -10,24 +12,33 @@ import ( // TODO(a.garipov): Perhaps generalize this into some kind of a NetFilter type, // since ipset is exclusive to Linux? type Manager interface { - Add(host string, ip4s, ip6s []net.IP) (n int, err error) + Add(ctx context.Context, host string, ip4s, ip6s []net.IP) (n int, err error) Close() (err error) } -// NewManager returns a new ipset manager. IPv4 addresses are added to an -// ipset with an ipv4 family; IPv6 addresses, to an ipv6 ipset. ipset must -// exist. +// Config is the configuration structure for the ipset manager. +type Config struct { + // Logger is used for logging the operation of the ipset manager. It must + // not be nil. + Logger *slog.Logger + + // Lines is the ipset configuration with the following syntax: + // + // DOMAIN[,DOMAIN].../IPSET_NAME[,IPSET_NAME]... + // + // Lines must not contain any blank lines or comments. + Lines []string +} + +// NewManager returns a new ipset manager. IPv4 addresses are added to an ipset +// with an ipv4 family; IPv6 addresses, to an ipv6 ipset. ipset must exist. // -// The syntax of the ipsetConf is: -// -// DOMAIN[,DOMAIN].../IPSET_NAME[,IPSET_NAME]... -// -// If ipsetConf is empty, msg and err are nil. The error's chain contains +// If conf.Lines is empty, mgr and err are nil. The error's chain contains // [errors.ErrUnsupported] if current OS is not supported. -func NewManager(ipsetConf []string) (mgr Manager, err error) { - if len(ipsetConf) == 0 { +func NewManager(ctx context.Context, conf *Config) (mgr Manager, err error) { + if len(conf.Lines) == 0 { return nil, nil } - return newManager(ipsetConf) + return newManager(ctx, conf) } diff --git a/internal/ipset/ipset_linux.go b/internal/ipset/ipset_linux.go index 12dcecea..1d15428e 100644 --- a/internal/ipset/ipset_linux.go +++ b/internal/ipset/ipset_linux.go @@ -4,14 +4,16 @@ package ipset import ( "bytes" + "context" "fmt" + "log/slog" "net" "strings" "sync" "github.com/AdguardTeam/golibs/container" "github.com/AdguardTeam/golibs/errors" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/digineo/go-ipset/v2" "github.com/mdlayher/netlink" "github.com/ti-mo/netfilter" @@ -34,8 +36,8 @@ import ( // resolved IP addresses. // newManager returns a new Linux ipset manager. -func newManager(ipsetConf []string) (set Manager, err error) { - return newManagerWithDialer(ipsetConf, defaultDial) +func newManager(ctx context.Context, conf *Config) (set Manager, err error) { + return newManagerWithDialer(ctx, conf, defaultDial) } // defaultDial is the default netfilter dialing function. @@ -180,6 +182,8 @@ type manager struct { nameToIpset map[string]props domainToIpsets map[string][]props + logger *slog.Logger + dial dialer // mu protects all properties below. @@ -254,7 +258,7 @@ func parseIpsetConfigLine(confStr string) (hosts, ipsetNames []string, err error // parseIpsetConfig parses the ipset configuration and stores ipsets. It // returns an error if the configuration can't be used. -func (m *manager) parseIpsetConfig(ipsetConf []string) (err error) { +func (m *manager) parseIpsetConfig(ctx context.Context, ipsetConf []string) (err error) { // The family doesn't seem to matter when we use a header query, so query // only the IPv4 one. // @@ -278,7 +282,7 @@ func (m *manager) parseIpsetConfig(ipsetConf []string) (err error) { } var ipsets []props - ipsets, err = m.ipsets(ipsetNames, currentlyKnown) + ipsets, err = m.ipsets(ctx, ipsetNames, currentlyKnown) if err != nil { return fmt.Errorf("getting ipsets from config line at idx %d: %w", i, err) } @@ -328,7 +332,11 @@ func (m *manager) ipsetProps(name string) (p props, err error) { // ipsets returns ipset properties of currently known ipsets. It also makes an // additional ipset header data query if needed. -func (m *manager) ipsets(names []string, currentlyKnown map[string]props) (sets []props, err error) { +func (m *manager) ipsets( + ctx context.Context, + names []string, + currentlyKnown map[string]props, +) (sets []props, err error) { for _, n := range names { p, ok := currentlyKnown[n] if !ok { @@ -336,10 +344,12 @@ func (m *manager) ipsets(names []string, currentlyKnown map[string]props) (sets } if p.family != netfilter.ProtoIPv4 && p.family != netfilter.ProtoIPv6 { - log.Debug("ipset: getting properties: %q %q unexpected ipset family %q", - p.name, - p.typeName, - p.family, + m.logger.DebugContext( + ctx, + "got unexpected ipset family while getting set properties", + "set_name", p.name, + "set_type", p.typeName, + "set_family", p.family, ) p, err = m.ipsetProps(n) @@ -357,7 +367,7 @@ func (m *manager) ipsets(names []string, currentlyKnown map[string]props) (sets // newManagerWithDialer returns a new Linux ipset manager using the provided // dialer. -func newManagerWithDialer(ipsetConf []string, dial dialer) (mgr Manager, err error) { +func newManagerWithDialer(ctx context.Context, conf *Config, dial dialer) (mgr Manager, err error) { defer func() { err = errors.Annotate(err, "ipset: %w") }() m := &manager{ @@ -366,6 +376,8 @@ func newManagerWithDialer(ipsetConf []string, dial dialer) (mgr Manager, err err nameToIpset: make(map[string]props), domainToIpsets: make(map[string][]props), + logger: conf.Logger, + dial: dial, addedIPs: container.NewMapSet[ipInIpsetEntry](), @@ -376,7 +388,7 @@ func newManagerWithDialer(ipsetConf []string, dial dialer) (mgr Manager, err err if errors.Is(err, unix.EPROTONOSUPPORT) { // The implementation doesn't support this protocol version. Just // issue a warning. - log.Info("ipset: dialing netfilter: warning: %s", err) + m.logger.WarnContext(ctx, "dialing netfilter", slogutil.KeyError, err) return nil, nil } @@ -384,12 +396,12 @@ func newManagerWithDialer(ipsetConf []string, dial dialer) (mgr Manager, err err return nil, fmt.Errorf("dialing netfilter: %w", err) } - err = m.parseIpsetConfig(ipsetConf) + err = m.parseIpsetConfig(ctx, conf.Lines) if err != nil { return nil, fmt.Errorf("getting ipsets: %w", err) } - log.Debug("ipset: initialized") + m.logger.DebugContext(ctx, "initialized") return m, nil } @@ -476,6 +488,7 @@ func (m *manager) addIPs(host string, set props, ips []net.IP) (n int, err error // addToSets adds the IP addresses to the corresponding ipset. func (m *manager) addToSets( + ctx context.Context, host string, ip4s []net.IP, ip6s []net.IP, @@ -498,7 +511,13 @@ func (m *manager) addToSets( return n, fmt.Errorf("%q %q unexpected family %q", set.name, set.typeName, set.family) } - log.Debug("ipset: added %d ips to set %q %q", nn, set.name, set.typeName) + m.logger.DebugContext( + ctx, + "added ips to set", + "ips_num", nn, + "set_name", set.name, + "set_type", set.typeName, + ) n += nn } @@ -507,7 +526,7 @@ func (m *manager) addToSets( } // Add implements the [Manager] interface for *manager. -func (m *manager) Add(host string, ip4s, ip6s []net.IP) (n int, err error) { +func (m *manager) Add(ctx context.Context, host string, ip4s, ip6s []net.IP) (n int, err error) { m.mu.Lock() defer m.mu.Unlock() @@ -516,9 +535,9 @@ func (m *manager) Add(host string, ip4s, ip6s []net.IP) (n int, err error) { return 0, nil } - log.Debug("ipset: found %d sets", len(sets)) + m.logger.DebugContext(ctx, "found sets", "set_num", len(sets)) - return m.addToSets(host, ip4s, ip6s, sets) + return m.addToSets(ctx, host, ip4s, ip6s, sets) } // Close implements the [Manager] interface for *manager. diff --git a/internal/ipset/ipset_linux_internal_test.go b/internal/ipset/ipset_linux_internal_test.go index 4d727ee7..632f0d0f 100644 --- a/internal/ipset/ipset_linux_internal_test.go +++ b/internal/ipset/ipset_linux_internal_test.go @@ -6,8 +6,11 @@ import ( "net" "strings" "testing" + "time" "github.com/AdguardTeam/golibs/errors" + "github.com/AdguardTeam/golibs/logutil/slogutil" + "github.com/AdguardTeam/golibs/testutil" "github.com/digineo/go-ipset/v2" "github.com/mdlayher/netlink" "github.com/stretchr/testify/assert" @@ -15,6 +18,9 @@ import ( "github.com/ti-mo/netfilter" ) +// testTimeout is a common timeout for tests and contexts. +const testTimeout = 1 * time.Second + // fakeConn is a fake ipsetConn for tests. type fakeConn struct { ipv4Header *ipset.HeaderPolicy @@ -58,7 +64,7 @@ func (c *fakeConn) listAll() (sets []props, err error) { } func TestManager_Add(t *testing.T) { - ipsetConf := []string{ + ipsetList := []string{ "example.com,example.net/ipv4set", "example.org,example.biz/ipv6set", } @@ -89,7 +95,11 @@ func TestManager_Add(t *testing.T) { }, nil } - m, err := newManagerWithDialer(ipsetConf, fakeDial) + conf := &Config{ + Logger: slogutil.NewDiscardLogger(), + Lines: ipsetList, + } + m, err := newManagerWithDialer(testutil.ContextWithTimeout(t, testTimeout), conf, fakeDial) require.NoError(t, err) ip4 := net.IP{1, 2, 3, 4} @@ -100,7 +110,7 @@ func TestManager_Add(t *testing.T) { 0x00, 0x00, 0x56, 0x78, } - n, err := m.Add("example.net", []net.IP{ip4}, nil) + n, err := m.Add(testutil.ContextWithTimeout(t, testTimeout), "example.net", []net.IP{ip4}, nil) require.NoError(t, err) assert.Equal(t, 1, n) @@ -110,7 +120,7 @@ func TestManager_Add(t *testing.T) { gotIP4 := ipv4Entries[0].IP.Value assert.Equal(t, ip4, gotIP4) - n, err = m.Add("example.biz", nil, []net.IP{ip6}) + n, err = m.Add(testutil.ContextWithTimeout(t, testTimeout), "example.biz", nil, []net.IP{ip6}) require.NoError(t, err) assert.Equal(t, 1, n) diff --git a/internal/ipset/ipset_others.go b/internal/ipset/ipset_others.go index 8b75912f..29038b9d 100644 --- a/internal/ipset/ipset_others.go +++ b/internal/ipset/ipset_others.go @@ -3,9 +3,11 @@ package ipset import ( + "context" + "github.com/AdguardTeam/AdGuardHome/internal/aghos" ) -func newManager(_ []string) (mgr Manager, err error) { +func newManager(_ context.Context, _ *Config) (mgr Manager, err error) { return nil, aghos.Unsupported("ipset") } diff --git a/internal/next/websvc/websvc.go b/internal/next/websvc/websvc.go index 2dc309d4..31dbbb65 100644 --- a/internal/next/websvc/websvc.go +++ b/internal/next/websvc/websvc.go @@ -24,7 +24,7 @@ import ( "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/mathutil" - "github.com/AdguardTeam/golibs/pprofutil" + "github.com/AdguardTeam/golibs/netutil/httputil" httptreemux "github.com/dimfeld/httptreemux/v5" ) @@ -107,7 +107,7 @@ func (svc *Service) setupPprof(c *PprofConfig) { runtime.SetMutexProfileFraction(1) pprofMux := http.NewServeMux() - pprofutil.RoutePprof(pprofMux) + httputil.RoutePprof(pprofMux) svc.pprofPort = c.Port addr := netip.AddrPortFrom(netip.AddrFrom4([4]byte{127, 0, 0, 1}), c.Port) diff --git a/internal/querylog/qlog.go b/internal/querylog/qlog.go index 73ac7e6a..c0b2edd1 100644 --- a/internal/querylog/qlog.go +++ b/internal/querylog/qlog.go @@ -7,9 +7,9 @@ import ( "sync" "time" - "github.com/AdguardTeam/AdGuardHome/internal/aghalg" "github.com/AdguardTeam/AdGuardHome/internal/aghnet" "github.com/AdguardTeam/AdGuardHome/internal/filtering" + "github.com/AdguardTeam/golibs/container" "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/timeutil" @@ -32,7 +32,7 @@ type queryLog struct { // buffer contains recent log entries. The entries in this buffer must not // be modified. - buffer *aghalg.RingBuffer[*logEntry] + buffer *container.RingBuffer[*logEntry] // logFile is the path to the log file. logFile string @@ -225,7 +225,7 @@ func (l *queryLog) Add(params *AddParams) { l.bufferLock.Lock() defer l.bufferLock.Unlock() - l.buffer.Append(entry) + l.buffer.Push(entry) if !l.flushPending && fileIsEnabled && l.buffer.Len() >= memSize { l.flushPending = true diff --git a/internal/querylog/querylog.go b/internal/querylog/querylog.go index 189f1f57..bccc264a 100644 --- a/internal/querylog/querylog.go +++ b/internal/querylog/querylog.go @@ -7,10 +7,10 @@ import ( "sync" "time" - "github.com/AdguardTeam/AdGuardHome/internal/aghalg" "github.com/AdguardTeam/AdGuardHome/internal/aghhttp" "github.com/AdguardTeam/AdGuardHome/internal/aghnet" "github.com/AdguardTeam/AdGuardHome/internal/filtering" + "github.com/AdguardTeam/golibs/container" "github.com/AdguardTeam/golibs/errors" "github.com/miekg/dns" ) @@ -153,7 +153,7 @@ func newQueryLog(conf Config) (l *queryLog, err error) { l = &queryLog{ findClient: findClient, - buffer: aghalg.NewRingBuffer[*logEntry](memSize), + buffer: container.NewRingBuffer[*logEntry](memSize), conf: &Config{}, confMu: &sync.RWMutex{}, diff --git a/internal/rdns/rdns.go b/internal/rdns/rdns.go index 7130ccf3..de84243c 100644 --- a/internal/rdns/rdns.go +++ b/internal/rdns/rdns.go @@ -2,11 +2,13 @@ package rdns import ( + "context" + "log/slog" "net/netip" "time" "github.com/AdguardTeam/golibs/errors" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/bluele/gcache" ) @@ -14,7 +16,7 @@ import ( type Interface interface { // Process makes rDNS request and returns domain name. changed indicates // that domain name was updated since last request. - Process(ip netip.Addr) (host string, changed bool) + Process(ctx context.Context, ip netip.Addr) (host string, changed bool) } // Empty is an empty [Interface] implementation which does nothing. @@ -24,7 +26,7 @@ type Empty struct{} var _ Interface = (*Empty)(nil) // Process implements the [Interface] interface for Empty. -func (Empty) Process(_ netip.Addr) (host string, changed bool) { +func (Empty) Process(_ context.Context, _ netip.Addr) (host string, changed bool) { return "", false } @@ -37,6 +39,10 @@ type Exchanger interface { // Config is the configuration structure for Default. type Config struct { + // Logger is used for logging the operation of the reverse DNS lookup + // queries. It must not be nil. + Logger *slog.Logger + // Exchanger resolves IP addresses to domain names. Exchanger Exchanger @@ -50,6 +56,10 @@ type Config struct { // Default is the default rDNS query processor. type Default struct { + // logger is used for logging the operation of the reverse DNS lookup + // queries. It must not be nil. + logger *slog.Logger + // cache is the cache containing IP addresses of clients. An active IP // address is resolved once again after it expires. If IP address couldn't // be resolved, it stays here for some time to prevent further attempts to @@ -66,6 +76,7 @@ type Default struct { // New returns a new default rDNS query processor. conf must not be nil. func New(conf *Config) (r *Default) { return &Default{ + logger: conf.Logger, cache: gcache.New(conf.CacheSize).LRU().Build(), exchanger: conf.Exchanger, cacheTTL: conf.CacheTTL, @@ -76,15 +87,15 @@ func New(conf *Config) (r *Default) { var _ Interface = (*Default)(nil) // Process implements the [Interface] interface for Default. -func (r *Default) Process(ip netip.Addr) (host string, changed bool) { - fromCache, expired := r.findInCache(ip) +func (r *Default) Process(ctx context.Context, ip netip.Addr) (host string, changed bool) { + fromCache, expired := r.findInCache(ctx, ip) if !expired { return fromCache, false } host, ttl, err := r.exchanger.Exchange(ip) if err != nil { - log.Debug("rdns: resolving %q: %s", ip, err) + r.logger.DebugContext(ctx, "resolving", "ip", ip, slogutil.KeyError, err) } ttl = max(ttl, r.cacheTTL) @@ -96,7 +107,7 @@ func (r *Default) Process(ip netip.Addr) (host string, changed bool) { err = r.cache.Set(ip, item) if err != nil { - log.Debug("rdns: cache: adding item %q: %s", ip, err) + r.logger.DebugContext(ctx, "adding item to cache", "key", ip, slogutil.KeyError, err) } // TODO(e.burkov): The name doesn't change if it's neither stored in cache @@ -106,22 +117,22 @@ func (r *Default) Process(ip netip.Addr) (host string, changed bool) { // findInCache finds domain name in the cache. expired is true if host is not // valid anymore. -func (r *Default) findInCache(ip netip.Addr) (host string, expired bool) { +func (r *Default) findInCache(ctx context.Context, ip netip.Addr) (host string, expired bool) { val, err := r.cache.Get(ip) if err != nil { if !errors.Is(err, gcache.KeyNotFoundError) { - log.Debug("rdns: cache: retrieving %q: %s", ip, err) + r.logger.DebugContext( + ctx, + "retrieving item from cache", + "key", ip, + slogutil.KeyError, err, + ) } return "", true } - item, ok := val.(*cacheItem) - if !ok { - log.Debug("rdns: cache: %q bad type %T", ip, val) - - return "", true - } + item := val.(*cacheItem) return item.host, time.Now().After(item.expiry) } diff --git a/internal/rdns/rdns_test.go b/internal/rdns/rdns_test.go index 0db13728..f0b27ed8 100644 --- a/internal/rdns/rdns_test.go +++ b/internal/rdns/rdns_test.go @@ -8,10 +8,14 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghtest" "github.com/AdguardTeam/AdGuardHome/internal/rdns" "github.com/AdguardTeam/golibs/netutil" + "github.com/AdguardTeam/golibs/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) +// testTimeout is a common timeout for tests and contexts. +const testTimeout = 1 * time.Second + func TestDefault_Process(t *testing.T) { ip1 := netip.MustParseAddr("1.2.3.4") revAddr1, err := netutil.IPToReversedAddr(ip1.AsSlice()) @@ -71,14 +75,14 @@ func TestDefault_Process(t *testing.T) { Exchanger: &aghtest.Exchanger{OnExchange: onExchange}, }) - got, changed := r.Process(tc.addr) + got, changed := r.Process(testutil.ContextWithTimeout(t, testTimeout), tc.addr) require.True(t, changed) assert.Equal(t, tc.want, got) assert.Equal(t, 1, hit) // From cache. - got, changed = r.Process(tc.addr) + got, changed = r.Process(testutil.ContextWithTimeout(t, testTimeout), tc.addr) require.False(t, changed) assert.Equal(t, tc.want, got) @@ -101,7 +105,7 @@ func TestDefault_Process(t *testing.T) { Exchanger: zeroTTLExchanger, }) - got, changed := r.Process(ip1) + got, changed := r.Process(testutil.ContextWithTimeout(t, testTimeout), ip1) require.True(t, changed) assert.Equal(t, revAddr1, got) @@ -109,14 +113,15 @@ func TestDefault_Process(t *testing.T) { return revAddr2, time.Hour, nil } + ctx := testutil.ContextWithTimeout(t, testTimeout) require.EventuallyWithT(t, func(t *assert.CollectT) { - got, changed = r.Process(ip1) + got, changed = r.Process(ctx, ip1) assert.True(t, changed) assert.Equal(t, revAddr2, got) }, 2*cacheTTL, time.Millisecond*100) assert.Never(t, func() (changed bool) { - _, changed = r.Process(ip1) + _, changed = r.Process(testutil.ContextWithTimeout(t, testTimeout), ip1) return changed }, 2*cacheTTL, time.Millisecond*100) diff --git a/internal/stats/http.go b/internal/stats/http.go index faec0d14..7415e0db 100644 --- a/internal/stats/http.go +++ b/internal/stats/http.go @@ -10,7 +10,6 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghalg" "github.com/AdguardTeam/AdGuardHome/internal/aghhttp" "github.com/AdguardTeam/AdGuardHome/internal/aghnet" - "github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/timeutil" ) @@ -51,6 +50,8 @@ type StatsResp struct { func (s *StatsCtx) handleStats(w http.ResponseWriter, r *http.Request) { start := time.Now() + ctx := r.Context() + var ( resp *StatsResp ok bool @@ -62,12 +63,17 @@ func (s *StatsCtx) handleStats(w http.ResponseWriter, r *http.Request) { resp, ok = s.getData(uint32(s.limit.Hours())) }() - log.Debug("stats: prepared data in %v", time.Since(start)) + s.logger.DebugContext( + ctx, + "prepared data", + "elapsed", timeutil.Duration{Duration: time.Since(start)}, + ) if !ok { // Don't bring the message to the lower case since it's a part of UI // text for the moment. - aghhttp.Error(r, w, http.StatusInternalServerError, "Couldn't get statistics data") + const msg = "Couldn't get statistics data" + aghhttp.ErrorAndLog(ctx, s.logger, r, w, http.StatusInternalServerError, msg) return } @@ -146,16 +152,18 @@ func (s *StatsCtx) handleGetStatsConfig(w http.ResponseWriter, r *http.Request) // // Deprecated: Remove it when migration to the new API is over. func (s *StatsCtx) handleStatsConfig(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + reqData := configResp{} err := json.NewDecoder(r.Body).Decode(&reqData) if err != nil { - aghhttp.Error(r, w, http.StatusBadRequest, "json decode: %s", err) + aghhttp.ErrorAndLog(ctx, s.logger, r, w, http.StatusBadRequest, "json decode: %s", err) return } if !checkInterval(reqData.IntervalDays) { - aghhttp.Error(r, w, http.StatusBadRequest, "Unsupported interval") + aghhttp.ErrorAndLog(ctx, s.logger, r, w, http.StatusBadRequest, "Unsupported interval") return } @@ -173,17 +181,19 @@ func (s *StatsCtx) handleStatsConfig(w http.ResponseWriter, r *http.Request) { // handlePutStatsConfig is the handler for the PUT /control/stats/config/update // HTTP API. func (s *StatsCtx) handlePutStatsConfig(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + reqData := getConfigResp{} err := json.NewDecoder(r.Body).Decode(&reqData) if err != nil { - aghhttp.Error(r, w, http.StatusBadRequest, "json decode: %s", err) + aghhttp.ErrorAndLog(ctx, s.logger, r, w, http.StatusBadRequest, "json decode: %s", err) return } engine, err := aghnet.NewIgnoreEngine(reqData.Ignored) if err != nil { - aghhttp.Error(r, w, http.StatusUnprocessableEntity, "ignored: %s", err) + aghhttp.ErrorAndLog(ctx, s.logger, r, w, http.StatusUnprocessableEntity, "ignored: %s", err) return } @@ -191,13 +201,21 @@ func (s *StatsCtx) handlePutStatsConfig(w http.ResponseWriter, r *http.Request) ivl := time.Duration(reqData.Interval) * time.Millisecond err = validateIvl(ivl) if err != nil { - aghhttp.Error(r, w, http.StatusUnprocessableEntity, "unsupported interval: %s", err) + aghhttp.ErrorAndLog( + ctx, + s.logger, + r, + w, + http.StatusUnprocessableEntity, + "unsupported interval: %s", + err, + ) return } if reqData.Enabled == aghalg.NBNull { - aghhttp.Error(r, w, http.StatusUnprocessableEntity, "enabled is null") + aghhttp.ErrorAndLog(ctx, s.logger, r, w, http.StatusUnprocessableEntity, "enabled is null") return } @@ -216,7 +234,15 @@ func (s *StatsCtx) handlePutStatsConfig(w http.ResponseWriter, r *http.Request) func (s *StatsCtx) handleStatsReset(w http.ResponseWriter, r *http.Request) { err := s.clear() if err != nil { - aghhttp.Error(r, w, http.StatusInternalServerError, "stats: %s", err) + aghhttp.ErrorAndLog( + r.Context(), + s.logger, + r, + w, + http.StatusInternalServerError, + "stats: %s", + err, + ) } } diff --git a/internal/stats/http_test.go b/internal/stats/http_test.go index 7e358a03..b53668d6 100644 --- a/internal/stats/http_test.go +++ b/internal/stats/http_test.go @@ -10,6 +10,7 @@ import ( "time" "github.com/AdguardTeam/AdGuardHome/internal/aghalg" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/AdguardTeam/golibs/timeutil" "github.com/stretchr/testify/assert" @@ -24,6 +25,7 @@ func TestHandleStatsConfig(t *testing.T) { ) conf := Config{ + Logger: slogutil.NewDiscardLogger(), UnitID: func() (id uint32) { return 0 }, ConfigModified: func() {}, ShouldCountClient: func([]string) bool { return true }, diff --git a/internal/stats/stats.go b/internal/stats/stats.go index e9533ca2..c6de4c66 100644 --- a/internal/stats/stats.go +++ b/internal/stats/stats.go @@ -3,8 +3,10 @@ package stats import ( + "context" "fmt" "io" + "log/slog" "net/netip" "os" "sync" @@ -14,7 +16,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghhttp" "github.com/AdguardTeam/AdGuardHome/internal/aghnet" "github.com/AdguardTeam/golibs/errors" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/timeutil" "go.etcd.io/bbolt" ) @@ -43,6 +45,10 @@ func validateIvl(ivl time.Duration) (err error) { // // Do not alter any fields of this structure after using it. type Config struct { + // Logger is used for logging the operation of the statistics management. + // It must not be nil. + Logger *slog.Logger + // UnitID is the function to generate the identifier for current unit. If // nil, the default function is used, see newUnitID. UnitID UnitIDGenFunc @@ -96,6 +102,10 @@ type Interface interface { // StatsCtx collects the statistics and flushes it to the database. Its default // flushing interval is one hour. type StatsCtx struct { + // logger is used for logging the operation of the statistics management. + // It must not be nil. + logger *slog.Logger + // currMu protects curr. currMu *sync.RWMutex // curr is the actual statistics collection result. @@ -150,6 +160,7 @@ func New(conf Config) (s *StatsCtx, err error) { } s = &StatsCtx{ + logger: conf.Logger, currMu: &sync.RWMutex{}, httpRegister: conf.HTTPRegister, configModified: conf.ConfigModified, @@ -178,21 +189,21 @@ func New(conf Config) (s *StatsCtx, err error) { tx, err := s.db.Load().Begin(true) if err != nil { - return nil, fmt.Errorf("stats: opening a transaction: %w", err) + return nil, fmt.Errorf("opening a transaction: %w", err) } - deleted := deleteOldUnits(tx, id-uint32(s.limit.Hours())-1) - udb = loadUnitFromDB(tx, id) + deleted := s.deleteOldUnits(tx, id-uint32(s.limit.Hours())-1) + udb = s.loadUnitFromDB(tx, id) err = finishTxn(tx, deleted > 0) if err != nil { - log.Error("stats: %s", err) + s.logger.Error("finishing transacation", slogutil.KeyError, err) } s.curr = newUnit(id) s.curr.deserialize(udb) - log.Debug("stats: initialized") + s.logger.Debug("initialized") return s, nil } @@ -228,8 +239,6 @@ func (s *StatsCtx) Start() { // Close implements the [io.Closer] interface for *StatsCtx. func (s *StatsCtx) Close() (err error) { - defer func() { err = errors.Annotate(err, "stats: closing: %w") }() - db := s.db.Swap(nil) if db == nil { return nil @@ -237,7 +246,7 @@ func (s *StatsCtx) Close() (err error) { defer func() { cerr := db.Close() if cerr == nil { - log.Debug("stats: database closed") + s.logger.Debug("database closed") } err = errors.WithDeferred(err, cerr) @@ -254,7 +263,7 @@ func (s *StatsCtx) Close() (err error) { udb := s.curr.serialize() - return udb.flushUnitToDB(tx, s.curr.id) + return s.flushUnitToDB(udb, tx, s.curr.id) } // Update implements the [Interface] interface for *StatsCtx. e must not be @@ -269,7 +278,7 @@ func (s *StatsCtx) Update(e *Entry) { err := e.validate() if err != nil { - log.Debug("stats: updating: validating entry: %s", err) + s.logger.Debug("validating entry", slogutil.KeyError, err) return } @@ -278,7 +287,7 @@ func (s *StatsCtx) Update(e *Entry) { defer s.currMu.Unlock() if s.curr == nil { - log.Error("stats: current unit is nil") + s.logger.Error("current unit is nil") return } @@ -333,8 +342,8 @@ func (s *StatsCtx) TopClientsIP(maxCount uint) (ips []netip.Addr) { // deleteOldUnits walks the buckets available to tx and deletes old units. It // returns the number of deletions performed. -func deleteOldUnits(tx *bbolt.Tx, firstID uint32) (deleted int) { - log.Debug("stats: deleting old units until id %d", firstID) +func (s *StatsCtx) deleteOldUnits(tx *bbolt.Tx, firstID uint32) (deleted int) { + s.logger.Debug("deleting old units up to", "unit", firstID) // TODO(a.garipov): See if this is actually necessary. Looks like a rather // bizarre solution. @@ -348,12 +357,12 @@ func deleteOldUnits(tx *bbolt.Tx, firstID uint32) (deleted int) { err = tx.DeleteBucket(name) if err != nil { - log.Debug("stats: deleting bucket: %s", err) + s.logger.Debug("deleting bucket", slogutil.KeyError, err) return nil } - log.Debug("stats: deleted unit %d (name %x)", nameID, name) + s.logger.Debug("deleted unit", "name_id", nameID, "name", fmt.Sprintf("%x", name)) deleted++ @@ -362,7 +371,7 @@ func deleteOldUnits(tx *bbolt.Tx, firstID uint32) (deleted int) { err := tx.ForEach(walk) if err != nil && !errors.Is(err, errStop) { - log.Debug("stats: deleting units: %s", err) + s.logger.Debug("deleting units", slogutil.KeyError, err) } return deleted @@ -371,20 +380,29 @@ func deleteOldUnits(tx *bbolt.Tx, firstID uint32) (deleted int) { // openDB returns an error if the database can't be opened from the specified // file. It's safe for concurrent use. func (s *StatsCtx) openDB() (err error) { - log.Debug("stats: opening database") + s.logger.Debug("opening database") var db *bbolt.DB db, err = bbolt.Open(s.filename, 0o644, nil) if err != nil { if err.Error() == "invalid argument" { - log.Error("AdGuard Home cannot be initialized due to an incompatible file system.\nPlease read the explanation here: https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#limitations") + const lines = `AdGuard Home cannot be initialized due to an incompatible file system. +Please read the explanation here: https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#limitations` + + // TODO(s.chzhen): Use passed context. + slogutil.PrintLines( + context.TODO(), + s.logger, + slog.LevelError, + "opening database", + lines, + ) } return err } - // Use defer to unlock the mutex as soon as possible. - defer log.Debug("stats: database opened") + defer s.logger.Debug("database opened") s.db.Store(db) @@ -424,34 +442,37 @@ func (s *StatsCtx) flushDB(id, limit uint32, ptr *unit) (cont bool, sleepFor tim isCommitable := true tx, err := db.Begin(true) if err != nil { - log.Error("stats: opening transaction: %s", err) + s.logger.Error("opening transaction", slogutil.KeyError, err) return true, 0 } defer func() { if err = finishTxn(tx, isCommitable); err != nil { - log.Error("stats: %s", err) + s.logger.Error("finishing transaction", slogutil.KeyError, err) } }() s.curr = newUnit(id) - flushErr := ptr.serialize().flushUnitToDB(tx, ptr.id) + udb := ptr.serialize() + flushErr := s.flushUnitToDB(udb, tx, ptr.id) if flushErr != nil { - log.Error("stats: flushing unit: %s", flushErr) + s.logger.Error("flushing unit", slogutil.KeyError, flushErr) isCommitable = false } delErr := tx.DeleteBucket(idToUnitName(id - limit)) + if delErr != nil { // TODO(e.burkov): Improve the algorithm of deleting the oldest bucket // to avoid the error. - if errors.Is(delErr, bbolt.ErrBucketNotFound) { - log.Debug("stats: warning: deleting unit: %s", delErr) - } else { + lvl := slog.LevelWarn + if !errors.Is(delErr, bbolt.ErrBucketNotFound) { isCommitable = false - log.Error("stats: deleting unit: %s", delErr) + lvl = slog.LevelError } + + s.logger.Log(context.TODO(), lvl, "deleting bucket", slogutil.KeyError, delErr) } return true, 0 @@ -467,7 +488,7 @@ func (s *StatsCtx) periodicFlush() { cont, sleepFor = s.flush() } - log.Debug("periodic flushing finished") + s.logger.Debug("periodic flushing finished") } // setLimit sets the limit. s.lock is expected to be locked. @@ -477,16 +498,16 @@ func (s *StatsCtx) setLimit(limit time.Duration) { if limit != 0 { s.enabled = true s.limit = limit - log.Debug("stats: set limit: %d days", limit/timeutil.Day) + s.logger.Debug("setting limit in days", "num", limit/timeutil.Day) return } s.enabled = false - log.Debug("stats: disabled") + s.logger.Debug("disabled") if err := s.clear(); err != nil { - log.Error("stats: %s", err) + s.logger.Error("clearing", slogutil.KeyError, err) } } @@ -499,7 +520,7 @@ func (s *StatsCtx) clear() (err error) { var tx *bbolt.Tx tx, err = db.Begin(true) if err != nil { - log.Error("stats: opening a transaction: %s", err) + s.logger.Error("opening transaction", slogutil.KeyError, err) } else if err = finishTxn(tx, false); err != nil { // Don't wrap the error since it's informative enough as is. return err @@ -513,21 +534,21 @@ func (s *StatsCtx) clear() (err error) { } // All active transactions are now closed. - log.Debug("stats: database closed") + s.logger.Debug("database closed") } err = os.Remove(s.filename) if err != nil { - log.Error("stats: %s", err) + s.logger.Error("removing", slogutil.KeyError, err) } err = s.openDB() if err != nil { - log.Error("stats: opening database: %s", err) + s.logger.Error("opening database", slogutil.KeyError, err) } // Use defer to unlock the mutex as soon as possible. - defer log.Debug("stats: cleared") + defer s.logger.Debug("cleared") s.currMu.Lock() defer s.currMu.Unlock() @@ -548,7 +569,7 @@ func (s *StatsCtx) loadUnits(limit uint32) (units []*unitDB, curID uint32) { // taken into account. tx, err := db.Begin(true) if err != nil { - log.Error("stats: opening transaction: %s", err) + s.logger.Error("opening transaction", slogutil.KeyError, err) return nil, 0 } @@ -568,7 +589,7 @@ func (s *StatsCtx) loadUnits(limit uint32) (units []*unitDB, curID uint32) { units = make([]*unitDB, 0, limit) firstID := curID - limit + 1 for i := firstID; i != curID; i++ { - u := loadUnitFromDB(tx, i) + u := s.loadUnitFromDB(tx, i) if u == nil { u = &unitDB{NResult: make([]uint64, resultLast)} } @@ -577,7 +598,7 @@ func (s *StatsCtx) loadUnits(limit uint32) (units []*unitDB, curID uint32) { err = finishTxn(tx, false) if err != nil { - log.Error("stats: %s", err) + s.logger.Error("finishing transaction", slogutil.KeyError, err) } if cur != nil { @@ -585,7 +606,8 @@ func (s *StatsCtx) loadUnits(limit uint32) (units []*unitDB, curID uint32) { } if unitsLen := len(units); unitsLen != int(limit) { - log.Fatalf("loaded %d units whilst the desired number is %d", unitsLen, limit) + // Should not happen. + panic(fmt.Errorf("loaded %d units when the desired number is %d", unitsLen, limit)) } return units, curID diff --git a/internal/stats/stats_internal_test.go b/internal/stats/stats_internal_test.go index 3423c7ad..e7ed446a 100644 --- a/internal/stats/stats_internal_test.go +++ b/internal/stats/stats_internal_test.go @@ -8,6 +8,7 @@ import ( "testing" "time" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/AdguardTeam/golibs/timeutil" "github.com/stretchr/testify/assert" @@ -18,6 +19,7 @@ func TestStats_races(t *testing.T) { var r uint32 idGen := func() (id uint32) { return atomic.LoadUint32(&r) } conf := Config{ + Logger: slogutil.NewDiscardLogger(), ShouldCountClient: func([]string) bool { return true }, UnitID: idGen, Filename: filepath.Join(t.TempDir(), "./stats.db"), @@ -94,6 +96,7 @@ func TestStatsCtx_FillCollectedStats_daily(t *testing.T) { ) s, err := New(Config{ + Logger: slogutil.NewDiscardLogger(), ShouldCountClient: func([]string) bool { return true }, Filename: filepath.Join(t.TempDir(), "./stats.db"), Limit: time.Hour, @@ -151,6 +154,7 @@ func TestStatsCtx_DataFromUnits_month(t *testing.T) { const hoursInMonth = 720 s, err := New(Config{ + Logger: slogutil.NewDiscardLogger(), ShouldCountClient: func([]string) bool { return true }, Filename: filepath.Join(t.TempDir(), "./stats.db"), Limit: time.Hour, diff --git a/internal/stats/stats_test.go b/internal/stats/stats_test.go index 2f7c526a..dbf857d6 100644 --- a/internal/stats/stats_test.go +++ b/internal/stats/stats_test.go @@ -13,6 +13,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghnet" "github.com/AdguardTeam/AdGuardHome/internal/stats" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/testutil" "github.com/AdguardTeam/golibs/timeutil" @@ -21,10 +22,6 @@ import ( "github.com/stretchr/testify/require" ) -func TestMain(m *testing.M) { - testutil.DiscardLogOutput(m) -} - // constUnitID is the UnitIDGenFunc which always return 0. func constUnitID() (id uint32) { return 0 } @@ -55,6 +52,7 @@ func TestStats(t *testing.T) { handlers := map[string]http.Handler{} conf := stats.Config{ + Logger: slogutil.NewDiscardLogger(), ShouldCountClient: func([]string) bool { return true }, Filename: filepath.Join(t.TempDir(), "stats.db"), Limit: timeutil.Day, @@ -171,6 +169,7 @@ func TestLargeNumbers(t *testing.T) { handlers := map[string]http.Handler{} conf := stats.Config{ + Logger: slogutil.NewDiscardLogger(), ShouldCountClient: func([]string) bool { return true }, Filename: filepath.Join(t.TempDir(), "stats.db"), Limit: timeutil.Day, @@ -222,6 +221,7 @@ func TestShouldCount(t *testing.T) { require.NoError(t, err) s, err := stats.New(stats.Config{ + Logger: slogutil.NewDiscardLogger(), Enabled: true, Filename: filepath.Join(t.TempDir(), "stats.db"), Limit: timeutil.Day, diff --git a/internal/stats/unit.go b/internal/stats/unit.go index 621f1cda..e9aeb87b 100644 --- a/internal/stats/unit.go +++ b/internal/stats/unit.go @@ -10,7 +10,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghnet" "github.com/AdguardTeam/golibs/errors" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "go.etcd.io/bbolt" "golang.org/x/exp/maps" ) @@ -277,13 +277,14 @@ func (u *unit) serialize() (udb *unitDB) { } } -func loadUnitFromDB(tx *bbolt.Tx, id uint32) (udb *unitDB) { +// loadUnitFromDB loads unit by id from the database. +func (s *StatsCtx) loadUnitFromDB(tx *bbolt.Tx, id uint32) (udb *unitDB) { bkt := tx.Bucket(idToUnitName(id)) if bkt == nil { return nil } - log.Tracef("Loading unit %d", id) + s.logger.Debug("loading unit", "id", id) var buf bytes.Buffer buf.Write(bkt.Get([]byte{0})) @@ -291,7 +292,7 @@ func loadUnitFromDB(tx *bbolt.Tx, id uint32) (udb *unitDB) { err := gob.NewDecoder(&buf).Decode(udb) if err != nil { - log.Error("gob Decode: %s", err) + s.logger.Error("gob decode", slogutil.KeyError, err) return nil } @@ -339,8 +340,8 @@ func (u *unit) add(e *Entry) { } // flushUnitToDB puts udb to the database at id. -func (udb *unitDB) flushUnitToDB(tx *bbolt.Tx, id uint32) (err error) { - log.Debug("stats: flushing unit with id %d and total of %d", id, udb.NTotal) +func (s *StatsCtx) flushUnitToDB(udb *unitDB, tx *bbolt.Tx, id uint32) (err error) { + s.logger.Debug("flushing unit", "id", id, "req_num", udb.NTotal) bkt, err := tx.CreateBucketIfNotExists(idToUnitName(id)) if err != nil { diff --git a/internal/tools/doc.go b/internal/tools/doc.go deleted file mode 100644 index 422b3fef..00000000 --- a/internal/tools/doc.go +++ /dev/null @@ -1,5 +0,0 @@ -// Package tools and its main module are a nested internal module containing our -// development tool dependencies. -// -// See https://github.com/golang/go/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module. -package tools diff --git a/internal/tools/go.mod b/internal/tools/go.mod index 8376a908..597d929c 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -1,6 +1,6 @@ module github.com/AdguardTeam/AdGuardHome/internal/tools -go 1.22.4 +go 1.23.1 require ( github.com/fzipp/gocyclo v0.6.0 @@ -8,28 +8,58 @@ require ( github.com/gordonklaus/ineffassign v0.1.0 github.com/kisielk/errcheck v1.7.0 github.com/kyoh86/looppointer v0.2.1 - github.com/securego/gosec/v2 v2.20.0 - github.com/uudashr/gocognit v1.1.2 - golang.org/x/tools v0.22.0 - golang.org/x/vuln v1.1.2 - honnef.co/go/tools v0.4.7 - mvdan.cc/gofumpt v0.6.0 - mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f + github.com/securego/gosec/v2 v2.21.4 + github.com/uudashr/gocognit v1.1.3 + golang.org/x/tools v0.25.0 + golang.org/x/vuln v1.1.3 + honnef.co/go/tools v0.5.1 + mvdan.cc/gofumpt v0.7.0 + mvdan.cc/unparam v0.0.0-20240917084806-57a3b4290ba3 ) require ( - github.com/BurntSushi/toml v1.4.0 // indirect + cloud.google.com/go v0.115.1 // indirect + cloud.google.com/go/ai v0.8.2 // indirect + cloud.google.com/go/auth v0.9.5 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect + cloud.google.com/go/compute/metadata v0.5.2 // indirect + cloud.google.com/go/longrunning v0.6.1 // indirect + github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect github.com/ccojocar/zxcvbn-go v1.0.2 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/google/generative-ai-go v0.18.0 // indirect github.com/google/go-cmp v0.6.0 // indirect + github.com/google/s2a-go v0.1.8 // indirect github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect + github.com/googleapis/gax-go/v2 v2.13.0 // indirect github.com/gookit/color v1.5.4 // indirect github.com/kyoh86/nolint v0.0.1 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect - golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect - golang.org/x/exp/typeparams v0.0.0-20240613232115-7f521ea00fb8 // indirect - golang.org/x/mod v0.18.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/telemetry v0.0.0-20240701175443-4e29c7872ac1 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect + go.opentelemetry.io/otel/metric v1.30.0 // indirect + go.opentelemetry.io/otel/trace v1.30.0 // indirect + golang.org/x/crypto v0.27.0 // indirect + golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect + golang.org/x/exp/typeparams v0.0.0-20240909161429-701f63a606c0 // indirect + golang.org/x/mod v0.21.0 // indirect + golang.org/x/net v0.29.0 // indirect + golang.org/x/oauth2 v0.23.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/telemetry v0.0.0-20240927214544-e9e6960092dd // indirect + golang.org/x/text v0.18.0 // indirect + golang.org/x/time v0.6.0 // indirect + google.golang.org/api v0.199.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240930140551-af27646dc61f // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f // indirect + google.golang.org/grpc v1.67.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/internal/tools/go.sum b/internal/tools/go.sum index 486bb004..2415c9f0 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -1,29 +1,87 @@ -github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= -github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= +cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc= +cloud.google.com/go/ai v0.8.2 h1:LEaQwqBv+k2ybrcdTtCTc9OPZXoEdcQaGrfvDYS6Bnk= +cloud.google.com/go/ai v0.8.2/go.mod h1:Wb3EUUGWwB6yHBaUf/+oxUq/6XbCaU1yh0GrwUS8lr4= +cloud.google.com/go/auth v0.9.5 h1:4CTn43Eynw40aFVr3GpPqsQponx2jv0BQpjvajsbbzw= +cloud.google.com/go/auth v0.9.5/go.mod h1:Xo0n7n66eHyOWWCnitop6870Ilwo3PiZyodVkkH1xWM= +cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= +cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= +cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= +cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= +cloud.google.com/go/longrunning v0.6.1 h1:lOLTFxYpr8hcRtcwWir5ITh1PAKUD/sG2lKrTSYjyMc= +cloud.google.com/go/longrunning v0.6.1/go.mod h1:nHISoOZpBcmlwbJmiVk5oDRz0qG/ZxPynEGs1iZ79s0= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg= github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= -github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= +github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golangci/misspell v0.6.0 h1:JCle2HUTNWirNlDIAUO44hUsKhOFqGPoC4LZxlaSXDs= github.com/golangci/misspell v0.6.0/go.mod h1:keMNyY6R9isGaSAu+4Q8NMBwMPkh15Gtc8UCVoDtAWo= +github.com/google/generative-ai-go v0.18.0 h1:6ybg9vOCLcI/UpBBYXOTVgvKmcUKFRNj+2Cj3GnebSo= +github.com/google/generative-ai-go v0.18.0/go.mod h1:JYolL13VG7j79kM5BtHz4qwONHkeJQzOCkKXnpqtS/E= github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786 h1:rcv+Ippz6RAtvaGgKxc+8FQIpxHgsF+HBzPyYL2cyVU= github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786/go.mod h1:apVn/GCasLZUVpAJ6oWAuyP7Ne7CEsQbTnc0plM3m+o= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg= -github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA= +github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= +github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= +github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= +github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s= @@ -38,91 +96,157 @@ github.com/kyoh86/looppointer v0.2.1 h1:Jx9fnkBj/JrIryBLMTYNTj9rvc2SrPS98Dg0w7fx github.com/kyoh86/looppointer v0.2.1/go.mod h1:q358WcM8cMWU+5vzqukvaZtnJi1kw/MpRHQm3xvTrjw= github.com/kyoh86/nolint v0.0.1 h1:GjNxDEkVn2wAxKHtP7iNTrRxytRZ1wXxLV5j4XzGfRU= github.com/kyoh86/nolint v0.0.1/go.mod h1:1ZiZZ7qqrZ9dZegU96phwVcdQOMKIqRzFJL3ewq9gtI= -github.com/onsi/ginkgo/v2 v2.17.2 h1:7eMhcy3GimbsA3hEnVKdw/PQM9XN9krpKVXsZdph0/g= -github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= -github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= -github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= +github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= +github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= +github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8= +github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/securego/gosec/v2 v2.20.0 h1:z/d5qp1niWa2avgFyUIglYTYYuGq2LrJwNj1HRVXsqc= -github.com/securego/gosec/v2 v2.20.0/go.mod h1:hkiArbBZLwK1cehBcg3oFWUlYPWTBffPwwJVWChu83o= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/uudashr/gocognit v1.1.2 h1:l6BAEKJqQH2UpKAPKdMfZf5kE4W/2xk8pfU1OVLvniI= -github.com/uudashr/gocognit v1.1.2/go.mod h1:aAVdLURqcanke8h3vg35BC++eseDm66Z7KmchI5et4k= +github.com/securego/gosec/v2 v2.21.4 h1:Le8MSj0PDmOnHJgUATjD96PaXRvCpKC+DGJvwyy0Mlk= +github.com/securego/gosec/v2 v2.21.4/go.mod h1:Jtb/MwRQfRxCXyCm1rfM1BEiiiTfUOdyzzAhlr6lUTA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/uudashr/gocognit v1.1.3 h1:l+a111VcDbKfynh+airAy/DJQKaXh2m9vkoysMPSZyM= +github.com/uudashr/gocognit v1.1.3/go.mod h1:aKH8/e8xbTRBwjbCkwZ8qt4l2EpKXl31KMHgSS+lZ2U= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 h1:hCq2hNMwsegUvPzI7sPOvtO9cqyy5GbWt/Ybp2xrx8Q= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0/go.mod h1:LqaApwGx/oUmzsbqxkzuBvyoPpkxk3JQWnqfVrJ3wCA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 h1:ZIg3ZT/aQ7AfKqdwp7ECpOK6vHqquXXuyTjIO8ZdmPs= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0/go.mod h1:DQAwmETtZV00skUwgD6+0U89g80NKsJE3DCKeLLPQMI= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp/typeparams v0.0.0-20240613232115-7f521ea00fb8 h1:+ZJmEdDFzH5H0CnzOrwgbH3elHctfTecW9X0k2tkn5M= -golang.org/x/exp/typeparams v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= +golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= +golang.org/x/exp/typeparams v0.0.0-20240909161429-701f63a606c0 h1:bVwtbF629Xlyxk6xLQq2TDYmqP0uiWaet5LwRebuY0k= +golang.org/x/exp/typeparams v0.0.0-20240909161429-701f63a606c0/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/telemetry v0.0.0-20240701175443-4e29c7872ac1 h1:jveUVYFLPlIma1aZBg9rrUN+Dqk4e6QbVSGiZGwA/2Y= -golang.org/x/telemetry v0.0.0-20240701175443-4e29c7872ac1/go.mod h1:n38mvGdgc4dA684EC4NwQwoPKSw4jyKw8/DgZHDA1Dk= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/telemetry v0.0.0-20240927214544-e9e6960092dd h1:cSUM3UgI7q2QZ4WBwDOGo5eFhZG4eGUkpdFporYHwpQ= +golang.org/x/telemetry v0.0.0-20240927214544-e9e6960092dd/go.mod h1:PsFMgI0jiuY7j+qwXANuh9a/x5kQESTSnRow3gapUyk= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= +golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20201007032633-0806396f153e/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= -golang.org/x/vuln v1.1.2 h1:UkLxe+kAMcrNBpGrFbU0Mc5l7cX97P2nhy21wx5+Qbk= -golang.org/x/vuln v1.1.2/go.mod h1:2o3fRKD8Uz9AraAL3lwd/grWBv+t+SeJnPcqBUJrY24= +golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE= +golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg= +golang.org/x/vuln v1.1.3 h1:NPGnvPOTgnjBc9HTaUx+nj+EaUYxl5SJOWqaDYGaFYw= +golang.org/x/vuln v1.1.3/go.mod h1:7Le6Fadm5FOqE9C926BCD0g12NWyhg7cxV4BwcPFuNY= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.199.0 h1:aWUXClp+VFJmqE0JPvpZOK3LDQMyFKYIow4etYd9qxs= +google.golang.org/api v0.199.0/go.mod h1:ohG4qSztDJmZdjK/Ar6MhbAmb/Rpi4JHOqagsh90K28= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto/googleapis/api v0.0.0-20240930140551-af27646dc61f h1:jTm13A2itBi3La6yTGqn8bVSrc3ZZ1r8ENHlIXBfnRA= +google.golang.org/genproto/googleapis/api v0.0.0-20240930140551-af27646dc61f/go.mod h1:CLGoBuH1VHxAUXVPP8FfPwPEVJB6lz3URE5mY2SuayE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f h1:cUMEy+8oS78BWIH9OWazBkzbr090Od9tWBNtZHkOhf0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= +google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.4.7 h1:9MDAWxMoSnB6QoSqiVr7P5mtkT9pOc1kSxchzPCnqJs= -honnef.co/go/tools v0.4.7/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0= -mvdan.cc/gofumpt v0.6.0 h1:G3QvahNDmpD+Aek/bNOLrFR2XC6ZAdo62dZu65gmwGo= -mvdan.cc/gofumpt v0.6.0/go.mod h1:4L0wf+kgIPZtcCWXynNS2e6bhmj73umwnuXSZarixzA= -mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f h1:lMpcwN6GxNbWtbpI1+xzFLSW8XzX0u72NttUGVFjO3U= -mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f/go.mod h1:RSLa7mKKCNeTTMHBw5Hsy2rfJmd6O2ivt9Dw9ZqCQpQ= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I= +honnef.co/go/tools v0.5.1/go.mod h1:e9irvo83WDG9/irijV44wr3tbhcFeRnfpVlRqVwpzMs= +mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU= +mvdan.cc/gofumpt v0.7.0/go.mod h1:txVFJy/Sc/mvaycET54pV8SW8gWxTlUuGHVEcncmNUo= +mvdan.cc/unparam v0.0.0-20240917084806-57a3b4290ba3 h1:YkmTN1n5U60NM02j7TCSWRlW3fqNiuXe/eVXf0dLFN8= +mvdan.cc/unparam v0.0.0-20240917084806-57a3b4290ba3/go.mod h1:z5yboO1sP1Q9pcfvS597TpfbNXQjphDlkCJHzt13ybc= diff --git a/internal/tools/tools.go b/internal/tools/tools.go index a1a473ff..ff1c2b13 100644 --- a/internal/tools/tools.go +++ b/internal/tools/tools.go @@ -1,5 +1,9 @@ //go:build tools +// Package tools and its main module are a nested internal module containing our +// development tool dependencies. +// +// See https://github.com/golang/go/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module. package tools import ( diff --git a/internal/whois/whois.go b/internal/whois/whois.go index 10f0609b..3dffd7a1 100644 --- a/internal/whois/whois.go +++ b/internal/whois/whois.go @@ -7,6 +7,7 @@ import ( "context" "fmt" "io" + "log/slog" "net" "net/netip" "strconv" @@ -16,9 +17,10 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghnet" "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/ioutil" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/bluele/gcache" + "github.com/c2h5oh/datasize" ) const ( @@ -49,6 +51,10 @@ func (Empty) Process(_ context.Context, _ netip.Addr) (info *Info, changed bool) // Config is the configuration structure for Default. type Config struct { + // Logger is used for logging the operation of the WHOIS lookup queries. It + // must not be nil. + Logger *slog.Logger + // DialContext is used to create TCP connections to WHOIS servers. DialContext aghnet.DialContextFunc @@ -80,6 +86,10 @@ type Config struct { // Default is the default WHOIS information processor. type Default struct { + // logger is used for logging the operation of the WHOIS lookup queries. It + // must not be nil. + logger *slog.Logger + // cache is the cache containing IP addresses of clients. An active IP // address is resolved once again after it expires. If IP address couldn't // be resolved, it stays here for some time to prevent further attempts to @@ -115,6 +125,7 @@ type Default struct { // nil. func New(conf *Config) (w *Default) { return &Default{ + logger: conf.Logger, serverAddr: conf.ServerAddr, dialContext: conf.DialContext, timeout: conf.Timeout, @@ -230,16 +241,22 @@ func (w *Default) query(ctx context.Context, target, serverAddr string) (data [] // queryAll queries WHOIS server and handles redirects. func (w *Default) queryAll(ctx context.Context, target string) (info map[string]string, err error) { server := net.JoinHostPort(w.serverAddr, w.portStr) - var data []byte for range w.maxRedirects { + var data []byte data, err = w.query(ctx, target, server) if err != nil { // Don't wrap the error since it's informative enough as is. return nil, err } - log.Debug("whois: received response (%d bytes) from %q about %q", len(data), server, target) + w.logger.DebugContext( + ctx, + "received response", + "size", datasize.ByteSize(len(data)), + "source", server, + "target", target, + ) info = whoisParse(data, w.maxInfoLen) redir, ok := info["whois"] @@ -256,7 +273,7 @@ func (w *Default) queryAll(ctx context.Context, target string) (info map[string] server = redir } - log.Debug("whois: redirected to %q about %q", redir, target) + w.logger.DebugContext(ctx, "redirected", "destination", redir, "target", target) } return nil, fmt.Errorf("whois: redirect loop") @@ -272,7 +289,7 @@ func (w *Default) Process(ctx context.Context, ip netip.Addr) (wi *Info, changed return nil, false } - wi, expired := w.findInCache(ip) + wi, expired := w.findInCache(ctx, ip) if wi != nil && !expired { // Don't return an empty struct so that the frontend doesn't get // confused. @@ -299,13 +316,13 @@ func (w *Default) requestInfo( item := toCacheItem(info, w.cacheTTL) err := w.cache.Set(ip, item) if err != nil { - log.Debug("whois: cache: adding item %q: %s", ip, err) + w.logger.DebugContext(ctx, "adding item to cache", "key", ip, slogutil.KeyError, err) } }() kv, err := w.queryAll(ctx, ip.String()) if err != nil { - log.Debug("whois: querying %q: %s", ip, err) + w.logger.DebugContext(ctx, "querying", "target", ip, slogutil.KeyError, err) return nil, true } @@ -327,24 +344,22 @@ func (w *Default) requestInfo( } // findInCache finds Info in the cache. expired indicates that Info is valid. -func (w *Default) findInCache(ip netip.Addr) (wi *Info, expired bool) { +func (w *Default) findInCache(ctx context.Context, ip netip.Addr) (wi *Info, expired bool) { val, err := w.cache.Get(ip) if err != nil { if !errors.Is(err, gcache.KeyNotFoundError) { - log.Debug("whois: cache: retrieving info about %q: %s", ip, err) + w.logger.DebugContext( + ctx, + "retrieving item from cache", + "key", ip, + slogutil.KeyError, err, + ) } return nil, false } - item, ok := val.(*cacheItem) - if !ok { - log.Debug("whois: cache: %q bad type %T", ip, val) - - return nil, false - } - - return fromCacheItem(item) + return fromCacheItem(val.(*cacheItem)) } // Info is the filtered WHOIS data for a runtime client. @@ -354,6 +369,19 @@ type Info struct { Orgname string `json:"orgname,omitempty"` } +// Clone returns a deep copy of the WHOIS info. +func (i *Info) Clone() (c *Info) { + if i == nil { + return nil + } + + return &Info{ + City: i.City, + Country: i.Country, + Orgname: i.Orgname, + } +} + // cacheItem represents an item that we will store in the cache. type cacheItem struct { // expiry is the time when cacheItem will expire. diff --git a/internal/whois/whois_test.go b/internal/whois/whois_test.go index 109ee1e9..4b425af2 100644 --- a/internal/whois/whois_test.go +++ b/internal/whois/whois_test.go @@ -9,6 +9,7 @@ import ( "time" "github.com/AdguardTeam/AdGuardHome/internal/whois" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil/fakenet" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -119,6 +120,7 @@ func TestDefault_Process(t *testing.T) { } w := whois.New(&whois.Config{ + Logger: slogutil.NewDiscardLogger(), Timeout: 5 * time.Second, DialContext: func(_ context.Context, _, _ string) (_ net.Conn, _ error) { hit = 0 diff --git a/openapi/CHANGELOG.md b/openapi/CHANGELOG.md index de87f6fa..e9894c37 100644 --- a/openapi/CHANGELOG.md +++ b/openapi/CHANGELOG.md @@ -4,6 +4,14 @@ ## v0.108.0: API changes +## v0.107.55: API changes + +### The new field `"ecosia"` in `SafeSearchConfig` + +* The new field `"ecosia"` in `PUT /control/safesearch/settings` and + `GET /control/safesearch/status` is true if safe search is enforced for Ecosia + search engine. + ## v0.107.44: API changes ### The field `"upstream_mode"` in `DNSConfig` diff --git a/openapi/openapi.yaml b/openapi/openapi.yaml index 300311c1..32c691d1 100644 --- a/openapi/openapi.yaml +++ b/openapi/openapi.yaml @@ -2578,6 +2578,8 @@ 'type': 'boolean' 'duckduckgo': 'type': 'boolean' + 'ecosia': + 'type': 'boolean' 'google': 'type': 'boolean' 'pixabay': diff --git a/scripts/blocked-services/main.go b/scripts/blocked-services/main.go index bb0b97cc..43ac4fae 100644 --- a/scripts/blocked-services/main.go +++ b/scripts/blocked-services/main.go @@ -4,8 +4,10 @@ package main import ( + "context" "encoding/json" "fmt" + "log/slog" "net/http" "net/url" "os" @@ -14,10 +16,13 @@ import ( "text/template" "time" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" ) func main() { + ctx := context.Background() + l := slogutil.New(nil) + urlStr := "https://adguardteam.github.io/HostlistsRegistry/assets/services.json" if v, ok := os.LookupEnv("URL"); ok { urlStr = v @@ -33,7 +38,7 @@ func main() { resp, err := c.Get(urlStr) check(err) - defer log.OnCloserError(resp.Body, log.ERROR) + defer slogutil.CloseAndLog(ctx, l, resp.Body, slog.LevelError) if resp.StatusCode != http.StatusOK { panic(fmt.Errorf("expected code %d, got %d", http.StatusOK, resp.StatusCode)) @@ -64,7 +69,7 @@ func main() { 0o644, ) check(err) - defer log.OnCloserError(f, log.ERROR) + defer slogutil.CloseAndLog(ctx, l, f, slog.LevelError) err = tmpl.Execute(f, hlSvcs) check(err) diff --git a/scripts/hooks/pre-commit b/scripts/hooks/pre-commit index b0cce8d6..307f3ec6 100755 --- a/scripts/hooks/pre-commit +++ b/scripts/hooks/pre-commit @@ -6,7 +6,7 @@ set -e -f -u # Bump this number every time a significant change is made to this # script. # -# AdGuard-Project-Version: 2 +# AdGuard-Project-Version: 3 # TODO(a.garipov): Add pre-merge-commit. @@ -56,13 +56,15 @@ prompt() { # Warn the programmer about unstaged changes and untracked files, but do # not fail the commit, because those changes might be temporary or for # a different branch. +# +# shellcheck disable=SC2016 awk_prog='substr($2, 2, 1) != "." { print $9; } $1 == "?" { print $2; }' readonly awk_prog unstaged="$( git status --porcelain=2 | awk "$awk_prog" )" readonly unstaged -if [ "$unstaged" != "" ] +if [ "$unstaged" != '' ] then printf 'WARNING: you have unstaged changes:\n\n%s\n\n' "$unstaged" prompt @@ -73,7 +75,7 @@ fi temp_todos="$( git grep -e 'TODO.*!!' -- ':!scripts/hooks/pre-commit' || : )" readonly temp_todos -if [ "$temp_todos" != "" ] +if [ "$temp_todos" != '' ] then printf 'WARNING: you have temporary todos:\n\n%s\n\n' "$temp_todos" prompt @@ -82,22 +84,32 @@ fi verbose="${VERBOSE:-0}" readonly verbose -if [ "$( git diff --cached --name-only -- 'client/*.js' )" ] +if [ "$( git diff --cached --name-only -- 'client/*.js' || true )" != '' ] then make VERBOSE="$verbose" js-lint js-test fi -if [ "$( git diff --cached --name-only -- '*.go' '*.mod' '*.sh' 'Makefile' )" ] +if [ "$( git diff --cached --name-only -- '*.go' '*.mod' 'Makefile' || true )" != '' ] then make VERBOSE="$verbose" go-os-check go-lint go-test fi -if [ "$( git diff --cached --name-only -- '*.md' '*.txt' '*.yaml' '*.yml' )" ] +if [ "$( git diff --cached --name-only -- '*.md' || true )" != '' ] +then + make VERBOSE="$verbose" md-lint +fi + +if [ "$( git diff --cached --name-only -- '*.sh' || true )" != '' ] +then + make VERBOSE="$verbose" sh-lint +fi + +if [ "$( git diff --cached --name-only -- '*.md' '*.txt' '*.yaml' '*.yml' || true )" != '' ] then make VERBOSE="$verbose" txt-lint fi -if [ "$( git diff --cached --name-only -- './openapi/openapi.yaml' )" ] +if [ "$( git diff --cached --name-only -- './openapi/openapi.yaml' || true )" != '' ] then make VERBOSE="$verbose" openapi-lint fi diff --git a/scripts/make/build-release.sh b/scripts/make/build-release.sh index 3e556f97..581081d5 100644 --- a/scripts/make/build-release.sh +++ b/scripts/make/build-release.sh @@ -83,11 +83,15 @@ if [ "$sign" -eq '1' ] then gpg_key_passphrase="${GPG_KEY_PASSPHRASE:?please set GPG_KEY_PASSPHRASE or unset SIGN}" gpg_key="${GPG_KEY:?please set GPG_KEY or unset SIGN}" + signer_api_key="${SIGNER_API_KEY:?please set SIGNER_API_KEY or unset SIGN}" + deploy_script_path="${DEPLOY_SCRIPT_PATH:?please set DEPLOY_SCRIPT_PATH or unset SIGN}" else gpg_key_passphrase='' gpg_key='' + signer_api_key='' + deploy_script_path='' fi -readonly gpg_key_passphrase gpg_key +readonly gpg_key_passphrase gpg_key signer_api_key deploy_script_path # The default distribution files directory is dist. dist="${DIST_DIR:-dist}" @@ -141,6 +145,7 @@ linux mips64 - softfloat linux mips64le - softfloat linux mipsle - softfloat linux ppc64le - - +linux riscv64 - - openbsd amd64 - - openbsd arm64 - - windows 386 - - @@ -148,6 +153,50 @@ windows amd64 - - windows arm64 - -" readonly platforms +# Function sign signs the specified build as intended by the target operating +# system. +sign() { + # Only sign if needed. + if [ "$sign" -ne '1' ] + then + return + fi + + # Get the arguments. Here and below, use the "sign_" prefix for all + # variables local to function sign. + sign_os="$1" + sign_bin_path="$2" + + if [ "$sign_os" != 'windows' ] + then + gpg\ + --default-key "$gpg_key"\ + --detach-sig\ + --passphrase "$gpg_key_passphrase"\ + --pinentry-mode loopback\ + -q\ + "$sign_bin_path"\ + ; + + return + # TODO(e.burkov): Enable for all releases. + elif [ "$channel" != 'beta' ] + then + return + fi + + signed_bin_path="${sign_bin_path}.signed" + + env\ + INPUT_FILE="$sign_bin_path"\ + OUTPUT_FILE="$signed_bin_path"\ + SIGNER_API_KEY="$signer_api_key"\ + "$deploy_script_path" sign-executable\ + ; + + mv "$signed_bin_path" "$sign_bin_path" +} + # Function build builds the release for one platform. It builds a binary and an # archive. build() { @@ -188,17 +237,7 @@ build() { log "$build_output" - if [ "$sign" -eq '1' ] - then - gpg\ - --default-key "$gpg_key"\ - --detach-sig\ - --passphrase "$gpg_key_passphrase"\ - --pinentry-mode loopback\ - -q\ - "$build_output"\ - ; - fi + sign "$os" "$build_output" # Prepare the build directory for archiving. cp ./CHANGELOG.md ./LICENSE.txt ./README.md "$build_dir" diff --git a/scripts/make/go-build.sh b/scripts/make/go-build.sh index 48d68c00..71ccec87 100644 --- a/scripts/make/go-build.sh +++ b/scripts/make/go-build.sh @@ -91,6 +91,7 @@ elif [ "${GOMIPS:-}" != '' ] then ldflags="${ldflags} -X ${version_pkg}.gomips=${GOMIPS}" fi +readonly ldflags # Allow users to limit the build's parallelism. parallelism="${PARALLELISM:-}" @@ -143,7 +144,7 @@ then fi "$go" build\ - --ldflags "$ldflags"\ + --ldflags="$ldflags"\ "$race_flags"\ "$tags_flags"\ --trimpath\ diff --git a/scripts/make/go-lint.sh b/scripts/make/go-lint.sh index 83790fce..c6623b13 100644 --- a/scripts/make/go-lint.sh +++ b/scripts/make/go-lint.sh @@ -3,7 +3,7 @@ # This comment is used to simplify checking local copies of the script. Bump # this number every time a significant change is made to this script. # -# AdGuard-Project-Version: 5 +# AdGuard-Project-Version: 8 verbose="${VERBOSE:-0}" readonly verbose @@ -35,9 +35,12 @@ set -f -u # blocklist_imports is a simple check against unwanted packages. The following # packages are banned: # -# * Packages errors and log are replaced by our own packages in the +# * Package errors is replaced by our own package in the # github.com/AdguardTeam/golibs module. # +# * Packages golang.org/x/exp/slices and golang.org/x/net/context have been +# moved into stdlib. +# # * Package io/ioutil is soft-deprecated. # # * Package reflect is often an overkill, and for deep comparisons there are @@ -51,10 +54,6 @@ set -f -u # # * Package unsafe is… unsafe. # -# * Package golang.org/x/exp/slices has been moved into stdlib. -# -# * Package golang.org/x/net/context has been moved into stdlib. -# # Currently, the only standard exception are files generated from protobuf # schemas, which use package reflect. If your project needs more exceptions, # add and document them. @@ -62,17 +61,17 @@ set -f -u # TODO(a.garipov): Add golibs/log. # # TODO(a.garipov): Add deprecated package golang.org/x/exp/maps once all -# projects switch to Go 1.22. +# projects switch to Go 1.23. blocklist_imports() { git grep\ -e '[[:space:]]"errors"$'\ + -e '[[:space:]]"golang.org/x/exp/slices"$'\ + -e '[[:space:]]"golang.org/x/net/context"$'\ -e '[[:space:]]"io/ioutil"$'\ -e '[[:space:]]"log"$'\ -e '[[:space:]]"reflect"$'\ -e '[[:space:]]"sort"$'\ -e '[[:space:]]"unsafe"$'\ - -e '[[:space:]]"golang.org/x/exp/slices"$'\ - -e '[[:space:]]"golang.org/x/net/context"$'\ -n\ -- '*.go'\ ':!*.pb.go'\ @@ -105,6 +104,7 @@ underscores() { -e '_bsd.go'\ -e '_darwin.go'\ -e '_freebsd.go'\ + -e '_generate.go'\ -e '_linux.go'\ -e '_next.go'\ -e '_openbsd.go'\ @@ -140,7 +140,7 @@ run_linter -e gofumpt --extra -e -l . # TODO(a.garipov): golint is deprecated, find a suitable replacement. -run_linter "$GO" vet ./... +run_linter "${GO:-go}" vet ./... run_linter govulncheck ./... @@ -212,8 +212,6 @@ git ls-files -- 'Makefile' '*.conf' '*.go' '*.mod' '*.sh' '*.yaml' '*.yml'\ | xargs misspell --error\ | sed -e 's/^/misspell: /' -run_linter looppointer ./... - run_linter nilness ./... # TODO(a.garipov): Enable for all. @@ -246,9 +244,9 @@ run_linter fieldalignment \ run_linter -e shadow --strict ./... # TODO(a.garipov): Enable for all. -run_linter gosec --quiet\ +# TODO(e.burkov): Re-enable G115. +run_linter gosec --exclude G115 --quiet\ ./internal/aghalg/\ - ./internal/aghchan/\ ./internal/aghhttp/\ ./internal/aghnet/\ ./internal/aghos/\ diff --git a/scripts/make/go-tools.sh b/scripts/make/go-tools.sh index 9d705103..295659c9 100644 --- a/scripts/make/go-tools.sh +++ b/scripts/make/go-tools.sh @@ -3,7 +3,7 @@ # This comment is used to simplify checking local copies of the script. Bump # this number every time a significant change is made to this script. # -# AdGuard-Project-Version: 3 +# AdGuard-Project-Version: 4 verbose="${VERBOSE:-0}" readonly verbose @@ -42,7 +42,6 @@ rm -f\ bin/gosec\ bin/govulncheck\ bin/ineffassign\ - bin/looppointer\ bin/misspell\ bin/nilness\ bin/shadow\ @@ -66,7 +65,6 @@ env\ github.com/golangci/misspell/cmd/misspell\ github.com/gordonklaus/ineffassign\ github.com/kisielk/errcheck\ - github.com/kyoh86/looppointer/cmd/looppointer\ github.com/securego/gosec/v2/cmd/gosec\ github.com/uudashr/gocognit/cmd/gocognit\ golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment\ diff --git a/scripts/make/go-upd-tools.sh b/scripts/make/go-upd-tools.sh index 7486661d..787475ac 100644 --- a/scripts/make/go-upd-tools.sh +++ b/scripts/make/go-upd-tools.sh @@ -3,7 +3,7 @@ # This comment is used to simplify checking local copies of the script. Bump # this number every time a significant change is made to this script. # -# AdGuard-Project-Version: 1 +# AdGuard-Project-Version: 2 verbose="${VERBOSE:-0}" readonly verbose @@ -29,5 +29,6 @@ go="${GO:-go}" readonly go cd ./internal/tools/ -"$go" get -u + +"$go" get -u "$x_flags" "$go" mod tidy diff --git a/scripts/make/md-lint.sh b/scripts/make/md-lint.sh new file mode 100644 index 00000000..4e2ca062 --- /dev/null +++ b/scripts/make/md-lint.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +# This comment is used to simplify checking local copies of the script. Bump +# this number every time a remarkable change is made to this script. +# +# AdGuard-Project-Version: 2 + +verbose="${VERBOSE:-0}" +readonly verbose + +set -e -f -u + +if [ "$verbose" -gt '0' ] +then + set -x +fi + +# NOTE: Adjust for your project. +# markdownlint\ +# ./README.md\ +# ; + +# TODO(e.burkov): Lint markdown documents within this project. diff --git a/scripts/make/sh-lint.sh b/scripts/make/sh-lint.sh new file mode 100644 index 00000000..ad0d5d9d --- /dev/null +++ b/scripts/make/sh-lint.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +# This comment is used to simplify checking local copies of the script. Bump +# this number every time a remarkable change is made to this script. +# +# AdGuard-Project-Version: 2 + +verbose="${VERBOSE:-0}" +readonly verbose + +# Don't use -f, because we use globs in this script. +set -e -u + +if [ "$verbose" -gt '0' ] +then + set -x +fi + +# NOTE: Adjust for your project. +# +# TODO(e.burkov): Add build-docker.sh, build-release.sh and install.sh. +shellcheck -e 'SC2250' -f 'gcc' -o 'all' -x --\ + ./scripts/hooks/*\ + ./scripts/snap/*\ + ./scripts/make/clean.sh\ + ./scripts/make/go-bench.sh\ + ./scripts/make/go-build.sh\ + ./scripts/make/go-deps.sh\ + ./scripts/make/go-fuzz.sh\ + ./scripts/make/go-lint.sh\ + ./scripts/make/go-test.sh\ + ./scripts/make/go-tools.sh\ + ./scripts/make/go-upd-tools.sh\ + ./scripts/make/helper.sh\ + ./scripts/make/md-lint.sh\ + ./scripts/make/sh-lint.sh\ + ./scripts/make/txt-lint.sh\ + ./scripts/make/version.sh\ + ; diff --git a/scripts/translations/download.go b/scripts/translations/download.go index a7efc420..b7927f2d 100644 --- a/scripts/translations/download.go +++ b/scripts/translations/download.go @@ -1,25 +1,26 @@ package main import ( + "context" "flag" "fmt" "io" + "log/slog" "net/http" "net/url" "os" "path/filepath" "slices" - "strings" "sync" "time" "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/ioutil" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" ) // download and save all translations. -func (c *twoskyClient) download() (err error) { +func (c *twoskyClient) download(ctx context.Context, l *slog.Logger) (err error) { var numWorker int flagSet := flag.NewFlagSet("download", flag.ExitOnError) @@ -50,7 +51,7 @@ func (c *twoskyClient) download() (err error) { for range numWorker { wg.Add(1) - go downloadWorker(wg, failed, client, uriCh) + go downloadWorker(ctx, l, wg, failed, client, uriCh) } for _, lang := range c.langs { @@ -62,13 +63,13 @@ func (c *twoskyClient) download() (err error) { close(uriCh) wg.Wait() - printFailedLocales(failed) + printFailedLocales(ctx, l, failed) return nil } // printFailedLocales prints sorted list of failed downloads, if any. -func printFailedLocales(failed *sync.Map) { +func printFailedLocales(ctx context.Context, l *slog.Logger, failed *sync.Map) { keys := []string{} failed.Range(func(k, _ any) bool { s, ok := k.(string) @@ -86,12 +87,14 @@ func printFailedLocales(failed *sync.Map) { } slices.Sort(keys) - log.Info("failed locales: %s", strings.Join(keys, " ")) + l.InfoContext(ctx, "failed", "locales", keys) } // downloadWorker downloads translations by received urls and saves them. // Where failed is a map for storing failed downloads. func downloadWorker( + ctx context.Context, + l *slog.Logger, wg *sync.WaitGroup, failed *sync.Map, client *http.Client, @@ -103,9 +106,9 @@ func downloadWorker( q := uri.Query() code := q.Get("language") - err := saveToFile(client, uri, code) + err := saveToFile(ctx, l, client, uri, code) if err != nil { - log.Error("download: worker: %s", err) + l.ErrorContext(ctx, "download worker", slogutil.KeyError, err) failed.Store(code, struct{}{}) } } @@ -113,12 +116,16 @@ func downloadWorker( // saveToFile downloads translation by url and saves it to a file, or returns // error. -func saveToFile(client *http.Client, uri *url.URL, code string) (err error) { - data, err := getTranslation(client, uri.String()) +func saveToFile( + ctx context.Context, + l *slog.Logger, + client *http.Client, + uri *url.URL, + code string, +) (err error) { + data, err := getTranslation(ctx, l, client, uri.String()) if err != nil { - log.Info("%s", data) - - return fmt.Errorf("getting translation: %s", err) + return fmt.Errorf("getting translation %q: %s", code, err) } name := filepath.Join(localesDir, code+".json") @@ -134,13 +141,18 @@ func saveToFile(client *http.Client, uri *url.URL, code string) (err error) { // getTranslation returns received translation data and error. If err is not // nil, data may contain a response from server for inspection. -func getTranslation(client *http.Client, url string) (data []byte, err error) { +func getTranslation( + ctx context.Context, + l *slog.Logger, + client *http.Client, + url string, +) (data []byte, err error) { resp, err := client.Get(url) if err != nil { return nil, fmt.Errorf("requesting: %w", err) } - defer log.OnCloserError(resp.Body, log.ERROR) + defer slogutil.CloseAndLog(ctx, l, resp.Body, slog.LevelError) if resp.StatusCode != http.StatusOK { err = fmt.Errorf("url: %q; status code: %s", url, http.StatusText(resp.StatusCode)) diff --git a/scripts/translations/main.go b/scripts/translations/main.go index c5b1ef1e..33a57b19 100644 --- a/scripts/translations/main.go +++ b/scripts/translations/main.go @@ -6,8 +6,10 @@ import ( "bufio" "bytes" "cmp" + "context" "encoding/json" "fmt" + "log/slog" "net/url" "os" "os/exec" @@ -18,7 +20,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghos" "github.com/AdguardTeam/golibs/errors" - "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/golibs/logutil/slogutil" "golang.org/x/exp/maps" ) @@ -63,6 +65,9 @@ type textLabel string type locales map[textLabel]string func main() { + ctx := context.Background() + l := slogutil.New(nil) + if len(os.Args) == 1 { usage("need a command") } @@ -83,9 +88,9 @@ func main() { cli, err = conf.toClient() check(err) - err = cli.download() + err = cli.download(ctx, l) case "unused": - err = unused(conf.LocalizableFiles[0]) + err = unused(ctx, l, conf.LocalizableFiles[0]) case "upload": cli, err = conf.toClient() check(err) @@ -322,7 +327,7 @@ func summary(langs languages) (err error) { } // unused prints unused text labels. -func unused(basePath string) (err error) { +func unused(ctx context.Context, l *slog.Logger, basePath string) (err error) { defer func() { err = errors.Annotate(err, "unused: %w") }() baseLoc, err := readLocales(basePath) @@ -331,7 +336,7 @@ func unused(basePath string) (err error) { } locDir := filepath.Clean(localesDir) - js, err := findJS(locDir) + js, err := findJS(ctx, l, locDir) if err != nil { return err } @@ -340,10 +345,10 @@ func unused(basePath string) (err error) { } // findJS returns list of JavaScript and JSON files or error. -func findJS(locDir string) (fileNames []string, err error) { +func findJS(ctx context.Context, l *slog.Logger, locDir string) (fileNames []string, err error) { walkFn := func(name string, _ os.FileInfo, err error) error { if err != nil { - log.Info("warning: accessing a path %q: %s", name, err) + l.WarnContext(ctx, "accessing a path", slogutil.KeyError, err) return nil }