diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2b806e1..825824c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,49 @@ The format is **not** based on [Keep a Changelog][kec], since the project
+## AGDNS-1954 / Build 719
+
+ * The objects within `server_groups` array have a new property
+ `block_page_redirect`:
+
+ ```yaml
+ block_page_redirect:
+ enabled: true
+ ipv4:
+ - address: '127.0.0.1'
+ - address: '127.0.0.2'
+ ipv6:
+ - address: '::1'
+ - address: '::2'
+ apply:
+ client:
+ - address: '192.168.0.0/16'
+ - address: '1.2.3.4'
+ skip:
+ client:
+ - address: '1.2.0.0/16'
+ question:
+ - domain: 'do-not-show-block.site.example'
+ probability: 0.01
+ ```
+
+ For server groups that do not require a block-page redirect, set:
+
+ ```yaml
+ block_page_redirect:
+ enabled: false
+ ```
+
+
+
+## AGDNS-1888 / Build 717
+
+ * The new environment variable `PROFILES_ENABLED` has been added. With `0`
+ value it disables user profiles and devices recognition, and billing. Its
+ default value is `1`. Adjust the value, if necessary.
+
+
+
## AGDNS-1761 / Build 702
* The property `upstream` has been modified. Its property `timeout` has been
diff --git a/Makefile b/Makefile
index d5d91df..967628b 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: 2
+# AdGuard-Project-Version: 4
# Don't name these macros "GO" etc., because GNU Make apparently makes
# them exported environment variables with the literal value of
@@ -23,7 +23,7 @@ VERBOSE.MACRO = $${VERBOSE:-0}
BRANCH = $$( git rev-parse --abbrev-ref HEAD )
GOAMD64 = v1
GOPROXY = https://goproxy.cn|https://proxy.golang.org|direct
-GOTOOLCHAIN = go1.21.5
+GOTOOLCHAIN = go1.21.8
RACE = 0
REVISION = $$( git rev-parse --short HEAD )
VERSION = 0
@@ -59,6 +59,8 @@ go-lint: ; $(ENV) "$(SHELL)" ./scripts/make/go-lint.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 operating systems relevant to the
@@ -73,11 +75,4 @@ go-os-check:
txt-lint: ; $(ENV) "$(SHELL)" ./scripts/make/txt-lint.sh
-# TODO(a.garipov): Consider adding to scripts/ and the common project
-# structure.
-go-upd-tools:
- cd ./internal/tools/ &&\
- "$(GO.MACRO)" get -u &&\
- "$(GO.MACRO)" mod tidy
-
sync-github: ; $(ENV) "$(SHELL)" ./scripts/make/github-sync.sh
diff --git a/config.dist.yaml b/config.dist.yaml
index 378047b..29945bd 100644
--- a/config.dist.yaml
+++ b/config.dist.yaml
@@ -274,7 +274,7 @@ filters:
# FILTER_INDEX_URL environment variable.
refresh_interval: 1h
# The timeout for the entire filter update operation. Be aware that each
- # individual refresh operation also has its own hardcoded 30s timeout.
+ # individual refresh operation also has its own hardcoded 3m timeout.
refresh_timeout: 5m
# MaxSize is the maximum size of the downloadable filtering rule-list.
max_size: 256MB
@@ -351,15 +351,38 @@ server_groups:
- name: 'adguard_dns_default'
# This filtering_group is used for all anonymous clients.
filtering_group: 'default'
- tls:
- certificates:
- - certificate: './test/cert.crt'
- key: './test/cert.key'
- session_keys:
- - './test/tls_key_1'
- - './test/tls_key_2'
- device_id_wildcards:
- - '*.dns.example.com'
+ # Settings for redirection to a block page.
+ block_page_redirect:
+ # If enabled is false, other fields can be skipped.
+ enabled: true
+ # Addresses to use for A queries. If enabled is true, ipv4, ipv6, or
+ # both must be filled.
+ ipv4:
+ - address: '127.0.0.1'
+ - address: '127.0.0.2'
+ # Addresses to use for AAAA queries. If enabled is true, ipv4, ipv6, or
+ # both must be filled.
+ ipv6:
+ - address: '::1'
+ - address: '::2'
+ # Request parameters based on which the block page is always shown. For
+ # requests matching these parameters, both skip and probability are
+ # ignored.
+ apply:
+ client:
+ - address: '192.168.0.0/16'
+ - address: '1.2.3.4'
+ # Request parameters based on which the block page is never shown. For
+ # requests matching these parameters, probability is ignored.
+ skip:
+ client:
+ - address: '1.2.0.0/16'
+ - address: '5.6.7.8'
+ question:
+ - domain: 'do-not-show-block.site.example'
+ # The probability of responding with the block page IPs based on remote
+ # address. Must be between 0.0 and 1.0.
+ probability: 0.01
ddr:
enabled: true
# Device ID domain name suffix to DDR record template mapping. Keep in
@@ -386,6 +409,15 @@ server_groups:
- '127.0.0.1'
ipv6_hints:
- '::1'
+ tls:
+ certificates:
+ - certificate: './test/cert.crt'
+ key: './test/cert.key'
+ session_keys:
+ - './test/tls_key_1'
+ - './test/tls_key_2'
+ device_id_wildcards:
+ - '*.dns.example.com'
servers:
- name: 'default_dns'
# See README for the list of protocol values.
diff --git a/doc/configuration.md b/doc/configuration.md
index ee99059..0534f87 100644
--- a/doc/configuration.md
+++ b/doc/configuration.md
@@ -28,8 +28,9 @@ configuration file with comments.
* [Filtering groups](#filtering_groups)
* [Network interface listeners](#interface_listeners)
* [Server groups](#server_groups)
- * [TLS](#server_groups-*-tls)
+ * [Block-page redirecting](#server_groups-*-block_page_redirect)
* [DDR](#server_groups-*-ddr)
+ * [TLS](#server_groups-*-tls)
* [Servers](#server_groups-*-servers-*)
* [Connectivity check](#connectivity-check)
* [Network settings](#network)
@@ -108,9 +109,10 @@ Currently, there are the following recommendations for parameters
TCP sockets. That is, if the instance currently has a maximum of 100 000
TCP sockets in use every day, `resume` should be set to about `120000`.
-**NOTE:** The number of active stream-connections includes sockets that are
-in the process of accepting new connections but have not yet accepted one. That
-means that `resume` should be greater than the number of bound addresses.
+ > [!NOTE]
+ > The number of active stream-connections includes sockets that are in the
+ > process of accepting new connections but have not yet accepted one. That
+ > means that `resume` should be greater than the number of bound addresses.
These recommendations are to be revised based on the metrics.
@@ -776,7 +778,7 @@ The `filters` object has the following properties:
* `refresh_timeout`:
The timeout for the *entire* filter update operation, as a human-readable
duration. Be aware that each individual refresh operation also has its own
- hardcoded 30s timeout.
+ hardcoded 3m timeout.
**Example:** `5m`.
@@ -890,9 +892,10 @@ The items of the `filtering_groups` array have the following properties:
## Network interface listeners
-**NOTE:** The network interface listening works only on Linux with
-`SO_BINDTODEVICE` support (2.0.30 and later) and properly setup IP routes. See
-the [section on testing `SO_BINDTODEVICE` using Docker][dev-btd].
+ > [!NOTE]
+ > The network interface listening works only on Linux with `SO_BINDTODEVICE`
+ > support (2.0.30 and later) and properly setup IP routes. See the [section
+ > on testing `SO_BINDTODEVICE` using Docker][dev-btd].
The `interface_listeners` object has the following properties:
@@ -936,52 +939,83 @@ The items of the `server_groups` array have the following properties:
**Example:** `default`.
- * `tls`: The optional TLS configuration object. See
- [below](#server_groups-*-tls).
+ * `block_page_redirect`: The block-page redirect configuration object. See
+ [below](#server_groups-*-block_page_redirect).
* `ddr`: The DDR configuration object. See [below](#server_groups-*-ddr).
+ * `tls`: The TLS configuration object. See [below](#server_groups-*-tls).
+
+ > [!NOTE]
+ > The `tls` object is optional unless the [`servers`
+ > array](#server_groups-*-servers-*) contains at least one item with an
+ > encrypted protocol.
+
* `servers`: Server configuration for this filtering group. See
[below](#server_groups-*-servers-*).
- ### TLS
+ ### Block-page redirecting
- * `certificates`:
- The array of objects with paths to the certificate and the private key for
- this server group.
+The block-page redirect configuration object. If enabled, AdGuard DNS responds
+with the configured IP addresses to “redirect” users to an informative block
+page.
+
+ * `enabled`:
+
+ Shows if the block-page redirect is enabled. If `false`, the fields below
+ can be skipped.
+
+ * `ipv4`:
+
+ Arrays of IPv4 addresses with which to respond to blocked `A` queries.
+
+ If `enabled` is true, `ipv4`, `ipv6`, or both must be filled.
+
+ * `ipv6`:
+
+ Arrays of IPv6 addresses with which to respond to blocked `AAAA` queries.
+
+ If `enabled` is true, `ipv4`, `ipv6`, or both must be filled.
+
+ * `apply`:
+
+ Request parameters based on which the block-page redirect is always
+ performed. For requests matching these parameters, both `skip` and
+ `probability` are
+ ignored.
**Property example:**
```yaml
- 'certificates':
- - 'certificate': '/etc/dns/cert.crt'
- 'key': '/etc/dns/cert.key'
+ apply:
+ client:
+ - address: '192.168.0.0/16'
+ - address: '1.2.3.4'
```
- * `session_keys`:
- The array of file paths from which the each server's TLS session keys are
- updated. Session ticket key files must contain at least 32 bytes.
+ * `skip`:
+
+ Request parameters based on which the block-page redirect is never
+ performed. For requests matching these parameters, `probability` is
+ ignored.
**Property example:**
```yaml
- 'session_keys':
- - './private/key_1'
- - './private/key_2'
+ skip:
+ client:
+ - address: '1.2.0.0/16'
+ - address: '5.6.7.8'
+ question:
+ - domain: 'do-not-show-block.site.example'
```
- * `device_id_wildcards`:
- The array of domain name wildcards to use to detect clients' device IDs.
- Use this to prevent conflicts when using certificates for subdomains.
+ * `probability`:
- **Property example:**
-
- ```yaml
- 'device_id_wildcards':
- - '*.d.dns.example.com'
- ```
+ The probability of responding with the block page IPs based on remote
+ address. Must be between `0.0` and `1.0`.
@@ -1062,6 +1096,45 @@ collected the required data was not self-describing and flexible enough.
+ ### TLS
+
+ * `certificates`:
+ The array of objects with paths to the certificate and the private key for
+ this server group.
+
+ **Property example:**
+
+ ```yaml
+ 'certificates':
+ - 'certificate': '/etc/dns/cert.crt'
+ 'key': '/etc/dns/cert.key'
+ ```
+
+ * `session_keys`:
+ The array of file paths from which the each server's TLS session keys are
+ updated. Session ticket key files must contain at least 32 bytes.
+
+ **Property example:**
+
+ ```yaml
+ 'session_keys':
+ - './private/key_1'
+ - './private/key_2'
+ ```
+
+ * `device_id_wildcards`:
+ The array of domain name wildcards to use to detect clients' device IDs.
+ Use this to prevent conflicts when using certificates for subdomains.
+
+ **Property example:**
+
+ ```yaml
+ 'device_id_wildcards':
+ - '*.d.dns.example.com'
+ ```
+
+
+
### Servers
The items of the `servers` array have the following properties:
diff --git a/doc/debughttp.md b/doc/debughttp.md
index bdba4e8..0bbcd36 100644
--- a/doc/debughttp.md
+++ b/doc/debughttp.md
@@ -27,8 +27,9 @@ The response is sent with the `Transfer-Encoding` set to `chunked` and with an
HTTP trailer named `X-Error` which describes errors that might have occurred
during the database dump.
-**NOTE:** For legacy software reasons, despite the endpoint being a `GET` one,
-it rotates the database, and so changes the internal state.
+ > [!NOTE]
+ > For legacy software reasons, despite the endpoint being a `GET` one, it
+ > rotates the database, and so changes the internal state.
diff --git a/doc/development.md b/doc/development.md
index 5020058..0690f3c 100644
--- a/doc/development.md
+++ b/doc/development.md
@@ -315,8 +315,8 @@ Open `http://127.0.0.1:8081/metrics` to see the server's metrics.
DNSCrypt is a bit trickier. You need to open `dnscrypt.yml` and use values from
there to generate an SDNS stamp on .
-**NOTE:** The example below is for a test configuration that won't work for
-you.
+ > [!NOTE]
+ > The example below is for a test configuration that won't work for you.
```sh
dnslookup example.org sdns://AQcAAAAAAAAADjEyNy4wLjAuMTo1NDQzIAbKgP3dmXybr1DaKIFgKjsc8zSFX4rgT_hFgymSq6w1FzIuZG5zY3J5cHQtY2VydC50ZXN0ZG5z
diff --git a/doc/environment.md b/doc/environment.md
index deace96..59427ac 100644
--- a/doc/environment.md
+++ b/doc/environment.md
@@ -23,6 +23,7 @@ sensitive configuration. All other configuration is stored in the
* [`LOG_TIMESTAMP`](#LOG_TIMESTAMP)
* [`NEW_REG_DOMAINS_URL`](#NEW_REG_DOMAINS_URL)
* [`PROFILES_CACHE_PATH`](#PROFILES_CACHE_PATH)
+ * [`PROFILES_ENABLED`](#PROFILES_ENABLED)
* [`PROFILES_URL`](#PROFILES_URL)
* [`QUERYLOG_PATH`](#QUERYLOG_PATH)
* [`RESEARCH_LOGS`](#RESEARCH_LOGS)
@@ -236,6 +237,14 @@ The profile cache is read on start and is later updated on every
+## `PROFILES_ENABLED`
+
+If `0`, disables user profiles and devices recognition and billing.
+
+**Default:** `1`.
+
+
+
## `PROFILES_URL`
The base backend URL for profiles API. Supports GRPC (`grpc://` and`grpcs://`)
diff --git a/doc/externalhttp.md b/doc/externalhttp.md
index 7d576fb..1d21f46 100644
--- a/doc/externalhttp.md
+++ b/doc/externalhttp.md
@@ -30,9 +30,11 @@ document should set the `Server` header in their replies.
This is the service to which the [`BILLSTAT_URL`][env-billstat_url] environment
variable points. Supports `grpc(s)` URLs. The service must correspond to
-`./internal/backendpb/backend.proto`.
+`./internal/backendpb/backend.proto`. This service can be disabled with the
+[`PROFILES_ENABLED`][env-profiles_enabled] environment variable.
[env-billstat_url]: environment.md#BILLSTAT_URL
+[env-profiles_enabled]: environment.md#PROFILES_ENABLED
@@ -40,7 +42,8 @@ variable points. Supports `grpc(s)` URLs. The service must correspond to
This is the service to which the [`PROFILES_URL`][env-profiles_url] environment
variable points. Supports `grpc(s)` URLs. The service must correspond to
-`./internal/backendpb/backend.proto`.
+`./internal/backendpb/backend.proto`. This service can be disabled with the
+[`PROFILES_ENABLED`][env-profiles_enabled] environment variable.
[env-profiles_url]: environment.md#PROFILES_URL
diff --git a/doc/querylog.md b/doc/querylog.md
index 08bef90..1c18b09 100644
--- a/doc/querylog.md
+++ b/doc/querylog.md
@@ -42,8 +42,9 @@ rules to remember, which property means what. The properties are:
alpha-2][wiki-iso] country code, if any. If none could be detected, this
property is absent. The short name `c` stands for “client country”.
- **NOTE:** AdGuard DNS uses the common user-assigned ISO 3166-1 alpha-2 code
- `XK` for the partially-recognized state of the Republic of Kosovo.
+ > [!NOTE]
+ > AdGuard DNS uses the common user-assigned ISO 3166-1 alpha-2 code `XK`
+ > for the partially-recognized state of the Republic of Kosovo.
**Example:** `"AU"`
@@ -53,8 +54,9 @@ rules to remember, which property means what. The properties are:
could be detected, this property is absent. The short name `d` stands for
“destination”.
- **NOTE:** AdGuard DNS uses the common user-assigned ISO 3166-1 alpha-2 code
- `XK` for the partially-recognized state of the Republic of Kosovo.
+ > [!NOTE]
+ > AdGuard DNS uses the common user-assigned ISO 3166-1 alpha-2 code `XK`
+ > for the partially-recognized state of the Republic of Kosovo.
**Example:** `"US"`
diff --git a/go.mod b/go.mod
index 44b559a..f15db5c 100644
--- a/go.mod
+++ b/go.mod
@@ -1,32 +1,32 @@
module github.com/AdguardTeam/AdGuardDNS
-go 1.21.5
+go 1.21.8
require (
github.com/AdguardTeam/AdGuardDNS/internal/dnsserver v0.0.0-00010101000000-000000000000
- github.com/AdguardTeam/golibs v0.18.1
- github.com/AdguardTeam/urlfilter v0.17.2
+ github.com/AdguardTeam/golibs v0.20.1
+ github.com/AdguardTeam/urlfilter v0.18.0
github.com/ameshkov/dnscrypt/v2 v2.2.7
- github.com/axiomhq/hyperloglog v0.0.0-20230201085229-3ddf4bad03dc
+ github.com/axiomhq/hyperloglog v0.0.0-20240124082744-24bca3a5b39b
github.com/bluele/gcache v0.0.2
- github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b
+ github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500
github.com/caarlos0/env/v7 v7.1.0
- github.com/getsentry/sentry-go v0.25.0
+ github.com/getsentry/sentry-go v0.27.0
github.com/google/renameio/v2 v2.0.0
- github.com/miekg/dns v1.1.56
+ github.com/miekg/dns v1.1.58
github.com/oschwald/maxminddb-golang v1.12.0
github.com/patrickmn/go-cache v2.1.1-0.20191004192108-46f407853014+incompatible
- github.com/prometheus/client_golang v1.17.0
+ github.com/prometheus/client_golang v1.18.0
github.com/prometheus/client_model v0.5.0
- github.com/prometheus/common v0.44.0
- github.com/quic-go/quic-go v0.39.0
+ github.com/prometheus/common v0.46.0
+ github.com/quic-go/quic-go v0.41.0
github.com/stretchr/testify v1.8.4
- golang.org/x/exp v0.0.0-20231006140011-7918f672742d
- golang.org/x/net v0.17.0
- golang.org/x/sys v0.13.0
- golang.org/x/time v0.3.0
- google.golang.org/grpc v1.58.3
- google.golang.org/protobuf v1.31.0
+ golang.org/x/exp v0.0.0-20240213143201-ec583247a57a
+ golang.org/x/net v0.21.0
+ golang.org/x/sys v0.17.0
+ golang.org/x/time v0.5.0
+ google.golang.org/grpc v1.61.1
+ google.golang.org/protobuf v1.32.0
gopkg.in/yaml.v2 v2.4.0
)
@@ -40,20 +40,18 @@ require (
github.com/dgryski/go-metro v0.0.0-20211217172704-adc40b04c140 // indirect
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 // indirect
- github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
- github.com/onsi/ginkgo/v2 v2.13.0 // indirect
- github.com/panjf2000/ants/v2 v2.8.2 // indirect
+ github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 // indirect
+ github.com/onsi/ginkgo/v2 v2.15.0 // indirect
+ github.com/panjf2000/ants/v2 v2.9.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/quic-go/qpack v0.4.0 // indirect
- github.com/quic-go/qtls-go1-20 v0.3.4 // indirect
- go.uber.org/mock v0.3.0 // indirect
- golang.org/x/crypto v0.14.0 // indirect
- golang.org/x/mod v0.13.0 // indirect
- golang.org/x/text v0.13.0 // indirect
- golang.org/x/tools v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c // indirect
+ go.uber.org/mock v0.4.0 // indirect
+ golang.org/x/crypto v0.19.0 // indirect
+ golang.org/x/mod v0.15.0 // indirect
+ golang.org/x/text v0.14.0 // indirect
+ golang.org/x/tools v0.18.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/go.sum b/go.sum
index 01d06ba..07b3d00 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
-github.com/AdguardTeam/golibs v0.18.1 h1:6u0fvrIj2qjUsRdbIGJ9AR0g5QRSWdKIo/DYl3tp5aM=
-github.com/AdguardTeam/golibs v0.18.1/go.mod h1:DKhCIXHcUYtBhU8ibTLKh1paUL96n5zhQBlx763sj+U=
-github.com/AdguardTeam/urlfilter v0.17.2 h1:xTntfr1UWah8m6wwoXJmFgplFk/+kL/hDu204ptrM1U=
-github.com/AdguardTeam/urlfilter v0.17.2/go.mod h1:Jru7jFfeH2CoDf150uDs+rRYcZBzHHBz05r9REyDKyE=
+github.com/AdguardTeam/golibs v0.20.1 h1:ol8qLjWGZhU9paMMwN+OLWVTUigGsXa29iVTyd62VKY=
+github.com/AdguardTeam/golibs v0.20.1/go.mod h1:bgcMgRviCKyU6mkrX+RtT/OsKPFzyppelfRsksMG3KU=
+github.com/AdguardTeam/urlfilter v0.18.0 h1:ZZzwODC/ADpjJSODxySrrUnt/fvOCfGFaCW6j+wsGfQ=
+github.com/AdguardTeam/urlfilter v0.18.0/go.mod h1:IXxBwedLiZA2viyHkaFxY/8mjub0li2PXRg8a3d9Z1s=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY=
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=
@@ -10,14 +10,14 @@ github.com/ameshkov/dnscrypt/v2 v2.2.7 h1:aEitLIR8HcxVodZ79mgRcCiC0A0I5kZPBuWGFw
github.com/ameshkov/dnscrypt/v2 v2.2.7/go.mod h1:qPWhwz6FdSmuK7W4sMyvogrez4MWdtzosdqlr0Rg3ow=
github.com/ameshkov/dnsstamps v1.0.3 h1:Srzik+J9mivH1alRACTbys2xOxs0lRH9qnTA7Y1OYVo=
github.com/ameshkov/dnsstamps v1.0.3/go.mod h1:Ii3eUu73dx4Vw5O4wjzmT5+lkCwovjzaEZZ4gKyIH5A=
-github.com/axiomhq/hyperloglog v0.0.0-20230201085229-3ddf4bad03dc h1:Keo7wQ7UODUaHcEi7ltENhbAK2VgZjfat6mLy03tQzo=
-github.com/axiomhq/hyperloglog v0.0.0-20230201085229-3ddf4bad03dc/go.mod h1:k08r+Yj1PRAmuayFiRK6MYuR5Ve4IuZtTfxErMIh0+c=
+github.com/axiomhq/hyperloglog v0.0.0-20240124082744-24bca3a5b39b h1:F3yMzKumBUQ6Fn0sYI1YQ16vQRucpZOfBQ9HXWl5+XI=
+github.com/axiomhq/hyperloglog v0.0.0-20240124082744-24bca3a5b39b/go.mod h1:k08r+Yj1PRAmuayFiRK6MYuR5Ve4IuZtTfxErMIh0+c=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bluele/gcache v0.0.2 h1:WcbfdXICg7G/DGBh1PFfcirkWOQV+v077yF1pSy3DGw=
github.com/bluele/gcache v0.0.2/go.mod h1:m15KV+ECjptwSPxKhOhQoAFQVtUFjTVkc3H8o0t/fp0=
-github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b h1:6+ZFm0flnudZzdSE0JxlhR2hKnGPcNB35BjQf4RYQDY=
-github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M=
+github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500 h1:6lhrsTEnloDPXyeZBvSYvQf8u86jbKehZPVDDlkgDl4=
+github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M=
github.com/caarlos0/env/v7 v7.1.0 h1:9lzTF5amyQeWHZzuZeKlCb5FWSUxpG1js43mhbY8ozg=
github.com/caarlos0/env/v7 v7.1.0/go.mod h1:LPPWniDUq4JaO6Q41vtlyikhMknqymCLBw0eX4dcH1E=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
@@ -28,25 +28,24 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw=
github.com/dgryski/go-metro v0.0.0-20211217172704-adc40b04c140 h1:y7y0Oa6UawqTFPCDw9JG6pdKt4F9pAhHv0B7FMGaGD0=
github.com/dgryski/go-metro v0.0.0-20211217172704-adc40b04c140/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw=
-github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI=
-github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
+github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps=
+github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
-github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
-github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+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-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 h1:pUa4ghanp6q4IJHwE9RwLgmVFfReJN+KbQ8ExNEUUoQ=
-github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
+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-20240207164012-fb44976bdcd5 h1:E/LAvt58di64hlYjx7AsNS6C/ysHWYo+2qPCZKTQhRo=
+github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg=
github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
@@ -55,18 +54,16 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
-github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE=
-github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY=
-github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
-github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
-github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
-github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M=
+github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
+github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
+github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY=
+github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
+github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8=
+github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
github.com/oschwald/maxminddb-golang v1.12.0 h1:9FnTOD0YOhP7DGxGsq4glzpGy5+w7pq50AS6wALUMYs=
github.com/oschwald/maxminddb-golang v1.12.0/go.mod h1:q0Nob5lTCqyQ8WT6FYgS1L7PXKVVbgiymefNwIjPzgY=
-github.com/panjf2000/ants/v2 v2.8.2 h1:D1wfANttg8uXhC9149gRt1PDQ+dLVFjNXkCEycMcvQQ=
-github.com/panjf2000/ants/v2 v2.8.2/go.mod h1:7ZxyxsqE4vvW0M7LSD8aI3cKwgFhBHbxnlN8mDqHa1I=
+github.com/panjf2000/ants/v2 v2.9.0 h1:SztCLkVxBRigbg+vt0S5QvF5vxAbxbKt09/YfAJ0tEo=
+github.com/panjf2000/ants/v2 v2.9.0/go.mod h1:7ZxyxsqE4vvW0M7LSD8aI3cKwgFhBHbxnlN8mDqHa1I=
github.com/patrickmn/go-cache v2.1.1-0.20191004192108-46f407853014+incompatible h1:IWzUvJ72xMjmrjR9q3H1PF+jwdN0uNQiR2t1BLNalyo=
github.com/patrickmn/go-cache v2.1.1-0.20191004192108-46f407853014+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
@@ -77,20 +74,18 @@ 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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
+github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk=
+github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA=
github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
-github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
-github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
+github.com/prometheus/common v0.46.0 h1:doXzt5ybi1HBKpsZOL0sSkaNHJJqkyfEWZGGqqScV0Y=
+github.com/prometheus/common v0.46.0/go.mod h1:Tp0qkxpb9Jsg54QMe+EAmqXkSV7Evdy1BTn+g2pa/hQ=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/qtls-go1-20 v0.3.4 h1:MfFAPULvst4yoMgY9QmtpYmfij/em7O8UUi+bNVm7Cg=
-github.com/quic-go/qtls-go1-20 v0.3.4/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k=
-github.com/quic-go/quic-go v0.39.0 h1:AgP40iThFMY0bj8jGxROhw3S0FMGa8ryqsmi9tBH3So=
-github.com/quic-go/quic-go v0.39.0/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q=
+github.com/quic-go/quic-go v0.41.0 h1:aD8MmHfgqTURWNJy48IYFg2OnxwHT3JL7ahGs73lb4k=
+github.com/quic-go/quic-go v0.41.0/go.mod h1:qCkNjqczPEvgsOnxZ0eCD14lv+B2LHlFAB++CNOh9hA=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/shirou/gopsutil/v3 v3.23.7 h1:C+fHO8hfIppoJ1WdsVm1RoI0RwXoNdfTK7yWXV0wVj4=
@@ -112,37 +107,36 @@ github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYm
github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo=
-go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
-golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
-golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
-golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
-golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
-golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+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.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
+golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
+golang.org/x/exp v0.0.0-20240213143201-ec583247a57a h1:HinSgX1tJRX3KsL//Gxynpw5CTOAIPhgL4W8PNiIpVE=
+golang.org/x/exp v0.0.0-20240213143201-ec583247a57a/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
+golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8=
+golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
+golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
-golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
-golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
-golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
-golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
-golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
+golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
+golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+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.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
+golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c h1:jHkCUWkseRf+W+edG5hMzr/Uh1xkDREY4caybAq4dpY=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0=
-google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ=
-google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9 h1:hZB7eLIaYlW9qXRfCq/qDaPdbeY3757uARz5Vvfv+cY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:YUWgXUFRPfoYK1IHMuxH5K6nPEXSCzIMljnQ59lLRCk=
+google.golang.org/grpc v1.61.1 h1:kLAiWrZs7YeDM6MumDe7m3y4aM6wacLzM1Y/wiLP9XY=
+google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
+google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
diff --git a/go.work b/go.work
index f0aeb95..73f6dc4 100644
--- a/go.work
+++ b/go.work
@@ -1,4 +1,4 @@
-go 1.21.5
+go 1.21.8
use (
.
diff --git a/go.work.sum b/go.work.sum
index b1d1317..41b9568 100644
--- a/go.work.sum
+++ b/go.work.sum
@@ -4,8 +4,11 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo=
cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8=
cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA=
+cloud.google.com/go/compute v1.21.0 h1:JNBsyXVoOoNJtTQcnEY5uYpZIbeCTYIeDe0Xh1bySMk=
cloud.google.com/go/compute v1.21.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
+cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI=
cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
+cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ=
cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU=
@@ -23,7 +26,9 @@ git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999 h1:OR8VhtwhcAI3U48/
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
github.com/AdguardTeam/golibs v0.10.7/go.mod h1:rSfQRGHIdgfxriDDNgNJ7HmE5zRoURq8R+VdR81Zuzw=
github.com/AdguardTeam/golibs v0.17.2/go.mod h1:DKhCIXHcUYtBhU8ibTLKh1paUL96n5zhQBlx763sj+U=
+github.com/AdguardTeam/golibs v0.19.0/go.mod h1:3WunclLLfrVAq7fYQRhd6f168FHOEMssnipVXCxDL/w=
github.com/AdguardTeam/gomitmproxy v0.2.0 h1:rvCOf17pd1/CnMyMQW891zrEiIQBpQ8cIGjKN9pinUU=
+github.com/AdguardTeam/gomitmproxy v0.2.1 h1:p9gr8Er1TYvf+7ic81Ax1sZ62UNCsMTZNbm7tC59S9o=
github.com/AdguardTeam/gomitmproxy v0.2.1/go.mod h1:Qdv0Mktnzer5zpdpi5rAwixNJzW2FN91LjKJCkVbYGU=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
@@ -46,6 +51,7 @@ github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjK
github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE=
github.com/alecthomas/kingpin/v2 v2.3.2 h1:H0aULhgmSzN8xQ3nX1uxtdlTHYoPLu5AhHxWrKI6ocU=
github.com/alecthomas/kingpin/v2 v2.3.2/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE=
+github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E=
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc=
@@ -64,10 +70,14 @@ github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBT
github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23 h1:D21IyuvjDCshj1/qq+pCNd3VZOAEI9jy6Bi131YlXgI=
github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=
+github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g=
github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
+github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89 h1:aPflPkRFkVwbW6dmcVqfgwp1i+UWGFH6VgR1Jim5Ygc=
github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs=
+github.com/chromedp/chromedp v0.9.2 h1:dKtNz4kApb06KuSXoTQIyUC2TrA0fhGDwNZf3bcgfKw=
github.com/chromedp/chromedp v0.9.2/go.mod h1:LkSXJKONWTCHAfQasKFUZI+mxqS4tZqhmtGzzhLsnLs=
+github.com/chromedp/sysutil v1.0.0 h1:+ZxhTpfpZlmchB58ih/LBHX52ky7w2VhQVKQMucy3Ic=
github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww=
github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
@@ -86,8 +96,11 @@ github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38
github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f h1:WBZRG4aNOuI15bLRrCgN8fCq8E5Xuty6jGbmSNEvSsU=
+github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk=
github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
+github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 h1:sDMmm+q/3+BukdIpxwO365v/Rbspp2Nt5XntgQRXq8Q=
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d h1:t5Wuyh53qYyg9eqn4BbnlIT+vmhyww0TatL+zT3uWgI=
@@ -98,8 +111,10 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o=
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
github.com/envoyproxy/go-control-plane v0.9.4 h1:rEvIZUSZ3fx39WIi3JkQqQBitGwpELBIYWeBVh6wn+E=
+github.com/envoyproxy/go-control-plane v0.11.1 h1:wSUXTlLfiAQRWs2F+p+EKOY9rUyis1MyGqJ2DIk5HpM=
github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g=
github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=
+github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE=
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
@@ -141,8 +156,11 @@ github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl
github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ=
github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
+github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=
github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
+github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
+github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk=
github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY=
github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk=
github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
@@ -151,7 +169,9 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE=
github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
+github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
github.com/golang/lint v0.0.0-20180702182130-06c8688daad7 h1:2hRPrmiwPrp3fQX967rNJIhQPtiGXdlQWAxKbKw3VHA=
github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E=
@@ -180,6 +200,7 @@ github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20230821062121-407c9e7a662f/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go v2.0.0+incompatible h1:j0GKcs05QVmm7yesiZq2+9cxHkNK9YM6zKx4D2qucQU=
github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY=
github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg=
@@ -292,6 +313,7 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/microcosm-cc/bluemonday v1.0.1 h1:SIYunPjnlXcW+gVfvm0IlSeR5U3WZUOLfVmqg85Go44=
github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
github.com/microcosm-cc/bluemonday v1.0.21 h1:dNH3e4PSyE4vNX+KlRGHT5KrSvjeUkoNPwEORjffHJg=
@@ -336,6 +358,7 @@ github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr
github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/quic-go/qtls-go1-20 v0.3.3/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k=
github.com/quic-go/quic-go v0.38.0/go.mod h1:MPCuRq7KBK2hNcfKj/1iD1BGuN3eAYMeNxp3T42LRUg=
+github.com/quic-go/quic-go v0.39.4/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q=
github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
@@ -446,12 +469,14 @@ go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1
golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d h1:E2M5QgjZ/Jg+ObCQAudsXxuTsLj7Nl5RV/lZcQZmKSo=
golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw=
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80=
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
+golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20221019170559-20944726eadf/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
@@ -497,7 +522,9 @@ golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq
golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I=
golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8=
golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE=
+golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8=
golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI=
+golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o=
golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852 h1:xYq6+9AtI+xP3M4r0N1hCkHrInHDBohhquRgx9Kk6gI=
golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -508,6 +535,7 @@ golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/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-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -523,6 +551,9 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808/go.mod h1:KG1lNk5ZFNssSZLrpVb4sMXKMpGwGXOxSG3rnu2gZQQ=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw=
golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI=
@@ -532,7 +563,13 @@ golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c=
golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
+golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
+golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
+golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
+golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
+golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
@@ -553,6 +590,7 @@ golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM=
golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
@@ -566,6 +604,7 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
@@ -576,7 +615,11 @@ google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWof
google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8=
google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 h1:SeZZZx0cP0fqUyA+oRzP9k7cSwJlvDFiROO72uwD6i0=
google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk=
+google.golang.org/genproto v0.0.0-20240205150955-31a09d347014 h1:g/4bk7P6TPMkAUbUhquq98xey1slwvuVJPosdBqYJlU=
+google.golang.org/genproto v0.0.0-20240205150955-31a09d347014/go.mod h1:xEgQu1e4stdSSsxPDK8Azkrk/ECl5HvdPf6nbZrTS5M=
+google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 h1:FmF5cCW94Ij59cfpoLiwTgodWmm60eEV0CjlsVg2fuw=
google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ=
+google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
diff --git a/internal/access/access.go b/internal/access/access.go
index e44cc80..7e0dbce 100644
--- a/internal/access/access.go
+++ b/internal/access/access.go
@@ -6,6 +6,7 @@ import (
"net/netip"
"strings"
+ "github.com/AdguardTeam/golibs/netutil"
"github.com/AdguardTeam/golibs/stringutil"
"github.com/AdguardTeam/urlfilter"
"github.com/AdguardTeam/urlfilter/filterlist"
@@ -23,26 +24,20 @@ type Interface interface {
// IsBlockedIP returns the status of the IP address blocking as well as the
// rule that blocked it.
- IsBlockedIP(ip netip.Addr) (blocked bool, rule string)
+ IsBlockedIP(ip netip.Addr) (blocked bool)
}
// Global controls IP and client blocking that takes place before all other
// processing. Global is safe for concurrent use.
type Global struct {
- blockedIPs map[netip.Addr]string
blockedHostsEng *urlfilter.DNSEngine
- blockedNets []netip.Prefix
+ blockedNets netutil.SubnetSet
}
// NewGlobal create a new Global from provided parameters.
-func NewGlobal(blockedDomains, blockedSubnets []string) (g *Global, err error) {
+func NewGlobal(blockedDomains []string, blockedSubnets []netip.Prefix) (g *Global, err error) {
g = &Global{
- blockedIPs: map[netip.Addr]string{},
- }
-
- err = processAccessList(blockedSubnets, g.blockedIPs, &g.blockedNets)
- if err != nil {
- return nil, fmt.Errorf("adding blocked hosts: %w", err)
+ blockedNets: netutil.SliceSubnetSet(blockedSubnets),
}
b := &strings.Builder{}
@@ -68,24 +63,6 @@ func NewGlobal(blockedDomains, blockedSubnets []string) (g *Global, err error) {
return g, nil
}
-// processAccessList is a helper for processing a list of strings, each of them
-// could be an IP address or a CIDR.
-func processAccessList(strs []string, ips map[netip.Addr]string, nets *[]netip.Prefix) (err error) {
- for _, s := range strs {
- var ip netip.Addr
- var ipnet netip.Prefix
- if ip, err = netip.ParseAddr(s); err == nil {
- ips[ip] = ip.String()
- } else if ipnet, err = netip.ParsePrefix(s); err == nil {
- *nets = append(*nets, ipnet)
- } else {
- return fmt.Errorf("cannot parse subnet or ip address: %q", s)
- }
- }
-
- return nil
-}
-
// type check
var _ Interface = (*Global)(nil)
@@ -104,16 +81,6 @@ func (g *Global) IsBlockedHost(host string, qt uint16) (blocked bool) {
}
// IsBlockedIP implements the [Interface] interface for *Global.
-func (g *Global) IsBlockedIP(ip netip.Addr) (blocked bool, rule string) {
- if ipStr, ok := g.blockedIPs[ip]; ok {
- return true, ipStr
- }
-
- for _, ipnet := range g.blockedNets {
- if ipnet.Contains(ip) {
- return true, ipnet.String()
- }
- }
-
- return false, ""
+func (g *Global) IsBlockedIP(ip netip.Addr) (blocked bool) {
+ return g.blockedNets.Contains(ip)
}
diff --git a/internal/access/access_test.go b/internal/access/access_test.go
index b4d2ee0..8d47940 100644
--- a/internal/access/access_test.go
+++ b/internal/access/access_test.go
@@ -17,7 +17,7 @@ func TestGlobal_IsBlockedHost(t *testing.T) {
"||block_aaaa.test^$dnstype=AAAA",
"||allowlist.test^",
"@@||allow.allowlist.test^",
- }, []string{})
+ }, nil)
require.NoError(t, err)
testCases := []struct {
@@ -76,44 +76,38 @@ func TestGlobal_IsBlockedHost(t *testing.T) {
}
func TestGlobal_IsBlockedIP(t *testing.T) {
- global, err := access.NewGlobal([]string{}, []string{
- "1.1.1.1",
- "2.2.2.0/8",
+ global, err := access.NewGlobal([]string{}, []netip.Prefix{
+ netip.MustParsePrefix("1.1.1.1/32"),
+ netip.MustParsePrefix("2.2.2.0/8"),
})
require.NoError(t, err)
testCases := []struct {
- want assert.BoolAssertionFunc
- ip netip.Addr
- wantRule string
- name string
+ want assert.BoolAssertionFunc
+ ip netip.Addr
+ name string
}{{
- want: assert.False,
- wantRule: "",
- name: "pass",
- ip: netip.MustParseAddr("1.1.1.0"),
+ want: assert.False,
+ name: "pass",
+ ip: netip.MustParseAddr("1.1.1.0"),
}, {
- want: assert.True,
- wantRule: "1.1.1.1",
- name: "block_ip",
- ip: netip.MustParseAddr("1.1.1.1"),
+ want: assert.True,
+ name: "block_ip",
+ ip: netip.MustParseAddr("1.1.1.1"),
}, {
- want: assert.False,
- wantRule: "",
- name: "pass_subnet",
- ip: netip.MustParseAddr("1.2.2.2"),
+ want: assert.False,
+ name: "pass_subnet",
+ ip: netip.MustParseAddr("1.2.2.2"),
}, {
- want: assert.True,
- wantRule: "2.2.2.0/8",
- name: "block_subnet",
- ip: netip.MustParseAddr("2.2.2.2"),
+ want: assert.True,
+ name: "block_subnet",
+ ip: netip.MustParseAddr("2.2.2.2"),
}}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
- blocked, rule := global.IsBlockedIP(tc.ip)
+ blocked := global.IsBlockedIP(tc.ip)
tc.want(t, blocked)
- assert.Equal(t, tc.wantRule, rule)
})
}
}
diff --git a/internal/access/engine.go b/internal/access/engine.go
index e38512a..26c9548 100644
--- a/internal/access/engine.go
+++ b/internal/access/engine.go
@@ -29,7 +29,8 @@ func newBlockedHostEngine(rules []string) (e *blockedHostEngine) {
}
}
-// isBlocked returns true if the req is blocked by this engine.
+// isBlocked returns true if the req is blocked by this engine. req must have
+// exactly one question.
func (e *blockedHostEngine) isBlocked(req *dns.Msg) (blocked bool) {
e.initOnce.Do(func() {
start := time.Now()
diff --git a/internal/access/profile.go b/internal/access/profile.go
index 767d7c6..691fe3b 100644
--- a/internal/access/profile.go
+++ b/internal/access/profile.go
@@ -131,7 +131,7 @@ func matchASNs(asns []geoip.ASN, l *geoip.Location) (ok bool) {
}
// isBlockedByHostsEng returns true if the req is blocked by
-// BlocklistDomainRules.
+// BlocklistDomainRules. req must have exactly one question.
func (p *DefaultProfile) isBlockedByHostsEng(req *dns.Msg) (blocked bool) {
return p.blockedHostsEng.isBlocked(req)
}
diff --git a/internal/agd/server.go b/internal/agd/server.go
index df7efae..ac7b540 100644
--- a/internal/agd/server.go
+++ b/internal/agd/server.go
@@ -9,76 +9,9 @@ import (
"github.com/AdguardTeam/AdGuardDNS/internal/agdnet"
"github.com/AdguardTeam/AdGuardDNS/internal/dnsserver/netext"
"github.com/AdguardTeam/golibs/errors"
- "github.com/AdguardTeam/golibs/stringutil"
"github.com/ameshkov/dnscrypt/v2"
- "github.com/miekg/dns"
)
-// Servers And Server Groups
-
-// ServerGroup is a group of DNS servers all of which use the same filtering
-// settings.
-type ServerGroup struct {
- // TLS are the TLS settings for this server group. If Servers contains at
- // least one server with a non-plain protocol (see [Protocol.IsPlain]), TLS
- // must not be nil.
- TLS *TLS
-
- // DDR is the configuration for the server group's Discovery Of Designated
- // Resolvers (DDR) handlers. DDR is never nil.
- DDR *DDR
-
- // Name is the unique name of the server group.
- Name ServerGroupName
-
- // FilteringGroup is the ID of the filtering group for this server.
- FilteringGroup FilteringGroupID
-
- // Servers are the settings for servers. Each element must be non-nil.
- Servers []*Server
-}
-
-// ServerGroupName is the name of a server group.
-type ServerGroupName string
-
-// TLS is the TLS configuration of a DNS server group.
-type TLS struct {
- // Conf is the server's TLS configuration.
- Conf *tls.Config
-
- // DeviceIDWildcards are the domain wildcards used to detect device IDs from
- // clients' server names.
- DeviceIDWildcards []string
-
- // SessionKeys are paths to files containing the TLS session keys for this
- // server.
- SessionKeys []string
-}
-
-// DDR is the configuration for the server group's Discovery Of Designated
-// Resolvers (DDR) handlers.
-type DDR struct {
- // DeviceTargets is the set of all domain names, subdomains of which should
- // be checked for DDR queries with device IDs.
- DeviceTargets *stringutil.Set
-
- // PublicTargets is the set of all public domain names, DDR queries for
- // which should be processed.
- PublicTargets *stringutil.Set
-
- // DeviceRecordTemplates are used to respond to DDR queries from recognized
- // devices.
- DeviceRecordTemplates []*dns.SVCB
-
- // PubilcRecordTemplates are used to respond to DDR queries from
- // unrecognized devices.
- PublicRecordTemplates []*dns.SVCB
-
- // Enabled shows if DDR queries are processed. If it is false, DDR domain
- // name queries receive an NXDOMAIN response.
- Enabled bool
-}
-
// Server represents a single DNS server. That is, an entity that binds to one
// or more ports and serves DNS over a single protocol.
type Server struct {
@@ -192,6 +125,24 @@ func (s *Server) BindsToInterfaces() (ok bool) {
return len(s.bindData) > 0 && s.bindData[0].PrefixAddr != nil
}
+// BindDataPrefixes returns a slice of CIDR networks collected from the bind
+// data of this server.
+func (s *Server) BindDataPrefixes() (ps []netip.Prefix) {
+ for _, bd := range s.bindData {
+ var pref netip.Prefix
+ if bd.PrefixAddr == nil {
+ addr := bd.AddrPort.Addr()
+ pref = netip.PrefixFrom(addr, addr.BitLen())
+ } else {
+ pref = bd.PrefixAddr.Prefix
+ }
+
+ ps = append(ps, pref)
+ }
+
+ return ps
+}
+
// ServerBindData are the socket binding data for a server. Either AddrPort or
// ListenConfig with PrefixAddr must be set.
//
diff --git a/internal/agd/server_test.go b/internal/agd/server_test.go
index 534f091..4b57723 100644
--- a/internal/agd/server_test.go
+++ b/internal/agd/server_test.go
@@ -13,27 +13,31 @@ import (
// Common variables for tests.
var (
+ addrV4 = netip.MustParseAddr("1.2.3.4")
bindDataAddrPortV4 = &agd.ServerBindData{
- AddrPort: netip.MustParseAddrPort("1.2.3.4:53"),
+ AddrPort: netip.AddrPortFrom(addrV4, 53),
}
+ addrV6 = netip.MustParseAddr("1234::cdef")
bindDataAddrPortV6 = &agd.ServerBindData{
- AddrPort: netip.MustParseAddrPort("[1234::cdef]:53"),
+ AddrPort: netip.AddrPortFrom(addrV6, 53),
}
+ prefixV4 = netip.MustParsePrefix("1.2.3.0/24")
bindDataIface = &agd.ServerBindData{
ListenConfig: &agdtest.ListenConfig{},
PrefixAddr: &agdnet.PrefixNetAddr{
- Prefix: netip.MustParsePrefix("1.2.3.0/24"),
+ Prefix: prefixV4,
Net: "",
Port: 53,
},
}
+ singleIPPrefixV4 = netip.MustParsePrefix("1.2.3.4/32")
bindDataIfaceSingleIP = &agd.ServerBindData{
ListenConfig: &agdtest.ListenConfig{},
PrefixAddr: &agdnet.PrefixNetAddr{
- Prefix: netip.MustParsePrefix("1.2.3.4/32"),
+ Prefix: singleIPPrefixV4,
Net: "",
Port: 53,
},
@@ -105,6 +109,41 @@ func TestServer_BindsToInterfaces(t *testing.T) {
assert.True(t, s.BindsToInterfaces())
}
+func TestServer_BindDataPrefixes(t *testing.T) {
+ testCases := []struct {
+ bindData *agd.ServerBindData
+ name string
+ want []netip.Prefix
+ }{{
+ bindData: bindDataAddrPortV4,
+ want: []netip.Prefix{netip.PrefixFrom(addrV4, addrV4.BitLen())},
+ name: "addr_port_v4",
+ }, {
+ bindData: bindDataAddrPortV6,
+ want: []netip.Prefix{netip.PrefixFrom(addrV6, addrV6.BitLen())},
+ name: "addr_port_v6",
+ }, {
+ bindData: bindDataIface,
+ want: []netip.Prefix{prefixV4},
+ name: "prefix",
+ }, {
+ bindData: bindDataIfaceSingleIP,
+ want: []netip.Prefix{singleIPPrefixV4},
+ name: "prefix_single_ip",
+ }}
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ s := &agd.Server{}
+ require.NotPanics(t, func() {
+ s.SetBindData([]*agd.ServerBindData{tc.bindData})
+ })
+
+ assert.Equal(t, tc.want, s.BindDataPrefixes())
+ })
+ }
+}
+
func TestServer_HasAddr(t *testing.T) {
testCases := []struct {
bindData *agd.ServerBindData
diff --git a/internal/agd/servergroup.go b/internal/agd/servergroup.go
new file mode 100644
index 0000000..51c7ba6
--- /dev/null
+++ b/internal/agd/servergroup.go
@@ -0,0 +1,158 @@
+package agd
+
+import (
+ "crypto/tls"
+ "fmt"
+ "math"
+ "net/netip"
+
+ "github.com/AdguardTeam/golibs/stringutil"
+ "github.com/miekg/dns"
+)
+
+// ServerGroup is a group of DNS servers all of which use the same filtering
+// settings.
+type ServerGroup struct {
+ // BlockPageRedirect is the configuration for the server group's block page.
+ // BlockPageRedirect is never nil.
+ //
+ // TODO(a.garipov): Use.
+ BlockPageRedirect *BlockPageRedirect
+
+ // DDR is the configuration for the server group's Discovery Of Designated
+ // Resolvers (DDR) handlers. DDR is never nil.
+ DDR *DDR
+
+ // TLS are the TLS settings for this server group. If Servers contains at
+ // least one server with a non-plain protocol (see [Protocol.IsPlain]), TLS
+ // must not be nil.
+ TLS *TLS
+
+ // Name is the unique name of the server group.
+ Name ServerGroupName
+
+ // FilteringGroup is the ID of the filtering group for this server.
+ FilteringGroup FilteringGroupID
+
+ // Servers are the settings for servers. Each element must be non-nil.
+ Servers []*Server
+}
+
+// ServerGroupName is the name of a server group.
+type ServerGroupName string
+
+// TLS is the TLS configuration of a DNS server group.
+type TLS struct {
+ // Conf is the server's TLS configuration.
+ Conf *tls.Config
+
+ // DeviceIDWildcards are the domain wildcards used to detect device IDs from
+ // clients' server names.
+ DeviceIDWildcards []string
+
+ // SessionKeys are paths to files containing the TLS session keys for this
+ // server.
+ SessionKeys []string
+}
+
+// DDR is the configuration for the server group's Discovery Of Designated
+// Resolvers (DDR) handlers.
+type DDR struct {
+ // DeviceTargets is the set of all domain names, subdomains of which should
+ // be checked for DDR queries with device IDs.
+ DeviceTargets *stringutil.Set
+
+ // PublicTargets is the set of all public domain names, DDR queries for
+ // which should be processed.
+ PublicTargets *stringutil.Set
+
+ // DeviceRecordTemplates are used to respond to DDR queries from recognized
+ // devices.
+ DeviceRecordTemplates []*dns.SVCB
+
+ // PubilcRecordTemplates are used to respond to DDR queries from
+ // unrecognized devices.
+ PublicRecordTemplates []*dns.SVCB
+
+ // Enabled shows if DDR queries are processed. If it is false, DDR domain
+ // name queries receive an NXDOMAIN response.
+ Enabled bool
+}
+
+// BlockPageRedirect is the configuration for a [ServerGroup]'s block page.
+type BlockPageRedirect struct {
+ // Apply defines request parameters based on which the block page is shown
+ // always. If a request matches Apply, both [BlockPageRedirect.Skip] and
+ // [BlockPageRedirect.Probability] are ignored.
+ //
+ // If [BlockPageRedirect.Enabled] is true, Apply must not be nil.
+ Apply *BlockPageRedirectApply
+
+ // Skip defines request parameters based on which the block page is not
+ // shown, regardless of [BlockPageRedirect.Probability].
+ //
+ // If [BlockPageRedirect.Enabled] is true, Skip must not be nil.
+ Skip *BlockPageRedirectSkip
+
+ // IPv4 are the IPv4 addresses of the block page, used to respond to A
+ // queries.
+ //
+ // If [BlockPageRedirect.Enabled] is true, IPv4, [BlockPageRedirect.IPv6],
+ // or both must be filled.
+ IPv4 []netip.Addr
+
+ // IPv6 are the IPv6 addresses of the block page, used to respond to AAAA
+ // queries.
+ //
+ // If [BlockPageRedirect.Enabled] is true, [BlockPageRedirect.IPv4], IPv6,
+ // or both must be filled.
+ IPv6 []netip.Addr
+
+ // Probability defines the probability of responding with the block page IPs
+ // based on remote address. Probability must be between 0.0 and 1.0.
+ Probability Probability
+
+ // Enabled defines whether the block-page feature is enabled.
+ Enabled bool
+}
+
+// Probability is a type for probabilities ranging from 0.0 to 1.0.
+type Probability float64
+
+// NewProbability returns a properly converted Probability or an error.
+func NewProbability(f float64) (prob Probability, err error) {
+ if math.IsNaN(f) || f < 0.0 || f > 1.0 {
+ return 0, fmt.Errorf("probability must be between 0.0 and 1.0; got %v", f)
+ }
+
+ return Probability(f), nil
+}
+
+// MustNewProbability returns a properly converted Probability or panics with an
+// error.
+func MustNewProbability(f float64) (prob Probability) {
+ prob, err := NewProbability(f)
+ if err != nil {
+ panic(err)
+ }
+
+ return prob
+}
+
+// BlockPageRedirectApply defines the conditions for applying the block-page
+// logic for a particular request.
+type BlockPageRedirectApply struct {
+ // ClientSubnets are the subnets for which block page is always enabled.
+ ClientSubnets []netip.Prefix
+}
+
+// BlockPageRedirectSkip defines the conditions for skipping the block page
+// logic for a particular request.
+type BlockPageRedirectSkip struct {
+ // ClientSubnets are the subnets for which block page is always disabled.
+ ClientSubnets []netip.Prefix
+
+ // QuestionDomains are the domain names for which block page is always
+ // disabled.
+ QuestionDomains []string
+}
diff --git a/internal/agdnet/agdnet.go b/internal/agdnet/agdnet.go
index c0e258c..32e9036 100644
--- a/internal/agdnet/agdnet.go
+++ b/internal/agdnet/agdnet.go
@@ -4,8 +4,6 @@
package agdnet
import (
- "fmt"
- "net/netip"
"strings"
)
@@ -48,33 +46,6 @@ func AndroidMetricDomainReplacement(fqdn string) (repl string) {
return ""
}
-// ParseSubnets parses IP networks, including single-address ones, from strings.
-func ParseSubnets(strs ...string) (subnets []netip.Prefix, err error) {
- subnets = make([]netip.Prefix, len(strs))
- for i, s := range strs {
- // Detect if this is a CIDR or an IP early, so that the path to
- // returning an error is shorter.
- if strings.Contains(s, "/") {
- subnets[i], err = netip.ParsePrefix(s)
- if err != nil {
- return nil, fmt.Errorf("subnet at idx %d: %w", i, err)
- }
-
- continue
- }
-
- var ip netip.Addr
- ip, err = netip.ParseAddr(s)
- if err != nil {
- return nil, fmt.Errorf("ip at idx %d: %w", i, err)
- }
-
- subnets[i] = netip.PrefixFrom(ip, ip.BitLen())
- }
-
- return subnets, nil
-}
-
// NormalizeDomain returns lowercased version of the host without the final dot.
//
// TODO(a.garipov): Move to golibs.
diff --git a/internal/agdservice/agdservice.go b/internal/agdservice/agdservice.go
index f83ab5c..3fa27bc 100644
--- a/internal/agdservice/agdservice.go
+++ b/internal/agdservice/agdservice.go
@@ -1,38 +1,7 @@
// Package agdservice defines types and interfaces for long-running services.
//
-// TODO(a.garipov): Move to golibs.
+// TODO(a.garipov): Move more to golibs.
package agdservice
-import "context"
-
-// Interface is the interface for long-running services.
-//
-// TODO(a.garipov): Define whether or not a service should finish starting or
-// shutting down before returning from these methods.
-type Interface interface {
- // Start starts the service. ctx is used for cancelation.
- //
- // TODO(a.garipov): Use contexts with timeouts everywhere.
- Start(ctx context.Context) (err error)
-
- // Shutdown gracefully stops the service. ctx is used to determine
- // a timeout before trying to stop the service less gracefully.
- //
- // TODO(a.garipov): Use contexts with timeouts everywhere.
- Shutdown(ctx context.Context) (err error)
-}
-
-// type check
-var _ Interface = Empty{}
-
-// Empty is an [Interface] implementation that does nothing.
-type Empty struct{}
-
-// Start implements the [Interface] interface for Empty.
-func (Empty) Start(_ context.Context) (err error) { return nil }
-
-// Shutdown implements the [Interface] interface for Empty.
-func (Empty) Shutdown(_ context.Context) (err error) { return nil }
-
// unit is a convenient alias for struct{}.
type unit = struct{}
diff --git a/internal/agdservice/refresh.go b/internal/agdservice/refresh.go
index a685260..0ac590c 100644
--- a/internal/agdservice/refresh.go
+++ b/internal/agdservice/refresh.go
@@ -7,6 +7,7 @@ import (
"github.com/AdguardTeam/AdGuardDNS/internal/errcoll"
"github.com/AdguardTeam/golibs/log"
+ "github.com/AdguardTeam/golibs/service"
"golang.org/x/exp/rand"
)
@@ -111,17 +112,17 @@ func NewRefreshWorker(c *RefreshWorkerConfig) (w *RefreshWorker) {
}
// type check
-var _ Interface = (*RefreshWorker)(nil)
+var _ service.Interface = (*RefreshWorker)(nil)
-// Start implements the [Interface] interface for *RefreshWorker. err is always
-// nil.
+// Start implements the [service.Interface] interface for *RefreshWorker. err
+// is always nil.
func (w *RefreshWorker) Start(_ context.Context) (err error) {
go w.refreshInALoop()
return nil
}
-// Shutdown implements the [Interface] interface for *RefreshWorker.
+// Shutdown implements the [service.Interface] interface for *RefreshWorker.
func (w *RefreshWorker) Shutdown(ctx context.Context) (err error) {
if w.refrOnShutdown {
err = w.refr.Refresh(ctx)
diff --git a/internal/agdtest/interface.go b/internal/agdtest/interface.go
index 716522c..00b901c 100644
--- a/internal/agdtest/interface.go
+++ b/internal/agdtest/interface.go
@@ -39,7 +39,7 @@ var _ access.Interface = (*AccessManager)(nil)
// AccessManager is a [access.Interface] for tests.
type AccessManager struct {
OnIsBlockedHost func(host string, qt uint16) (blocked bool)
- OnIsBlockedIP func(ip netip.Addr) (blocked bool, rule string)
+ OnIsBlockedIP func(ip netip.Addr) (blocked bool)
}
// IsBlockedHost implements the [access.Interface] interface for *AccessManager.
@@ -48,7 +48,7 @@ func (a *AccessManager) IsBlockedHost(host string, qt uint16) (blocked bool) {
}
// IsBlockedIP implements the [access.Interface] interface for *AccessManager.
-func (a *AccessManager) IsBlockedIP(ip netip.Addr) (blocked bool, rule string) {
+func (a *AccessManager) IsBlockedIP(ip netip.Addr) (blocked bool) {
return a.OnIsBlockedIP(ip)
}
diff --git a/internal/backendpb/profiledb.go b/internal/backendpb/profiledb.go
index 8318997..1ae0d8f 100644
--- a/internal/backendpb/profiledb.go
+++ b/internal/backendpb/profiledb.go
@@ -16,8 +16,10 @@ import (
"github.com/AdguardTeam/AdGuardDNS/internal/dnsmsg"
"github.com/AdguardTeam/AdGuardDNS/internal/errcoll"
"github.com/AdguardTeam/AdGuardDNS/internal/geoip"
+ "github.com/AdguardTeam/AdGuardDNS/internal/metrics"
"github.com/AdguardTeam/AdGuardDNS/internal/profiledb"
"github.com/AdguardTeam/golibs/errors"
+ "github.com/AdguardTeam/golibs/netutil"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/status"
@@ -27,6 +29,9 @@ import (
// ProfileStorageConfig is the configuration for the business logic backend
// profile storage.
type ProfileStorageConfig struct {
+ // BindSet is the subnet set created from DNS servers listening addresses.
+ BindSet netutil.SubnetSet
+
// ErrColl is the error collector that is used to collect critical and
// non-critical errors.
ErrColl errcoll.Interface
@@ -40,6 +45,7 @@ type ProfileStorageConfig struct {
// that retrieves the profile and device information from the business logic
// backend. It is safe for concurrent use.
type ProfileStorage struct {
+ bindSet netutil.SubnetSet
errColl errcoll.Interface
// client is the current GRPC client.
@@ -56,6 +62,7 @@ func NewProfileStorage(c *ProfileStorageConfig) (s *ProfileStorage, err error) {
}
return &ProfileStorage{
+ bindSet: c.BindSet,
client: client,
errColl: c.ErrColl,
}, nil
@@ -97,7 +104,7 @@ func (s *ProfileStorage) Profiles(
stats.endRecv()
stats.startDec()
- prof, devices, profErr := profile.toInternal(ctx, time.Now(), s.errColl)
+ prof, devices, profErr := profile.toInternal(ctx, time.Now(), s.bindSet, s.errColl)
if profErr != nil {
reportf(ctx, s.errColl, "loading profile: %w", profErr)
@@ -140,6 +147,7 @@ func fixGRPCError(err error) (wErr error) {
func (x *DNSProfile) toInternal(
ctx context.Context,
updTime time.Time,
+ bindSet netutil.SubnetSet,
errColl errcoll.Interface,
) (profile *agd.Profile, devices []*agd.Device, err error) {
if x == nil {
@@ -156,7 +164,7 @@ func (x *DNSProfile) toInternal(
return nil, nil, fmt.Errorf("blocking mode: %w", err)
}
- devices, deviceIds := devicesToInternal(ctx, x.Devices, errColl)
+ devices, deviceIds := devicesToInternal(ctx, x.Devices, bindSet, errColl)
listsEnabled, listIDs := x.RuleLists.toInternal(ctx, errColl)
profID, err := agd.NewProfileID(x.DnsId)
@@ -384,6 +392,7 @@ func blockingModeToInternal(pbm isDNSProfile_BlockingMode) (m dnsmsg.BlockingMod
func devicesToInternal(
ctx context.Context,
ds []*DeviceSettings,
+ bindSet netutil.SubnetSet,
errColl errcoll.Interface,
) (out []*agd.Device, ids []agd.DeviceID) {
l := len(ds)
@@ -393,9 +402,10 @@ func devicesToInternal(
out = make([]*agd.Device, 0, l)
for _, d := range ds {
- dev, err := d.toInternal()
+ dev, err := d.toInternal(bindSet)
if err != nil {
reportf(ctx, errColl, "invalid device settings: %w", err)
+ metrics.DevicesInvalidTotal.Inc()
continue
}
@@ -409,7 +419,7 @@ func devicesToInternal(
// toInternal is a helper that converts device settings from backend protobuf
// response to AdGuard DNS device object.
-func (ds *DeviceSettings) toInternal() (dev *agd.Device, err error) {
+func (ds *DeviceSettings) toInternal(bindSet netutil.SubnetSet) (dev *agd.Device, err error) {
if ds == nil {
return nil, fmt.Errorf("device is nil")
}
@@ -426,6 +436,13 @@ func (ds *DeviceSettings) toInternal() (dev *agd.Device, err error) {
return nil, fmt.Errorf("dedicated ips: %w", err)
}
+ // TODO(d.kolyshev): Extract business logic validation.
+ for _, addr := range dedicatedIPs {
+ if !bindSet.Contains(addr) {
+ return nil, fmt.Errorf("dedicated ip %q is not in bind data", addr)
+ }
+ }
+
id, err := agd.NewDeviceID(ds.Id)
if err != nil {
return nil, fmt.Errorf("device id: %s: %w", ds.Id, err)
diff --git a/internal/backendpb/profiledb_internal_test.go b/internal/backendpb/profiledb_internal_test.go
index f9e1cd7..000197e 100644
--- a/internal/backendpb/profiledb_internal_test.go
+++ b/internal/backendpb/profiledb_internal_test.go
@@ -30,6 +30,9 @@ const testProfileID agd.ProfileID = "prof1234"
// TestUpdTime is the common update time for tests.
var TestUpdTime = time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)
+// testBind includes any IPv4 address.
+var testBind = netip.MustParsePrefix("0.0.0.0/0")
+
func TestDNSProfile_ToInternal(t *testing.T) {
ctx := context.Background()
@@ -40,7 +43,7 @@ func TestDNSProfile_ToInternal(t *testing.T) {
}
t.Run("success", func(t *testing.T) {
- got, gotDevices, err := NewTestDNSProfile(t).toInternal(ctx, TestUpdTime, errColl)
+ got, gotDevices, err := NewTestDNSProfile(t).toInternal(ctx, TestUpdTime, testBind, errColl)
require.NoError(t, err)
assert.Equal(t, newProfile(t), got)
@@ -57,18 +60,44 @@ func TestDNSProfile_ToInternal(t *testing.T) {
got, gotDevices, err := newDNSProfileWithBadData(t).toInternal(
ctx,
TestUpdTime,
+ testBind,
savingErrColl,
)
require.NoError(t, err)
- require.Error(t, errCollErr)
+ testutil.AssertErrorMsg(t, "backendpb: invalid device settings:"+
+ " dedicated ips: ip at index 0: unexpected slice size", errCollErr)
assert.Equal(t, newProfile(t), got)
assert.Equal(t, newDevices(t), gotDevices)
})
+ t.Run("invalid_device_ded_ip", func(t *testing.T) {
+ var errCollErr error
+ savingErrColl := &agdtest.ErrorCollector{
+ OnCollect: func(_ context.Context, err error) {
+ errCollErr = err
+ },
+ }
+
+ bindSet := netip.MustParsePrefix("2.2.2.2/32")
+ got, gotDevices, err := NewTestDNSProfile(t).toInternal(
+ ctx,
+ TestUpdTime,
+ bindSet,
+ savingErrColl,
+ )
+ require.NoError(t, err)
+ testutil.AssertErrorMsg(t, "backendpb: invalid device settings:"+
+ " dedicated ip \"1.1.1.2\" is not in bind data", errCollErr)
+
+ assert.NotEqual(t, newProfile(t), got)
+ assert.NotEqual(t, newDevices(t), gotDevices)
+ assert.Len(t, gotDevices, 1)
+ })
+
t.Run("empty", func(t *testing.T) {
var emptyDNSProfile *DNSProfile
- _, _, err := emptyDNSProfile.toInternal(ctx, TestUpdTime, errColl)
+ _, _, err := emptyDNSProfile.toInternal(ctx, TestUpdTime, testBind, errColl)
testutil.AssertErrorMsg(t, "profile is nil", err)
})
@@ -78,7 +107,7 @@ func TestDNSProfile_ToInternal(t *testing.T) {
Deleted: true,
}
- got, gotDevices, err := dp.toInternal(ctx, TestUpdTime, errColl)
+ got, gotDevices, err := dp.toInternal(ctx, TestUpdTime, testBind, errColl)
require.NoError(t, err)
require.NotNil(t, got)
@@ -91,7 +120,7 @@ func TestDNSProfile_ToInternal(t *testing.T) {
dp := NewTestDNSProfile(t)
dp.Parental.Schedule.Tmz = "invalid"
- _, _, err := dp.toInternal(ctx, TestUpdTime, errColl)
+ _, _, err := dp.toInternal(ctx, TestUpdTime, testBind, errColl)
testutil.AssertErrorMsg(t, "parental: schedule: loading timezone: unknown time zone invalid", err)
})
@@ -102,7 +131,7 @@ func TestDNSProfile_ToInternal(t *testing.T) {
End: nil,
}
- _, _, err := dp.toInternal(ctx, TestUpdTime, errColl)
+ _, _, err := dp.toInternal(ctx, TestUpdTime, testBind, errColl)
testutil.AssertErrorMsg(t, "parental: schedule: weekday Sunday: bad day range: end 0 less than start 16", err)
})
@@ -111,7 +140,7 @@ func TestDNSProfile_ToInternal(t *testing.T) {
bm := dp.BlockingMode.(*DNSProfile_BlockingModeCustomIp)
bm.BlockingModeCustomIp.Ipv4 = []byte("1")
- _, _, err := dp.toInternal(ctx, TestUpdTime, errColl)
+ _, _, err := dp.toInternal(ctx, TestUpdTime, testBind, errColl)
testutil.AssertErrorMsg(t, "blocking mode: bad custom ipv4: unexpected slice size", err)
})
@@ -120,7 +149,7 @@ func TestDNSProfile_ToInternal(t *testing.T) {
bm := dp.BlockingMode.(*DNSProfile_BlockingModeCustomIp)
bm.BlockingModeCustomIp.Ipv6 = []byte("1")
- _, _, err := dp.toInternal(ctx, TestUpdTime, errColl)
+ _, _, err := dp.toInternal(ctx, TestUpdTime, testBind, errColl)
testutil.AssertErrorMsg(t, "blocking mode: bad custom ipv6: unexpected slice size", err)
})
@@ -128,7 +157,7 @@ func TestDNSProfile_ToInternal(t *testing.T) {
dp := NewTestDNSProfile(t)
dp.BlockingMode = nil
- got, gotDevices, err := dp.toInternal(ctx, TestUpdTime, errColl)
+ got, gotDevices, err := dp.toInternal(ctx, TestUpdTime, testBind, errColl)
require.NoError(t, err)
require.NotNil(t, got)
@@ -143,7 +172,7 @@ func TestDNSProfile_ToInternal(t *testing.T) {
dp := NewTestDNSProfile(t)
dp.Access = nil
- got, _, err := dp.toInternal(ctx, TestUpdTime, errColl)
+ got, _, err := dp.toInternal(ctx, TestUpdTime, testBind, errColl)
require.NoError(t, err)
require.NotNil(t, got)
@@ -157,7 +186,7 @@ func TestDNSProfile_ToInternal(t *testing.T) {
Enabled: false,
}
- got, _, err := dp.toInternal(ctx, TestUpdTime, errColl)
+ got, _, err := dp.toInternal(ctx, TestUpdTime, testBind, errColl)
require.NoError(t, err)
require.NotNil(t, got)
@@ -451,7 +480,7 @@ func BenchmarkDNSProfile_ToInternal(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
- profSink, _, errSink = dp.toInternal(ctx, TestUpdTime, errColl)
+ profSink, _, errSink = dp.toInternal(ctx, TestUpdTime, testBind, errColl)
}
require.NotNil(b, profSink)
diff --git a/internal/backendpb/profiledb_test.go b/internal/backendpb/profiledb_test.go
index 3382adc..90cdbf0 100644
--- a/internal/backendpb/profiledb_test.go
+++ b/internal/backendpb/profiledb_test.go
@@ -1,8 +1,9 @@
package backendpb_test
import (
- context "context"
+ "context"
"net"
+ "net/netip"
"net/url"
"strconv"
"testing"
@@ -52,6 +53,7 @@ func BenchmarkProfileStorage_Profiles(b *testing.B) {
require.NoError(b, err)
s, err := backendpb.NewProfileStorage(&backendpb.ProfileStorageConfig{
+ BindSet: netip.MustParsePrefix("0.0.0.0/0"),
ErrColl: errColl,
Endpoint: &url.URL{
Scheme: "grpc",
diff --git a/internal/bindtodevice/chanpacketconn_linux.go b/internal/bindtodevice/chanpacketconn_linux.go
index b362fc2..c799e9e 100644
--- a/internal/bindtodevice/chanpacketconn_linux.go
+++ b/internal/bindtodevice/chanpacketconn_linux.go
@@ -106,6 +106,9 @@ func (c *chanPacketConn) LocalAddr() (addr net.Addr) { return c.laddr }
// *chanPacketConn.
func (c *chanPacketConn) ReadFrom(b []byte) (n int, raddr net.Addr, err error) {
n, sess, err := c.readFromSession(b, "ReadFrom")
+ if sess == nil {
+ return 0, nil, err
+ }
return n, sess.RemoteAddr(), err
}
@@ -121,6 +124,13 @@ func (c *chanPacketConn) readFromSession(
b []byte,
fnName string,
) (n int, s netext.PacketSession, err error) {
+ var sess *packetSession
+ defer func() {
+ if sess != nil {
+ n = copy(b, sess.readBody)
+ }
+ }()
+
var deadline time.Time
func() {
c.deadlineMu.RLock()
@@ -137,16 +147,19 @@ func (c *chanPacketConn) readFromSession(
}
defer stopTimer()
- sess, err := receiveWithTimer(c.sessions, timerCh)
+ sess, err = receiveWithTimer(c.sessions, timerCh)
if err != nil {
err = fmt.Errorf("receiving: %w", err)
- return 0, nil, wrapConnError(tnChanPConn, fnName, c.laddr, err)
+ // Prevent netext.PacketSession((*packetSession)(nil)).
+ if sess != nil {
+ s = sess
+ }
+
+ return 0, s, wrapConnError(tnChanPConn, fnName, c.laddr, err)
}
- n = copy(b, sess.readBody)
-
- return n, sess, nil
+ return 0, sess, nil
}
// timerFromDeadline converts a deadline value into a timer channel. stopTimer
diff --git a/internal/bindtodevice/manager_linux.go b/internal/bindtodevice/manager_linux.go
index 8abac5d..cdbffef 100644
--- a/internal/bindtodevice/manager_linux.go
+++ b/internal/bindtodevice/manager_linux.go
@@ -10,12 +10,12 @@ import (
"sync"
"github.com/AdguardTeam/AdGuardDNS/internal/agdnet"
- "github.com/AdguardTeam/AdGuardDNS/internal/agdservice"
"github.com/AdguardTeam/AdGuardDNS/internal/dnsserver/netext"
"github.com/AdguardTeam/AdGuardDNS/internal/errcoll"
"github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/mapsutil"
+ "github.com/AdguardTeam/golibs/service"
"github.com/AdguardTeam/golibs/syncutil"
"github.com/miekg/dns"
)
@@ -211,12 +211,12 @@ func (m *Manager) validateIfaceSubnet(ifaceName string, subnet netip.Prefix) (er
}
// type check
-var _ agdservice.Interface = (*Manager)(nil)
+var _ service.Interface = (*Manager)(nil)
-// Start implements the [agdservice.Interface] interface for *Manager. If m is
+// Start implements the [service.Interface] interface for *Manager. If m is
// nil, Start returns nil, since this feature is optional.
//
-// TODO(a.garipov): Consider an interface solution.
+// TODO(a.garipov): Consider an interface solution instead of the nil exception.
//
// TODO(a.garipov): Use the context for cancelation.
func (m *Manager) Start(_ context.Context) (err error) {
@@ -249,12 +249,15 @@ func (m *Manager) Start(_ context.Context) (err error) {
return nil
}
-// Shutdown implements the [agdservice.Interface] interface for *Manager. If m
-// is nil, Shutdown returns nil, since this feature is optional.
-//
-// TODO(a.garipov): Consider an interface solution.
+// Shutdown implements the [service.Interface] interface for *Manager. Shutdown
+// does not actually wait for all sockets to close. If m is nil, Shutdown
+// returns nil, since this feature is optional.
//
// TODO(a.garipov): Consider waiting for all sockets to close.
+//
+// TODO(a.garipov): Use the context for cancelation.
+//
+// TODO(a.garipov): Consider an interface solution instead of the nil exception.
func (m *Manager) Shutdown(_ context.Context) (err error) {
if m == nil {
return nil
diff --git a/internal/bindtodevice/manager_others.go b/internal/bindtodevice/manager_others.go
index 32fe66e..d24db8c 100644
--- a/internal/bindtodevice/manager_others.go
+++ b/internal/bindtodevice/manager_others.go
@@ -7,8 +7,8 @@ import (
"fmt"
"net/netip"
- "github.com/AdguardTeam/AdGuardDNS/internal/agdservice"
"github.com/AdguardTeam/golibs/errors"
+ "github.com/AdguardTeam/golibs/service"
)
// Manager creates individual listeners and dispatches connections to them.
@@ -43,9 +43,9 @@ func (m *Manager) ListenConfig(id ID, subnet netip.Prefix) (c *ListenConfig, err
}
// type check
-var _ agdservice.Interface = (*Manager)(nil)
+var _ service.Interface = (*Manager)(nil)
-// Start implements the [agdservice.Interface] interface for *Manager. If m is
+// Start implements the [service.Interface] interface for *Manager. If m is
// nil, Start returns nil, since this feature is optional.
//
// It is only supported on Linux.
@@ -57,8 +57,8 @@ func (m *Manager) Start(_ context.Context) (err error) {
return fmt.Errorf("bindtodevice: starting: %w; only supported on linux", errors.ErrUnsupported)
}
-// Shutdown implements the [agdservice.Interface] interface for *Manager. If m
-// is nil, Shutdown returns nil, since this feature is optional.
+// Shutdown implements the [service.Interface] interface for *Manager. If m is
+// nil, Shutdown returns nil, since this feature is optional.
//
// It is only supported on Linux.
func (m *Manager) Shutdown(_ context.Context) (err error) {
diff --git a/internal/cmd/access.go b/internal/cmd/access.go
index dbf71dc..3a76108 100644
--- a/internal/cmd/access.go
+++ b/internal/cmd/access.go
@@ -1,8 +1,7 @@
package cmd
import (
- "fmt"
- "net/netip"
+ "github.com/AdguardTeam/golibs/netutil"
)
// accessConfig is the configuration that controls IP and hosts blocking.
@@ -11,7 +10,7 @@ type accessConfig struct {
BlockedQuestionDomains []string `yaml:"blocked_question_domains"`
// BlockedClientSubnets is a list of IP addresses or subnets to block.
- BlockedClientSubnets []string `yaml:"blocked_client_subnets"`
+ BlockedClientSubnets []netutil.Prefix `yaml:"blocked_client_subnets"`
}
// validate returns an error if the access configuration is invalid.
@@ -20,21 +19,5 @@ func (a *accessConfig) validate() (err error) {
return errNilConfig
}
- for i, s := range a.BlockedClientSubnets {
- // TODO(a.garipov): Use [netutil.ParseSubnet] after refactoring it to
- // [netip.Addr].
- _, parseErr := netip.ParseAddr(s)
- if parseErr == nil {
- continue
- }
-
- _, parseErr = netip.ParsePrefix(s)
- if parseErr == nil {
- continue
- }
-
- return fmt.Errorf("value %q at index %d: bad ip or cidr: %w", s, i, parseErr)
- }
-
return nil
}
diff --git a/internal/cmd/backend.go b/internal/cmd/backend.go
index b2b2c69..d68e5df 100644
--- a/internal/cmd/backend.go
+++ b/internal/cmd/backend.go
@@ -3,14 +3,18 @@ package cmd
import (
"context"
"fmt"
+ "net/netip"
"net/url"
+ "github.com/AdguardTeam/AdGuardDNS/internal/agd"
"github.com/AdguardTeam/AdGuardDNS/internal/agdservice"
"github.com/AdguardTeam/AdGuardDNS/internal/backendpb"
"github.com/AdguardTeam/AdGuardDNS/internal/billstat"
"github.com/AdguardTeam/AdGuardDNS/internal/errcoll"
"github.com/AdguardTeam/AdGuardDNS/internal/profiledb"
+ "github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/netutil"
+ "github.com/AdguardTeam/golibs/service"
"github.com/AdguardTeam/golibs/timeutil"
)
@@ -67,17 +71,22 @@ func (c *backendConfig) validate() (err error) {
// handler.
func setupBackend(
conf *backendConfig,
+ grps []*agd.ServerGroup,
envs *environments,
- sigHdlr signalHandler,
+ sigHdlr *service.SignalHandler,
errColl errcoll.Interface,
-) (profDB *profiledb.Default, rec *billstat.RuntimeRecorder, err error) {
+) (profDB profiledb.Interface, rec billstat.Recorder, err error) {
+ if !envs.ProfilesEnabled {
+ return &profiledb.Disabled{}, billstat.EmptyRecorder{}, nil
+ }
+
rec, err = setupBillStat(conf, envs, sigHdlr, errColl)
if err != nil {
// Don't wrap the error, because it's informative enough as is.
return nil, nil, err
}
- profDB, err = setupProfDB(conf, envs, sigHdlr, errColl)
+ profDB, err = setupProfDB(conf, grps, envs, sigHdlr, errColl)
if err != nil {
// Don't wrap the error, because it's informative enough as is.
return nil, nil, err
@@ -91,7 +100,7 @@ func setupBackend(
func setupBillStat(
conf *backendConfig,
envs *environments,
- sigHdlr signalHandler,
+ sigHdlr *service.SignalHandler,
errColl errcoll.Interface,
) (rec *billstat.RuntimeRecorder, err error) {
apiURL := netutil.CloneURL(&envs.BillStatURL.URL)
@@ -124,7 +133,7 @@ func setupBillStat(
return nil, fmt.Errorf("starting bill stat recorder refresher: %w", err)
}
- sigHdlr.add(billStatRefr)
+ sigHdlr.Add(billStatRefr)
return rec, nil
}
@@ -133,12 +142,14 @@ func setupBillStat(
// registers its refresher in the signal handler.
func setupProfDB(
conf *backendConfig,
+ grps []*agd.ServerGroup,
envs *environments,
- sigHdlr signalHandler,
+ sigHdlr *service.SignalHandler,
errColl errcoll.Interface,
) (profDB *profiledb.Default, err error) {
apiURL := netutil.CloneURL(&envs.ProfilesURL.URL)
- profStrg, err := setupProfStorage(apiURL, errColl)
+ bindSet := collectBindSubnetSet(grps)
+ profStrg, err := setupProfStorage(apiURL, bindSet, errColl)
if err != nil {
return nil, fmt.Errorf("creating profile storage: %w", err)
}
@@ -174,11 +185,40 @@ func setupProfDB(
return nil, fmt.Errorf("starting default profile database refresher: %w", err)
}
- sigHdlr.add(profDBRefr)
+ sigHdlr.Add(profDBRefr)
return profDB, nil
}
+// collectBindSubnetSet returns a subnet set with IP addresses of servers in the
+// provided server groups grps.
+func collectBindSubnetSet(grps []*agd.ServerGroup) (s netutil.SubnetSet) {
+ var serverPrefixes []netip.Prefix
+ allSingleIP := true
+ for _, grp := range grps {
+ for _, srv := range grp.Servers {
+ for _, p := range srv.BindDataPrefixes() {
+ allSingleIP = allSingleIP && p.IsSingleIP()
+ serverPrefixes = append(serverPrefixes, p)
+ }
+ }
+ }
+
+ // In cases where an installation only has single-IP prefixes in bind
+ // interfaces, or no bind interfaces at all, only check the dedicated IPs in
+ // profiles for validity.
+ //
+ // TODO(a.garipov): Do not load profiles on such installations at all, as
+ // they don't really need them. See AGDNS-1888.
+ if allSingleIP {
+ log.Info("warning: all bind ifaces are single-ip; only checking validity of dedicated ips")
+
+ return netutil.SubnetSetFunc(netip.Addr.IsValid)
+ }
+
+ return netutil.SliceSubnetSet(serverPrefixes)
+}
+
// Backend API URL schemes.
const (
schemeGRPC = "grpc"
@@ -189,11 +229,13 @@ const (
// provided API URL.
func setupProfStorage(
apiURL *url.URL,
+ bindSet netutil.SubnetSet,
errColl errcoll.Interface,
) (s profiledb.Storage, err error) {
scheme := apiURL.Scheme
if scheme == schemeGRPC || scheme == schemeGRPCS {
return backendpb.NewProfileStorage(&backendpb.ProfileStorageConfig{
+ BindSet: bindSet,
Endpoint: apiURL,
ErrColl: errColl,
})
diff --git a/internal/cmd/cmd.go b/internal/cmd/cmd.go
index 059e398..405a533 100644
--- a/internal/cmd/cmd.go
+++ b/internal/cmd/cmd.go
@@ -24,6 +24,9 @@ import (
"github.com/AdguardTeam/AdGuardDNS/internal/metrics"
"github.com/AdguardTeam/AdGuardDNS/internal/websvc"
"github.com/AdguardTeam/golibs/log"
+ "github.com/AdguardTeam/golibs/logutil/slogutil"
+ "github.com/AdguardTeam/golibs/netutil"
+ "github.com/AdguardTeam/golibs/service"
"github.com/AdguardTeam/golibs/timeutil"
)
@@ -41,7 +44,8 @@ func Main() {
envs, err := readEnvs()
check(err)
- envs.configureLogs()
+ // TODO(a.garipov): Use slog everywhere.
+ slogLogger := envs.configureLogs()
// Signal service startup now that we have the logs set up.
log.Info("main: starting adguard dns")
@@ -70,7 +74,9 @@ func Main() {
// Signal handler
- sigHdlr := newSignalHandler()
+ sigHdlr := service.NewSignalHandler(&service.SignalHandlerConfig{
+ Logger: slogLogger.With(slogutil.KeyPrefix, service.SignalHandlerPrefix),
+ })
// GeoIP database
@@ -160,7 +166,7 @@ func Main() {
accessGlobal, err := access.NewGlobal(
c.Access.BlockedQuestionDomains,
- c.Access.BlockedClientSubnets,
+ netutil.UnembedPrefixes(c.Access.BlockedClientSubnets),
)
check(err)
@@ -180,12 +186,14 @@ func Main() {
srvGrps, err := c.ServerGroups.toInternal(messages, btdMgr, fltGroups, c.RateLimit, c.DNS)
check(err)
+ ctx := context.Background()
+
// Start the bind-to-device manager here, now that no further calls to
// btdMgr.ListenConfig are required.
- err = btdMgr.Start(context.Background())
+ err = btdMgr.Start(ctx)
check(err)
- sigHdlr.add(btdMgr)
+ sigHdlr.Add(btdMgr)
// TLS keys logging
@@ -202,7 +210,7 @@ func Main() {
// Profiles database and billing statistics
- profDB, billStatRec, err := setupBackend(c.Backend, envs, sigHdlr, errColl)
+ profDB, billStatRec, err := setupBackend(c.Backend, srvGrps, envs, sigHdlr, errColl)
check(err)
// DNS checker
@@ -230,7 +238,7 @@ func Main() {
// Wait for long-running GeoIP initialization.
check(<-geoIPErrCh)
- sigHdlr.add(geoIPRefr)
+ sigHdlr.Add(geoIPRefr)
// Web service
@@ -240,9 +248,9 @@ func Main() {
webSvc := websvc.New(webConf)
// The web service is considered critical, so its Start method panics
// instead of returning an error.
- _ = webSvc.Start(context.Background())
+ _ = webSvc.Start(ctx)
- sigHdlr.add(webSvc)
+ sigHdlr.Add(webSvc)
// DNS service
@@ -284,6 +292,7 @@ func Main() {
CacheMinTTL: c.Cache.TTLOverride.Min.Duration,
UseCacheTTLOverride: c.Cache.TTLOverride.Enabled,
UseECSCache: c.Cache.Type == cacheTypeECS,
+ ProfileDBEnabled: bool(envs.ProfilesEnabled),
ResearchMetrics: bool(envs.ResearchMetrics),
ResearchLogs: bool(envs.ResearchLogs),
}
@@ -297,16 +306,16 @@ func Main() {
check(err)
upstreamHealthcheckUpd := newUpstreamHealthcheck(handler, c.Upstream, errColl)
- err = upstreamHealthcheckUpd.Start(context.Background())
+ err = upstreamHealthcheckUpd.Start(ctx)
check(err)
- sigHdlr.add(upstreamHealthcheckUpd)
+ sigHdlr.Add(upstreamHealthcheckUpd)
// The DNS service is considered critical, so its Start method panics
// instead of returning an error.
- _ = dnsSvc.Start(context.Background())
+ _ = dnsSvc.Start(ctx)
- sigHdlr.add(dnsSvc)
+ sigHdlr.Add(dnsSvc)
// Debug HTTP-service
@@ -314,9 +323,9 @@ func Main() {
// The debug HTTP service is considered critical, so its Start method panics
// instead of returning an error.
- _ = debugSvc.Start(context.Background())
+ _ = debugSvc.Start(ctx)
- sigHdlr.add(debugSvc)
+ sigHdlr.Add(debugSvc)
// Signal that the server is started.
metrics.SetUpGauge(
@@ -327,7 +336,7 @@ func Main() {
runtime.Version(),
)
- os.Exit(sigHdlr.handle())
+ os.Exit(sigHdlr.Handle(ctx))
}
// collectPanics reports all panics in Main. It should be called in a defer.
diff --git a/internal/cmd/env.go b/internal/cmd/env.go
index c677df4..070e462 100644
--- a/internal/cmd/env.go
+++ b/internal/cmd/env.go
@@ -3,6 +3,7 @@ package cmd
import (
"context"
"fmt"
+ "log/slog"
"net"
"net/http"
"os"
@@ -16,8 +17,10 @@ import (
"github.com/AdguardTeam/AdGuardDNS/internal/geoip"
"github.com/AdguardTeam/AdGuardDNS/internal/rulestat"
"github.com/AdguardTeam/golibs/log"
+ "github.com/AdguardTeam/golibs/logutil/slogutil"
"github.com/AdguardTeam/golibs/netutil"
"github.com/AdguardTeam/golibs/netutil/urlutil"
+ "github.com/AdguardTeam/golibs/service"
"github.com/caarlos0/env/v7"
"github.com/getsentry/sentry-go"
)
@@ -56,6 +59,7 @@ type environments struct {
LogTimestamp strictBool `env:"LOG_TIMESTAMP" envDefault:"1"`
LogVerbose strictBool `env:"VERBOSE" envDefault:"0"`
+ ProfilesEnabled strictBool `env:"PROFILES_ENABLED" envDefault:"1"`
ResearchMetrics strictBool `env:"RESEARCH_METRICS" envDefault:"0"`
ResearchLogs strictBool `env:"RESEARCH_LOGS" envDefault:"0"`
}
@@ -71,8 +75,9 @@ func readEnvs() (envs *environments, err error) {
return envs, nil
}
-// configureLogs sets the configuration for the plain text logs.
-func (envs *environments) configureLogs() {
+// configureLogs sets the configuration for the plain text logs. It also
+// returns a [slog.Logger] for code that uses it.
+func (envs *environments) configureLogs() (slogLogger *slog.Logger) {
var flags int
if envs.LogTimestamp {
flags = log.LstdFlags | log.Lmicroseconds
@@ -83,6 +88,13 @@ func (envs *environments) configureLogs() {
if envs.LogVerbose {
log.SetLevel(log.DEBUG)
}
+
+ return slogutil.New(&slogutil.Config{
+ Output: os.Stdout,
+ Format: slogutil.FormatAdGuardLegacy,
+ AddTimestamp: bool(envs.LogTimestamp),
+ Verbose: bool(envs.LogVerbose),
+ })
}
// buildErrColl builds and returns an error collector from environment.
@@ -158,7 +170,7 @@ func (envs *environments) debugConf(dnsDB dnsdb.Interface) (conf *debugsvc.Confi
// buildRuleStat returns a filtering rule statistics collector from environment and
// registers its refresher in sigHdlr, if necessary.
func (envs *environments) buildRuleStat(
- sigHdlr signalHandler,
+ sigHdlr *service.SignalHandler,
errColl errcoll.Interface,
) (r rulestat.Interface, err error) {
if envs.RuleStatURL == nil {
@@ -187,7 +199,7 @@ func (envs *environments) buildRuleStat(
return nil, fmt.Errorf("starting rulestat refresher: %w", err)
}
- sigHdlr.add(refr)
+ sigHdlr.Add(refr)
return httpRuleStat, nil
}
diff --git a/internal/cmd/filter.go b/internal/cmd/filter.go
index f734813..074754f 100644
--- a/internal/cmd/filter.go
+++ b/internal/cmd/filter.go
@@ -12,6 +12,7 @@ import (
"github.com/AdguardTeam/AdGuardDNS/internal/filter"
"github.com/AdguardTeam/AdGuardDNS/internal/filter/hashprefix"
"github.com/AdguardTeam/golibs/netutil"
+ "github.com/AdguardTeam/golibs/service"
"github.com/AdguardTeam/golibs/timeutil"
"github.com/c2h5oh/datasize"
)
@@ -136,7 +137,7 @@ func (c *fltRuleListCache) validate() (err error) {
// registers its refresher in the signal handler.
func setupFilterStorage(
conf *filter.DefaultStorageConfig,
- sigHdlr signalHandler,
+ sigHdlr *service.SignalHandler,
errColl errcoll.Interface,
refreshTimeout time.Duration,
) (strg *filter.DefaultStorage, err error) {
@@ -162,7 +163,7 @@ func setupFilterStorage(
return nil, fmt.Errorf("starting default filter storage update: %w", err)
}
- sigHdlr.add(refr)
+ sigHdlr.Add(refr)
return strg, nil
}
diff --git a/internal/cmd/ifacelistener.go b/internal/cmd/ifacelistener.go
index acbe33c..8a530ba 100644
--- a/internal/cmd/ifacelistener.go
+++ b/internal/cmd/ifacelistener.go
@@ -41,7 +41,6 @@ func (c *interfaceListenersConfig) toInternal(
return errors.Annotate(m.Add(id, l.Interface, l.Port, ctrlConf), "adding listener %q: %w", id)
},
)
-
if err != nil {
return nil, err
}
diff --git a/internal/cmd/ratelimit.go b/internal/cmd/ratelimit.go
index 7d91f29..5fa8089 100644
--- a/internal/cmd/ratelimit.go
+++ b/internal/cmd/ratelimit.go
@@ -5,7 +5,6 @@ import (
"fmt"
"net/url"
- "github.com/AdguardTeam/AdGuardDNS/internal/agdnet"
"github.com/AdguardTeam/AdGuardDNS/internal/agdservice"
"github.com/AdguardTeam/AdGuardDNS/internal/connlimiter"
"github.com/AdguardTeam/AdGuardDNS/internal/consul"
@@ -13,6 +12,8 @@ import (
"github.com/AdguardTeam/AdGuardDNS/internal/errcoll"
"github.com/AdguardTeam/AdGuardDNS/internal/metrics"
"github.com/AdguardTeam/golibs/errors"
+ "github.com/AdguardTeam/golibs/netutil"
+ "github.com/AdguardTeam/golibs/service"
"github.com/AdguardTeam/golibs/timeutil"
"github.com/c2h5oh/datasize"
)
@@ -64,7 +65,7 @@ type rateLimitConfig struct {
// allowListConfig is the consul allow list configuration.
type allowListConfig struct {
// List contains IPs and CIDRs.
- List []string `yaml:"list"`
+ List []netutil.Prefix `yaml:"list"`
// RefreshIvl time between two updates of allow list from the Consul URL.
RefreshIvl timeutil.Duration `yaml:"refresh_interval"`
@@ -138,14 +139,10 @@ func (c *rateLimitConfig) validate() (err error) {
func setupRateLimiter(
conf *rateLimitConfig,
consulAllowlist *url.URL,
- sigHdlr signalHandler,
+ sigHdlr *service.SignalHandler,
errColl errcoll.Interface,
) (rateLimiter *ratelimit.Backoff, connLimiter *connlimiter.Limiter, err error) {
- allowSubnets, err := agdnet.ParseSubnets(conf.Allowlist.List...)
- if err != nil {
- return nil, nil, fmt.Errorf("parsing allowlist subnets: %w", err)
- }
-
+ allowSubnets := netutil.UnembedPrefixes(conf.Allowlist.List)
allowlist := ratelimit.NewDynamicAllowlist(allowSubnets, nil)
refresher, err := consul.NewAllowlistRefresher(allowlist, consulAllowlist)
if err != nil {
@@ -168,7 +165,7 @@ func setupRateLimiter(
return nil, nil, fmt.Errorf("starting allowlist refresher: %w", err)
}
- sigHdlr.add(refr)
+ sigHdlr.Add(refr)
return ratelimit.NewBackoff(conf.toInternal(allowlist)), conf.ConnectionLimit.toInternal(), nil
}
diff --git a/internal/cmd/safebrowsing.go b/internal/cmd/safebrowsing.go
index 5aefb0c..595a79a 100644
--- a/internal/cmd/safebrowsing.go
+++ b/internal/cmd/safebrowsing.go
@@ -14,6 +14,7 @@ import (
"github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/netutil"
"github.com/AdguardTeam/golibs/netutil/urlutil"
+ "github.com/AdguardTeam/golibs/service"
"github.com/AdguardTeam/golibs/timeutil"
)
@@ -99,7 +100,7 @@ func setupHashPrefixFilter(
url *urlutil.URL,
cachePath string,
maxSize uint64,
- sigHdlr signalHandler,
+ sigHdlr *service.SignalHandler,
errColl errcoll.Interface,
) (strg *hashprefix.Storage, flt *hashprefix.Filter, err error) {
fltConf, err := conf.toInternal(errColl, resolver, cloner, id, url, cachePath, maxSize)
@@ -127,7 +128,7 @@ func setupHashPrefixFilter(
return nil, nil, fmt.Errorf("starting refresher for hash prefix filter %s: %w", id, err)
}
- sigHdlr.add(refr)
+ sigHdlr.Add(refr)
return fltConf.Hashes, flt, nil
}
diff --git a/internal/cmd/servergroup.go b/internal/cmd/servergroup.go
index 4920d92..33b1db1 100644
--- a/internal/cmd/servergroup.go
+++ b/internal/cmd/servergroup.go
@@ -2,11 +2,13 @@ package cmd
import (
"fmt"
+ "net/netip"
"github.com/AdguardTeam/AdGuardDNS/internal/agd"
"github.com/AdguardTeam/AdGuardDNS/internal/bindtodevice"
"github.com/AdguardTeam/AdGuardDNS/internal/dnsmsg"
"github.com/AdguardTeam/golibs/errors"
+ "github.com/AdguardTeam/golibs/netutil"
"github.com/AdguardTeam/golibs/stringutil"
)
@@ -39,10 +41,11 @@ func (srvGrps serverGroups) toInternal(
}
svcSrvGrps[i] = &agd.ServerGroup{
- TLS: tlsConf,
- DDR: g.DDR.toInternal(messages),
- Name: agd.ServerGroupName(g.Name),
- FilteringGroup: fltGrpID,
+ BlockPageRedirect: g.BlockPageRedirect.toInternal(),
+ DDR: g.DDR.toInternal(messages),
+ TLS: tlsConf,
+ Name: agd.ServerGroupName(g.Name),
+ FilteringGroup: fltGrpID,
}
svcSrvGrps[i].Servers, err = g.Servers.toInternal(tlsConf, btdMgr, ratelimitConf, dnsConf)
@@ -83,13 +86,16 @@ func (srvGrps serverGroups) validate() (err error) {
// TODO(a.garipov): Think about more consistent naming, since this object is a
// configuration, but it also stores other configurations.
type serverGroup struct {
- // TLS are the TLS settings for this server, if any.
- TLS *tlsConfig `yaml:"tls"`
+ // BlockPageRedirect is the configuration for the server group's block page.
+ BlockPageRedirect *serverGroupBlockPageConfig `yaml:"block_page_redirect"`
// DDR is the Discovery Of Designated Resolvers (DDR) configuration for this
// server group.
DDR *ddrConfig `yaml:"ddr"`
+ // TLS are the TLS settings for this server, if any.
+ TLS *tlsConfig `yaml:"tls"`
+
// Name is the unique name of the server group.
Name string `yaml:"name"`
@@ -111,6 +117,11 @@ func (g *serverGroup) validate() (err error) {
return errors.Error("no filtering_group")
}
+ err = g.BlockPageRedirect.validate()
+ if err != nil {
+ return fmt.Errorf("block_page_redirect: %w", err)
+ }
+
err = g.DDR.validate()
if err != nil {
return fmt.Errorf("ddr: %w", err)
@@ -128,3 +139,255 @@ func (g *serverGroup) validate() (err error) {
return nil
}
+
+// serverGroupBlockPageConfig is the configuration for a [serverGroup]'s block
+// page. See [agd.BlockPageRedirect] and the related types for more
+// documentation and contracts.
+type serverGroupBlockPageConfig struct {
+ // Apply defines request parameters based on which the block page is always
+ // shown.
+ Apply *serverGroupBlockPageApplyConfig `yaml:"apply"`
+
+ // Skip defines request parameters based on which the block page is never
+ // shown, regardless of the probability.
+ Skip *serverGroupBlockPageSkipConfig `yaml:"skip"`
+
+ // IPv4 are the IPv4 records of the block page, used to respond to A
+ // queries.
+ IPv4 []*serverGroupBlockPageRecord `yaml:"ipv4"`
+
+ // IPv6 are the IPv6 records of the block page, used to respond to AAAA
+ // queries.
+ IPv6 []*serverGroupBlockPageRecord `yaml:"ipv6"`
+
+ // Probability defines the probability of responding with the block page IPs
+ // based on remote address.
+ Probability float64 `yaml:"probability"`
+
+ // Enabled defines whether the block-page feature is enabled.
+ Enabled bool `yaml:"enabled"`
+}
+
+// toInternal returns the block-page redirect configuration for a server group.
+// c is assumed to be valid.
+func (c *serverGroupBlockPageConfig) toInternal() (conf *agd.BlockPageRedirect) {
+ if !c.Enabled {
+ return &agd.BlockPageRedirect{}
+ }
+
+ var ipv4 []netip.Addr
+ for _, r := range c.IPv4 {
+ ipv4 = append(ipv4, r.Address)
+ }
+
+ var ipv6 []netip.Addr
+ for _, r := range c.IPv6 {
+ ipv6 = append(ipv6, r.Address)
+ }
+
+ return &agd.BlockPageRedirect{
+ Apply: c.Apply.toInternal(),
+ Skip: c.Skip.toInternal(),
+ IPv4: ipv4,
+ IPv6: ipv6,
+ Probability: agd.MustNewProbability(c.Probability),
+ Enabled: c.Enabled,
+ }
+}
+
+// validate returns an error if the block-page redirect configuration is
+// invalid.
+func (c *serverGroupBlockPageConfig) validate() (err error) {
+ switch {
+ case c == nil:
+ return errNilConfig
+ case !c.Enabled:
+ return nil
+ case len(c.IPv4) == 0 && len(c.IPv6) == 0:
+ return errors.Error("ipv4, ipv6, or both must be set")
+ }
+
+ _, err = agd.NewProbability(c.Probability)
+ if err != nil {
+ return fmt.Errorf("probability: %w", err)
+ }
+
+ err = c.validateAddrs()
+ if err != nil {
+ // Don't wrap the error, because it's informative enough as is.
+ return err
+ }
+
+ err = c.Apply.validate()
+ if err != nil {
+ return fmt.Errorf("apply: %w", err)
+ }
+
+ err = c.Skip.validate()
+ if err != nil {
+ return fmt.Errorf("skip: %w", err)
+ }
+
+ return nil
+}
+
+// validateAddrs returns an error if the block-page redirect if the IP addresses
+// in the block-page redirect configuration are invalid.
+func (c *serverGroupBlockPageConfig) validateAddrs() (err error) {
+ for i, r := range c.IPv4 {
+ err = r.validate()
+ if err != nil {
+ return fmt.Errorf("ipv4: at index %d: address: %w", i, err)
+ } else if !r.Address.Is4() {
+ return fmt.Errorf("ipv4: at index %d: address: not ipv4: %v", i, r.Address)
+ }
+ }
+
+ for i, r := range c.IPv6 {
+ err = r.validate()
+ if err != nil {
+ return fmt.Errorf("ipv6: at index %d: %w", i, err)
+ } else if !r.Address.Is6() {
+ return fmt.Errorf("ipv6: at index %d: address: not ipv6: %v", i, r.Address)
+ }
+ }
+
+ return nil
+}
+
+// serverGroupBlockPageRecord is a structure for defining answer records in
+// [serverGroupBlockPageConfig].
+type serverGroupBlockPageRecord struct {
+ Address netip.Addr `yaml:"address"`
+}
+
+// validate returns an error if the record configuration is invalid.
+func (c *serverGroupBlockPageRecord) validate() (err error) {
+ switch {
+ case c == nil:
+ return errNilConfig
+ case !c.Address.IsValid():
+ return errors.Error("invalid addr")
+ default:
+ return nil
+ }
+}
+
+// serverGroupBlockPageApplyConfig defines the conditions for applying the
+// block-page logic for a particular request.
+type serverGroupBlockPageApplyConfig struct {
+ // Client are the parameters for clients for which block page is always
+ // enabled.
+ Client []*serverGroupBlockPageClientConfig `yaml:"client"`
+}
+
+// toInternal returns the block-page redirect applying configuration for a
+// server group. c is assumed to be valid.
+func (c *serverGroupBlockPageApplyConfig) toInternal() (conf *agd.BlockPageRedirectApply) {
+ var subnets []netip.Prefix
+ for _, cli := range c.Client {
+ subnets = append(subnets, cli.Address.Prefix)
+ }
+
+ return &agd.BlockPageRedirectApply{
+ ClientSubnets: subnets,
+ }
+}
+
+// validate returns an error if the block-page redirect applying configuration
+// is invalid.
+func (c *serverGroupBlockPageApplyConfig) validate() (err error) {
+ if c == nil {
+ return errNilConfig
+ }
+
+ for i, cli := range c.Client {
+ err = cli.validate()
+ if err != nil {
+ return fmt.Errorf("client: at index %d: %w", i, err)
+ }
+ }
+
+ return nil
+}
+
+// serverGroupBlockPageClientConfig is a common structure for defining clients
+// in [serverGroupBlockPageSkipConfig] and [serverGroupBlockPageApplyConfig].
+type serverGroupBlockPageClientConfig struct {
+ Address netutil.Prefix `yaml:"address"`
+}
+
+// validate returns an error if the client configuration is invalid.
+func (c *serverGroupBlockPageClientConfig) validate() (err error) {
+ switch {
+ case c == nil:
+ return errNilConfig
+ case !c.Address.IsValid():
+ return errors.Error("invalid addr")
+ default:
+ return nil
+ }
+}
+
+// serverGroupBlockPageSkipConfig defines the conditions for skipping the block
+// page logic for a particular request.
+type serverGroupBlockPageSkipConfig struct {
+ // Client are the parameters for clients for which block page is always
+ // disabled.
+ Client []*serverGroupBlockPageClientConfig `yaml:"client"`
+
+ // QuestionDomains are the parameters for request questions for which block
+ // page is always disabled.
+ Question []*serverGroupBlockPageQuestionConfig `yaml:"question"`
+}
+
+// toInternal returns the block-page redirect skipping configuration for a
+// server group. c is assumed to be valid.
+func (c *serverGroupBlockPageSkipConfig) toInternal() (conf *agd.BlockPageRedirectSkip) {
+ var subnets []netip.Prefix
+ for _, cli := range c.Client {
+ subnets = append(subnets, cli.Address.Prefix)
+ }
+
+ var domains []string
+ for _, q := range c.Question {
+ domains = append(domains, q.Domain)
+ }
+
+ return &agd.BlockPageRedirectSkip{
+ ClientSubnets: subnets,
+ QuestionDomains: domains,
+ }
+}
+
+// validate returns an error if the block-page redirect skipping configuration
+// is invalid.
+func (c *serverGroupBlockPageSkipConfig) validate() (err error) {
+ if c == nil {
+ return errNilConfig
+ }
+
+ for i, cli := range c.Client {
+ err = cli.validate()
+ if err != nil {
+ return fmt.Errorf("client: at index %d: %w", i, err)
+ }
+ }
+
+ for i, q := range c.Question {
+ switch {
+ case q == nil:
+ return fmt.Errorf("question: at index %d: %w", i, errNilConfig)
+ case q.Domain == "":
+ return fmt.Errorf("question: at index %d: %w", i, errors.Error("empty domain"))
+ }
+ }
+
+ return nil
+}
+
+// serverGroupBlockPageQuestionConfig is a structure for defining question
+// domains in [serverGroupBlockPageRedirectSkip].
+type serverGroupBlockPageQuestionConfig struct {
+ Domain string `yaml:"domain"`
+}
diff --git a/internal/cmd/signal.go b/internal/cmd/signal.go
deleted file mode 100644
index eaa79df..0000000
--- a/internal/cmd/signal.go
+++ /dev/null
@@ -1,85 +0,0 @@
-package cmd
-
-import (
- "context"
- "os"
- "os/signal"
- "time"
-
- "github.com/AdguardTeam/AdGuardDNS/internal/agdservice"
- "github.com/AdguardTeam/golibs/log"
- "golang.org/x/sys/unix"
-)
-
-// signalHandler processes incoming signals and shuts services down.
-type signalHandler struct {
- signal chan os.Signal
-
- // services are the services that are shut down before application
- // exiting.
- services []agdservice.Interface
-}
-
-// newSignalHandler returns a new signalHandler that shuts down services.
-func newSignalHandler() (h signalHandler) {
- h = signalHandler{
- signal: make(chan os.Signal, 1),
- }
-
- signal.Notify(h.signal, unix.SIGINT, unix.SIGQUIT, unix.SIGTERM)
-
- return h
-}
-
-// add adds a service to the signal handler.
-func (h *signalHandler) add(s agdservice.Interface) {
- h.services = append(h.services, s)
-}
-
-// Exit status constants.
-const (
- statusSuccess = 0
- statusError = 1
-)
-
-// handle processes OS signals. status is statusSuccess on success and
-// statusError on error.
-func (h *signalHandler) handle() (status int) {
- defer log.OnPanic("signalHandler.handle")
-
- for sig := range h.signal {
- log.Info("sighdlr: received signal %q", sig)
-
- switch sig {
- case
- unix.SIGINT,
- unix.SIGQUIT,
- unix.SIGTERM:
- return h.shutdown()
- }
- }
-
- // Shouldn't happen, since h.signal is currently never closed.
- return statusError
-}
-
-// shutdown gracefully shuts down all services. status is statusSuccess on
-// success and statusError on error.
-func (h *signalHandler) shutdown() (status int) {
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
-
- log.Info("sighdlr: shutting down services")
- for i := len(h.services) - 1; i >= 0; i-- {
- s := h.services[i]
- err := s.Shutdown(ctx)
- if err != nil {
- log.Error("sighdlr: shutting down service at index %d: %s", i, err)
- status = statusError
- }
- }
-
- log.Info("sighdlr: shutting down adguard dns")
-
- return status
-}
diff --git a/internal/cmd/tls.go b/internal/cmd/tls.go
index 1bc88be..dd50b16 100644
--- a/internal/cmd/tls.go
+++ b/internal/cmd/tls.go
@@ -16,6 +16,7 @@ import (
"github.com/AdguardTeam/AdGuardDNS/internal/errcoll"
"github.com/AdguardTeam/AdGuardDNS/internal/metrics"
"github.com/AdguardTeam/golibs/errors"
+ "github.com/AdguardTeam/golibs/service"
"github.com/AdguardTeam/golibs/stringutil"
"github.com/prometheus/client_golang/prometheus"
)
@@ -300,7 +301,7 @@ func enableTLSKeyLogging(grps []*agd.ServerGroup, keyLogFileName string) (err er
// registers its refresher in the signal handler.
func setupTicketRotator(
srvGrps []*agd.ServerGroup,
- sigHdlr signalHandler,
+ sigHdlr *service.SignalHandler,
errColl errcoll.Interface,
) (err error) {
tickRot, err := newTicketRotator(srvGrps)
@@ -324,7 +325,7 @@ func setupTicketRotator(
return fmt.Errorf("starting ticket rotator refresh: %w", err)
}
- sigHdlr.add(refr)
+ sigHdlr.Add(refr)
return nil
}
diff --git a/internal/cmd/upstream.go b/internal/cmd/upstream.go
index 24eae49..3372e2c 100644
--- a/internal/cmd/upstream.go
+++ b/internal/cmd/upstream.go
@@ -13,11 +13,10 @@ import (
"github.com/AdguardTeam/AdGuardDNS/internal/dnsserver/prometheus"
"github.com/AdguardTeam/AdGuardDNS/internal/errcoll"
"github.com/AdguardTeam/golibs/errors"
+ "github.com/AdguardTeam/golibs/service"
"github.com/AdguardTeam/golibs/timeutil"
)
-// DNS upstream configuration
-
// upstreamConfig is the upstream module configuration.
type upstreamConfig struct {
// Healthcheck contains the upstream healthcheck configuration.
@@ -160,9 +159,9 @@ func newUpstreamHealthcheck(
handler *forward.Handler,
conf *upstreamConfig,
errColl errcoll.Interface,
-) (refr agdservice.Interface) {
+) (refr service.Interface) {
if !conf.Healthcheck.Enabled {
- return agdservice.Empty{}
+ return service.Empty{}
}
return agdservice.NewRefreshWorker(&agdservice.RefreshWorkerConfig{
diff --git a/internal/debugsvc/debugsvc.go b/internal/debugsvc/debugsvc.go
index ee2f935..dcee854 100644
--- a/internal/debugsvc/debugsvc.go
+++ b/internal/debugsvc/debugsvc.go
@@ -7,10 +7,10 @@ import (
"io"
"net/http"
- "github.com/AdguardTeam/AdGuardDNS/internal/agdservice"
"github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/pprofutil"
+ "github.com/AdguardTeam/golibs/service"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
@@ -69,11 +69,15 @@ func startServer(s *server) {
}
// type check
-var _ agdservice.Interface = (*Service)(nil)
+var _ service.Interface = (*Service)(nil)
-// Start implements the [agdservice.Interface] interface for *Service. It
-// starts serving all endpoints. err is always nil, if any endpoint fails to
-// start, it panics.
+// Start implements the [service.Interface] interface for *Service. It starts
+// serving all endpoints but does not wait for them to actually go online. err
+// is always nil, if any endpoint fails to start, it panics.
+//
+// TODO(a.garipov): Wait for the services to go online.
+//
+// TODO(a.garipov): Use the context for cancelation.
func (svc *Service) Start(_ context.Context) (err error) {
for _, srv := range svc.servers {
go startServer(srv)
@@ -82,8 +86,8 @@ func (svc *Service) Start(_ context.Context) (err error) {
return nil
}
-// Shutdown implements the [agdservice.Interface] interface for *Service. It
-// stops serving all endpoints.
+// Shutdown implements the [service.Interface] interface for *Service. It stops
+// serving all endpoints.
func (svc *Service) Shutdown(ctx context.Context) (err error) {
srvNum := 0
for _, srv := range svc.servers {
diff --git a/internal/dnscheck/consulkv.go b/internal/dnscheck/consulkv.go
index de55bb2..002c016 100644
--- a/internal/dnscheck/consulkv.go
+++ b/internal/dnscheck/consulkv.go
@@ -76,6 +76,15 @@ func (kv *httpKV) get(ctx context.Context, key string) (inf *info, err error) {
}
defer func() { err = errors.WithDeferred(err, httpResp.Body.Close()) }()
+ // Note that, if no key exists at the given path, a 404 is returned instead
+ // of a normal 200 response.
+ //
+ // See https://developer.hashicorp.com/consul/api-docs/kv#read-key.
+ err = agdhttp.CheckStatus(httpResp, http.StatusOK)
+ if err != nil {
+ return nil, fmt.Errorf("response for key %q: %w", key, err)
+ }
+
var resp []*consulKVResponse
err = json.NewDecoder(httpResp.Body).Decode(&resp)
if err != nil {
@@ -153,6 +162,14 @@ func (kv *httpKV) set(ctx context.Context, key string, inf *info) (err error) {
}
defer func() { err = errors.WithDeferred(err, sessHTTPResp.Body.Close()) }()
+ // Status 200 is expected.
+ //
+ // See https://developer.hashicorp.com/consul/api-docs/session.
+ err = agdhttp.CheckStatus(sessHTTPResp, http.StatusOK)
+ if err != nil {
+ return fmt.Errorf("getting session for key %q: %w", key, err)
+ }
+
sessResp := &consulSessionResponse{}
err = json.NewDecoder(sessHTTPResp.Body).Decode(sessResp)
if err != nil {
@@ -176,6 +193,14 @@ func (kv *httpKV) set(ctx context.Context, key string, inf *info) (err error) {
}
defer func() { err = errors.WithDeferred(err, resp.Body.Close()) }()
+ // Status 200 is expected.
+ //
+ // See https://github.com/hashicorp/consul/blob/main/api/kv.go#L224.
+ err = agdhttp.CheckStatus(resp, http.StatusOK)
+ if err != nil {
+ return fmt.Errorf("setting key %q: %w", key, err)
+ }
+
return nil
}
diff --git a/internal/dnscheck/httpkv_test.go b/internal/dnscheck/httpkv_test.go
index 34ed17c..591b217 100644
--- a/internal/dnscheck/httpkv_test.go
+++ b/internal/dnscheck/httpkv_test.go
@@ -209,7 +209,75 @@ func TestHTTPKV(t *testing.T) {
dnsCk.ServeHTTP(rw, r)
assert.Equal(t, http.StatusInternalServerError, rw.Code)
-
+ assert.Equal(t, wantResp, rw.Body.String())
+ })
+}
+
+// newKVErrorServer returns URLs emulating behavior of Consul KV database
+// server returning HTTP errors.
+func newKVErrorServer(t *testing.T) (kv, sess *url.URL) {
+ srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusInternalServerError)
+ }))
+ t.Cleanup(srv.Close)
+
+ u, err := url.Parse(srv.URL)
+ require.NoError(t, err)
+
+ return u.JoinPath(kvPath), u.JoinPath(sessPath)
+}
+
+func TestHTTPKV_status_error(t *testing.T) {
+ const (
+ randomid = "randomid"
+ localDomain = "example.local"
+ )
+
+ conf := &dnscheck.ConsulConfig{
+ Messages: &dnsmsg.Constructor{},
+ ErrColl: &agdtest.ErrorCollector{
+ OnCollect: func(_ context.Context, _ error) {},
+ },
+ Domains: []string{localDomain},
+ NodeLocation: "some-node-location",
+ NodeName: "some-node-name",
+ TTL: 1 * time.Minute,
+ }
+
+ conf.ConsulKVURL, conf.ConsulSessionURL = newKVErrorServer(t)
+ dnsCk, err := dnscheck.NewConsul(conf)
+ require.NoError(t, err)
+
+ req := dnsservertest.CreateMessage(randomid+"-"+localDomain, dns.TypeA)
+ ri := &agd.RequestInfo{
+ Device: &agd.Device{ID: "some-device-id"},
+ Profile: &agd.Profile{ID: "some-profile-id"},
+ ServerGroup: "some-server-group-name",
+ Server: "some-server-name",
+ Host: randomid + "-" + localDomain,
+ RemoteIP: testRemoteIP,
+ QType: dns.TypeA,
+ Proto: agd.ProtoDNS,
+ }
+
+ _, err = dnsCk.Check(context.Background(), req, ri)
+ require.NoError(t, err)
+
+ dnscheck.FlushConsulCache(t, dnsCk)
+
+ t.Run("fail", func(t *testing.T) {
+ const wantResp = `getting from consul: response for key "randomid": server "": ` +
+ `status code error: expected 200, got 500` + "\n"
+
+ r := httptest.NewRequest(http.MethodGet, (&url.URL{
+ Scheme: "http",
+ Host: randomid + "-" + localDomain,
+ Path: "/dnscheck/test",
+ }).String(), strings.NewReader(""))
+ rw := httptest.NewRecorder()
+
+ dnsCk.ServeHTTP(rw, r)
+ assert.Equal(t, http.StatusInternalServerError, rw.Code)
assert.Equal(t, wantResp, rw.Body.String())
})
}
diff --git a/internal/dnsmsg/constructor.go b/internal/dnsmsg/constructor.go
index cbc75ce..92b9f81 100644
--- a/internal/dnsmsg/constructor.go
+++ b/internal/dnsmsg/constructor.go
@@ -200,6 +200,7 @@ func (c *Constructor) AppendDebugExtra(req, resp *dns.Msg, str string) (err erro
// positive numbers, but we need a ceiling operation here.
strNum := (strLen + MaxTXTStringLen - 1) / MaxTXTStringLen
+ // TODO(a.garipov): Use slices.Chunk in Go 1.23.
newStr := make([]string, strNum)
for i := 0; i < strNum; i++ {
start := i * MaxTXTStringLen
diff --git a/internal/dnsserver/dnsserver_test.go b/internal/dnsserver/dnsserver_test.go
index 99698d2..8fd0d68 100644
--- a/internal/dnsserver/dnsserver_test.go
+++ b/internal/dnsserver/dnsserver_test.go
@@ -1,11 +1,30 @@
package dnsserver_test
import (
+ "context"
"testing"
+ "time"
+ "github.com/AdguardTeam/AdGuardDNS/internal/dnsserver"
"github.com/AdguardTeam/golibs/testutil"
)
func TestMain(m *testing.M) {
testutil.DiscardLogOutput(m)
}
+
+// testTimeout is a common timeout for tests.
+const testTimeout = dnsserver.DefaultReadTimeout
+
+// contextWithTimeout is a helper that creates a new context with timeout and
+// registers ctx's cleanup with t.Cleanup.
+//
+// TODO(a.garipov): Move to golibs and DRY.
+func contextWithTimeout(tb testing.TB, timeout time.Duration) (ctx context.Context) {
+ tb.Helper()
+
+ ctx, cancel := context.WithTimeout(context.Background(), timeout)
+ tb.Cleanup(cancel)
+
+ return ctx
+}
diff --git a/internal/dnsserver/dnsservertest/server.go b/internal/dnsserver/dnsservertest/server.go
index 1d3d34e..36b07b7 100644
--- a/internal/dnsserver/dnsservertest/server.go
+++ b/internal/dnsserver/dnsservertest/server.go
@@ -189,12 +189,12 @@ func RunLocalQUICServer(
tlsConfig *tls.Config,
) (s *dnsserver.ServerQUIC, addr *net.UDPAddr, err error) {
conf := dnsserver.ConfigQUIC{
+ TLSConfig: tlsConfig,
ConfigBase: dnsserver.ConfigBase{
Name: "test",
Addr: "127.0.0.1:0",
Handler: h,
},
- TLSConfig: tlsConfig,
}
s = dnsserver.NewServerQUIC(conf)
@@ -209,7 +209,7 @@ func RunLocalQUICServer(
addr, ok := s.LocalUDPAddr().(*net.UDPAddr)
if !ok {
- return nil, nil, fmt.Errorf("invalid listen addr: %s", addr)
+ return nil, nil, fmt.Errorf("invalid listen addr: %T(%[1]v)", s.LocalUDPAddr())
}
return s, addr, nil
diff --git a/internal/dnsserver/go.mod b/internal/dnsserver/go.mod
index 8b529f7..5cbeb78 100644
--- a/internal/dnsserver/go.mod
+++ b/internal/dnsserver/go.mod
@@ -1,21 +1,21 @@
module github.com/AdguardTeam/AdGuardDNS/internal/dnsserver
-go 1.21.5
+go 1.21.8
require (
- github.com/AdguardTeam/golibs v0.18.1
+ github.com/AdguardTeam/golibs v0.20.1
github.com/ameshkov/dnscrypt/v2 v2.2.7
github.com/ameshkov/dnsstamps v1.0.3
github.com/bluele/gcache v0.0.2
- github.com/miekg/dns v1.1.56
- github.com/panjf2000/ants/v2 v2.8.2
+ github.com/miekg/dns v1.1.58
+ github.com/panjf2000/ants/v2 v2.9.0
github.com/patrickmn/go-cache v2.1.1-0.20191004192108-46f407853014+incompatible
- github.com/prometheus/client_golang v1.17.0
- github.com/quic-go/quic-go v0.39.0
+ github.com/prometheus/client_golang v1.18.0
+ github.com/quic-go/quic-go v0.41.0
github.com/stretchr/testify v1.8.4
- golang.org/x/exp v0.0.0-20231006140011-7918f672742d
- golang.org/x/net v0.17.0
- golang.org/x/sys v0.13.0
+ golang.org/x/exp v0.0.0-20240213143201-ec583247a57a
+ golang.org/x/net v0.21.0
+ golang.org/x/sys v0.17.0
)
require (
@@ -24,23 +24,21 @@ require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 // indirect
+ github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 // indirect
github.com/kr/text v0.2.0 // indirect
- github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
- github.com/onsi/ginkgo/v2 v2.13.0 // indirect
+ github.com/onsi/ginkgo/v2 v2.15.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_model v0.5.0 // indirect
- github.com/prometheus/common v0.44.0 // indirect
+ github.com/prometheus/common v0.46.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/quic-go/qpack v0.4.0 // indirect
- github.com/quic-go/qtls-go1-20 v0.3.4 // indirect
- go.uber.org/mock v0.3.0 // indirect
- golang.org/x/crypto v0.14.0 // indirect
- golang.org/x/mod v0.13.0 // indirect
- golang.org/x/text v0.13.0 // indirect
- golang.org/x/tools v0.14.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ go.uber.org/mock v0.4.0 // indirect
+ golang.org/x/crypto v0.19.0 // indirect
+ golang.org/x/mod v0.15.0 // indirect
+ golang.org/x/text v0.14.0 // indirect
+ golang.org/x/tools v0.18.0 // indirect
+ google.golang.org/protobuf v1.32.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/internal/dnsserver/go.sum b/internal/dnsserver/go.sum
index 42abc22..6e91b7f 100644
--- a/internal/dnsserver/go.sum
+++ b/internal/dnsserver/go.sum
@@ -1,4 +1,5 @@
-github.com/AdguardTeam/golibs v0.18.1 h1:6u0fvrIj2qjUsRdbIGJ9AR0g5QRSWdKIo/DYl3tp5aM=
+github.com/AdguardTeam/golibs v0.20.1 h1:ol8qLjWGZhU9paMMwN+OLWVTUigGsXa29iVTyd62VKY=
+github.com/AdguardTeam/golibs v0.20.1/go.mod h1:bgcMgRviCKyU6mkrX+RtT/OsKPFzyppelfRsksMG3KU=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY=
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=
@@ -17,48 +18,44 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
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/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
-github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+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-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 h1:pUa4ghanp6q4IJHwE9RwLgmVFfReJN+KbQ8ExNEUUoQ=
-github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
+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-20240207164012-fb44976bdcd5 h1:E/LAvt58di64hlYjx7AsNS6C/ysHWYo+2qPCZKTQhRo=
+github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
-github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE=
-github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY=
-github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
-github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
-github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
-github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M=
-github.com/panjf2000/ants/v2 v2.8.2 h1:D1wfANttg8uXhC9149gRt1PDQ+dLVFjNXkCEycMcvQQ=
-github.com/panjf2000/ants/v2 v2.8.2/go.mod h1:7ZxyxsqE4vvW0M7LSD8aI3cKwgFhBHbxnlN8mDqHa1I=
+github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
+github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
+github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY=
+github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
+github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8=
+github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
+github.com/panjf2000/ants/v2 v2.9.0 h1:SztCLkVxBRigbg+vt0S5QvF5vxAbxbKt09/YfAJ0tEo=
+github.com/panjf2000/ants/v2 v2.9.0/go.mod h1:7ZxyxsqE4vvW0M7LSD8aI3cKwgFhBHbxnlN8mDqHa1I=
github.com/patrickmn/go-cache v2.1.1-0.20191004192108-46f407853014+incompatible h1:IWzUvJ72xMjmrjR9q3H1PF+jwdN0uNQiR2t1BLNalyo=
github.com/patrickmn/go-cache v2.1.1-0.20191004192108-46f407853014+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
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_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk=
+github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA=
github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
-github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
+github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
+github.com/prometheus/common v0.46.0 h1:doXzt5ybi1HBKpsZOL0sSkaNHJJqkyfEWZGGqqScV0Y=
+github.com/prometheus/common v0.46.0/go.mod h1:Tp0qkxpb9Jsg54QMe+EAmqXkSV7Evdy1BTn+g2pa/hQ=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/qtls-go1-20 v0.3.4 h1:MfFAPULvst4yoMgY9QmtpYmfij/em7O8UUi+bNVm7Cg=
-github.com/quic-go/qtls-go1-20 v0.3.4/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k=
-github.com/quic-go/quic-go v0.39.0 h1:AgP40iThFMY0bj8jGxROhw3S0FMGa8ryqsmi9tBH3So=
-github.com/quic-go/quic-go v0.39.0/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q=
+github.com/quic-go/quic-go v0.41.0 h1:aD8MmHfgqTURWNJy48IYFg2OnxwHT3JL7ahGs73lb4k=
+github.com/quic-go/quic-go v0.41.0/go.mod h1:qCkNjqczPEvgsOnxZ0eCD14lv+B2LHlFAB++CNOh9hA=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -70,31 +67,27 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo=
-go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
-golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
-golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
-golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
-golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
-golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+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.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
+golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
+golang.org/x/exp v0.0.0-20240213143201-ec583247a57a h1:HinSgX1tJRX3KsL//Gxynpw5CTOAIPhgL4W8PNiIpVE=
+golang.org/x/exp v0.0.0-20240213143201-ec583247a57a/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
+golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8=
+golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
+golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
-golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
-golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
-golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
-golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
+golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
+golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
+golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
+google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
+google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
diff --git a/internal/dnsserver/serverbase.go b/internal/dnsserver/serverbase.go
index f23e09f..d3678ff 100644
--- a/internal/dnsserver/serverbase.go
+++ b/internal/dnsserver/serverbase.go
@@ -474,7 +474,7 @@ func (s *ServerBase) waitShutdown(ctx context.Context) (err error) {
// isStarted returns true if the server is started.
func (s *ServerBase) isStarted() (started bool) {
s.lock.RLock()
- started = s.started
- s.lock.RUnlock()
- return started
+ defer s.lock.RUnlock()
+
+ return s.started
}
diff --git a/internal/dnsserver/serverbench_test.go b/internal/dnsserver/serverbench_test.go
index 4d05ea5..aefe091 100644
--- a/internal/dnsserver/serverbench_test.go
+++ b/internal/dnsserver/serverbench_test.go
@@ -313,7 +313,7 @@ func BenchmarkServeQUIC(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
- resp := sendQUICMessage(b, sess, req, false)
+ resp := requireSendQUICMessage(b, sess, req)
require.NotNil(b, resp)
require.True(b, resp.Response)
}
diff --git a/internal/dnsserver/serverdns.go b/internal/dnsserver/serverdns.go
index 3734f1a..066e054 100644
--- a/internal/dnsserver/serverdns.go
+++ b/internal/dnsserver/serverdns.go
@@ -108,6 +108,8 @@ func NewServerDNS(conf ConfigDNS) (s *ServerDNS) {
// server with a TLS layer on top of it.
func newServerDNS(proto Protocol, conf ConfigDNS) (s *ServerDNS) {
// Init default settings first.
+ //
+ // TODO(a.garipov): Use cmp.Or in Go 1.22.
if conf.ReadTimeout == 0 {
conf.ReadTimeout = DefaultReadTimeout
}
diff --git a/internal/dnsserver/serverhttps.go b/internal/dnsserver/serverhttps.go
index 3684466..8ee3ddf 100644
--- a/internal/dnsserver/serverhttps.go
+++ b/internal/dnsserver/serverhttps.go
@@ -246,8 +246,16 @@ func (s *ServerHTTPS) shutdown(ctx context.Context) (err error) {
s.started = false
- // First step, close the active listener right away.
- s.closeListeners()
+ // First step, close the active TCP listener right away. Don't close the
+ // UDP one, as if there is one, it is closed by closing the QUIC listener.
+ //
+ // TODO(a.garipov): Fix this mess.
+ if s.tcpListener != nil {
+ err = s.tcpListener.Close()
+ if err != nil {
+ log.Info("[%s]: Failed to close NetworkTCP listener: %v", s.Name(), err)
+ }
+ }
// Second, shutdown the HTTP server.
err = s.httpServer.Shutdown(ctx)
diff --git a/internal/dnsserver/serverhttps_test.go b/internal/dnsserver/serverhttps_test.go
index f258a40..f664420 100644
--- a/internal/dnsserver/serverhttps_test.go
+++ b/internal/dnsserver/serverhttps_test.go
@@ -597,7 +597,6 @@ func createJSONRequest(
requestURL := fmt.Sprintf("%s://test.local%s?%s", proto, dnsserver.PathJSON, q.Encode())
r, err = http.NewRequest(method, requestURL, nil)
-
if err != nil {
return nil, err
}
diff --git a/internal/dnsserver/serverquic.go b/internal/dnsserver/serverquic.go
index 7e0d744..2af9816 100644
--- a/internal/dnsserver/serverquic.go
+++ b/internal/dnsserver/serverquic.go
@@ -66,11 +66,11 @@ var compatProtoDQ = []string{"doq-i00", "doq-i02", "doq-i03", "dq"}
// ConfigQUIC is a struct that needs to be passed to NewServerQUIC to
// initialize a new ServerQUIC instance.
type ConfigQUIC struct {
- ConfigBase
-
// TLSConfig is the TLS configuration for QUIC.
TLSConfig *tls.Config
+ ConfigBase
+
// MaxStreamsPerPeer is the maximum number of concurrent streams that a peer
// is allowed to open.
MaxStreamsPerPeer int
@@ -83,8 +83,6 @@ type ConfigQUIC struct {
type ServerQUIC struct {
*ServerBase
- conf ConfigQUIC
-
// pool is a goroutine pool we use to process DNS queries. Complicated
// logic may require growing the goroutine's stack and we experienced it
// in AdGuard DNS. The easiest way to avoid spending extra time on this is
@@ -100,6 +98,10 @@ type ServerQUIC struct {
// quicListener is a listener that we use to accept DoQ connections.
quicListener *quic.Listener
+
+ // TODO(a.garipov): Remove this and only save the values a server actually
+ // uses.
+ conf ConfigQUIC
}
// quicBytePoolSize is the size for the QUIC byte pools.
@@ -120,10 +122,10 @@ func NewServerQUIC(conf ConfigQUIC) (s *ServerQUIC) {
s = &ServerQUIC{
ServerBase: newServerBase(ProtoDoQ, conf.ConfigBase),
- conf: conf,
pool: newPoolNonblocking(),
reqPool: syncutil.NewSlicePool[byte](quicBytePoolSize),
respPool: syncutil.NewSlicePool[byte](quicBytePoolSize),
+ conf: conf,
}
return s
@@ -207,7 +209,6 @@ func (s *ServerQUIC) shutdown() (err error) {
s.started = false
// Now close all listeners
- s.closeListeners()
err = s.quicListener.Close()
if err != nil {
// Log this error but do not return it
@@ -242,6 +243,12 @@ func (s *ServerQUIC) serveQUIC(ctx context.Context, l *quic.Listener) (err error
// Wait until all conns are processed before exiting this method
defer wg.Wait()
+ // Use a context that is canceled once this connection ends to mitigate
+ // quic-go's mishandling of contexts. See TODO in serveQUICConn.
+ var cancel context.CancelFunc
+ ctx, cancel = context.WithCancel(ctx)
+ defer cancel()
+
for s.isStarted() {
err = s.acceptQUICConn(ctx, l, wg)
if err != nil {
@@ -251,7 +258,6 @@ func (s *ServerQUIC) serveQUIC(ctx context.Context, l *quic.Listener) (err error
return err
}
-
}
return nil
@@ -294,7 +300,7 @@ func (s *ServerQUIC) acceptQUICConn(
}
// serveQUICConnAsync wraps serveQUICConn call and handles all possible errors
-// that might happen there. It also makes sure that the WaitGroup will be
+// that might happen there. It also makes sure that the WaitGroup will be
// decremented.
func (s *ServerQUIC) serveQUICConnAsync(
ctx context.Context,
@@ -331,6 +337,21 @@ func (s *ServerQUIC) serveQUICConn(ctx context.Context, conn quic.Connection) (e
// bidirectional stream.
var stream quic.Stream
acceptCtx, cancel := context.WithDeadline(ctx, time.Now().Add(maxQUICIdleTimeout))
+
+ // For some reason AcceptStream below seems to get stuck even when
+ // acceptCtx is canceled. As a mitigation, check the context manually
+ // right before feeding it into AcceptStream.
+ //
+ // TODO(a.garipov): Try to reproduce and report.
+ select {
+ case <-acceptCtx.Done():
+ cancel()
+
+ return fmt.Errorf("checking accept ctx: %w", acceptCtx.Err())
+ default:
+ // Go on.
+ }
+
stream, err = conn.AcceptStream(acceptCtx)
// Make sure to call the cancel function to avoid leaks.
cancel()
@@ -396,9 +417,7 @@ func (s *ServerQUIC) serveQUICStream(
// that stream.
defer log.OnCloserError(stream, log.DEBUG)
- var msg *dns.Msg
- var doqDraft bool
- msg, doqDraft, err = s.readQUICMsg(ctx, stream)
+ msg, err := s.readQUICMsg(ctx, stream)
if err != nil {
closeQUICConn(conn, DOQCodeProtocolError)
@@ -435,15 +454,7 @@ func (s *ServerQUIC) serveQUICStream(
bufPtr := s.respPool.Get()
defer s.respPool.Put(bufPtr)
- // Depending on the DoQ version we either write a 2-bytes prefixed message
- // or just write the message (for old draft versions).
- var b []byte
- if doqDraft {
- // TODO(ameshkov): remove draft support in the late 2023.
- b, err = resp.PackBuffer(*bufPtr)
- } else {
- b, err = packWithPrefix(resp, *bufPtr)
- }
+ b, err := packWithPrefix(resp, *bufPtr)
if err != nil {
closeQUICConn(conn, DOQCodeProtocolError)
@@ -464,7 +475,7 @@ func (s *ServerQUIC) serveQUICStream(
func (s *ServerQUIC) readQUICMsg(
ctx context.Context,
stream quic.Stream,
-) (m *dns.Msg, doqDraft bool, err error) {
+) (m *dns.Msg, err error) {
bufPtr := s.reqPool.Get()
defer s.reqPool.Put(bufPtr)
@@ -485,35 +496,29 @@ func (s *ServerQUIC) readQUICMsg(
// received.
if n < DNSHeaderSize {
if err != nil {
- return nil, false, fmt.Errorf("failed to read QUIC message: %w", err)
+ return nil, fmt.Errorf("failed to read QUIC message: %w", err)
}
s.metrics.OnInvalidMsg(ctx)
- return nil, false, dns.ErrShortRead
+ return nil, dns.ErrShortRead
}
- // Note that we support both the old drafts and the new RFC. In the old
- // draft DNS messages were not prefixed with the message length.
+ // TODO(a.garipov): DRY logic with the TCP one.
m = &dns.Msg{}
-
- // We're checking if the first two bytes contain the length of the message.
- // According to the spec, the DNS message ID is 0 so the first two bytes
- // will be zero in the case of an old draft implementation so this check
- // should be reliable.
packetLen := binary.BigEndian.Uint16(buf[:2])
- if packetLen == uint16(n-2) {
+ wantLen := uint16(n - 2)
+ if packetLen == wantLen {
err = m.Unpack(buf[2:])
} else {
- err = m.Unpack(buf)
- doqDraft = true
+ err = fmt.Errorf("bad buffer size %d, want %d", packetLen, wantLen)
}
-
if err != nil {
s.metrics.OnInvalidMsg(ctx)
- return nil, false, err
+
+ return nil, err
}
- return m, doqDraft, nil
+ return m, nil
}
// readAll reads from r until an error or io.EOF into the specified buffer buf.
@@ -558,7 +563,10 @@ func (s *ServerQUIC) listenQUIC(ctx context.Context) (err error) {
return err
}
+ // Save this for s.LocalUDPAddr. Do not close it separately as ql closes
+ // the underlying connection.
s.udpListener = conn
+
s.quicListener = ql
return nil
diff --git a/internal/dnsserver/serverquic_test.go b/internal/dnsserver/serverquic_test.go
index 10e9879..834e790 100644
--- a/internal/dnsserver/serverquic_test.go
+++ b/internal/dnsserver/serverquic_test.go
@@ -4,6 +4,7 @@ import (
"context"
"crypto/tls"
"encoding/binary"
+ "fmt"
"io"
"net"
"sync"
@@ -30,7 +31,7 @@ func TestServerQUIC_integration_query(t *testing.T) {
require.NoError(t, err)
testutil.CleanupAndRequireSuccess(t, func() (err error) {
- return srv.Shutdown(context.Background())
+ return srv.Shutdown(contextWithTimeout(t, testTimeout))
})
// Open a QUIC connection.
@@ -41,28 +42,29 @@ func TestServerQUIC_integration_query(t *testing.T) {
return conn.CloseWithError(0, "")
})
- // Send multiple queries to the DNS server in parallel
+ const queriesNum = 100
+
wg := &sync.WaitGroup{}
+ wg.Add(queriesNum)
- for i := 0; i < 100; i++ {
- wg.Add(1)
-
- // Create a test message.
+ for i := 0; i < queriesNum; i++ {
req := dnsservertest.NewReq("example.org.", dns.TypeA, dns.ClassINET)
req.RecursionDesired = true
- // Even requests are sent as if it's an old draft client.
- doqDraft := i%2 == 0
go func() {
defer wg.Done()
- resp := sendQUICMessage(t, conn, req, doqDraft)
- assert.NotNil(t, resp)
+ resp, reqErr := sendQUICMessage(conn, req)
+ // Do not use require, as this is a separate goroutine.
+ if !assert.NoError(t, reqErr) || !assert.NotNil(t, resp) {
+ return
+ }
+
assert.True(t, resp.Response)
// EDNS0 padding is only present when request also has padding opt.
paddingOpt := dnsservertest.FindEDNS0Option[*dns.EDNS0_PADDING](resp)
- require.Nil(t, paddingOpt)
+ assert.Nil(t, paddingOpt)
}()
}
@@ -78,7 +80,7 @@ func TestServerQUIC_integration_ENDS0Padding(t *testing.T) {
require.NoError(t, err)
testutil.CleanupAndRequireSuccess(t, func() (err error) {
- return srv.Shutdown(context.Background())
+ return srv.Shutdown(contextWithTimeout(t, testTimeout))
})
// Open a QUIC connection.
@@ -92,7 +94,7 @@ func TestServerQUIC_integration_ENDS0Padding(t *testing.T) {
req := dnsservertest.CreateMessage("example.org.", dns.TypeA)
req.Extra = []dns.RR{dnsservertest.NewEDNS0Padding(req.Len(), dns.DefaultMsgSize)}
- resp := sendQUICMessage(t, conn, req, false)
+ resp := requireSendQUICMessage(t, conn, req)
require.NotNil(t, resp)
require.Equal(t, dns.RcodeSuccess, resp.Rcode)
require.True(t, resp.Response)
@@ -112,7 +114,7 @@ func TestServerQUIC_integration_0RTT(t *testing.T) {
require.NoError(t, err)
testutil.CleanupAndRequireSuccess(t, func() (err error) {
- return srv.Shutdown(context.Background())
+ return srv.Shutdown(contextWithTimeout(t, testTimeout))
})
quicTracer := dnsservertest.NewQUICTracer()
@@ -150,7 +152,7 @@ func TestServerQUIC_integration_largeQuery(t *testing.T) {
require.NoError(t, err)
testutil.CleanupAndRequireSuccess(t, func() (err error) {
- return srv.Shutdown(context.Background())
+ return srv.Shutdown(contextWithTimeout(t, testTimeout))
})
// Open a QUIC connection.
@@ -174,7 +176,7 @@ func TestServerQUIC_integration_largeQuery(t *testing.T) {
},
}
- resp := sendQUICMessage(t, conn, req, false)
+ resp := requireSendQUICMessage(t, conn, req)
require.NotNil(t, resp)
require.True(t, resp.Response)
}
@@ -202,64 +204,77 @@ func testQUICExchange(
req := dnsservertest.NewReq("example.org.", dns.TypeA, dns.ClassINET)
req.RecursionDesired = true
- resp := sendQUICMessage(t, conn, req, false)
+ resp := requireSendQUICMessage(t, conn, req)
require.NotNil(t, resp)
}
// sendQUICMessage is a test helper that sends a test QUIC message.
func sendQUICMessage(
- t testing.TB,
conn quic.Connection,
req *dns.Msg,
- doqDraft bool,
-) (resp *dns.Msg) {
- t.Helper()
-
+) (resp *dns.Msg, err error) {
stream, err := conn.OpenStreamSync(context.Background())
- require.NoError(t, err)
-
- defer log.OnCloserError(stream, log.DEBUG)
-
- data, err := req.Pack()
- require.NoError(t, err)
-
- var buf []byte
- if doqDraft {
- buf = data
- } else {
- buf = make([]byte, 2+len(data))
- binary.BigEndian.PutUint16(buf, uint16(len(data)))
- copy(buf[2:], data)
+ if err != nil {
+ return nil, fmt.Errorf("opening stream: %w", err)
}
+ defer log.OnCloserError(stream, log.ERROR)
+
+ data, err := req.Pack()
+ if err != nil {
+ return nil, fmt.Errorf("packing: %w", err)
+ }
+
+ buf := make([]byte, 2+len(data))
+ binary.BigEndian.PutUint16(buf, uint16(len(data)))
+ copy(buf[2:], data)
+
err = writeQUICStream(buf, stream)
- require.NoError(t, err)
+ if err != nil {
+ return nil, fmt.Errorf("writing: %w", err)
+ }
// Closes the write-direction of the stream and sends a STREAM FIN packet.
// A DoQ client MUST send a FIN packet to indicate that the query is
// finished.
err = stream.Close()
- require.NoError(t, err)
+ if err != nil {
+ return nil, fmt.Errorf("closing stream: %w", err)
+ }
- // Now read the response.
respBytes := make([]byte, dns.MaxMsgSize)
n, err := stream.Read(respBytes)
- if !errors.Is(err, io.EOF) {
- require.NoError(t, err)
+ if err != nil && !errors.Is(err, io.EOF) {
+ return nil, fmt.Errorf("reading stream: %w", err)
}
- require.GreaterOrEqual(t, n, dnsserver.DNSHeaderSize)
+ if n < dnsserver.DNSHeaderSize {
+ return nil, fmt.Errorf("read %d, want %d", n, dnsserver.DNSHeaderSize)
+ }
- // Unpack the response.
reply := &dns.Msg{}
- if doqDraft {
- err = reply.Unpack(respBytes[:n])
- } else {
- err = reply.Unpack(respBytes[2:n])
+ err = reply.Unpack(respBytes[2:n])
+ if err != nil {
+ return nil, fmt.Errorf("unpacking: %w", err)
}
+
+ return reply, nil
+}
+
+// requireSendQUICMessage is a test helper that sends a test QUIC message and
+// requires it to succeed. It must not be used in a goroutine with the outer
+// test's t.
+func requireSendQUICMessage(
+ t testing.TB,
+ conn quic.Connection,
+ req *dns.Msg,
+) (resp *dns.Msg) {
+ t.Helper()
+
+ resp, err := sendQUICMessage(conn, req)
require.NoError(t, err)
- return reply
+ return resp
}
// writeQUICStream writes buf to the specified QUIC stream in chunks. This way
diff --git a/internal/dnssvc/dnssvc.go b/internal/dnssvc/dnssvc.go
index 1e97bdc..427988c 100644
--- a/internal/dnssvc/dnssvc.go
+++ b/internal/dnssvc/dnssvc.go
@@ -12,7 +12,6 @@ import (
"github.com/AdguardTeam/AdGuardDNS/internal/access"
"github.com/AdguardTeam/AdGuardDNS/internal/agd"
- "github.com/AdguardTeam/AdGuardDNS/internal/agdservice"
"github.com/AdguardTeam/AdGuardDNS/internal/billstat"
"github.com/AdguardTeam/AdGuardDNS/internal/connlimiter"
"github.com/AdguardTeam/AdGuardDNS/internal/dnscheck"
@@ -34,6 +33,7 @@ import (
"github.com/AdguardTeam/AdGuardDNS/internal/querylog"
"github.com/AdguardTeam/AdGuardDNS/internal/rulestat"
"github.com/AdguardTeam/golibs/errors"
+ "github.com/AdguardTeam/golibs/service"
"github.com/miekg/dns"
)
@@ -144,6 +144,10 @@ type Config struct {
// used.
UseECSCache bool
+ // ProfileDBEnabled is true, if user devices and profiles recognition is
+ // enabled.
+ ProfileDBEnabled bool
+
// ResearchMetrics controls whether research metrics are enabled or not.
// This is a set of metrics that we may need temporary, so its collection is
// controlled by a separate setting.
@@ -267,10 +271,10 @@ func mustStartListener(
}
// type check
-var _ agdservice.Interface = (*Service)(nil)
+var _ service.Interface = (*Service)(nil)
-// Start implements the [agdservice.Interface] interface for *Service. It
-// panics if one of the listeners could not start.
+// Start implements the [service.Interface] interface for *Service. It panics
+// if one of the listeners could not start.
func (svc *Service) Start(_ context.Context) (err error) {
for _, g := range svc.groups {
for _, s := range g.servers {
@@ -298,7 +302,7 @@ func shutdownListeners(ctx context.Context, listeners []*listener) (err error) {
return nil
}
-// Shutdown implements the [agdservice.Interface] interface for *Service.
+// Shutdown implements the [service.Interface] interface for *Service.
func (svc *Service) Shutdown(ctx context.Context) (err error) {
var errs []error
for _, g := range svc.groups {
@@ -512,13 +516,14 @@ func newServers(
})
imw := initial.New(&initial.Config{
- Messages: c.Messages,
- FilteringGroup: fg,
- ServerGroup: srvGrp,
- Server: s,
- ProfileDB: c.ProfileDB,
- GeoIP: c.GeoIP,
- ErrColl: c.ErrColl,
+ Messages: c.Messages,
+ FilteringGroup: fg,
+ ServerGroup: srvGrp,
+ Server: s,
+ ProfileDB: c.ProfileDB,
+ GeoIP: c.GeoIP,
+ ErrColl: c.ErrColl,
+ ProfileDBEnabled: c.ProfileDBEnabled,
})
h := dnsserver.WithMiddlewares(
diff --git a/internal/dnssvc/integration_test.go b/internal/dnssvc/integration_test.go
index db198dc..0254c8b 100644
--- a/internal/dnssvc/integration_test.go
+++ b/internal/dnssvc/integration_test.go
@@ -101,8 +101,8 @@ func newTestService(
OnIsBlockedHost: func(host string, qt uint16) (blocked bool) {
return false
},
- OnIsBlockedIP: func(ip netip.Addr) (blocked bool, rule string) {
- return false, ""
+ OnIsBlockedIP: func(ip netip.Addr) (blocked bool) {
+ return false
},
}
@@ -228,16 +228,18 @@ func newTestService(
},
},
ServerGroups: []*agd.ServerGroup{{
- TLS: &agd.TLS{
- DeviceIDWildcards: []string{dnssvctest.DeviceIDWildcard},
- },
+ BlockPageRedirect: &agd.BlockPageRedirect{},
DDR: &agd.DDR{
Enabled: true,
},
+ TLS: &agd.TLS{
+ DeviceIDWildcards: []string{dnssvctest.DeviceIDWildcard},
+ },
Name: testSrvGrpName,
FilteringGroup: testFltGrpID,
Servers: []*agd.Server{srv},
}},
+ ProfileDBEnabled: true,
}
svc, err := dnssvc.New(c)
diff --git a/internal/dnssvc/internal/accessmw/access.go b/internal/dnssvc/internal/accessmw/access.go
index ce8ab4f..4686a81 100644
--- a/internal/dnssvc/internal/accessmw/access.go
+++ b/internal/dnssvc/internal/accessmw/access.go
@@ -45,7 +45,7 @@ func (mw *Middleware) Wrap(next dnsserver.Handler) (wrapped dnsserver.Handler) {
defer func() { err = errors.Annotate(err, "access mw: %w") }()
rAddr := netutil.NetAddrToAddrPort(rw.RemoteAddr()).Addr()
- if blocked, _ := mw.accessManager.IsBlockedIP(rAddr); blocked {
+ if blocked := mw.accessManager.IsBlockedIP(rAddr); blocked {
metrics.AccessBlockedForSubnetTotal.Inc()
return nil
diff --git a/internal/dnssvc/internal/accessmw/access_test.go b/internal/dnssvc/internal/accessmw/access_test.go
index 39534d6..b6c0fa4 100644
--- a/internal/dnssvc/internal/accessmw/access_test.go
+++ b/internal/dnssvc/internal/accessmw/access_test.go
@@ -25,9 +25,9 @@ func TestMiddleware_Wrap(t *testing.T) {
"block.test",
"UPPERCASE.test",
"||block_aaaa.test^$dnstype=AAAA",
- }, []string{
- "1.1.1.1",
- "2.2.2.0/8",
+ }, []netip.Prefix{
+ netip.MustParsePrefix("1.1.1.1/32"),
+ netip.MustParsePrefix("2.2.2.0/8"),
})
require.NoError(t, accessErr)
diff --git a/internal/dnssvc/internal/initial/initial.go b/internal/dnssvc/internal/initial/initial.go
index b7e75d4..a77bd28 100644
--- a/internal/dnssvc/internal/initial/initial.go
+++ b/internal/dnssvc/internal/initial/initial.go
@@ -55,6 +55,10 @@ type Middleware struct {
// errColl collects and reports the errors considered non-critical.
errColl errcoll.Interface
+
+ // profilesEnabled is true, if user devices and profiles recognition is
+ // enabled.
+ profilesEnabled bool
}
// Config is the configuration structure for the initial middleware. All fields
@@ -80,6 +84,10 @@ type Config struct {
// ErrColl collects and reports the errors considered non-critical.
ErrColl errcoll.Interface
+
+ // ProfileDBEnabled is true, if user devices and profiles recognition is
+ // enabled.
+ ProfileDBEnabled bool
}
// New returns a new initial middleware. c must not be nil.
@@ -92,9 +100,10 @@ func New(c *Config) (mw *Middleware) {
pool: syncutil.NewPool(func() (v *agd.RequestInfo) {
return &agd.RequestInfo{}
}),
- db: c.ProfileDB,
- geoIP: c.GeoIP,
- errColl: c.ErrColl,
+ db: c.ProfileDB,
+ geoIP: c.GeoIP,
+ errColl: c.ErrColl,
+ profilesEnabled: c.ProfileDBEnabled,
}
}
@@ -221,6 +230,10 @@ func (mw *Middleware) newRequestInfo(
return nil, err
}
+ if !mw.profilesEnabled {
+ return ri, nil
+ }
+
// Add the profile information, if any.
localAddr := netutil.NetAddrToAddrPort(lAddr)
err = mw.addProfile(ctx, ri, req, localAddr)
diff --git a/internal/dnssvc/internal/initial/initial_test.go b/internal/dnssvc/internal/initial/initial_test.go
index 9ae7088..64eb731 100644
--- a/internal/dnssvc/internal/initial/initial_test.go
+++ b/internal/dnssvc/internal/initial/initial_test.go
@@ -181,6 +181,7 @@ func TestMiddleware_Wrap(t *testing.T) {
ErrColl: &agdtest.ErrorCollector{
OnCollect: func(_ context.Context, _ error) { panic("not implemented") },
},
+ ProfileDBEnabled: true,
})
ctx := context.Background()
@@ -301,6 +302,7 @@ func TestMiddleware_Wrap_error(t *testing.T) {
ErrColl: &agdtest.ErrorCollector{
OnCollect: func(_ context.Context, _ error) { panic("not implemented") },
},
+ ProfileDBEnabled: true,
})
ctx := context.Background()
@@ -517,6 +519,7 @@ func TestMiddleware_Wrap_access(t *testing.T) {
ErrColl: &agdtest.ErrorCollector{
OnCollect: func(_ context.Context, _ error) { panic("not implemented") },
},
+ ProfileDBEnabled: true,
})
ctx := context.Background()
@@ -565,14 +568,15 @@ func newServers() (srvs map[agd.ServerName]*agd.Server) {
func newServerGroup(srvs []*agd.Server) (srvGrp *agd.ServerGroup) {
srvGrp = &agd.ServerGroup{
- TLS: &agd.TLS{
- DeviceIDWildcards: []string{"*.d." + resolverName},
- },
+ BlockPageRedirect: &agd.BlockPageRedirect{},
DDR: &agd.DDR{
DeviceTargets: stringutil.NewSet(),
PublicTargets: stringutil.NewSet(),
Enabled: true,
},
+ TLS: &agd.TLS{
+ DeviceIDWildcards: []string{"*.d." + resolverName},
+ },
Name: "test_server_group",
Servers: srvs,
}
@@ -605,14 +609,15 @@ var errSink error
func BenchmarkMiddleware_Wrap(b *testing.B) {
const devIDTarget = "dns.example.com"
srvGrp := &agd.ServerGroup{
- TLS: &agd.TLS{
- DeviceIDWildcards: []string{"*." + devIDTarget},
- },
+ BlockPageRedirect: &agd.BlockPageRedirect{},
DDR: &agd.DDR{
DeviceTargets: stringutil.NewSet(),
PublicTargets: stringutil.NewSet(),
Enabled: true,
},
+ TLS: &agd.TLS{
+ DeviceIDWildcards: []string{"*." + devIDTarget},
+ },
Name: agd.ServerGroupName("test_server_group"),
Servers: []*agd.Server{
dnssvctest.NewServer("test_server_dot", agd.ProtoDoT, &agd.ServerBindData{
@@ -708,6 +713,7 @@ func BenchmarkMiddleware_Wrap(b *testing.B) {
ErrColl: &agdtest.ErrorCollector{
OnCollect: func(_ context.Context, _ error) { panic("not implemented") },
},
+ ProfileDBEnabled: true,
})
h := mw.Wrap(handler)
@@ -753,6 +759,7 @@ func BenchmarkMiddleware_Wrap(b *testing.B) {
ErrColl: &agdtest.ErrorCollector{
OnCollect: func(_ context.Context, _ error) { panic("not implemented") },
},
+ ProfileDBEnabled: true,
})
h := mw.Wrap(handler)
@@ -806,6 +813,7 @@ func BenchmarkMiddleware_Wrap(b *testing.B) {
ErrColl: &agdtest.ErrorCollector{
OnCollect: func(_ context.Context, _ error) { panic("not implemented") },
},
+ ProfileDBEnabled: true,
})
h := mw.Wrap(handler)
@@ -864,6 +872,7 @@ func BenchmarkMiddleware_Wrap(b *testing.B) {
ErrColl: &agdtest.ErrorCollector{
OnCollect: func(_ context.Context, _ error) { panic("not implemented") },
},
+ ProfileDBEnabled: true,
})
h := mw.Wrap(handler)
diff --git a/internal/dnssvc/internal/initial/profile_internal_test.go b/internal/dnssvc/internal/initial/profile_internal_test.go
index 189b8a3..7417351 100644
--- a/internal/dnssvc/internal/initial/profile_internal_test.go
+++ b/internal/dnssvc/internal/initial/profile_internal_test.go
@@ -101,8 +101,9 @@ func TestMiddleware_profile(t *testing.T) {
srv.LinkedIPEnabled = tc.linkedIPEnabled
mw := New(&Config{
- Server: srv,
- ProfileDB: newProfileDB(t, prof, dev, tc.wantByWhat),
+ Server: srv,
+ ProfileDB: newProfileDB(t, prof, dev, tc.wantByWhat),
+ ProfileDBEnabled: true,
})
ctx := context.Background()
@@ -196,8 +197,9 @@ func TestMiddleware_profileByAddrs(t *testing.T) {
srv.LinkedIPEnabled = tc.linkedIPEnabled
mw := New(&Config{
- Server: srv,
- ProfileDB: newProfileDB(t, prof, dev, tc.wantByWhat),
+ Server: srv,
+ ProfileDB: newProfileDB(t, prof, dev, tc.wantByWhat),
+ ProfileDBEnabled: true,
})
ctx := context.Background()
diff --git a/internal/dnssvc/internal/initial/specialdomain_test.go b/internal/dnssvc/internal/initial/specialdomain_test.go
index 943972d..9024f82 100644
--- a/internal/dnssvc/internal/initial/specialdomain_test.go
+++ b/internal/dnssvc/internal/initial/specialdomain_test.go
@@ -198,9 +198,10 @@ func TestMiddleware_ServeDNS_specialDomain(t *testing.T) {
Protocol: agd.ProtoDNS,
LinkedIPEnabled: true,
},
- ProfileDB: db,
- GeoIP: geoIP,
- ErrColl: errColl,
+ ProfileDB: db,
+ GeoIP: geoIP,
+ ErrColl: errColl,
+ ProfileDBEnabled: true,
})
h := mw.Wrap(handler)
diff --git a/internal/ecscache/ecsblocklist.go b/internal/ecscache/ecsblocklist.go
index 4455403..f1200ea 100644
--- a/internal/ecscache/ecsblocklist.go
+++ b/internal/ecscache/ecsblocklist.go
@@ -7,9 +7,7 @@ package ecscache
var FakeECSFQDNs = map[string]struct{}{
"01.cofile.net.": {},
"011b2ef417d541e4b4a0753f94353476.pacloudflare.com.": {},
- "02.cofile.net.": {},
- "0217991b.akstat.io.": {},
- "0217991d.akstat.io.": {},
+ "02.cofile.net.": {},
"0272ac85-5199-4024-a555-397c3d825d95.prmutv.co.": {},
"03.cofile.net.": {},
"04.cofile.net.": {},
@@ -19,26 +17,22 @@ var FakeECSFQDNs = map[string]struct{}{
"08.cofile.net.": {},
"09.cofile.net.": {},
"0cf.io.": {},
- "0cf17917-395b-4f25-91cc-db3bdd6044b0.prmutv.co.": {},
- "1-146-13451-3.b.cdn12.com.": {},
- "1-322-13451-3.b.cdn12.com.": {},
- "1-361-13451-3.b.cdn12.com.": {},
- "1-363-13451-3.b.cdn12.com.": {},
- "1-94-13451-3.b.cdn12.com.": {},
- "1-957-13451-3.b.cdn12.com.": {},
- "1-961-13451-3.b.cdn12.com.": {},
- "1.cn.pool.ntp.org.": {},
- "10.cofile.net.": {},
- "103.chtsite.com.": {},
- "10m.com.cn.": {},
- "11-alarm-mop.meshare.com.": {},
- "11.cofile.net.": {},
+ "0cf17917-395b-4f25-91cc-db3bdd6044b0.prmutv.co.": {},
+ "1.cn.pool.ntp.org.": {},
+ "1.eu.dl.wireshark.org.": {},
+ "10.cofile.net.": {},
+ "103.chtsite.com.": {},
+ "10m.com.cn.": {},
+ "11-alarm-mop.meshare.com.": {},
+ "11.cofile.net.": {},
"1184-ipv4v6e.clump.dprodmgd105.aa-rt.sharepoint.com.": {},
"12-alarm-mop.meshare.com.": {},
"12.cofile.net.": {},
"126.net.": {},
"13-alarm-mop.meshare.com.": {},
"13.cofile.net.": {},
+ "1365538595.rsc.cdn77.org.": {},
+ "1394501235.rsc.cdn77.org.": {},
"14-alarm-mop.meshare.com.": {},
"14.cofile.net.": {},
"15.cofile.net.": {},
@@ -47,39 +41,38 @@ var FakeECSFQDNs = map[string]struct{}{
"163yun.com.": {},
"1688.com.": {},
"17.cofile.net.": {},
- "173bf105.akstat.io.": {},
- "17de4c13.akstat.io.": {},
- "17de4c1f.akstat.io.": {},
+ "17173sf.com.": {},
+ "17de4c16.akstat.io.": {},
"18.cofile.net.": {},
- "1845588971.rsc.cdn77.org.": {},
- "19.cofile.net.": {},
+ "18ea70d2d9a945cfb97d818ba71817dc.pacloudflare.com.": {},
+ "19.cofile.net.": {},
"192667-ipv4v6e.farm.dprodmgd105.aa-rt.sharepoint.com.": {},
"192991-ipv4v6e.farm.dprodmgd105.aa-rt.sharepoint.com.": {},
"193119-ipv4v6e.farm.dprodmgd105.aa-rt.sharepoint.com.": {},
- "193253-ipv4v6e.farm.dprodmgd105.aa-rt.sharepoint.com.": {},
- "193562-ipv4v6e.farm.dprodmgd105.aa-rt.sharepoint.com.": {},
- "193592-ipv4v6e.farm.dprodmgd105.aa-rt.sharepoint.com.": {},
+ "193259-ipv4v6e.farm.dprodmgd105.aa-rt.sharepoint.com.": {},
+ "193522-ipv4v6e.farm.dprodmgd105.aa-rt.sharepoint.com.": {},
+ "193597-ipv4v6e.farm.dprodmgd105.aa-rt.sharepoint.com.": {},
"1941-ipv4v6e.clump.dprodmgd105.aa-rt.sharepoint.com.": {},
"1weather.onelouder.com.": {},
+ "2-01-49b5-0066.cdx.cedexis.net.": {},
"2.401402081.west-gcloud.codm.activision.com.": {},
"2.realtime.services.box.net.": {},
"20.cofile.net.": {},
"201205igp.gameloft.com.": {},
- "2345.cc.": {},
- "23andme.com.": {},
- "2442-ipv4v6e.clump.dprodmgd105.aa-rt.sharepoint.com.": {},
+ "21cn.com.": {},
"2acdb9b66bb242618283aadb21ede6c1.pacloudflare.com.": {},
"2e4b93d1-a8ae-4a89-8885-6109135ac0de.prmutv.co.": {},
"2talk.com.": {},
+ "2tx.com.": {},
"360.cn.": {},
"360os.com.": {},
"360safe.com.": {},
"365.kdocs.cn.": {},
"3a6b0682-f3e1-4576-a706-5eb4101b9cc3.prmutv.co.": {},
"3aba5292-ba75-422b-8715-bd21146f7836.prmutv.co.": {},
+ "3bjjlx-cdn-settings.appsflyersdk.com.": {},
"3d2fb0bd-52fc-4b75-aaf5-2d436c172540.prmutv.co.": {},
- "3g.cn.": {},
- "4.401402081.west-gcloud.codm.activision.com.": {},
+ "4.401402081.west-gcloud.codm.activision.com.": {},
"4.adsco.re.": {},
"401402081.west-gcloud.codm.activision.com.": {},
"4065-ipv4v6e.clump.dprodmgd105.aa-rt.sharepoint.com.": {},
@@ -87,34 +80,43 @@ var FakeECSFQDNs = map[string]struct{}{
"4974-ipv4v6e.clump.dprodmgd105.aa-rt.sharepoint.com.": {},
"507b28fb-2ef1-4c34-8bda-ba32030bb199.prmutv.co.": {},
"520.jp.": {},
- "6.401402081.west-gcloud.codm.activision.com.": {},
- "6093eccf-6734-4877-ac8b-83d6d0e27b46.prmutv.co.": {},
- "6c3e19e3-d05e-45d1-8f79-fcd6cb2f3a21.prmutv.co.": {},
- "733868e706dd40d3a4a0588fc39b3df8.pacloudflare.com.": {},
- "7c7b02d4bc3d48dd81a7c7738d4de1ab.pacloudflare.com.": {},
+ "5d79bce7-5d2b-427e-a6c4-b89b6c7bf048.prmutv.co.": {},
+ "6.401402081.west-gcloud.codm.activision.com.": {},
+ "6093eccf-6734-4877-ac8b-83d6d0e27b46.prmutv.co.": {},
+ "6536.apps.zdusercontent.com.": {},
+ "68547f8f-2fd8-4ff3-9b63-51e86e2edee8.prmutv.co.": {},
+ "6c3e19e3-d05e-45d1-8f79-fcd6cb2f3a21.prmutv.co.": {},
+ "6o1s4z-launches.appsflyersdk.com.": {},
+ "733868e706dd40d3a4a0588fc39b3df8.pacloudflare.com.": {},
+ "789-ipv4v6e.clump.dprodmgd105.aa-rt.sharepoint.com.": {},
+ "7c7b02d4bc3d48dd81a7c7738d4de1ab.pacloudflare.com.": {},
+ "8686c.com.": {},
"88a66e5c-8fe8-48af-9c6c-3ec3f4983aad.prmutv.co.": {},
+ "8fd3136c-39ae-4836-adeb-ea2f0db46980.prmutv.co.": {},
"8x8.com.cdn.cloudflare.net.": {},
"9pumbooc7hqedhjmeavbpmp5ik9u0ngr-data.customer.pendo.io.": {},
"a-m-p.xyz.": {},
- "a.ad.gt.cdn.cloudflare.net.": {},
- "a.beat3put.com.": {},
+ "a.dtssrv.com.": {},
"a.fc.namequery.com.": {},
"a.nel.cloudflare.com.": {},
- "a.ns.c10r.facebook.com.": {},
- "a.ns.cdn.whatsapp.net.": {},
+ "a.nitropay.com.": {},
"a.ns.xx.fbcdn.net.": {},
"a.tile.openstreetmap.org.": {},
"a.tile.osm.org.": {},
+ "a010.casalemedia.com.": {},
"a011.casalemedia.com.": {},
+ "a012.casalemedia.com.": {},
+ "a013.casalemedia.com.": {},
"a014.casalemedia.com.": {},
+ "a015.casalemedia.com.": {},
"a016.casalemedia.com.": {},
"a017.casalemedia.com.": {},
"a018.casalemedia.com.": {},
"a019.casalemedia.com.": {},
"a020.casalemedia.com.": {},
- "a021.casalemedia.com.": {},
"a022.casalemedia.com.": {},
"a023.casalemedia.com.": {},
+ "a024.casalemedia.com.": {},
"a025.casalemedia.com.": {},
"a026.casalemedia.com.": {},
"a027.casalemedia.com.": {},
@@ -124,14 +126,14 @@ var FakeECSFQDNs = map[string]struct{}{
"a031.casalemedia.com.": {},
"a032.casalemedia.com.": {},
"a033.casalemedia.com.": {},
- "a034.casalemedia.com.": {},
"a035.casalemedia.com.": {},
- "a037.casalemedia.com.": {},
+ "a036.casalemedia.com.": {},
"a038.casalemedia.com.": {},
"a039.casalemedia.com.": {},
"a040.casalemedia.com.": {},
"a041.casalemedia.com.": {},
"a042.casalemedia.com.": {},
+ "a043.casalemedia.com.": {},
"a044.casalemedia.com.": {},
"a045.casalemedia.com.": {},
"a046.casalemedia.com.": {},
@@ -140,7 +142,6 @@ var FakeECSFQDNs = map[string]struct{}{
"a058.casalemedia.com.": {},
"a074.casalemedia.com.": {},
"a075.casalemedia.com.": {},
- "a080.casalemedia.com.": {},
"a088.casalemedia.com.": {},
"a091.casalemedia.com.": {},
"a095.casalemedia.com.": {},
@@ -148,6 +149,7 @@ var FakeECSFQDNs = map[string]struct{}{
"a097.casalemedia.com.": {},
"a098.casalemedia.com.": {},
"a099.casalemedia.com.": {},
+ "a101.casalemedia.com.": {},
"a119.casalemedia.com.": {},
"a121.casalemedia.com.": {},
"a123.casalemedia.com.": {},
@@ -157,53 +159,33 @@ var FakeECSFQDNs = map[string]struct{}{
"a128.casalemedia.com.": {},
"a129.casalemedia.com.": {},
"a131.casalemedia.com.": {},
- "a132.casalemedia.com.": {},
"a133.casalemedia.com.": {},
"a134.casalemedia.com.": {},
+ "a136.casalemedia.com.": {},
+ "a137.casalemedia.com.": {},
"a138.casalemedia.com.": {},
- "a140.casalemedia.com.": {},
+ "a139.casalemedia.com.": {},
"a141.casalemedia.com.": {},
"a143.casalemedia.com.": {},
"a144.casalemedia.com.": {},
"a145.casalemedia.com.": {},
- "a1462.casalemedia.com.": {},
- "a1463.casalemedia.com.": {},
- "a1467.casalemedia.com.": {},
+ "a146.casalemedia.com.": {},
"a147.casalemedia.com.": {},
- "a1474.casalemedia.com.": {},
- "a1487.casalemedia.com.": {},
"a149.casalemedia.com.": {},
- "a1498.casalemedia.com.": {},
"a150.casalemedia.com.": {},
"a151.casalemedia.com.": {},
- "a1518.casalemedia.com.": {},
"a152.casalemedia.com.": {},
- "a1521.casalemedia.com.": {},
- "a1528.casalemedia.com.": {},
"a153.casalemedia.com.": {},
- "a1531.casalemedia.com.": {},
"a156.casalemedia.com.": {},
- "a1565.casalemedia.com.": {},
"a157.casalemedia.com.": {},
"a158.casalemedia.com.": {},
- "a1587.casalemedia.com.": {},
- "a159.casalemedia.com.": {},
- "a1590.casalemedia.com.": {},
- "a1591.casalemedia.com.": {},
- "a1598.casalemedia.com.": {},
"a160.casalemedia.com.": {},
"a161.casalemedia.com.": {},
- "a1649.casalemedia.com.": {},
- "a1660.casalemedia.com.": {},
- "a1671.casalemedia.com.": {},
- "a1675.casalemedia.com.": {},
- "a1676.casalemedia.com.": {},
+ "a166.casalemedia.com.": {},
"a169.casalemedia.com.": {},
- "a1692.casalemedia.com.": {},
- "a1693.casalemedia.com.": {},
- "a1696.casalemedia.com.": {},
"a170.casalemedia.com.": {},
"a172.casalemedia.com.": {},
+ "a178.casalemedia.com.": {},
"a179.casalemedia.com.": {},
"a182.casalemedia.com.": {},
"a186.casalemedia.com.": {},
@@ -212,6 +194,7 @@ var FakeECSFQDNs = map[string]struct{}{
"a189.casalemedia.com.": {},
"a190.casalemedia.com.": {},
"a192.casalemedia.com.": {},
+ "a195.casalemedia.com.": {},
"a200.casalemedia.com.": {},
"a2001.casalemedia.com.": {},
"a2002.casalemedia.com.": {},
@@ -221,17 +204,13 @@ var FakeECSFQDNs = map[string]struct{}{
"a2006.casalemedia.com.": {},
"a2007.casalemedia.com.": {},
"a2008.casalemedia.com.": {},
- "a2009.casalemedia.com.": {},
"a201.casalemedia.com.": {},
"a2010.casalemedia.com.": {},
"a2011.casalemedia.com.": {},
"a2012.casalemedia.com.": {},
"a2013.casalemedia.com.": {},
- "a2014.casalemedia.com.": {},
"a2015.casalemedia.com.": {},
"a2016.casalemedia.com.": {},
- "a2017.casalemedia.com.": {},
- "a2018.casalemedia.com.": {},
"a2019.casalemedia.com.": {},
"a2020.casalemedia.com.": {},
"a2021.casalemedia.com.": {},
@@ -241,10 +220,8 @@ var FakeECSFQDNs = map[string]struct{}{
"a2025.casalemedia.com.": {},
"a2026.casalemedia.com.": {},
"a2027.casalemedia.com.": {},
- "a2028.casalemedia.com.": {},
"a2030.casalemedia.com.": {},
"a2031.casalemedia.com.": {},
- "a2032.casalemedia.com.": {},
"a2033.casalemedia.com.": {},
"a2034.casalemedia.com.": {},
"a2035.casalemedia.com.": {},
@@ -262,7 +239,9 @@ var FakeECSFQDNs = map[string]struct{}{
"a2047.casalemedia.com.": {},
"a2048.casalemedia.com.": {},
"a2049.casalemedia.com.": {},
+ "a2050.casalemedia.com.": {},
"a2051.casalemedia.com.": {},
+ "a2052.casalemedia.com.": {},
"a2053.casalemedia.com.": {},
"a2054.casalemedia.com.": {},
"a2055.casalemedia.com.": {},
@@ -270,14 +249,16 @@ var FakeECSFQDNs = map[string]struct{}{
"a2057.casalemedia.com.": {},
"a2058.casalemedia.com.": {},
"a2060.casalemedia.com.": {},
- "a21018620252.cdn.optimizely.com.": {},
"a2561.casalemedia.com.": {},
+ "a2562.casalemedia.com.": {},
"a2563.casalemedia.com.": {},
+ "a2564.casalemedia.com.": {},
+ "a2565.casalemedia.com.": {},
"a2566.casalemedia.com.": {},
- "a2567.casalemedia.com.": {},
"a2568.casalemedia.com.": {},
"a2569.casalemedia.com.": {},
"a2570.casalemedia.com.": {},
+ "a2571.casalemedia.com.": {},
"a2572.casalemedia.com.": {},
"a2573.casalemedia.com.": {},
"a2574.casalemedia.com.": {},
@@ -287,7 +268,6 @@ var FakeECSFQDNs = map[string]struct{}{
"a2578.casalemedia.com.": {},
"a2579.casalemedia.com.": {},
"a2580.casalemedia.com.": {},
- "a2581.casalemedia.com.": {},
"a2582.casalemedia.com.": {},
"a2583.casalemedia.com.": {},
"a2584.casalemedia.com.": {},
@@ -295,7 +275,6 @@ var FakeECSFQDNs = map[string]struct{}{
"a2587.casalemedia.com.": {},
"a2588.casalemedia.com.": {},
"a2589.casalemedia.com.": {},
- "a2590.casalemedia.com.": {},
"a2591.casalemedia.com.": {},
"a2592.casalemedia.com.": {},
"a2593.casalemedia.com.": {},
@@ -305,16 +284,13 @@ var FakeECSFQDNs = map[string]struct{}{
"a2597.casalemedia.com.": {},
"a2598.casalemedia.com.": {},
"a2599.casalemedia.com.": {},
- "a260.casalemedia.com.": {},
- "a2600.casalemedia.com.": {},
"a2601.casalemedia.com.": {},
- "a2602.casalemedia.com.": {},
"a2603.casalemedia.com.": {},
"a2605.casalemedia.com.": {},
"a2606.casalemedia.com.": {},
"a2607.casalemedia.com.": {},
+ "a2608.casalemedia.com.": {},
"a2609.casalemedia.com.": {},
- "a2610.casalemedia.com.": {},
"a2611.casalemedia.com.": {},
"a2612.casalemedia.com.": {},
"a2613.casalemedia.com.": {},
@@ -339,29 +315,27 @@ var FakeECSFQDNs = map[string]struct{}{
"a2633.casalemedia.com.": {},
"a2634.casalemedia.com.": {},
"a2635.casalemedia.com.": {},
+ "a2636.casalemedia.com.": {},
+ "a2637.casalemedia.com.": {},
"a2638.casalemedia.com.": {},
"a2639.casalemedia.com.": {},
"a2640.casalemedia.com.": {},
"a2641.casalemedia.com.": {},
"a2642.casalemedia.com.": {},
"a2643.casalemedia.com.": {},
- "a2644.casalemedia.com.": {},
+ "a2645.casalemedia.com.": {},
"a2646.casalemedia.com.": {},
"a2647.casalemedia.com.": {},
"a2648.casalemedia.com.": {},
"a2649.casalemedia.com.": {},
- "a2650.casalemedia.com.": {},
"a2a5c7f9-3fa0-4182-889a-15aa61acf59b.prmutv.co.": {},
"a3.tuyacn.com.": {},
- "a403.casalemedia.com.": {},
- "a461.casalemedia.com.": {},
- "a462.casalemedia.com.": {},
+ "a314.gameloft.com.": {},
"a463.casalemedia.com.": {},
"a464.casalemedia.com.": {},
+ "a465.casalemedia.com.": {},
"a466.casalemedia.com.": {},
"a467.casalemedia.com.": {},
- "a468.casalemedia.com.": {},
- "a469.casalemedia.com.": {},
"a470.casalemedia.com.": {},
"a471.casalemedia.com.": {},
"a472.casalemedia.com.": {},
@@ -373,16 +347,14 @@ var FakeECSFQDNs = map[string]struct{}{
"a478.casalemedia.com.": {},
"a479.casalemedia.com.": {},
"a480.casalemedia.com.": {},
+ "a5551.casalemedia.com.": {},
"a5552.casalemedia.com.": {},
- "a5553.casalemedia.com.": {},
- "a5554.casalemedia.com.": {},
"a5555.casalemedia.com.": {},
"a5556.casalemedia.com.": {},
"a5557.casalemedia.com.": {},
"a5558.casalemedia.com.": {},
"a5559.casalemedia.com.": {},
"a5560.casalemedia.com.": {},
- "a5561.casalemedia.com.": {},
"a5562.casalemedia.com.": {},
"a5563.casalemedia.com.": {},
"a5564.casalemedia.com.": {},
@@ -390,15 +362,17 @@ var FakeECSFQDNs = map[string]struct{}{
"a5566.casalemedia.com.": {},
"a5567.casalemedia.com.": {},
"a5568.casalemedia.com.": {},
+ "a5569.casalemedia.com.": {},
+ "a5570.casalemedia.com.": {},
"a5571.casalemedia.com.": {},
"a5572.casalemedia.com.": {},
"a5573.casalemedia.com.": {},
- "a5574.casalemedia.com.": {},
"a5575.casalemedia.com.": {},
- "a5576.casalemedia.com.": {},
"a5577.casalemedia.com.": {},
"a5578.casalemedia.com.": {},
+ "a5579.casalemedia.com.": {},
"a5580.casalemedia.com.": {},
+ "a5581.casalemedia.com.": {},
"a5582.casalemedia.com.": {},
"a5583.casalemedia.com.": {},
"a5584.casalemedia.com.": {},
@@ -409,7 +383,6 @@ var FakeECSFQDNs = map[string]struct{}{
"a5589.casalemedia.com.": {},
"a5590.casalemedia.com.": {},
"a5591.casalemedia.com.": {},
- "a5592.casalemedia.com.": {},
"a5593.casalemedia.com.": {},
"a5594.casalemedia.com.": {},
"a5595.casalemedia.com.": {},
@@ -420,10 +393,9 @@ var FakeECSFQDNs = map[string]struct{}{
"a55a84b3-9632-4869-b625-3d8ef43ed18d.prmutv.co.": {},
"a5600.casalemedia.com.": {},
"a5602.casalemedia.com.": {},
+ "a5603.casalemedia.com.": {},
"a5604.casalemedia.com.": {},
"a5605.casalemedia.com.": {},
- "a5606.casalemedia.com.": {},
- "a5607.casalemedia.com.": {},
"a5608.casalemedia.com.": {},
"a5609.casalemedia.com.": {},
"a5610.casalemedia.com.": {},
@@ -432,20 +404,21 @@ var FakeECSFQDNs = map[string]struct{}{
"a5613.casalemedia.com.": {},
"a5614.casalemedia.com.": {},
"a5615.casalemedia.com.": {},
+ "a5616.casalemedia.com.": {},
"a5617.casalemedia.com.": {},
"a5618.casalemedia.com.": {},
"a5619.casalemedia.com.": {},
"a5620.casalemedia.com.": {},
"a5621.casalemedia.com.": {},
"a5622.casalemedia.com.": {},
- "a5623.casalemedia.com.": {},
"a5624.casalemedia.com.": {},
"a5625.casalemedia.com.": {},
"a5626.casalemedia.com.": {},
"a5627.casalemedia.com.": {},
"a5628.casalemedia.com.": {},
+ "a5629.casalemedia.com.": {},
"a5630.casalemedia.com.": {},
- "a5631.casalemedia.com.": {},
+ "a5632.casalemedia.com.": {},
"a5633.casalemedia.com.": {},
"a5634.casalemedia.com.": {},
"a5635.casalemedia.com.": {},
@@ -470,7 +443,6 @@ var FakeECSFQDNs = map[string]struct{}{
"a5655.casalemedia.com.": {},
"a5656.casalemedia.com.": {},
"a5657.casalemedia.com.": {},
- "a5658.casalemedia.com.": {},
"a5659.casalemedia.com.": {},
"a5660.casalemedia.com.": {},
"a5661.casalemedia.com.": {},
@@ -484,93 +456,91 @@ var FakeECSFQDNs = map[string]struct{}{
"a5669.casalemedia.com.": {},
"a5670.casalemedia.com.": {},
"a57.foxsports.com.": {},
- "a578.casalemedia.com.": {},
- "a5lng2-launches.appsflyersdk.com.": {},
+ "a6.smartnews-ads.com.": {},
"a9695278-4085-40b3-9f02-8d4c38a6ff01.prmutv.co.": {},
"aa-sync.quantummetric.com.": {},
"aa.online-metrix.net.": {},
"aa.quantummetric.com.": {},
+ "aaa.a-mo.net.": {},
"aaid.uyunad.com.": {},
- "aarpsharex-my.sharepoint.com.": {},
"ab.qq.com.": {},
"abcsinsights.com.": {},
"abmmscloud-my.sharepoint.com.": {},
"abmmscloud.sharepoint.com.": {},
"abroad-lzd.apilocate.amap.com.": {},
"abroad.apilocate.amap.com.": {},
- "academia.trendmd.com.": {},
+ "abtest-aws-us-east-01.saas.sensorsdata.com.": {},
"accela.com.": {},
+ "access.creditonebank.com.": {},
"access.mp.lura.live.": {},
"account.box.com.": {},
"accountapi.agoda.com.": {},
- "accounts.creditkarma.com.": {},
"accruent.com.": {},
"accscdn4public.m.taobao.com.": {},
"accurint.com.": {},
- "ace.naver.com.": {},
+ "acdn.tinkoff.ru.": {},
"acgvideo.com.": {},
"achi.faceit.com.": {},
"acme-v02.api.letsencrypt.org.": {},
+ "acrobits.cz.": {},
"acs4public.m.taobao.com.": {},
+ "acsdk.gameyw.easebar.com.": {},
"activate.academy.com.": {},
"activation.cloud.techsmith.com.": {},
- "acxiomapac.com.": {},
- "ad.monetate.net.": {},
- "ad.tencentmusic.com.": {},
+ "ad.sitemaji.com.": {},
+ "adakami.id.": {},
"adapex.io.": {},
"adash-emas.cn-hangzhou.aliyuncs.com.": {},
"adash.man.aliyuncs.com.": {},
"adcell.com.": {},
"addictpodcast.com.": {},
- "adguard.com.": {},
"adi-sin-c-4.cico.com.": {},
"adidas.com.multicdn.cloudinary.com.": {},
+ "aditude.io.": {},
"adlook.me.": {},
"adm.wsms.haplat.net.": {},
- "admatic.com.tr.": {},
"admbk.wsms.haplat.net.": {},
"admedo.com.": {},
- "admin-fts.threekit.com.": {},
+ "adminmepcr-my.sharepoint.com.": {},
+ "admitad.com.": {},
+ "admixer.com.": {},
"adoric.com.": {},
"adquery.io.": {},
"adrs.org.cn.": {},
"adsco.re.": {},
"adtarget.market.": {},
+ "adtarget.me.": {},
"advantage.purpleguys.com.": {},
"advantage2.purpleguys.com.": {},
"adventisthealthwest-my.sharepoint.com.": {},
"adventisthealthwest.sharepoint.com.": {},
"adview.com.": {},
+ "advisorgroup-my.sharepoint.com.": {},
"advlion.com.": {},
"adx-sg-req.anythinktech.com.": {},
- "adxinspidsp.com.": {},
+ "aee.myisolved.com.": {},
"aepenergy-my.sharepoint.com.": {},
"aepenergy.sharepoint.com.": {},
- "af.monetate.net.": {},
+ "affyrtb.com.": {},
"afss.zhiqinyun.cn.": {},
+ "agd2.p.360.cn.": {},
"agent.marketingcloudfx.com.": {},
"agoda-my.sharepoint.com.": {},
"agt.p.360.cn.": {},
- "agwp1.arbigo.com.": {},
"aicdn.com.": {},
"aid.send.microad.jp.": {},
"aidata.io.": {},
"aikenschools-my.sharepoint.com.": {},
"aikenschools.sharepoint.com.": {},
"ailunshenghuo.com.": {},
- "ain1-my.sharepoint.com.": {},
- "aiq-in.delish.com.": {},
- "aiq-in.goodhousekeeping.com.": {},
+ "aiq-in.caranddriver.com.": {},
"airasia.com.": {},
"airasia.gw-dv.vip.": {},
- "aircanada.com.": {},
"airtame.com.": {},
"airtory.com.": {},
- "aisee.tv.": {},
"ajcloud.net.": {},
"akronchildrens-my.sharepoint.com.": {},
"akronchildrens.sharepoint.com.": {},
- "akulaku.com.": {},
"alarm.wsms.haplat.net.": {},
"alarmbk.wsms.haplat.net.": {},
"alarmnet.com.": {},
@@ -581,6 +551,7 @@ var FakeECSFQDNs = map[string]struct{}{
"alialarm-sgp.oss-ap-southeast-1.aliyuncs.com.": {},
"alibaba-inc.com.": {},
"alibabachengdun.com.": {},
+ "alibabacloud.com.": {},
"alibabacorp.com.": {},
"alibabausercontent.com.": {},
"alicdn.com.": {},
@@ -588,11 +559,16 @@ var FakeECSFQDNs = map[string]struct{}{
"aliexpress.us.": {},
"alikunlun.com.": {},
"alikunlun.net.": {},
+ "alive1.cloudbirds.cn.": {},
+ "alive2.cloudbirds.cn.": {},
+ "alive3.cloudbirds.cn.": {},
"aliyun.com.": {},
"aliyuncs.com.": {},
"allieduniversalservices-my.sharepoint.com.": {},
+ "allieduniversalservices.sharepoint.com.": {},
"alog-default.umeng.com.": {},
- "am1.bumbcdn.com.": {},
+ "aly.justuno.com.": {},
+ "am1.ecdn2.bumbcdn.com.": {},
"am3pap002.storage.live.com.": {},
"am3pap003.storage.live.com.": {},
"am3pap004.storage.live.com.": {},
@@ -600,18 +576,17 @@ var FakeECSFQDNs = map[string]struct{}{
"am3pap006.storage.live.com.": {},
"am3pap007.storage.live.com.": {},
"am4pap001.storage.live.com.": {},
- "ama-app.quantummetric.com.": {},
"amap.com.": {},
"amc-theatres-res.cloudinary.com.": {},
- "amcore-ens.rest.gti.trellix.com.": {},
+ "amc-theatres.multicdn.cloudinary.com.": {},
+ "amcor-my.sharepoint.com.": {},
+ "amcor.sharepoint.com.": {},
"amd.com.": {},
"amdc-wapa.lazada.com.": {},
"amdc.lazada.com.": {},
"amdcopen.m.taobao.com.": {},
"amdcopen.m.taobao.com.gds.alibabadns.com.": {},
"americanchemicalsociety-my.sharepoint.com.": {},
- "amp-account.apps.apple.com.": {},
- "amp.dsg.bio.": {},
"amp.namequery.com.": {},
"amp.permutive.com.": {},
"ams-itm-radar-testobject.citrix.com.": {},
@@ -623,20 +598,16 @@ var FakeECSFQDNs = map[string]struct{}{
"ams03pap005.storage.live.com.": {},
"ams06pap001.storage.live.com.": {},
"amsterdam.remotepc.com.": {},
- "an.apps.seabroadnet.com.": {},
+ "amwinsusa-my.sharepoint.com.": {},
+ "amwinsusa.sharepoint.com.": {},
"analytics-2.athome.com.": {},
"analytics-batch.blitz.gg.": {},
"analytics-debugger.com.": {},
"analytics-ingress-global.bitmovin.com.": {},
- "analytics.apps.seabroadnet.com.": {},
- "analytics.belk.com.": {},
"analytics.coachoutlet.com.": {},
"analytics.duluthtrading.com.": {},
- "analytics.fdown.net.": {},
"analytics.getshogun.com.": {},
"analytics.gnc.com.": {},
- "analytics.katespade.com.": {},
- "analytics.katespadeoutlet.com.": {},
"analytics.languagetoolplus.com.": {},
"analytics.qumucloud.com.": {},
"analytics.trovit.com.": {},
@@ -646,16 +617,18 @@ var FakeECSFQDNs = map[string]struct{}{
"announce.torrentsmd.com.": {},
"anonymous.ads.brave.com.": {},
"ansellhealthcare-my.sharepoint.com.": {},
+ "ansys-my.sharepoint.com.": {},
"ansys.sharepoint.com.": {},
"anthem-app.quantummetric.com.": {},
"anthropic.com.": {},
"anxbrylkt.accounts.ondemand.com.": {},
- "anzuinfra.com.": {},
"aon.com.": {},
"ap-southeast-1.log.aliyuncs.com.": {},
"apcloud.xyz.": {},
+ "api-analytics-us3.zepp.com.": {},
"api-asyncgw-gcc-teams.usgovtrafficmanager.net.": {},
"api-eu1.hubspot.com.": {},
+ "api-ext.slickdeals.net.": {},
"api-glb-aapne1a.smoot.apple.com.": {},
"api-glb-aapne1c.smoot.apple.com.": {},
"api-glb-aaps1b.smoot.apple.com.": {},
@@ -665,7 +638,6 @@ var FakeECSFQDNs = map[string]struct{}{
"api-glb-aeuw1b.smoot.apple.com.": {},
"api-glb-aeuw3b.smoot.apple.com.": {},
"api-glb-aeuw3c.smoot.apple.com.": {},
- "api-glb-asae1b.smoot.apple.com.": {},
"api-glb-ause1a.smoot.apple.com.": {},
"api-glb-ause1b.smoot.apple.com.": {},
"api-glb-ause1c.smoot.apple.com.": {},
@@ -675,148 +647,151 @@ var FakeECSFQDNs = map[string]struct{}{
"api-glb-ausw2b.smoot.apple.com.": {},
"api-glb-ausw2c.smoot.apple.com.": {},
"api-mayi.django.t.taobao.com.": {},
+ "api-mifit-us2.zepp.com.": {},
+ "api-mifit-us3.zepp.com.": {},
+ "api-mp.muslimpro.com.": {},
+ "api-na1.hubspot.com.": {},
"api-php1-ovh.keepsolid.com.": {},
"api-php2-ovh.keepsolid.com.": {},
"api-php3-ovh.keepsolid.com.": {},
"api-php4-ovh.keepsolid.com.": {},
- "api-php8-ovh.keepsolid.com.": {},
"api-pos.titank12.com.": {},
"api-preview.luckyorange.com.": {},
- "api-sec-us.didiglobal.com.": {},
"api-sh.django.t.taobao.com.gds.alibabadns.com.": {},
- "api-v2.chimebank.com.": {},
- "api.abcsinsights.com.": {},
+ "api-skytone-6-drcn.cloud.dbankcloud.cn.": {},
"api.adquery.io.": {},
"api.ams.gcc.teams.microsoft.com.": {},
"api.asm.skype.com.": {},
- "api.aty7j.com.": {},
+ "api.bobble.ai.": {},
"api.bosch-wdw.com.": {},
"api.box.com.": {},
"api.btloader.com.": {},
- "api.bytello.com.": {},
"api.cloud.tenda.com.cn.": {},
- "api.cnxdserv.com.": {},
"api.config-security.com.": {},
"api.crobox.com.": {},
"api.crush.163.com.": {},
- "api.dashlane.com.": {},
+ "api.dealersocket.com.": {},
"api.deepl.com.": {},
"api.do.buienalarm.nl.": {},
- "api.eagllwin.com.": {},
"api.easeus.com.": {},
- "api.foxnews.com.": {},
"api.gleap.io.": {},
"api.gravitec.media.": {},
"api.grow.me.": {},
+ "api.hetangsmart.com.": {},
"api.icalendars.app.": {},
"api.inboxsdk.com.": {},
"api.k.163.com.": {},
+ "api.kinogram.best.": {},
"api.lightboxcdn.com.": {},
+ "api.lululemon.com.": {},
"api.lytics.io.": {},
+ "api.mida.so.": {},
+ "api.mintkeyboard.com.": {},
"api.moyoung.com.": {},
"api.mrg.agency.": {},
"api.my.jbi.global.": {},
"api.onedrive.com.": {},
- "api.oxcok.com.": {},
"api.permutive.app.": {},
"api.permutive.com.": {},
"api.pgf-asw0zz.com.": {},
+ "api.pgf-thek63.com.": {},
"api.playlnk.io.": {},
"api.popin.cc.": {},
+ "api.protonmail.ch.": {},
"api.pushbullet.com.": {},
+ "api.qsg1h.com.": {},
"api.queryly.com.": {},
"api.rethinkad.com.": {},
"api.reverso.net.": {},
- "api.rewards.brave.com.": {},
"api.ringcentral.biz.": {},
"api.rollbar.com.": {},
- "api.sbz.vn.": {},
"api.smartdeploy.com.": {},
"api.snapchat.com.": {},
+ "api.statsig.com.": {},
"api.streak.com.": {},
+ "api.surfshark.com.": {},
"api.swishapps.ai.": {},
"api.t3be3280.pw.adn.cloud.": {},
- "api.trackpush.com.": {},
+ "api.timehop.com.": {},
"api.transitapp.com.": {},
"api.tuisong.baidu.com.": {},
- "api.ultimaker.com.": {},
"api.ultimate-guitar.com.": {},
+ "api.un41h.com.": {},
"api.unity.com.": {},
"api.userlike.com.": {},
- "api.vfipayna2.com.": {},
"api.vieon.vn.": {},
- "api.workjam.com.": {},
+ "api.vivoglobal.com.": {},
"api000.backblazeb2.com.": {},
"api001.backblazeb2.com.": {},
"api002.backblazeb2.com.": {},
- "api004.backblazeb2.com.": {},
"api3.aoneroom.com.": {},
+ "apigroupinc-my.sharepoint.com.": {},
"apiisgp.ezvizlife.com.": {},
"apiisgp.hik-connect.com.": {},
- "apis.discover.com.": {},
- "apituner.ecbsn.com.": {},
+ "apis.halifax-online.co.uk.": {},
"apk.v-mate.mobi.": {},
"apk.vidmate.net.": {},
- "apne.pp.riotgames.com.": {},
"app-atl.five9.com.": {},
"app-eu1.hubspot.com.": {},
"app-goal.com.": {},
"app-scl.five9.com.": {},
+ "app-sec-cn.heytapmobi.com.": {},
+ "app-student.atitesting.com.": {},
"app.adoric-om.com.": {},
"app.box.com.": {},
"app.cart-bot.net.": {},
"app.cybba.solutions.": {},
- "app.exitbee.com.": {},
"app.grow.me.": {},
"app.paces.jbi.global.": {},
"app.pendo.qgenda.com.": {},
- "app.qbo.intuit.com.": {},
"app.retinavue.net.": {},
"app.sealsubscriptions.com.": {},
"app.snapchat.com.": {},
- "app.talkjs.com.": {},
+ "app.sproutsocial.com.": {},
"app.trustev.com.": {},
+ "app.updates.digicert.com.": {},
"app.wdesk.com.": {},
- "app.ynab.com.": {},
"app.zoom.us.": {},
"appcafe.gtm.starbucks.com.": {},
"appcafe.starbucks.com.": {},
"appconf.mail.163.com.": {},
- "appcontent.collegeboard.org.": {},
- "appgrowth.com.": {},
- "appicad.net.": {},
- "appleid.apple.com.": {},
+ "appocean.media.": {},
"apponline.research.qq.com.": {},
+ "appriver.com.": {},
+ "apps.gov.powerapps.us.": {},
"apps.wix.com.": {},
"appstoreonrt-stsdk.vivo.com.cn.": {},
"appstoreort-stsdk.vivo.com.cn.": {},
- "apptrack.wrike.com.": {},
+ "apse1-red.pp.sgp.pvp.net.": {},
"apv-launcher.minute.ly.": {},
"apv-static.minute.ly.": {},
"apv-static.tldw.me.": {},
"ar2fnu-launches.appsflyersdk.com.": {},
- "arbigo.com.": {},
+ "aranera.com.": {},
+ "ard.bmj.com.": {},
"ardenthealthservices-my.sharepoint.com.": {},
+ "ardenthealthservices.sharepoint.com.": {},
"arenabg.com.": {},
"aristotleinsight.com.": {},
"arkdhs-my.sharepoint.com.": {},
- "arkrecode.ero-labs.website.": {},
+ "arm1.maxhost.io.": {},
"armh-my.sharepoint.com.": {},
"armh.sharepoint.com.": {},
+ "armmf.adobe.com.": {},
"arms-retcode-sg.aliyuncs.com.": {},
"arms-retcode.aliyuncs.com.": {},
+ "arms.aliyuncs.com.": {},
"armstrongceilings-my.sharepoint.com.": {},
"arnoldclark1-my.sharepoint.com.": {},
"arthrex-my.sharepoint.com.": {},
"arup-my.sharepoint.com.": {},
+ "arup.sharepoint.com.": {},
+ "arupapc-my.sharepoint.com.": {},
"as-api.asm.skype.com.": {},
"as-prod.asyncgw.teams.microsoft.com.": {},
- "as.xiaohongshu.com.": {},
"asheville.remotepc.com.": {},
"asia-001.azure-apim.net.": {},
"asia-adlog.vivoglobal.com.": {},
- "asia-album-api.vivoglobal.com.": {},
- "asia-assistant-sports.vivoglobal.com.": {},
"asia-browser.vivoglobal.com.": {},
"asia-browserplat.vivoglobal.com.": {},
"asia-config-appstore.vivoglobal.com.": {},
@@ -846,6 +821,7 @@ var FakeECSFQDNs = map[string]struct{}{
"asia-vgcmdm-api-tha.vivoglobal.com.": {},
"asia-vnote.vivoglobal.com.": {},
"asia-vpushonrt-stsdk.vivoglobal.com.": {},
+ "asia-vpushort-stsdk.vivoglobal.com.": {},
"asia-weather.vivoglobal.com.": {},
"asia-wifi.vivoglobal.com.": {},
"asia.remotepc.com.": {},
@@ -861,13 +837,10 @@ var FakeECSFQDNs = map[string]struct{}{
"aspect-upush.umeng.com.": {},
"asset.fwcdn3.com.": {},
"asset.fwpub1.com.": {},
- "assets.adobedtm.com.": {},
+ "assets.a-mo.net.cdn.cloudflare.net.": {},
"assets.api.stairwell.com.": {},
"assets.apps.pa.gov.": {},
- "assets.bale.ai.": {},
- "assets.connatix.com.": {},
"assets.fastly.carvana.io.": {},
- "assets.staples-static.com.": {},
"assets.the-independent.com.": {},
"assets0.procore.com.": {},
"assets1.procore.com.": {},
@@ -885,24 +858,27 @@ var FakeECSFQDNs = map[string]struct{}{
"atlanta2.remotepc.com.": {},
"atlanta3.remotepc.com.": {},
"atlanta4.remotepc.com.": {},
+ "atolin.ru.": {},
"atriaseniorliving-my.sharepoint.com.": {},
"au-prod.asyncgw.teams.microsoft.com.": {},
+ "auburnschools-my.sharepoint.com.": {},
"auckland.remotepc.com.": {},
"audid.umeng.com.": {},
"audio.vivintsky.com.": {},
+ "audioscrobbler.com.": {},
"audiostatlog.cc.easebar.com.": {},
"auth-asg-en.aliyuncs.com.": {},
+ "auth.bereal.com.": {},
"auth.bereal.team.": {},
"auth.hulu.com.": {},
- "auth.ichano.cn.": {},
"auth.jbisumari.org.": {},
+ "auth.riotgames.com.cdn.cloudflare.net.": {},
"automate.itsasap.com.": {},
"autonavi.com.": {},
+ "autotrack.studyquicks.com.": {},
"avalanche.autotrader.co.uk.": {},
- "avn.innity.com.": {},
- "avs-alexa-14-na.amazon.com.": {},
- "axiom.co.": {},
- "az1.qualtrics.com.": {},
+ "avatar-us-1.kwcdn.com.": {},
+ "avis-app.quantummetric.com.": {},
"azchicago.remotepc.com.": {},
"azchicago2.remotepc.com.": {},
"azdcs-my.sharepoint.com.": {},
@@ -910,17 +886,18 @@ var FakeECSFQDNs = map[string]struct{}{
"azmatch.adsrvr.org.": {},
"azureford-my.sharepoint.com.": {},
"azureford.sharepoint.com.": {},
- "b.ns.c10r.facebook.com.": {},
- "b.ns.cdn.whatsapp.net.": {},
- "b.ns.xx.fbcdn.net.": {},
+ "azwus1-client-s.gateway.messenger.live.com.": {},
+ "b.fssta.com.": {},
+ "b.tile.openstreetmap.org.": {},
"b.tile.osm.org.": {},
+ "babico.name.tr.": {},
"bablosoft.com.": {},
"backend-l.deepl.com.": {},
"badambiz.com.": {},
"badoo.app.": {},
"bahrain.remotepc.com.": {},
+ "baike.com.": {},
"baishan-cloud.net.": {},
- "bale.ai.": {},
"ballstate-my.sharepoint.com.": {},
"baltimore.remotepc.com.": {},
"bam.nr-data.net.cdn.cloudflare.net.": {},
@@ -935,17 +912,19 @@ var FakeECSFQDNs = map[string]struct{}{
"baptisthealth.sharepoint.com.": {},
"barstoolsports.com.": {},
"basised-my.sharepoint.com.": {},
- "basspro-app.quantummetric.com.": {},
- "basspro-my.sharepoint.com.": {},
- "basspro.sharepoint.com.": {},
"batch.pbisrewards.com.": {},
"bb.eight-cdn.com.": {},
- "bbw-app.quantummetric.com.": {},
"bd1cec50-00d1-4ce9-9572-785857419a1e.prmutv.co.": {},
+ "bdpnt-my.sharepoint.com.": {},
+ "bdpnt.sharepoint.com.": {},
+ "bdreporting.com.": {},
+ "be.nortic.ogtic.gob.do.": {},
"beacon-api.aliyuncs.com.": {},
+ "beacon-sin1.rubiconproject.com.": {},
"beacon.qq.com.": {},
"beacons4.gvt2.com.": {},
"beacons5.gvt2.com.": {},
+ "beam.vivintsky.com.": {},
"becn-my.sharepoint.com.": {},
"becn.sharepoint.com.": {},
"becpsn-my.sharepoint.com.": {},
@@ -954,8 +933,10 @@ var FakeECSFQDNs = map[string]struct{}{
"belgium.remotepc.com.": {},
"belgrad.remotepc.com.": {},
"bend.remotepc.com.": {},
- "bergankdv.com.": {},
+ "berryglobal-my.sharepoint.com.": {},
+ "betting-api.onefootball.com.": {},
"bgtfs.transitapp.com.": {},
+ "bhsjaxinc0-my.sharepoint.com.": {},
"bidder.adquery.io.": {},
"bifrost.vivaldi.com.": {},
"bik.gov.tr.": {},
@@ -964,7 +945,7 @@ var FakeECSFQDNs = map[string]struct{}{
"bisdus-my.sharepoint.com.": {},
"bitwarden.com.": {},
"bkdllp-my.sharepoint.com.": {},
- "bl.listrakbi.com.cdn.cloudflare.net.": {},
+ "bkdllp.sharepoint.com.": {},
"bl6pap003.storage.live.com.": {},
"bl6pap003files.storage.live.com.": {},
"bl6pap004.storage.live.com.": {},
@@ -972,37 +953,31 @@ var FakeECSFQDNs = map[string]struct{}{
"black-cat.crypto.com.": {},
"blackboard.com.": {},
"blackbox.dropbox-dns.com.": {},
- "blk-app.com.": {},
"blocksi-screenshots-us.s3.us-east-005.backblazeb2.com.": {},
"blooket.com.multicdn.cloudinary.com.": {},
- "bloombergdfpcw4670778881.s.moatpixel.com.": {},
+ "blueshieldca-my.sharepoint.com.": {},
"blueshieldca.sharepoint.com.": {},
"bluffdale.remotepc.com.": {},
"blz04pap001.storage.live.com.": {},
"blz04pap001files.storage.live.com.": {},
"blz04pap002.storage.live.com.": {},
- "blz04pap002files.storage.live.com.": {},
"blz04pap003.storage.live.com.": {},
- "blz04pap003files.storage.live.com.": {},
"blz04pap004.storage.live.com.": {},
"blz04pap005.storage.live.com.": {},
- "blz04pap005files.storage.live.com.": {},
"blz04pap006.storage.live.com.": {},
- "blz04pap006files.storage.live.com.": {},
"bmaus.bumble.com.": {},
"bmoolbb-app.quantummetric.com.": {},
"bmrn-my.sharepoint.com.": {},
"bmrn.sharepoint.com.": {},
"bn02pap001.storage.live.com.": {},
"bn02pap001files.storage.live.com.": {},
- "bn02pap090files.storage.live.com.": {},
- "bn1ap000files.storage.live.com.": {},
"bn1files.storage.live.com.": {},
"bn3pap090files.storage.live.com.": {},
"bna365-my.sharepoint.com.": {},
"bnz05pap001.storage.live.com.": {},
"bnz05pap001files.storage.live.com.": {},
"bnz05pap002.storage.live.com.": {},
+ "bnz05pap002files.storage.live.com.": {},
"bnz06pap001.storage.live.com.": {},
"bnz06pap001files.storage.live.com.": {},
"bnz06pap002.storage.live.com.": {},
@@ -1013,13 +988,12 @@ var FakeECSFQDNs = map[string]struct{}{
"bnz06pap004files.storage.live.com.": {},
"bnz07pap001.storage.live.com.": {},
"bnz07pap001files.storage.live.com.": {},
+ "bobble.ai.": {},
"books-analytics-events.apple.com.": {},
- "books-personalization-server.apple.com.": {},
"booksy.com.": {},
"bootstrapcdn.com.": {},
"borgwarner-my.sharepoint.com.": {},
"borgwarner.sharepoint.com.": {},
- "bosecorp-my.sharepoint.com.": {},
"boston.remotepc.com.": {},
"boston2.remotepc.com.": {},
"bostonglobe.com.": {},
@@ -1033,14 +1007,14 @@ var FakeECSFQDNs = map[string]struct{}{
"brenntag01-my.sharepoint.com.": {},
"brenntag01.sharepoint.com.": {},
"brenntag01nam-my.sharepoint.com.": {},
+ "brenntag01nam.sharepoint.com.": {},
"bridge2bwb.com.": {},
+ "bridgetonorg-my.sharepoint.com.": {},
"broadstreetads.com.": {},
- "brocktonpublicschools-my.sharepoint.com.": {},
- "bryantu-my.sharepoint.com.": {},
"bscedge.com.": {},
- "bshr.ezodn.com.": {},
"bsprings.remotepc.com.": {},
"bt.moack.co.kr.": {},
+ "bthfa.jenzabarcloud.com.": {},
"btrace.qq.com.": {},
"bucharest.remotepc.com.": {},
"bucharest1.remotepc.com.": {},
@@ -1050,33 +1024,29 @@ var FakeECSFQDNs = map[string]struct{}{
"bugreport.huorong.cn.": {},
"bundler.nice-team.net.": {},
"bunny.net.": {},
- "burningmay.info.": {},
+ "burbankschooldistrict111-my.sharepoint.com.": {},
"burnsmcd-my.sharepoint.com.": {},
"burnsmcd.sharepoint.com.": {},
- "business.apple.com.": {},
+ "businesswire.com.": {},
"bw1-my.sharepoint.com.": {},
"bw1.sharepoint.com.": {},
"bwatch.bergankdv.com.": {},
"bytecdn.cn.": {},
"bytedance.net.": {},
- "bytello.com.": {},
"c.4dex.io.": {},
"c.fakespot.io.": {},
"c.footprint.net.": {},
- "c.ns.c10r.facebook.com.": {},
- "c.ns.xx.fbcdn.net.": {},
"c.pub.network.": {},
"c.tile.openstreetmap.org.": {},
+ "c.tile.osm.org.": {},
"c1.ttcache.com.": {},
- "c104216-dcdn.mp.lura.live.": {},
"c2.ttcache.com.": {},
"c2c.wechat.com.": {},
"c3.ttcache.com.": {},
"c4.ttcache.com.": {},
- "c4cfly.rbxcdn.com.": {},
- "c4cstatic.hana.ondemand.com.": {},
"c7l.cyberhaven.io.": {},
"ca-prod.asyncgw.teams.microsoft.com.": {},
+ "ca-tor-anx-r005.router.teamviewer.com.": {},
"ca.gov.": {},
"ca000.backblaze.com.": {},
"ca001.backblaze.com.": {},
@@ -1084,93 +1054,81 @@ var FakeECSFQDNs = map[string]struct{}{
"ca80a1adb12a4fbdac5ffcbc944e9a61.pacloudflare.com.": {},
"cachenetworks.com.": {},
"cachingserviceapimpme.azure-api.net.": {},
- "caeportal-my.sharepoint.com.": {},
"cainiao.com.": {},
"caixa.gov.br.": {},
- "cajacr-my.sharepoint.com.": {},
- "cajacr.sharepoint.com.": {},
"california.remotepc.com.": {},
"california2.remotepc.com.": {},
"caltech.edu.": {},
- "camoe.cn.": {},
"camsoda.com.": {},
"canada.remotepc.com.": {},
"canberra.remotepc.com.": {},
"capetown.remotepc.com.": {},
- "car-cloud-cn.net.": {},
"cardiff.remotepc.com.": {},
"cardinalcorp-my.sharepoint.com.": {},
+ "care.novaicare.com.": {},
"caridisini.site.": {},
"carystudio.com.": {},
"cat.hbwrapper.com.": {},
"cat2.hbwrapper.com.": {},
"cavai.com.": {},
- "cc.trendmd.co.": {},
"ccboemd-my.sharepoint.com.": {},
+ "ccf.ivalua.com.": {},
"cchmc-my.sharepoint.com.": {},
"cchmc.sharepoint.com.": {},
"ccs.umeng.com.": {},
"ccsyncuuid.net.": {},
- "cd.xdplt.com.": {},
"cdn-audio-gcp-media.getepic.com.": {},
+ "cdn-c.bereal.network.": {},
+ "cdn-f.heylink.me.": {},
"cdn-gcp-media-drm.getepic.com.": {},
- "cdn-gcp.getepic.com.": {},
- "cdn-goo.bereal.com.": {},
- "cdn-resize.bereal.network.": {},
- "cdn-sic.33across.com.": {},
- "cdn-static.hulu.com.": {},
- "cdn-t.vb17123filippaaniketos.pw.": {},
+ "cdn-gcp-media.getepic.com.": {},
+ "cdn-league-logos.theathletic.com.": {},
+ "cdn-mc-eu1-fd5f74b2.bereal.network.": {},
+ "cdn-t.vb24131crasosnemesis.com.": {},
"cdn-us.algoliaradar.com.": {},
"cdn-us1.bereal.network.": {},
"cdn-video-gcp-media.getepic.com.": {},
- "cdn.adjust.com.": {},
- "cdn.adlook.me.": {},
- "cdn.arstechnica.net.": {},
"cdn.bereal.network.": {},
+ "cdn.ckeditor.com.": {},
"cdn.conveythis.com.": {},
- "cdn.doubleverify.com.": {},
+ "cdn.deepintent.com.": {},
"cdn.fera.ai.": {},
"cdn.ftd.agency.": {},
- "cdn.getambassador.com.": {},
"cdn.groupbycloud.com.": {},
- "cdn.hubblecontent.osi.office.net.": {},
+ "cdn.hw.gcloudcs.com.": {},
"cdn.instapagemetrics.com.": {},
- "cdn.izooto.com.": {},
- "cdn.knightlab.com.": {},
- "cdn.md-ace-b.online.": {},
- "cdn.ndtv.com.": {},
+ "cdn.overleaf.com.": {},
+ "cdn.production.dochub.com.": {},
"cdn.qq.com.": {},
"cdn.rebuyengine.com.": {},
"cdn.sierrapacificgroup.com.": {},
- "cdn.skcrtxr.com.": {},
- "cdn.special-offers.online.": {},
- "cdn.support.services.microsoft.com.": {},
"cdn.tapdb-dev.com.": {},
- "cdn.theathletic.com.": {},
"cdn.uxfeedback.ru.": {},
- "cdn0.wixdns.net.": {},
- "cdn07.boxcdn.net.": {},
- "cdn1.iconfinder.com.": {},
- "cdn1.parksmedia.wdprapps.disney.com.": {},
"cdn1.wixdns.net.": {},
- "cdnbye.com.": {},
+ "cdn140.picsart.com.": {},
+ "cdn26.vizury.com.": {},
+ "cdn271.picsart.com.": {},
"cdnetworks.net.": {},
- "cdngarenanow-a.akamaihd.net.": {},
+ "cdngeneral.rentcafe.com.": {},
"cdngslb.com.": {},
+ "cdns3.gigya.com.": {},
"cdntm.hsbc.co.uk.": {},
"cdnwidget.com.": {},
- "cds.apple.com.": {},
"cds.swishapps.ai.": {},
"cdt.ca.gov.": {},
+ "cdtfa.ca.gov.": {},
+ "cdxdns.com.": {},
+ "cdxflare.com.": {},
"cedexis-test.com.": {},
"cedock.com.": {},
"centertime.ksyun.com.": {},
"centralmichigan-my.sharepoint.com.": {},
"centrexit.com.": {},
"cfa.fidelity.com.": {},
+ "cform.loyalhealth.com.": {},
"changehealthcare.com.": {},
+ "channel5.com.": {},
"charlotte.remotepc.com.": {},
- "chat.openai.com.": {},
"check.unity.cn.": {},
"check2.lloydsbank.co.uk.": {},
"chennai.remotepc.com.": {},
@@ -1180,14 +1138,14 @@ var FakeECSFQDNs = map[string]struct{}{
"chi01pap002files.storage.live.com.": {},
"chicago.remotepc.com.": {},
"chicago2.remotepc.com.": {},
+ "childrensmercy-my.sharepoint.com.": {},
+ "childrensmercy.sharepoint.com.": {},
"chinacache.net.": {},
"chinaccl-a.haplat.net.": {},
"chinaccl-b.haplat.net.": {},
"chinaccl-c.haplat.net.": {},
- "chippewavalley-my.sharepoint.com.": {},
- "chippewavalley.sharepoint.com.": {},
"choctawnationofoklahoma-my.sharepoint.com.": {},
- "chopo-my.sharepoint.com.": {},
+ "choctawnationofoklahoma.sharepoint.com.": {},
"chtsite.com.": {},
"chubbgroup-my.sharepoint.com.": {},
"chubbgroup.sharepoint.com.": {},
@@ -1202,36 +1160,38 @@ var FakeECSFQDNs = map[string]struct{}{
"cisco.sharepoint.com.": {},
"citrix.com.": {},
"cityofelpaso-my.sharepoint.com.": {},
- "ckmap.mediav.com.": {},
+ "cjfgob-my.sharepoint.com.": {},
"cl-data.ads.heytapmobi.com.": {},
"cl2009.com.": {},
"claude.ai.": {},
"clearesult5-my.sharepoint.com.": {},
"clearesult5.sharepoint.com.": {},
"cleveland.remotepc.com.": {},
- "click.e.petco.com.": {},
- "click.victoriassecret.com.": {},
+ "clevelandclinic-my.sharepoint.com.": {},
+ "clevelandclinic.sharepoint.com.": {},
"client-log.box.com.": {},
- "client-strings.xboxlive.com.": {},
"client-tracking.omiapp.me.": {},
"client-updates.lumu.io.": {},
+ "cliftonlarsonallen-my.sharepoint.com.": {},
"cliftonlarsonallen.sharepoint.com.": {},
+ "cloud-config-service.rtc.aliyuncs.com.": {},
"cloud-rest.lenovomm.com.": {},
"cloud.browser.360.cn.": {},
+ "cloud.huawei.asia.": {},
"cloud.ibm.com.": {},
"cloud.typenetwork.com.": {},
"cloud.vmp.onezapp.com.": {},
"cloud.zoom.us.": {},
- "cloudauth-device.aliyuncs.com.": {},
+ "cloudbirds.cn.": {},
"clouddata.turbowarp.org.": {},
"cloudlinks.cn.": {},
"cloudsvc.policypak.com.": {},
"cloverparksd-my.sharepoint.com.": {},
+ "cloverparksd.sharepoint.com.": {},
"cm-x.mgid.com.": {},
"cmgate.vip.qq.com.": {},
"cmpassport.com.": {},
"cms.ejoyspace.com.": {},
- "cms.thescore.com.": {},
"cn-beijing.log.aliyuncs.com.": {},
"cn-hangzhou.log.aliyuncs.com.": {},
"cn-hangzhou.oss-cdn.aliyun-inc.com.": {},
@@ -1240,71 +1200,68 @@ var FakeECSFQDNs = map[string]struct{}{
"cn.gcloudcs.com.": {},
"cn.mvconf.50union.com.": {},
"cname.pendo.io.": {},
+ "cnmc-my.sharepoint.com.": {},
"cnmc.sharepoint.com.": {},
"cnv2.mclean.50union.com.": {},
"cnzz.com.": {},
+ "co-vcode-od.vivoglobal.com.": {},
"co.amx.rcs.telephony.goog.": {},
- "cocoapi.bmwgroup.com.": {},
- "cocoapi.bmwgroup.us.": {},
+ "codacloud.net.": {},
"code.etracker.com.": {},
- "codepush.akulaku.net.": {},
"codis-bak.ngb.haplat.net.": {},
"codis.ngb.haplat.net.": {},
"cofile.net.": {},
+ "cohnreznick-my.sharepoint.com.": {},
+ "cohnreznick.sharepoint.com.": {},
"collect-v6.51.la.": {},
+ "collect.trendyol.com.": {},
+ "collector-api.frspecifics.com.": {},
"collector.wdp.brave.com.": {},
"colliervilleschools-my.sharepoint.com.": {},
"columbus.remotepc.com.": {},
"columbusk12oh-my.sharepoint.com.": {},
"columbusk12oh.sharepoint.com.": {},
- "com-healthgrade.netmng.com.": {},
"com.multicdn.cloudinary.com.": {},
"com.yangyi19.com.": {},
- "com.zjgslb.com.": {},
- "cometglobal.cf.t3cloud.pb.com.": {},
"cometservd1.pb.com.": {},
"commerce.safe.360.cn.": {},
"commercial.ocsp.identrust.com.": {},
"common-afd.fe.1drv.com.": {},
"common-afdrk.fe.1drv.com.": {},
"common.xshareapp.com.": {},
- "company.rt.ru.": {},
+ "compass.corebridgefinancial.com.": {},
"compiles.overleafusercontent.com.": {},
- "computerhelpnj.com.": {},
- "comserver.eu1.mspa.n-able.com.": {},
"config-inmobi-comtm.trafficmanager.net.": {},
- "config-junion.jpush.cn.": {},
"config-security.com.": {},
"config.a-m-p.xyz.": {},
"config.inmobi.com.": {},
"config.office.net.": {},
- "config.reasonsecurity.com.": {},
"config.y5en.com.": {},
+ "config2.cmpassport.com.": {},
"configdl.teamviewer.com.": {},
"conn-service-cn-03.allawntech.com.": {},
"connect.garenanow.com.": {},
- "consentcdn.cookiebot.com.": {},
+ "connectivitycheck.unisoc.com.": {},
"consist.co.il.": {},
"constel1-my.sharepoint.com.": {},
+ "constel1.sharepoint.com.": {},
+ "consumer-pepsico.okta.com.": {},
+ "content-management-files.canva.com.": {},
"content.citizensbankonline.com.": {},
"content.discover.com.": {},
"content.discovercard.com.": {},
"content.ebanking-services.com.": {},
"content.gap.com.": {},
- "content.ibanking-services.com.": {},
+ "content.lloydsbankinggroup.com.": {},
"content.maxconnector.com.": {},
"content.production.cdn.art19.com.": {},
"content.ssctech.com.": {},
- "content.usaa.com.": {},
- "content22.bancanet.banamex.com.": {},
"content22.bmo.com.": {},
"content22.citibankonline.com.": {},
"content22.citicards.com.": {},
"content22.online.citi.com.": {},
"context.reverso.net.": {},
"control-out.mna.qq.com.": {},
- "conversion-assistant.apps.seabroadnet.com.": {},
- "conveythis.com.": {},
"cookie-sync.bidmyadz.com.": {},
"coolkit.cc.": {},
"copenhagen.remotepc.com.": {},
@@ -1313,8 +1270,12 @@ var FakeECSFQDNs = map[string]struct{}{
"core.gssv-play-prod.xboxlive.com.": {},
"core.iprom.net.": {},
"core.omiapp.me.": {},
- "coresite.mm.fcix.net.": {},
- "corndel.aptem.co.uk.": {},
+ "corebridgefinancial-my.sharepoint.com.": {},
+ "covers.vitalbook.com.": {},
+ "coxauto.okta.com.": {},
+ "cp.az.hmgroup.com.": {},
+ "cp2.cloudflare.com.": {},
+ "cpm.appocean.media.": {},
"cpm.aserve1.net.": {},
"cpm.qortex.ai.": {},
"cpm.vuukle.net.": {},
@@ -1332,7 +1293,6 @@ var FakeECSFQDNs = map[string]struct{}{
"crowd.transitapp.com.": {},
"crowncastle-my.sharepoint.com.": {},
"crowncastle.sharepoint.com.": {},
- "croxyproxy.com.": {},
"crush.163.com.": {},
"crutchfield.com.": {},
"cs.globalsun.io.": {},
@@ -1341,23 +1301,21 @@ var FakeECSFQDNs = map[string]struct{}{
"cstse02.ultipro.com.": {},
"cstsew02.ultipro.com.": {},
"cstsn02.ultipro.com.": {},
+ "ct.pinterest.com.": {},
"cta-eu1.hubspot.com.": {},
- "ctm.server.absolute.com.": {},
"cuco.softi9.pt.": {},
+ "cummins365-my.sharepoint.com.": {},
"cummins365.sharepoint.com.": {},
+ "cunamutual-my.sharepoint.com.": {},
+ "cunamutual.sharepoint.com.": {},
+ "cust-dv.zentrick.com.": {},
"customer.homedepot.com.": {},
- "customerfeedback.superunlimited.com.": {},
- "cvs.quantummetric.com.": {},
"cwc-my.sharepoint.com.": {},
"cwc.sharepoint.com.": {},
"cx.soft.360.cn.": {},
- "cxcs.cdn.office.net.edgekey.net.": {},
+ "cx732.com.": {},
"czechrepublic.remotepc.com.": {},
- "d.applvn.com.": {},
"d.docs.live.net.": {},
- "d.nativendo.de.": {},
- "d.ns.c10r.facebook.com.": {},
- "d.ns.xx.fbcdn.net.": {},
"d.pub.network.": {},
"d2fb08da-1c03-4c8a-978f-ad8a96b4c31f.partner.permutive.app.": {},
"d2fb08da-1c03-4c8a-978f-ad8a96b4c31f.prmutv.co.": {},
@@ -1367,6 +1325,8 @@ var FakeECSFQDNs = map[string]struct{}{
"d6691a17-6fdb-4d26-85d6-b3dd27f55f08.prmutv.co.": {},
"d82f7a30-751a-4689-b7e9-19336a89ab46.prmutv.co.": {},
"d837da8d.cloudsrv.minerva-labs.com.": {},
+ "d9npma-inapps.appsflyersdk.com.": {},
+ "da.toponadss.com.": {},
"daemon.nanoleaf.me.": {},
"daf.xp.apple.com.": {},
"dallas.remotepc.com.": {},
@@ -1380,7 +1340,6 @@ var FakeECSFQDNs = map[string]struct{}{
"dantri.com.vn.": {},
"darden-sync.quantummetric.com.": {},
"data-detect.nie.easebar.com.": {},
- "data-feed.flightradar24.com.": {},
"data.analytics.thomsonreuters.com.": {},
"data.analytics.ux.quickbase.com.": {},
"data.assist.chromeriver.com.": {},
@@ -1392,15 +1351,18 @@ var FakeECSFQDNs = map[string]struct{}{
"data.data.mheducation.com.": {},
"data.guide-app.zoominfo.co.": {},
"data.guides.oncoursesystems.com.": {},
- "data.guides.patreon.com.": {},
"data.guides.percipio.com.": {},
"data.guides.wdesk.com.": {},
"data.hockeystack.com.": {},
+ "data.investing.com.": {},
"data.ipd.goto.com.": {},
"data.kuiniuca.com.": {},
"data.meitu.com.": {},
+ "data.pendo-cdn.pluralsight.com.": {},
+ "data.pendo-cobalt.westlaw.com.": {},
"data.pendo-tracking.seismic.com.": {},
"data.pendo.careporthealth.com.": {},
+ "data.pendo.gomotive.com.": {},
"data.pendo.looker.app.": {},
"data.pendo.navimedix.com.": {},
"data.pendo.progresslearning.com.": {},
@@ -1411,85 +1373,82 @@ var FakeECSFQDNs = map[string]struct{}{
"data.tracking.billtrust.com.": {},
"data00.adlooxtracking.com.": {},
"datamma.guides.nelnet.com.": {},
- "datasec-kmsex-cn.heytapmobi.com.": {},
"datasite.com.": {},
+ "datatechdrift.com.": {},
"datatheorem.com.": {},
- "datto.com.": {},
+ "db.onlinewebfonts.com.": {},
"db3pap002.storage.live.com.": {},
"db3pap003.storage.live.com.": {},
"db3pap004.storage.live.com.": {},
- "db3pap005.storage.live.com.": {},
"db3pap006.storage.live.com.": {},
"db3pap007.storage.live.com.": {},
"db5pap001.storage.live.com.": {},
- "dc-o.api.leiniao.com.": {},
"dc.di.atlas.samsung.com.": {},
"dc.dqa.samsung.com.": {},
"dc.wondershare.com.": {},
- "dci.sophosupd.net.": {},
- "dcs-live-uc1.mp.lura.live.": {},
- "dcs-live-ue1.mp.lura.live.": {},
- "dcs-live-ue4.mp.lura.live.": {},
- "dcs-live-uw1.mp.lura.live.": {},
"dcs-live.mp.lura.live.": {},
- "dcs-mcdn.mp.lura.live.": {},
"dcs-png.mp.lura.live.": {},
"dcs-vod.mp.lura.live.": {},
- "dcs.mp.lura.live.": {},
+ "dcs110-mcdn.mp.lura.live.": {},
"dd.browser.360.cn.": {},
+ "dd.meituan.com.": {},
"ddata.huntingtonbank.com.": {},
- "de-core.iprom.net.": {},
+ "dds.autodesk.com.": {},
"de-idm.api.io.mi.com.": {},
"de-prod.asyncgw.teams.microsoft.com.": {},
"de.dt.rcs.telephony.goog.": {},
+ "dealer.autopartners.net.": {},
"dealmoon.com.": {},
+ "decagon.ai.": {},
"deepl.com.": {},
- "deliver.feedify.org.": {},
- "delivery-integration.myq-cloud.com.": {},
+ "deliveroo.com.": {},
+ "delivery.api.getadmiral.com.": {},
"delivery.upremium.asia.": {},
- "deliveryhero.io.": {},
"dell-prod.actioniq.mr-in.com.": {},
- "delta-app.quantummetric.com.": {},
- "delta-sync.quantummetric.com.": {},
"delta.quantummetric.com.": {},
+ "demant-my.sharepoint.com.": {},
"demant.sharepoint.com.": {},
+ "demeter-int-ecom-collect.trendyol.com.": {},
"dentonstudent-my.sharepoint.com.": {},
"denver.remotepc.com.": {},
- "deploy.preveil.com.": {},
- "desmoines.remotepc.com.": {},
"dev2.keepsolid.com.": {},
"deviceops.hstgps.com.": {},
"dewmobile.net.": {},
"dfaklj.tech.": {},
+ "dfamilk-my.sharepoint.com.": {},
"dfamilk.sharepoint.com.": {},
+ "dfme.kleinanzeigen.de.": {},
+ "dialpad.com.": {},
"dickssportinggoods-app.quantummetric.com.": {},
+ "dickssportinggoods-sync.quantummetric.com.": {},
"dict.deepl.com.": {},
+ "dict.ntes53.netease.com.": {},
+ "dictvip-business.youdao.com.": {},
"digiapp.vietcombank.com.vn.": {},
"digiboy.ir.": {},
+ "diligent.count.ly.": {},
"dingtalk.com.": {},
"dir.4.401402081.west-gcloud.codm.activision.com.": {},
+ "direct.quic-proxy-gcpsg-v3.gcpsg.byteglb.com.": {},
"discovery.ringcentral.biz.": {},
- "dispatcher.factset.com.": {},
"dispatcher.omiapp.me.": {},
"dispatchosglobal.yuanshen.com.": {},
- "display.popt.in.": {},
- "displaynote.com.": {},
"distservp1.pb.com.": {},
- "dl.acronis.com.cdn.cloudflare.net.": {},
"dl.boxcloud.com.": {},
+ "dl.gmx.ch.": {},
"dls-udc.dqa.samsung.com.": {},
+ "dls.di.atlas.samsung.com.": {},
"dm-us.hybrid.ai.": {},
"dm1files.storage.live.com.": {},
"dm2pap090files.storage.live.com.": {},
- "dmp.nativendo.de.": {},
- "dmp.suntcontent.se.": {},
+ "dmongo.adgrid.io.": {},
+ "dns-e.ns4v.icu.": {},
"dns-tunnel-check.googlezip.net.": {},
"dns.alidns.com.": {},
- "dns.jdbcdn.net.": {},
"dns101.register.com.": {},
"dns23.llnwi.net.": {},
- "dns24.llnwi.net.": {},
"doceditor.wrike.com.": {},
+ "docer-api.wps.cn.": {},
"docs.live.net.": {},
"document360.io.": {},
"domaincfg.vivoglobal.com.": {},
@@ -1498,11 +1457,13 @@ var FakeECSFQDNs = map[string]struct{}{
"donewyork1.remotepc.com.": {},
"donewyork2.remotepc.com.": {},
"donewyork3.remotepc.com.": {},
- "doppiocdn.net.": {},
+ "dorchester2-my.sharepoint.com.": {},
+ "dorchester2.sharepoint.com.": {},
"dosfo1.remotepc.com.": {},
"dosfo2.remotepc.com.": {},
"download.2.401402081.west-gcloud.codm.activision.com.": {},
- "download.autodesk.com.": {},
+ "download.avira.com.": {},
+ "download.teamviewer.com.": {},
"downloadcenter.genetec.com.": {},
"downloads.vivaldi.com.": {},
"dp.barclaysus.com.": {},
@@ -1512,14 +1473,12 @@ var FakeECSFQDNs = map[string]struct{}{
"dpool.sina.com.cn.": {},
"dprprod-my.sharepoint.com.": {},
"dprprod.sharepoint.com.": {},
- "dps.jp.cinarra.com.": {},
"dr.netease.im.": {},
+ "dragate-cn.dc.heytapmobi.com.": {},
"drfdisvc.walmart.com.": {},
"drfirst.com.": {},
- "drm.mp.lura.live.": {},
- "drops-register.ubi.com.": {},
+ "drsquatch.com.": {},
"dsa-eu.hybrid.ai.": {},
- "dsg.bio.": {},
"dsm01pap001.storage.live.com.": {},
"dsm01pap001files.storage.live.com.": {},
"dsm01pap002.storage.live.com.": {},
@@ -1545,6 +1504,7 @@ var FakeECSFQDNs = map[string]struct{}{
"dsm04pap002files.storage.live.com.": {},
"dsm04pap003.storage.live.com.": {},
"dsm04pap003files.storage.live.com.": {},
+ "dsp.tec-do.cn.": {},
"dss.hybrid.ai.": {},
"dstillery.com.": {},
"dtscout.com.": {},
@@ -1555,19 +1515,16 @@ var FakeECSFQDNs = map[string]struct{}{
"dub06pap001.storage.live.com.": {},
"dub07pap001.storage.live.com.": {},
"dub07pap002.storage.live.com.": {},
- "dub07pap003.storage.live.com.": {},
"dubai.remotepc.com.": {},
"dublin.remotepc.com.": {},
"dun.163yun.com.": {},
- "dwhyn.top.": {},
- "dynaimage.cdn.cnn.com.": {},
+ "dv.extremereach.com.": {},
"dypnsapi.aliyuncs.com.": {},
"dz.cyberhaven.io.": {},
+ "e-10220.adzerk.net.": {},
"e-189.21cn.com.": {},
"e.189.cn.": {},
- "e.calibermind.com.": {},
"e.cdnwidget.com.": {},
- "e.petco.com.": {},
"e.userflow.com.": {},
"e.viously.com.": {},
"e1cef1f0-495f-4973-ba1c-880786e73a66.prmutv.co.": {},
@@ -1641,6 +1598,13 @@ var FakeECSFQDNs = map[string]struct{}{
"e2c70.gcp.gvt2.com.": {},
"e2c71.gcp.gvt2.com.": {},
"e2c72.gcp.gvt2.com.": {},
+ "e2c73.gcp.gvt2.com.": {},
+ "e2c74.gcp.gvt2.com.": {},
+ "e2c75.gcp.gvt2.com.": {},
+ "e2c76.gcp.gvt2.com.": {},
+ "e2c77.gcp.gvt2.com.": {},
+ "e2c78.gcp.gvt2.com.": {},
+ "e2c79.gcp.gvt2.com.": {},
"e2c8.gcp.gvt2.com.": {},
"e2c9.gcp.gvt2.com.": {},
"e2cs01.gcp.gvt2.com.": {},
@@ -1707,21 +1671,20 @@ var FakeECSFQDNs = map[string]struct{}{
"eagle-my.sharepoint.com.": {},
"eagle.sharepoint.com.": {},
"eago9.cyberhaven.io.": {},
+ "eap-log-cn.allawntech.com.": {},
+ "easemob.com.": {},
"easeus.com.": {},
"eastmoney.com.": {},
"eastus2-gas.guestconfiguration.azure.com.": {},
- "eb.cently.com.": {},
"ebaypay-app.quantummetric.com.": {},
"ebaypay-sync.quantummetric.com.": {},
- "ec.instapagemetrics.com.": {},
"ecatholic.com.": {},
"ecom.wixapps.net.": {},
"ecommerce.iap.unity3d.com.": {},
"ecs-gallatin-c2s.trafficmanager.net.": {},
- "edge-iad.txryan.com.": {},
- "edge-pdx.txryan.com.": {},
+ "edba.brealtime.com.": {},
"edge.api.brightcove.com.": {},
- "edge.zimperium.com.": {},
+ "edge.txryan.com.": {},
"edgecdn.ru.": {},
"edgedl.me.gvt1.com.": {},
"edgelocation.ivanticloud.com.": {},
@@ -1729,6 +1692,8 @@ var FakeECSFQDNs = map[string]struct{}{
"edisonintl.sharepoint.com.": {},
"editor.wix.com.": {},
"editorial.femaledaily.com.": {},
+ "education-certification.youdao.com.": {},
+ "eduinsightacademy.com.": {},
"efercro.com.": {},
"efs.ultipro.com.": {},
"egateway.ultipro.com.": {},
@@ -1736,62 +1701,62 @@ var FakeECSFQDNs = map[string]struct{}{
"ehmc.sharepoint.com.": {},
"eisaihhc-my.sharepoint.com.": {},
"ejoyspace.com.": {},
- "ek6rpv-launches.appsflyersdk.com.": {},
+ "ek6rpv-cdn-settings.appsflyersdk.com.": {},
"elal-service.consist.co.il.": {},
"elaracaring-my.sharepoint.com.": {},
"ele.me.": {},
"elemecdn.com.": {},
- "ellingtoncms.com.": {},
- "em.journeys.com.": {},
+ "elonuniversity-my.sharepoint.com.": {},
+ "em-tr4ck-settings.airtrfx.com.": {},
"email.plumbenefits.com.": {},
"email.ticketsatwork.com.": {},
"emailaptitude.com.": {},
- "emailsignatures365-addin.codetwo.com.": {},
"emerson-my.sharepoint.com.": {},
"emerson.sharepoint.com.": {},
"emo.v-mate.mobi.": {},
"empirecat-my.sharepoint.com.": {},
- "en.gifshow.com.": {},
"endpointprotector.com.": {},
"engage.wixapps.net.": {},
"engagementapi.skype.com.": {},
+ "engine.monetate.net.": {},
"ent.box.com.": {},
"enterprise-app.quantummetric.com.": {},
"envoy-ios-prod.getepic.com.": {},
- "ep.bale.ai.": {},
+ "envysion.com.": {},
"epic1-my.sharepoint.com.": {},
"epic1.sharepoint.com.": {},
- "eplists.xboxlive.com.": {},
+ "epicmobile.ohsu.edu.": {},
"epoch.cloud.": {},
"eponesh.com.": {},
"eportal.fda.gov.ph.": {},
+ "epsnj-my.sharepoint.com.": {},
"epsnj.sharepoint.com.": {},
"errlog.umeng.com.": {},
"errlogos.umeng.com.": {},
"errnewlog.umeng.com.": {},
"errnewlogos.umeng.com.": {},
"errortracking.deepl.com.": {},
+ "esignlive.com.": {},
"esm.archive.org.": {},
"esosuite.net.": {},
+ "estafetamx-my.sharepoint.com.": {},
"etracker.com.": {},
"etsv2.datalake.gameloft.com.": {},
"eu-aa.online-metrix.net.": {},
"eu-api.asm.skype.com.": {},
- "eu-device.ymcs.yealink.com.": {},
"eu-gamecenter.api.intl.miui.com.": {},
"eu-prod.asyncgw.teams.microsoft.com.": {},
"eu-push.api.intl.miui.com.": {},
"eu.galleryapi.micloud.xiaomi.net.": {},
- "eu.hismileteeth.com.": {},
- "eu.iceporn.xxx.": {},
+ "eu.mvconf.50union.com.": {},
"eu.statusapi.micloud.xiaomi.net.": {},
"eu1.badoo.com.": {},
- "eu1.bumbcdn.com.": {},
"eu1.bumble.com.": {},
- "eu2a-excel-collab.officeapps.live.com.": {},
+ "eu1.ecdn2.bumbcdn.com.": {},
+ "eu1a-excel-collab.officeapps.live.com.": {},
"euc-excel-collab.officeapps.live.com.": {},
"euc-powerpoint-collab.officeapps.live.com.": {},
- "euc1-green.pp.sgp.pvp.net.": {},
+ "europe-west6-sybogames-gke-prod.cloudfunctions.net.": {},
"europe.remotepc.com.": {},
"eus.his.arc.azure.com.": {},
"eus.his.hybridcompute.trafficmanager.net.": {},
@@ -1802,17 +1767,21 @@ var FakeECSFQDNs = map[string]struct{}{
"event-tracking-project.ap-southeast-1.log.aliyuncs.com.": {},
"event.evtm.53.com.": {},
"event.togothermany.com.": {},
+ "events.paramount.tech.": {},
+ "events.statsigapi.net.": {},
"events.swishapps.ai.": {},
- "evtrust.com.": {},
"exappupgrade.vivoglobal.com.": {},
"excel-collab.officeapps.live.com.": {},
"exodus.desync.com.": {},
+ "exorigos.com.": {},
"exp.host.": {},
- "expedia-api.arkoselabs.com.": {},
"expedia-app.quantummetric.com.": {},
+ "experian-my.sharepoint.com.": {},
"experimental-api.asm.skype.com.": {},
"explicit-explicit.bing.net.trafficmanager.net.": {},
"exponential.com.": {},
+ "expresspros-my.sharepoint.com.": {},
+ "expresspros.sharepoint.com.": {},
"extension.faro.speechify.dev.": {},
"external-ams2-1.xx.fbcdn.net.": {},
"external-ams4-1.xx.fbcdn.net.": {},
@@ -1821,7 +1790,7 @@ var FakeECSFQDNs = map[string]struct{}{
"external-ber1-1.xx.fbcdn.net.": {},
"external-bos5-1.xx.fbcdn.net.": {},
"external-bru2-1.xx.fbcdn.net.": {},
- "external-den4-1.xx.fbcdn.net.": {},
+ "external-den2-1.xx.fbcdn.net.": {},
"external-dfw5-1.xx.fbcdn.net.": {},
"external-dfw5-2.xx.fbcdn.net.": {},
"external-dus1-1.xx.fbcdn.net.": {},
@@ -1852,28 +1821,29 @@ var FakeECSFQDNs = map[string]struct{}{
"external-sjc3-1.xx.fbcdn.net.": {},
"external-vie1-1.xx.fbcdn.net.": {},
"external-waw1-1.xx.fbcdn.net.": {},
- "external-yyz1-1.xx.fbcdn.net.": {},
"extranet-ipv4-pub-azams.alb.xiaomi.com.": {},
"ezcollab-my.sharepoint.com.": {},
- "ezmob.com.": {},
- "f35b59fc-90c6-428e-a9e4-494353d0f0e1.prmutv.co.": {},
- "fa000000068.resources.office.net.": {},
- "fa000000131.resources.office.net.": {},
+ "ezcollab.sharepoint.com.": {},
+ "f.hubspotusercontent00.net.": {},
+ "fa000000076.resources.office.net.": {},
+ "fa000000110.resources.office.net.": {},
+ "fa1f96ab-b693-40e4-82d5-8698592ef9ac.prmutv.co.": {},
"faas.marktplaats.nl.": {},
"faceunity.com.": {},
"factor.reg.163.com.": {},
"factset.com.": {},
- "fandango-app.quantummetric.com.": {},
+ "fanyiegg.youdao.com.": {},
+ "fastformstax.prosystemfx.com.": {},
"fastly-cloud.typenetwork.com.": {},
"fastly.cedexis-test.com.": {},
+ "fastquote.fidelity.com.": {},
"faves.grow.me.": {},
- "fb88d35d-3299-4a2e-bf5c-ebb4e5b5938a.resources.office.net.": {},
- "fbinsmi-my.sharepoint.com.": {},
"fbinsmi.sharepoint.com.": {},
"fdccpaadaptor.forddirectservices.com.": {},
"fe.xiaohongshu.com.": {},
+ "featuregates.org.": {},
"fed.federate365.com.": {},
- "feed.podbean.com.": {},
+ "feedbackify.com.": {},
"feeder.co.": {},
"feelinsonice.l.google.com.": {},
"fef.amsub0302.manage.microsoft.com.": {},
@@ -1883,22 +1853,23 @@ var FakeECSFQDNs = map[string]struct{}{
"fef.msub07.manage.microsoft.com.": {},
"femaledaily.com.": {},
"fengkongcloud.com.": {},
- "fenxi.com.": {},
"ferringgroup-my.sharepoint.com.": {},
"ferringgroup.sharepoint.com.": {},
- "ffs.thescore.com.": {},
+ "festo-my.sharepoint.com.": {},
+ "ff.nordcurrent.com.": {},
"fgwn01.ultipro.com.": {},
- "fhmc-my.sharepoint.com.": {},
"fi.telephony.goog.": {},
"field59.com.": {},
"files.jotform.com.": {},
+ "files.zohopublic.eu.": {},
+ "filters.adavoid.org.": {},
"finalsite.com.": {},
"finalsite.net.": {},
"firebase.sgp1.digitaloceanspaces.com.": {},
"fireeye.com.": {},
- "firefox.com.cn.": {},
- "fitchburg.remotepc.com.": {},
+ "fiscal.treasury.gov.": {},
"five9.com.": {},
+ "flashcards.vitalsource.com.": {},
"fleet.todyl.com.": {},
"flip.to.": {},
"flixcdn.com.": {},
@@ -1908,29 +1879,30 @@ var FakeECSFQDNs = map[string]struct{}{
"flyspirit.sharepoint.com.": {},
"fm.printaudit.com.": {},
"fmcna-my.sharepoint.com.": {},
- "fmcschedule.com.": {},
+ "fmcna.sharepoint.com.": {},
"fn.us.ipqscdn.com.": {},
+ "fo.iemiq.com.": {},
"forcesafesearch.google.com.": {},
"forksystems.mm.fcix.net.": {},
"form.jotform.com.": {},
"forms-eu1.hscollectedforms.net.": {},
"forms-eu1.hsforms.com.": {},
"forms-eu1.hubspot.com.": {},
- "forms.aweber.com.": {},
+ "forthepeople0-my.sharepoint.com.": {},
"forthepeople0.sharepoint.com.": {},
+ "fortisimperious.com.": {},
"fortworth.remotepc.com.": {},
+ "foundation-ipv4.youdao.com.": {},
"fpbns.net.": {},
"fpdlp.applxweb.com.": {},
"fr-prod.asyncgw.teams.microsoft.com.": {},
- "fr1.bumbcdn.com.": {},
- "fragrancenet.com.": {},
+ "fr1.ecdn2.bumbcdn.com.": {},
"fran.frvr.com.": {},
"franecki.net.": {},
"frankfurt.remotepc.com.": {},
"fremont.remotepc.com.": {},
"freseniusmedicalcare.com.": {},
"fresnocounty-my.sharepoint.com.": {},
- "friendly.io.": {},
"fs.ultiproworkplace.com.": {},
"fsu-my.sharepoint.com.": {},
"fsu.sharepoint.com.": {},
@@ -1940,70 +1912,66 @@ var FakeECSFQDNs = map[string]struct{}{
"ftkew02.ultipro.com.": {},
"ftkn01.ultipro.com.": {},
"ftkn02.ultipro.com.": {},
- "funshion.com.": {},
+ "ftp.ext.hp.com.edgekey.net.": {},
+ "ftpm.amd.com.": {},
+ "fuk01.ps5.update.playstation.net.": {},
"fusd-my.sharepoint.com.": {},
- "g-zgroup.pstatic.net.": {},
+ "fusd.sharepoint.com.": {},
+ "fxltsbl.com.": {},
"g.fastcdn.co.": {},
- "g.tivan.naver.com.": {},
"g9hc4.cn.": {},
"ga.badambiz.com.": {},
- "ga.jspm.io.": {},
"galaxy.safe.360.cn.": {},
"galaxyappstore.com.": {},
+ "galeapps.gale.com.": {},
"gameloft.com.": {},
"gamemonkey.org.": {},
"gamepigeon.net.": {},
- "games-dailycheckin.shopee.co.id.": {},
- "gamestop-app.quantummetric.com.": {},
+ "gatag.it.": {},
+ "gateway.costar.com.": {},
"gateway.ultiproworkplace.com.": {},
"gb.ee.rcs.telephony.goog.": {},
"gb.o2.rcs.telephony.goog.": {},
- "gbc-word-edit.officeapps.live.com.": {},
- "gc.apple.com.": {},
+ "gbc-common.online.office.com.": {},
+ "gbc-excel.officeapps.live.com.": {},
"gcash-api.pulseid.com.": {},
"gccmod.ecs.office.com.": {},
"gcdn.co.": {},
+ "gce-beacons.gcp.gvt2.com.": {},
"gcloud.qq.com.": {},
"gcloudcs.com.": {},
"gcloudsdk.com.": {},
- "gcs.garmin.com.": {},
"gcs.sc-cdn.net.": {},
- "gdfpsec.gifshow.com.": {},
"gdid.datalake.gameloft.com.": {},
- "gdpr.loopme.com.": {},
- "gdsns1.alibabadns.com.": {},
+ "geant.ocsp.sectigo.com.": {},
"geappl.io.": {},
"geappliances-my.sharepoint.com.": {},
"geappliances.sharepoint.com.": {},
"geico-app.quantummetric.com.": {},
"geico-sync.quantummetric.com.": {},
"geniusmonkey.com.": {},
- "geometrydashlite.co.": {},
+ "geo-dra.platform.hicloud.com.": {},
"getadmiral.com.": {},
"getbutton.io.": {},
- "gettopple.com.": {},
+ "getnitropack.com.": {},
+ "getpremise.com.": {},
"getui.net.": {},
+ "gfp.veta.naver.com.": {},
"giraff.io.": {},
- "githack.com.": {},
"gitlab.com.": {},
"gla.gameloft.com.": {},
"glic-my.sharepoint.com.": {},
"glic.sharepoint.com.": {},
"global-tokenserver-la.headline.uodoo.com.": {},
"global.datasite.com.": {},
- "globalcdn.co.": {},
"globalsigncdn.com.cdn.cloudflare.net.": {},
"globalsun.io.": {},
- "gme.qcloud.com.": {},
"gnc.com.": {},
"go.gale.com.": {},
- "go.hpyjmp.com.": {},
- "go.pdfforge.org.": {},
+ "go.stripchatgirls.com.": {},
"goaffpro.com.": {},
"goconfluent-my.sharepoint.com.": {},
- "gohealthuc.okta.com.": {},
- "golf.com.": {},
- "goodrxcore-app.quantummetric.com.": {},
+ "goconfluent.sharepoint.com.": {},
"google.org.": {},
"googledomains.com.": {},
"gosport.remotepc.com.": {},
@@ -2011,24 +1979,18 @@ var FakeECSFQDNs = map[string]struct{}{
"gov-bam.nr-data.net.cdn.cloudflare.net.": {},
"gowustl-my.sharepoint.com.": {},
"grab.zoom.us.": {},
- "grainger.com.": {},
"gravitec.net.": {},
- "gravityzone.bitdefender.com.": {},
- "graylog.com.": {},
- "greenhousegroup.com.": {},
"greenville.remotepc.com.": {},
"group-ib.com.": {},
+ "groupon.attn.tv.": {},
"grouponeauto-my.sharepoint.com.": {},
"grpc.vivintsky.com.": {},
- "gsgrpt.adview.com.": {},
"gslb.finzfin.com.": {},
"gslb.sgw.shopeemobile.com.": {},
"gslb.xiaohongshu.com.": {},
- "gstbocessscta-my.sharepoint.com.": {},
- "gstbocessscta.sharepoint.com.": {},
"gtimg.cn.": {},
"guid.tpns.sgp.tencent.com.": {},
- "gut.bmj.com.": {},
+ "gva.be.": {},
"gw5.push.mcp.weibo.cn.": {},
"gwadar.cn.": {},
"gx-api.geniex.com.": {},
@@ -2036,10 +1998,7 @@ var FakeECSFQDNs = map[string]struct{}{
"gz0.googleusercontent.com.": {},
"h-5h8i3ud8.online-metrix.net.": {},
"h-adp.online-metrix.net.": {},
- "h-citibankonline.online-metrix.net.": {},
- "h-citicards.online-metrix.net.": {},
"h-discover.online-metrix.net.": {},
- "h-e04kqxof.online-metrix.net.": {},
"h-ebay.online-metrix.net.": {},
"h-fisglobal.online-metrix.net.": {},
"h-homedepot.online-metrix.net.": {},
@@ -2053,6 +2012,7 @@ var FakeECSFQDNs = map[string]struct{}{
"h.app.wdesk.com.": {},
"h.online-metrix.net.": {},
"h107833-ecdn.mp.lura.live.": {},
+ "h5sv6m.com.": {},
"haka.ruselabs.com.": {},
"hamina.remotepc.com.": {},
"handmadewithjoann.com.": {},
@@ -2066,46 +2026,54 @@ var FakeECSFQDNs = map[string]struct{}{
"hbopenbid-apac-v2.pubmnet.com.": {},
"hbwrapper.com.": {},
"hd-ext-v1.log.mgtv.com.": {},
+ "hdi365-my.sharepoint.com.": {},
"hdi365.sharepoint.com.": {},
+ "hdp-raw-log.cn-shanghai.log.aliyuncs.com.": {},
"hdsupplyinc-my.sharepoint.com.": {},
"hdsupplyinc.sharepoint.com.": {},
"healthequity-my.sharepoint.com.": {},
"healthequity.sharepoint.com.": {},
"hearst-prod.actioniq.mr-in.com.": {},
- "heatmap-events-collector.instapage.com.": {},
"hecheck.bitmyanmar.info.": {},
"helloid.com.": {},
- "help.ea.com.": {},
- "hengam.io.": {},
+ "hellomedian.com.": {},
"hermes-us.inspidspad.com.": {},
"hetangsmart.com.": {},
+ "hexanaut-centralserver.coolmathgames.com.": {},
"heytapdownload.com.": {},
"heytapmobi.com.": {},
"highwebmedia.com.": {},
"highwire.org.": {},
+ "hillingdon-my.sharepoint.com.": {},
"hillsboroughcounty-my.sharepoint.com.": {},
"hilton-my.sharepoint.com.": {},
+ "hilton.sharepoint.com.": {},
+ "hindustantimes.com.": {},
"hisearch-dra.dt.dbankcloud.com.": {},
"hismarttv.com.": {},
"hismileteeth.com.": {},
"hits.getelevar.com.": {},
- "hiya.browser.360.cn.": {},
"hk.gcloudcs.com.": {},
"hk.voice.gcloudcs.com.": {},
"hk.wechat.com.": {},
- "hls-video-ynet.ynethd.com.": {},
+ "hn1-cloud-entitlements.lol.qq.com.": {},
+ "hn1-cloud-taas.lol.qq.com.": {},
+ "hokgcloudv6.iegcom.com.": {},
+ "holmeshelp.ucweb.com.": {},
"home.highwire.org.": {},
+ "homedepot-app.quantummetric.com.": {},
"homedepot.quantummetric.com.": {},
"honeywell.com.": {},
"honeywellprod-my.sharepoint.com.": {},
+ "honeywellprod.sharepoint.com.": {},
"hongkong.remotepc.com.": {},
- "hostedimages-cdn.aweber-static.com.": {},
+ "houstonmethodist1-my.sharepoint.com.": {},
"houstonmethodist1.sharepoint.com.": {},
"houtx-my.sharepoint.com.": {},
- "houtx.sharepoint.com.": {},
"hpfalkaj.deepl.com.": {},
"hpkaj.deepl.com.": {},
"hpplay.cn.": {},
+ "hrsa.gov.": {},
"hstgps.com.": {},
"html.it.": {},
"html5.qq.com.": {},
@@ -2113,13 +2081,13 @@ var FakeECSFQDNs = map[string]struct{}{
"httpdns.y5en.com.": {},
"huan.tv.": {},
"huaweicloud.com.": {},
- "hub.turbo.net.": {},
"hubble.netease.com.": {},
- "hubble.officeapps.live.com.": {},
"hubcloud.com.cn.": {},
"hubspotemail.net.": {},
"huion.cn.": {},
+ "huntsvillecityschools-my.sharepoint.com.": {},
"huorong.cn.": {},
+ "hw.gcloudcs.com.": {},
"hwapps-o.api.leiniao.com.": {},
"hysteryale-my.sharepoint.com.": {},
"hysteryale.sharepoint.com.": {},
@@ -2133,98 +2101,102 @@ var FakeECSFQDNs = map[string]struct{}{
"ibm.account.box.com.": {},
"ibm.box.com.": {},
"ibsrv.net.": {},
+ "ic-pb-ah.xhcdn.com.": {},
+ "ic-ph-ah.xhcdn.com.": {},
+ "ic-vt-ah.fullxhcdn.com.": {},
"icalendars.app.": {},
+ "iceholdings-my.sharepoint.com.": {},
+ "iceholdings.sharepoint.com.": {},
"ichano.cn.": {},
"iconmonstr.com.": {},
"icons.bitwarden.net.": {},
"id-ooredoo.rcs.telephony.goog.": {},
"id-telkom.rcs.telephony.goog.": {},
"id-timer-appstore.vivoglobal.com.": {},
- "id.maxon.net.": {},
+ "id.remoteutilities.com.": {},
"idahofalls.remotepc.com.": {},
- "idamsdm.remotepc.com.": {},
"idchicago1.remotepc.com.": {},
"iddallas1.remotepc.com.": {},
"iddenver.remotepc.com.": {},
"iddetroit.remotepc.com.": {},
+ "identity.myisolved.com.": {},
+ "idexonline-my.sharepoint.com.": {},
"idhw-my.sharepoint.com.": {},
"idhw.sharepoint.com.": {},
"idlondon.remotepc.com.": {},
"idmadrid.remotepc.com.": {},
- "idmsa.apple.com.": {},
"idnewyork1.remotepc.com.": {},
+ "idpix.media6degrees.com.": {},
"idqqimg.com.": {},
"idr.cdnwidget.com.": {},
"ids.cdnwidget.com.": {},
- "ifconfig.io.": {},
+ "iemiq.com.": {},
"igame.gcloudcs.com.": {},
"ijoysoftconnect.com.": {},
- "ikioenjm3e9.ioriveredge.net.": {},
"ilandcloud.com.": {},
"illinoisstateuniversity-my.sharepoint.com.": {},
+ "illuminateed.com.": {},
"ilmn-my.sharepoint.com.": {},
"ilmn.sharepoint.com.": {},
"ilog-sea-aliyun.alipayplus.com.": {},
"im.bluevoox.com.": {},
- "image-us.samsung.com.": {},
- "image.e.affirm.com.": {},
- "image.myqcloud.com.": {},
- "image.online.adp.com.": {},
- "images.crazygames.com.": {},
- "images.getadmiral.com.": {},
- "images.twoplayergames.org.": {},
- "images.wixstatic.com.": {},
- "imagetrendelite.com.": {},
- "imanageshare.com.": {},
- "imap.163.com.": {},
- "imap.earthlink.net.": {},
- "imeffkdword.openspeech.cn.": {},
- "img.asuracomics.com.": {},
- "img.avery.com.": {},
- "img.stripcdn.com.": {},
- "img.washingtonpost.com.": {},
- "img1.od-cdn.com.": {},
- "img9.target.com.": {},
- "imghst-de.com.": {},
- "imgix.ranker.com.": {},
- "imgproxy.leaflets.schwarz.": {},
- "imgs.michaels.com.": {},
- "imgs.signifyd.com.": {},
- "imgsct.cookiebot.com.": {},
- "imoim.net.": {},
- "imolive2.com.": {},
+ "image-auto-captioning-computer-vision.cognitiveservices.azure.com.": {},
+ "image.cnbcfm.com.": {},
+ "image.myqcloud.com.": {},
+ "image.online.adp.com.": {},
+ "images.axios.com.": {},
+ "images.babylist.com.": {},
+ "images.crazygames.com.": {},
+ "images.dable.io.": {},
+ "images.leadconnectorhq.com.": {},
+ "images.onefootball.com.": {},
+ "images.wixstatic.com.": {},
+ "imagetrendelite.com.": {},
+ "imap.earthlink.net.": {},
+ "imeclient.openspeech.cn.": {},
+ "img-1.kwcdn.com.cdn.cloudflare.net.": {},
+ "img.grouponcdn.com.edgekey.net.": {},
+ "img.newspapers.com.": {},
+ "img.yana.upday.com.": {},
+ "img9.target.com.": {},
+ "imga.corporateperks.com.": {},
+ "imghst-de.com.": {},
+ "imgix.ranker.com.": {},
+ "imgproxy.leaflets.schwarz.": {},
+ "imgs.signifyd.com.": {},
+ "imoim.net.": {},
+ "imolive2.com.": {},
"imou-sg-ali-online-paas-private-cloud-picture.oss-ap-southeast-1.aliyuncs.com.": {},
"imou-sg3-ali-online-paas-private-picture.oss-ap-southeast-1.aliyuncs.com.": {},
"imoulife.com.": {},
- "imp.impdelivery.xyz.": {},
"impactify.media.": {},
- "impdesk.com.": {},
"imptrk.siteplug.com.": {},
"in-api.asm.skype.com.": {},
+ "in-exmagazineunlock-proxy.vivoglobal.com.": {},
"in-prod.asyncgw.teams.microsoft.com.": {},
"in-vcode-od.vivoglobal.com.": {},
"in.gov.": {},
"in.visitors.live.": {},
- "inapp.gonitro.com.": {},
- "inbound.americanexpress.com.": {},
+ "incitecpivotlimited-my.sharepoint.com.": {},
"indianapolis.remotepc.com.": {},
- "indoorloc.map.qq.com.": {},
"inf.miui.com.": {},
- "ingka.com.": {},
+ "ingame.qq.com.": {},
+ "ingesteu.quantummetric.com.": {},
"ingov-my.sharepoint.com.": {},
"ingov.sharepoint.com.": {},
"inneraudioms.cc.easebar.com.": {},
"innersloth.com.": {},
"innity.com.": {},
"innity.net.": {},
+ "ino.qq.com.": {},
"inoreader.com.": {},
"ins-qw3q8ofk.ias.tencent-cloud.net.": {},
"inscr-my.sharepoint.com.": {},
"inscr.sharepoint.com.": {},
+ "inside-graph.com.cdn.cloudflare.net.": {},
"insidemedia-my.sharepoint.com.": {},
"insidemedia.sharepoint.com.": {},
"insightgloballlc-my.sharepoint.com.": {},
- "insights.ovid.com.": {},
"inskinad.com.": {},
"inspidspad.com.": {},
"inspirebrands-app.quantummetric.com.": {},
@@ -2240,21 +2212,25 @@ var FakeECSFQDNs = map[string]struct{}{
"intel.sharepoint.com.": {},
"internetdownloadmanager.com.": {},
"intl-im-conn.iq.com.": {},
+ "intuit.zoom.us.": {},
+ "iorad.com.": {},
+ "ios-informationplatform.wps.cn.": {},
"ios.crashsight.wetest.net.": {},
- "iot-as-http.cn-shanghai.aliyuncs.com.": {},
"iot.hillrom.com.": {},
"iowa.remotepc.com.": {},
"ip-api.com.": {},
"ip.acmeaom.com.": {},
"ipa-business-sg.ap-southeast-1.log.aliyuncs.com.": {},
"ipa-business.cn-hangzhou.log.aliyuncs.com.": {},
- "ipify.org.": {},
+ "iphone-cdn-api.fitbit.com.": {},
"ipinyou.com.": {},
- "iplayer-web.files.bbci.co.uk.": {},
- "ipm.adblockplus.dev.": {},
"iprofiles.apple.com.": {},
"iprom.net.": {},
+ "ipv4.cadc.absolute.com.": {},
"ipv4.tracker.harry.lu.": {},
+ "iq.com.": {},
+ "irltoolkit.mm.fcix.net.": {},
+ "ironmountain.cyberhaven.io.": {},
"irvine.remotepc.com.": {},
"isap.inskinad.com.": {},
"iscorp.com.": {},
@@ -2267,12 +2243,13 @@ var FakeECSFQDNs = map[string]struct{}{
"itinfoalvarezandmarsal-my.sharepoint.com.": {},
"itinfoalvarezandmarsal.sharepoint.com.": {},
"itm.cloud.com.": {},
- "itoon.org.": {},
"itzmx.com.": {},
+ "ivalua.com.": {},
"ive8im-inapps.appsflyersdk.com.": {},
"ivview.com.": {},
"ivview.net.": {},
"ivytechccofindiana-my.sharepoint.com.": {},
+ "iwmapapi.americanexpress.com.": {},
"ixav-cse.avlyun.com.": {},
"izooto.com.": {},
"jabfm.org.": {},
@@ -2284,17 +2261,15 @@ var FakeECSFQDNs = map[string]struct{}{
"jdcloud.com.": {},
"jeldweninc1-my.sharepoint.com.": {},
"jeldweninc1.sharepoint.com.": {},
- "jgw-dra.jos.dbankcloud.cn.": {},
- "jjcloud.box.com.": {},
- "jjcloud.ent.box.com.": {},
"jjkeller-my.sharepoint.com.": {},
"jnj-my.sharepoint.com.": {},
+ "jocombssd.aristotleinsight.com.": {},
"johannesburg.remotepc.com.": {},
- "johnmuirhealth-my.sharepoint.com.": {},
"johnmuirhealth.sharepoint.com.": {},
- "johnsmanville365-my.sharepoint.com.": {},
"joox.com.": {},
"jotfor.ms.": {},
+ "journeymv.com.": {},
+ "joynetgame.com.": {},
"jp-prod.asyncgw.teams.microsoft.com.": {},
"jp.cinarra.com.": {},
"jp1.chat.si.riotgames.com.": {},
@@ -2310,34 +2285,39 @@ var FakeECSFQDNs = map[string]struct{}{
"js-eu1.hsleadflows.net.": {},
"js-eu1.hubspot.com.": {},
"js-eu1.hubspotfeedback.com.": {},
- "js.hcaptcha.com.": {},
- "js.users.51.la.": {},
+ "js.eruptr.io.": {},
+ "jss.starbucks.com.": {},
+ "jssprod-starbucks.trafficmanager.net.": {},
"junglefrog.com.": {},
- "k-aeu1.contentsquare.net.": {},
"k.163.com.": {},
"k8s1-event-tracker-am.indexexchange.com.": {},
"k8s1-event-tracker-la.indexexchange.com.": {},
"k8s1-event-tracker-ny.indexexchange.com.": {},
"k8s1-event-tracker-sj.indexexchange.com.": {},
"k8s1-event-tracker-va.indexexchange.com.": {},
- "k8svkbknrqzgecxff.ay.delivery.": {},
+ "k8s1-la-ext-lb.indexexchange.com.": {},
+ "k8s1-ny-ext-lb.indexexchange.com.": {},
+ "k8s1-va-ext-lb.indexexchange.com.": {},
"kajicam.com.": {},
- "kaleidousercontent.com.": {},
"kameleoon.com.": {},
+ "katespade.scene7.com.": {},
"kc1-my.sharepoint.com.": {},
"kc1.sharepoint.com.": {},
- "keells-my.sharepoint.com.": {},
- "kenh14.vn.": {},
"khsd-my.sharepoint.com.": {},
+ "khsd.sharepoint.com.": {},
+ "kic-ngfts.lge.com.": {},
"kiev.remotepc.com.": {},
- "kit-pro.fontawesome.com.": {},
+ "kiprotect.com.": {},
+ "kisd365-my.sharepoint.com.": {},
+ "kisd365.sharepoint.com.": {},
+ "kit-uploads.fontawesome.com.": {},
"kiwisizing.com.": {},
+ "kjjinz-cdn-settings.appsflyersdk.com.": {},
"klagenfurt.remotepc.com.": {},
- "klikan.caridisini.site.": {},
- "kmovie.gifshow.com.": {},
"knightlab.com.": {},
"knock.app.": {},
"knoxville.remotepc.com.": {},
+ "kohcloud.tgpa.qq.com.": {},
"komect.com.": {},
"kootenaihealth-my.sharepoint.com.": {},
"kornferry-my.sharepoint.com.": {},
@@ -2348,17 +2328,17 @@ var FakeECSFQDNs = map[string]struct{}{
"kunlunaq.com.": {},
"kunlunar.com.": {},
"kunluncan.com.": {},
- "kunlungem.com.": {},
"kunlungr.com.": {},
"kunlunhuf.com.": {},
"kunlunno.com.": {},
"kunlunsl.com.": {},
"kunlunso.com.": {},
- "kv801.prod.do.dsp.mp.microsoft.com.": {},
- "kw3qbu-cdn-settings.appsflyersdk.com.": {},
+ "kv601.prod.do.dsp.mp.microsoft.com.edgekey.net.": {},
"kwimgs.com.": {},
"kzhi.tech.": {},
+ "l.ec922003.com.": {},
"l1-1.anzu.io.": {},
+ "la-ak.vg.ac.pvp.net.": {},
"la.remotepc.com.": {},
"la1.chat.si.riotgames.com.": {},
"la10.remotepc.com.": {},
@@ -2367,10 +2347,8 @@ var FakeECSFQDNs = map[string]struct{}{
"la2.remotepc.com.": {},
"la3.remotepc.com.": {},
"la4.remotepc.com.": {},
- "la4lbg.uae2grp.ucweb.com.": {},
"la8.remotepc.com.": {},
"la9.remotepc.com.": {},
- "labtech.iwsit.com.": {},
"lacounty-my.sharepoint.com.": {},
"lacounty.sharepoint.com.": {},
"lahuashanbx.com.": {},
@@ -2380,12 +2358,13 @@ var FakeECSFQDNs = map[string]struct{}{
"larksuite.com.": {},
"lasd-my.sharepoint.com.": {},
"lasd.sharepoint.com.": {},
+ "lastwar-us.us-west-1.log.aliyuncs.com.": {},
"laureatelatammx-my.sharepoint.com.": {},
+ "laureatelatammx.sharepoint.com.": {},
"lax.remotepc.com.": {},
"layerxsecurity.com.": {},
- "layouthub.com.": {},
- "lazada-mobile.oss-ap-southeast-1.aliyuncs.com.": {},
"lazada-msgacs.m.taobao.com.": {},
+ "lazada-wallet.oss-ap-southeast-1.aliyuncs.com.": {},
"lazada.co.id.": {},
"lazada.co.th.": {},
"lazada.com.": {},
@@ -2396,48 +2375,48 @@ var FakeECSFQDNs = map[string]struct{}{
"lcmchealth-my.sharepoint.com.": {},
"lcmchealth.sharepoint.com.": {},
"ldap.google.com.": {},
- "ldcorp-my.sharepoint.com.": {},
"ldcorp.sharepoint.com.": {},
- "leaderboards.xboxlive.com.": {},
+ "ldmnq.com.": {},
"leadmanagerfx.com.": {},
- "lebo.cn.": {},
+ "leagueoflegends.com.": {},
"leiniao.com.": {},
"lenovomm.com.": {},
- "lenovosupport-app.quantummetric.com.": {},
"levect.com.": {},
+ "level10gc.com.": {},
"leveldata.poki.io.": {},
"leviton-my.sharepoint.com.": {},
"lexicon.33across.com.": {},
- "lf16-geckocdn-offline.g-p-static.com.": {},
"lianmeng.360.cn.": {},
+ "libertyuniv-my.sharepoint.com.": {},
+ "libertyuniv.sharepoint.com.": {},
+ "liblynx.com.": {},
+ "libra22-normal-useast2a.tiktokv.com.": {},
"license.gonative.io.": {},
"license.litespeedtech.com.": {},
"license.unity3d.com.": {},
"licensing.bitmovin.com.": {},
- "licensing.microsoftcasualgames.com.": {},
- "licensing.sbullet.com.": {},
+ "lichess.org.": {},
+ "lightboxcdn.com.": {},
"lightwidget.com.": {},
- "like-video.com.": {},
"likr.tw.": {},
"lima.remotepc.com.": {},
"lincare-my.sharepoint.com.": {},
"lincare.sharepoint.com.": {},
"link-vision-picture-sgp.oss-ap-southeast-1.aliyuncs.com.": {},
- "link.storjshare.io.": {},
+ "liquipedia.net.": {},
"lisbon.remotepc.com.": {},
"lissabon.remotepc.com.": {},
"list.tronlink.org.": {},
"lists-e.tm-rt.sharepoint.com.": {},
- "lit.connatix.com.cdn.cloudflare.net.": {},
- "lit.elements.video.": {},
+ "lite.adakami.id.": {},
"litedev.sgp.hik-connect.com.": {},
- "litedev.us.hik-connect.com.": {},
"litespeedtech.com.": {},
"littler-my.sharepoint.com.": {},
"live.126.net.": {},
"live.ngb.haplat.net.": {},
"live3.ngb.haplat.net.": {},
"live5.ngb.haplat.net.": {},
+ "live74dh3d6.airspace-a.cbsivideo.com.": {},
"livect.haplat.net.": {},
"livedmpsk12ia-my.sharepoint.com.": {},
"livedmpsk12ia.sharepoint.com.": {},
@@ -2446,30 +2425,25 @@ var FakeECSFQDNs = map[string]struct{}{
"liveutmb-my.sharepoint.com.": {},
"liveutmb.sharepoint.com.": {},
"ljubljana.remotepc.com.": {},
- "llbean-sync.quantummetric.com.": {},
- "load.fomo.com.": {},
"local.adguard.org.": {},
"local.info.g9hc4.cn.": {},
"log-api.newrelic.com.cdn.cloudflare.net.": {},
+ "log-yex.youdao.com.": {},
"log.getadblock.com.": {},
"log.lscreenc.com.": {},
"log.umsns.com.": {},
- "log.voicecloud.cn.": {},
"log.zoom.us.": {},
- "log1.cmpassport.com.": {},
- "log2.cmpassport.com.": {},
"logger.moviead55.ru.": {},
"logging-service-prod.getepic.com.": {},
"logging.mp.lura.live.": {},
- "login.epm.cyberark.com.": {},
+ "login.cbc.ca.": {},
+ "login.steampowered.com.": {},
"login.teamviewer.com.": {},
- "login.ultipro.com.": {},
"loginradius.com.": {},
- "logrocket.io.": {},
- "logs-ingress.svc.vinted.com.": {},
+ "logs2.sportslocalmedia.com.": {},
+ "logu.hpplay.cn.": {},
"logus.xiaoyi.com.": {},
"logx.optimizely.com.": {},
- "loklok.tv.": {},
"london.remotepc.com.": {},
"london2.remotepc.com.": {},
"london3.remotepc.com.": {},
@@ -2479,7 +2453,6 @@ var FakeECSFQDNs = map[string]struct{}{
"london8.remotepc.com.": {},
"look.360.cn.": {},
"loopme.me.": {},
- "lp-03.chat.online.citi.com.": {},
"lptag-cdn.liveperson.net.": {},
"lsagentrelay.lansweeper.com.": {},
"lscreenc.com.": {},
@@ -2489,38 +2462,38 @@ var FakeECSFQDNs = map[string]struct{}{
"ltpnetwork-my.sharepoint.com.": {},
"luckyorange.com.": {},
"ludashi.com.": {},
- "lululemon-app.quantummetric.com.": {},
+ "lufthansa-app.quantummetric.com.": {},
"lunamedia.live.": {},
"luxembourg.remotepc.com.": {},
"lycraservice-pa-cam-prod.googleapis.com.": {},
"lyric.alarmnet.com.": {},
- "m.du4yh.com.": {},
+ "m.vidio.com.": {},
"m104216-ucdn.mp.lura.live.": {},
"m107833-mcdn.mp.lura.live.": {},
- "m5-zb.amap.com.": {},
+ "m109771-ecdn.mp.lura.live.": {},
+ "m3.twinredads.com.": {},
"macclog-as.rj.link.": {},
- "madisonschools-my.sharepoint.com.": {},
"madrid.remotepc.com.": {},
"maers.adrs.org.cn.": {},
"magichue.net.": {},
"maidenhead.remotepc.com.": {},
+ "mail.proton.me.": {},
"mail.superhuman.com.": {},
"mailinblue.com.": {},
+ "mailmissouri-my.sharepoint.com.": {},
+ "mailmissouri.sharepoint.com.": {},
+ "mailwsorg.zoho.com.": {},
+ "maintenanceconnection.com.": {},
"majorel365-my.sharepoint.com.": {},
"malware-filter.gitlab.io.": {},
- "mam.netease.com.": {},
- "manage-dogfood.microsoft.com.": {},
+ "manage-selfhost.microsoft.com.": {},
"manage.wix.com.": {},
- "manager.everbridge.net.": {},
- "manager.intelligentlocations.io.": {},
"manassas.remotepc.com.": {},
"manchester.remotepc.com.": {},
"manifest.prod.boltdns.net.": {},
- "marketing.beneplace.com.": {},
- "marketingassets.staples.com.": {},
+ "maps.infoplaza.nl.": {},
"marmot-cloud.com.": {},
"marseille.remotepc.com.": {},
- "maserc-my.sharepoint.com.": {},
"masonitecloud-my.sharepoint.com.": {},
"masonitecloud.sharepoint.com.": {},
"master1.teamviewer.com.": {},
@@ -2539,20 +2512,24 @@ var FakeECSFQDNs = map[string]struct{}{
"master7.teamviewer.com.": {},
"master8.teamviewer.com.": {},
"master9.teamviewer.com.": {},
- "masterashley-my.sharepoint.com.": {},
- "mathematica-my.sharepoint.com.": {},
+ "masterclass.com.": {},
+ "masuk.store.": {},
+ "matrix.netease.com.": {},
"mattressfirm-my.sharepoint.com.": {},
"max-l.mediav.com.": {},
+ "maxpreps.com.": {},
"mbboauth-1c.prd.cn.vwg-connect.cn.": {},
"mcallen.remotepc.com.": {},
"mcdermottinc-my.sharepoint.com.": {},
"mcdermottinc.sharepoint.com.": {},
"mcdermottwillemery-my.sharepoint.com.": {},
"mcdermottwillemery.sharepoint.com.": {},
- "mclarenhealth.sharepoint.com.": {},
+ "mcdn.podbean.com.": {},
+ "mcpss-my.sharepoint.com.": {},
+ "mcpss.sharepoint.com.": {},
"mdap.tngdigital.com.my.": {},
- "mdc-console.ifpserver.com.": {},
"mdp-upgrade-cn.heytapmobi.com.": {},
+ "mdscpxchg.com.": {},
"meari-oss-us.oss-us-west-1.aliyuncs.com.": {},
"meari-us.oss-us-west-1.aliyuncs.com.": {},
"medellin.remotepc.com.": {},
@@ -2562,10 +2539,8 @@ var FakeECSFQDNs = map[string]struct{}{
"media-atl3-1.cdn.whatsapp.net.": {},
"media-atl3-2.cdn.whatsapp.net.": {},
"media-ber1-1.cdn.whatsapp.net.": {},
- "media-bog1-1.cdn.whatsapp.net.": {},
"media-bog2-1.cdn.whatsapp.net.": {},
- "media-bom1-1.cdn.whatsapp.net.": {},
- "media-bom1-2.cdn.whatsapp.net.": {},
+ "media-bog2-2.cdn.whatsapp.net.": {},
"media-bos5-1.cdn.whatsapp.net.": {},
"media-bru2-1.cdn.whatsapp.net.": {},
"media-cdg4-1.cdn.whatsapp.net.": {},
@@ -2574,7 +2549,7 @@ var FakeECSFQDNs = map[string]struct{}{
"media-cgk1-1.cdn.whatsapp.net.": {},
"media-cgk1-2.cdn.whatsapp.net.": {},
"media-cgk1-3.cdn.whatsapp.net.": {},
- "media-den4-1.cdn.whatsapp.net.": {},
+ "media-den2-1.cdn.whatsapp.net.": {},
"media-dfw5-1.cdn.whatsapp.net.": {},
"media-dfw5-2.cdn.whatsapp.net.": {},
"media-dus1-1.cdn.whatsapp.net.": {},
@@ -2585,8 +2560,6 @@ var FakeECSFQDNs = map[string]struct{}{
"media-gig4-1.cdn.whatsapp.net.": {},
"media-gru1-1.cdn.whatsapp.net.": {},
"media-gru1-2.cdn.whatsapp.net.": {},
- "media-gru2-1.cdn.whatsapp.net.": {},
- "media-gru2-2.cdn.whatsapp.net.": {},
"media-gua1-1.cdn.whatsapp.net.": {},
"media-ham3-1.cdn.whatsapp.net.": {},
"media-hel3-1.cdn.whatsapp.net.": {},
@@ -2626,7 +2599,6 @@ var FakeECSFQDNs = map[string]struct{}{
"media-ord5-1.cdn.whatsapp.net.": {},
"media-ord5-2.cdn.whatsapp.net.": {},
"media-otp1-1.cdn.whatsapp.net.": {},
- "media-prg1-1.cdn.whatsapp.net.": {},
"media-qro1-1.cdn.whatsapp.net.": {},
"media-qro1-2.cdn.whatsapp.net.": {},
"media-sea1-1.cdn.whatsapp.net.": {},
@@ -2643,26 +2615,18 @@ var FakeECSFQDNs = map[string]struct{}{
"media-xsp1-2.cdn.whatsapp.net.": {},
"media-xsp1-3.cdn.whatsapp.net.": {},
"media-xsp2-1.cdn.whatsapp.net.": {},
- "media-xxb1-1.cdn.whatsapp.net.": {},
"media-yyz1-1.cdn.whatsapp.net.": {},
- "media.defense.gov.": {},
"media.graphassets.com.": {},
"media.ringcentral.com.": {},
- "media.rockstargames.com.": {},
- "media.springernature.com.": {},
"media.superhuman.com.": {},
"mediadata.xboxlive.com.": {},
"mediadelivery.net.": {},
- "mediation-services.pubapp.network.": {},
"mediav.com.": {},
- "mediavine-res.cloudinary.com.": {},
+ "medline0-my.sharepoint.com.": {},
"medline0.sharepoint.com.": {},
"melbourne.remotepc.com.": {},
"memphis.remotepc.com.": {},
- "mercadolivre.com.br.": {},
- "metric-api.newrelic.com.cdn.cloudflare.net.": {},
"metric.picodi.global.": {},
- "metrics-dre.data.dbankcloud.cn.": {},
"metrics-dre.dt.hihonorcloud.com.": {},
"metrics5.data.hicloud.com.": {},
"mexicocity.remotepc.com.": {},
@@ -2682,30 +2646,34 @@ var FakeECSFQDNs = map[string]struct{}{
"microsoft.sharepoint.com.": {},
"microvirt.com.": {},
"mid4.linkedin.com.": {},
+ "mida.so.": {},
"mightytext.co.": {},
"milan.remotepc.com.": {},
"milestoneinternet.com.cdn.cloudflare.net.": {},
"milwaukeetool-my.sharepoint.com.": {},
- "milwaukeetool.com.": {},
+ "milwaukeetool.sharepoint.com.": {},
"mimir.vivaldi.com.": {},
"min-api.cryptocompare.com.": {},
"mini.browser.360.cn.": {},
- "mirror.centos.iad1.serverforge.org.": {},
+ "mintkeyboard.com.": {},
"mirror.fcix.net.": {},
+ "mirror.lstn.net.": {},
"mirror.pit.teraswitch.com.": {},
+ "mirror.steadfastnet.com.": {},
"mirrors.rockylinux.org.": {},
"mitek-my.sharepoint.com.": {},
"mixi.media.": {},
"mm-mm.bing.net.trafficmanager.net.": {},
"mms.mckesson.com.": {},
"mn31.ultipro.com.": {},
+ "mn365-my.sharepoint.com.": {},
"mn365.sharepoint.com.": {},
- "moatpixel1.edgekey.net.": {},
+ "mobile-bank.cdn-tinkoff.ru.": {},
+ "mobile-collector.cell.nr-data.net.": {},
"mobile-collector.newrelic.com.cdn.cloudflare.net.": {},
+ "mobile-nlp.vivo.com.cn.": {},
"mobile.bereal.com.": {},
"mobile.shuzilm.cn.": {},
- "mobileapi.us.afterpay.com.": {},
- "mobilecontent.costco.com.": {},
"mobiledataplan-pa.googleapis.com.": {},
"mobilelog.upqzfile.com.": {},
"mobilemaps-pa-gz.googleapis.com.": {},
@@ -2715,13 +2683,11 @@ var FakeECSFQDNs = map[string]struct{}{
"monitor.fraudblocker.com.": {},
"monitoring.getelevar.com.": {},
"monitoring.worksighted.com.": {},
- "monkeytype.com.": {},
"monsterenergycorp-my.sharepoint.com.": {},
"monsterenergycorp.sharepoint.com.": {},
"montage-updates.displaynote.com.": {},
"monticello.remotepc.com.": {},
"montreal.remotepc.com.": {},
- "moodmedia.com.": {},
"motiondetection-us-1d.oss-us-west-1.aliyuncs.com.": {},
"motiondetection-us.oss-us-west-1.aliyuncs.com.": {},
"mouser.com.": {},
@@ -2731,94 +2697,90 @@ var FakeECSFQDNs = map[string]struct{}{
"mpsaz-my.sharepoint.com.": {},
"mpsaz.sharepoint.com.": {},
"mpush-api.aliyun.com.": {},
- "mq1n25.com.": {},
"mr.homedepot.com.": {},
+ "mrisoftware.com.": {},
"ms1app.pb.com.": {},
"msch.f.360.cn.": {},
"msdl.microsoft.com.": {},
"msf.3g.qq.com.": {},
"msg-img-hk.oss-cn-hongkong.aliyuncs.com.": {},
- "msmat1.itsupport247.net.": {},
"mstate-my.sharepoint.com.": {},
- "msync.tngdigital.com.my.": {},
+ "msync-im1-sgp-ga.easemob.com.": {},
"mtb-app.quantummetric.com.": {},
- "mtncloud-my.sharepoint.com.": {},
"mtrace.qq.com.": {},
"mu.ariba.com.": {},
"mumbai.remotepc.com.": {},
"munich.remotepc.com.": {},
"musical.ly.": {},
+ "musicmatch-ssl.xboxlive.com.": {},
"musicps.p2p.qq.com.": {},
"musicpunch.p2p.qq.com.": {},
"mvconf.f.360.cn.": {},
"mvconf.uk.cloud.360safe.com.": {},
"mvm.snapchat.com.": {},
+ "mx-vcode-od.vivoglobal.com.": {},
"mx.amx.rcs.telephony.goog.": {},
"mxc-ios-app-logs-default.ap-southeast-1.log.aliyuncs.com.": {},
"mxc-logs-data-processing.ap-southeast-1.log.aliyuncs.com.": {},
"mxp-pusa01.app.blackbaud.net.": {},
+ "mxptint.net.": {},
+ "my.dealersocket.com.": {},
"my.getadmiral.com.": {},
"my.jbi.global.": {},
"my.microsoftpersonalcontent.com.": {},
"my.nalpeiron.com.": {},
+ "my.pool.ntp.org.": {},
"myccmortgage-my.sharepoint.com.": {},
"mydigitalspace-my.sharepoint.com.": {},
+ "mydigitalspace.sharepoint.com.": {},
"mydrive.connect.aig.": {},
"myisolved.com.": {},
"mylonestar-my.sharepoint.com.": {},
+ "mylonestar.sharepoint.com.": {},
"myqcloud.com.": {},
- "mysat.collegeboard.org.": {},
+ "myvscloud.com.": {},
"myweblogon.com.": {},
"myworkdaycdn.com.cn.": {},
- "n-1-la4x.ad-m.net.": {},
"n.gameads.io.": {},
- "n.nativendo.de.": {},
- "n13.ultipro.com.": {},
"n21.ultipro.com.": {},
- "n21c.ultipro.com.": {},
"n33.ultipro.com.": {},
- "na.lb.martianinc.co.": {},
- "na137.epm.cyberark.com.": {},
"na2.chat.si.riotgames.com.": {},
+ "na2.docusign.net.": {},
"nagich.co.il.": {},
- "nagich.com.": {},
"najva.com.": {},
- "nam.veta.naver.com.": {},
"namequery.com.": {},
- "namiml.com.": {},
"naperville.remotepc.com.": {},
- "napps-2.com.": {},
"nashville.remotepc.com.": {},
- "nation.foxnews.com.": {},
"nationalheritageacademies-my.sharepoint.com.": {},
"nationalheritageacademies.sharepoint.com.": {},
+ "nationalmap.gov.": {},
+ "nationalreview.com.": {},
"nativecos.com.": {},
"nc-centos-mirror.iwebfusion.net.": {},
- "nc-pod4-smp-device.apple.com.": {},
"nc.com.": {},
- "nc.gifshow.com.": {},
"ncentral.centrexit.com.": {},
"ncjb-my.sharepoint.com.": {},
"nearme.com.cn.": {},
"nechicago.remotepc.com.": {},
"neonataltherapists.com.": {},
"netapp-my.sharepoint.com.": {},
+ "netapp.com.": {},
"netapp.sharepoint.com.": {},
"netease.com.": {},
"netease.im.": {},
"netpop.app.": {},
+ "netpresenter.com.": {},
"netsolssl.com.": {},
- "new-sentry-relay.xiaohongshu.com.": {},
"new.adblockplus.org.": {},
"newcontinuum.net.": {},
"newhanovercountyschools-my.sharepoint.com.": {},
+ "newoldstamp.com.": {},
"neworleans.remotepc.com.": {},
"news-abroad.vivo.com.": {},
"news-af.feednews.com.": {},
"news-client.apple.com.": {},
"news-events.apple.com.": {},
"news-nar-aud.apple.com.": {},
- "news-notification-events.apple.com.": {},
"news-sports-events.apple.com.": {},
"newsletter-edge.apple.com.": {},
"newsroom.bi.": {},
@@ -2831,29 +2793,32 @@ var FakeECSFQDNs = map[string]struct{}{
"nexx360.io.": {},
"nfm365-my.sharepoint.com.": {},
"nfm365.sharepoint.com.": {},
+ "ng1.angus.mrisoftware.com.": {},
"ngb.haplat.net.": {},
- "nhentai.net.": {},
+ "nh.iz.do.": {},
"nhhospitals-my.sharepoint.com.": {},
"nhshumanservices423-my.sharepoint.com.": {},
- "nhshumanservices423.sharepoint.com.": {},
"nice-team.net.": {},
"nie.netease.com.": {},
"nieuwsblad.be.": {},
"nike.com.multicdn.cloudinary.com.": {},
+ "ninjakiwi.com.": {},
"nio365-my.sharepoint.com.": {},
"nio365.sharepoint.com.": {},
"nitropay.com.": {},
+ "nkcsd-my.sharepoint.com.": {},
"nmhealth-my.sharepoint.com.": {},
"nmhealth.sharepoint.com.": {},
"noc.computerhelpnj.com.": {},
"node.setupad.com.": {},
"nordcurrent.com.": {},
"norma-external-collect.meizu.com.": {},
+ "nortic.ogtic.gob.do.": {},
"notes-analytics-events.apple.com.": {},
"notes.services.box.com.": {},
+ "novaicare.com.": {},
"novel.itoon.org.": {},
"nps.gov.": {},
- "nrc.nl.": {},
"ns-cloud-a1.googledomains.com.": {},
"ns-cloud-a2.googledomains.com.": {},
"ns-cloud-a3.googledomains.com.": {},
@@ -2881,24 +2846,24 @@ var FakeECSFQDNs = map[string]struct{}{
"ns1.101domain.com.": {},
"ns1.bluehost.com.": {},
"ns1.cloudflare.net.": {},
- "ns1.digitalocean.com.": {},
"ns1.g.aaplimg.com.": {},
"ns1.google.com.": {},
"ns1.identrust.com.": {},
- "ns1dd441ab0.airspace-cdn.cbsivideo.com.": {},
"ns2.cloudflare.net.": {},
"ns2.g.aaplimg.com.": {},
"ns2.google.com.": {},
+ "ns3.24shells.net.": {},
"ns3.cloudflare.net.": {},
"ns3.g.aaplimg.com.": {},
"ns3.google.com.": {},
- "ns35.worldnic.com.": {},
+ "ns4.24shells.net.": {},
"ns4.cloudflare.net.": {},
"ns4.g.aaplimg.com.": {},
"ns4.google.com.": {},
"ns5.cloudflare.net.": {},
"nsa.nalpeiron.com.": {},
"nsatc.net.": {},
+ "nsp-logserver-higeo-dre.obs.eu-west-101.myhuaweicloud.eu.": {},
"ntes53.netease.com.": {},
"ntp.aliyun.com.": {},
"ntp.arlo.com.": {},
@@ -2918,35 +2883,32 @@ var FakeECSFQDNs = map[string]struct{}{
"nzz.ch.": {},
"o15.officeredir.microsoft.com.": {},
"o300810.mp.lura.live.": {},
- "oasisit-my.sharepoint.com.": {},
- "oauth.ws.sonos.com.": {},
+ "oauth-analytics.ascendlearning.com.": {},
"obe0-my.sharepoint.com.": {},
"obihai.telephony.goog.": {},
"obs.ap-southeast-3.myhuaweicloud.com.": {},
+ "observability.bereal.com.": {},
"obsproject.com.": {},
"obus-dc2-cn.heytapmobi.com.": {},
"obus-dc20058-cn.heytapmobi.com.": {},
"obus-dc20123-cn.heytapmobi.com.": {},
- "obus-dc20157-cn.heytapmobi.com.": {},
"obus-dctech-cn.heytapmobi.com.": {},
"oc1.chat.si.riotgames.com.": {},
+ "oclc.org.": {},
"ocloud.oppomobile.com.": {},
+ "ocps-xfer.kronos.net.": {},
+ "ocpsfl-my.sharepoint.com.": {},
"ocsa.office.microsoft.com.": {},
"ocsp.identrust.com.": {},
- "ocsp.usertrust.com.": {},
"ocsredir.officeapps.live.com.": {},
- "odsun.log.mgtv.com.": {},
"odw7bf.dood.video.": {},
- "oec22-normal-alisg.tiktokv.com.": {},
"office.microsoft.com.": {},
"officepreviewredir.microsoft.com.": {},
+ "officeredir.microsoft.com.": {},
"offline.toc.shopeemobile.com.": {},
- "ohioix.mm.fcix.net.": {},
- "ok7-crtrs.oktaedge.okta.com.": {},
- "oklahomacity.remotepc.com.": {},
+ "ogma.bereal.team.": {},
"olatheschoolsorg-my.sharepoint.com.": {},
- "oldnavy-us.attn.tv.": {},
- "om.ordergroove.com.": {},
+ "olatheschoolsorg.sharepoint.com.": {},
"omats-my.sharepoint.com.": {},
"omats.sharepoint.com.": {},
"omiapp.me.": {},
@@ -2960,38 +2922,33 @@ var FakeECSFQDNs = map[string]struct{}{
"oneplus.net.": {},
"onethingpcs.com.": {},
"onezapp.com.": {},
- "online.citi.com.": {},
- "onlinepress24-7.com.": {},
+ "online.americanexpress.com.edgekey.net.": {},
"onlinewebfonts.com.": {},
- "onsite-api.listrak.com.cdn.cloudflare.net.": {},
"op.mykonf.com.": {},
"opamarketplace.com.": {},
"open.acgnxtracker.com.": {},
"open.acgtracker.com.": {},
"open.demonii.com.": {},
"open.oppomobile.com.": {},
- "open.pixel.api.whale3.io.": {},
"opencmp.net.": {},
+ "opencolo.mm.fcix.net.": {},
"opendsp.ru.": {},
"openrice.com.": {},
- "openvpn.net.": {},
"opex-service-cn.allawntech.com.": {},
"oppo.com.": {},
"oppomobile.com.": {},
- "optimize.ulinq.asia.": {},
- "optimize.urekamedia.com.": {},
"optimizely.com.": {},
+ "optioncare-my.sharepoint.com.": {},
"optioncare.sharepoint.com.": {},
- "or-mirror.iwebfusion.net.": {},
+ "orangeusdorg-my.sharepoint.com.": {},
"oregon.remotepc.com.": {},
- "orga.openrice.com.": {},
+ "origin.fe-image-cache-ttp.useast8.byteglb.com.": {},
"orlando.remotepc.com.": {},
"osaka.remotepc.com.": {},
- "oslab.shalltry.com.": {},
- "oslab.transsion-os.com.": {},
"oss-ap-southeast-1.aliyuncs.com.": {},
"oss-ap-southeast-5.aliyuncs.com.": {},
"oss-cn-beijing.aliyuncs.com.": {},
+ "oss-cn-hangzhou.aliyuncs.com.": {},
"oss-cn-hongkong.aliyuncs.com.": {},
"oss-cn-shanghai.aliyuncs.com.": {},
"oss-cn-shenzhen.aliyuncs.com.": {},
@@ -3001,39 +2958,44 @@ var FakeECSFQDNs = map[string]struct{}{
"oss-us-west-1.aliyuncs.com.": {},
"otc.t-systems.com.": {},
"otlp.nr-data.net.": {},
- "otto.my.onetrust.eu.": {},
- "ounion.api.mgtv.com.": {},
+ "ott.deepl.com.": {},
"oursummit-my.sharepoint.com.": {},
- "oval.id.": {},
+ "oursummit.sharepoint.com.": {},
+ "overlay.ubisoft.com.": {},
"overleaf.com.": {},
"overleafusercontent.com.": {},
+ "oversea-master-log.ap-southeast-1.log.aliyuncs.com.": {},
"overseasccl-a.haplat.net.": {},
"overseasccl-b.haplat.net.": {},
"overseasccl-c.haplat.net.": {},
"overseasccl-major-a.haplat.net.": {},
"overseasccl-major-b.haplat.net.": {},
"overseasccl-major-c.haplat.net.": {},
- "ovp.itv.com.": {},
+ "ovh.maxhost.io.": {},
"oxmudr-launches.appsflyersdk.com.": {},
"oxyinc-my.sharepoint.com.": {},
+ "p-wonderidea-rdr.us-east-1.log.aliyuncs.com.": {},
"p.adlooxtracking.com.": {},
"p.placed.com.": {},
"p.vivo.com.cn.": {},
+ "p0-pu-private-useast8.tiktokv.com.": {},
"p107609.cedexis-test.com.": {},
"p107610.cedexis-test.com.": {},
"p107611.cedexis-test.com.": {},
"p109477.cedexis-test.com.": {},
- "p17652.citrix-itm-test.com.": {},
- "p17652.citrix-itm-test.com.c.footprint.net.": {},
+ "p109522.cedexis-test.com.": {},
"p20304.cedexis-test.com.": {},
"p20305.cedexis-test.com.": {},
"p20306.cedexis-test.com.": {},
"p20307b.cedexis-test.com.": {},
"p20308b.cedexis-test.com.": {},
+ "p20309.cedexis-test.com.": {},
"p20310.cedexis-test.com.": {},
"p20311.cedexis-test.com.": {},
"p20314.cedexis-test.com.": {},
"p20315.cedexis-test.com.": {},
+ "p23-mailws.icloud.com.": {},
+ "p25-mailws.icloud.com.": {},
"p2cdn.com.": {},
"p2p-cal-2.anker-in.com.": {},
"p2p-cal.anker-in.com.": {},
@@ -3042,28 +3004,56 @@ var FakeECSFQDNs = map[string]struct{}{
"p2p-sgp.anker-in.com.": {},
"p2p-vir.anker-in.com.": {},
"p2p.qq.com.": {},
+ "p2p2.cloudbirds.cn.": {},
+ "p2p3.cloudbirds.cn.": {},
"p2pm-ali.reolink.com.": {},
+ "p2psy2.io.mi.com.": {},
+ "p2psy3.io.mi.com.": {},
"p30605.cedexis-test.com.": {},
"p33-mailws.icloud.com.": {},
"p33231.cedexis-test.com.": {},
+ "p33232.cedexis-test.com.": {},
+ "p33233.cedexis-test.com.": {},
"p33234.cedexis-test.com.": {},
+ "p33235.cedexis-test.com.": {},
"p33236.cedexis-test.com.": {},
+ "p33237.cedexis-test.com.": {},
+ "p33238.cedexis-test.com.": {},
+ "p33239.cedexis-test.com.": {},
+ "p33240.cedexis-test.com.": {},
+ "p33241.cedexis-test.com.": {},
"p33242.cedexis-test.com.": {},
+ "p33243.cedexis-test.com.": {},
+ "p33244.cedexis-test.com.": {},
"p33245.cedexis-test.com.": {},
+ "p33246.cedexis-test.com.": {},
+ "p33247.cedexis-test.com.": {},
+ "p33248.cedexis-test.com.": {},
"p33249.cedexis-test.com.": {},
+ "p33250.cedexis-test.com.": {},
"p33251.cedexis-test.com.": {},
+ "p33252.cedexis-test.com.": {},
+ "p33253.cedexis-test.com.": {},
+ "p33254.cedexis-test.com.": {},
+ "p33255.cedexis-test.com.": {},
"p33256.cedexis-test.com.": {},
+ "p33257.cedexis-test.com.": {},
+ "p33258.cedexis-test.com.": {},
"p33259.cedexis-test.com.": {},
+ "p33260.cedexis-test.com.": {},
"p34854.cedexis-test.com.": {},
+ "p34855.cedexis-test.com.": {},
"p34856.cedexis-test.com.": {},
+ "p34857.cedexis-test.com.": {},
"p34858.cedexis-test.com.": {},
- "p35399.cedexis-test.com.": {},
+ "p34859.cedexis-test.com.": {},
+ "p34860.cedexis-test.com.": {},
"p35883.cedexis-test.com.": {},
- "p39264.cedexis-test.com.": {},
+ "p38635.cedexis-test.com.": {},
"p39604.cedexis-test.com.": {},
"p3a-creative.brave.com.": {},
"p3a-json.brave.com.": {},
- "p40232.cedexis-test.com.": {},
+ "p40-mailws.icloud.com.": {},
"p40233.cedexis-test.com.": {},
"p40234.cedexis-test.com.": {},
"p40235.cedexis-test.com.": {},
@@ -3109,18 +3099,16 @@ var FakeECSFQDNs = map[string]struct{}{
"p43775.cedexis-test.com.": {},
"p43776.cedexis-test.com.": {},
"p43813.cedexis-test.com.": {},
+ "p45-mailws.icloud.com.": {},
"p48434.cedexis-test.com.": {},
"p48435.cedexis-test.com.": {},
"p48436.cedexis-test.com.": {},
"p48437.cedexis-test.com.": {},
"p4p.arenabg.com.": {},
"p52066.cedexis-test.com.": {},
- "p55-mailws.icloud.com.": {},
"p56745.cedexis-test.com.": {},
"p56746.cedexis-test.com.": {},
"p56747.cedexis-test.com.": {},
- "p58-mailws.icloud.com.": {},
- "p65-mailws.icloud.com.": {},
"p76593.cedexis-test.com.": {},
"p86069.cedexis-test.com.": {},
"p86070.cedexis-test.com.": {},
@@ -3162,32 +3150,32 @@ var FakeECSFQDNs = map[string]struct{}{
"p95727.cedexis-test.com.": {},
"p95728.cedexis-test.com.": {},
"paccarnet.sharepoint.com.": {},
+ "paducahix.mm.fcix.net.": {},
"pai.googlezip.net.": {},
"palermo.remotepc.com.": {},
"palm.tech.": {},
- "pandoraimavideo354813165505.s.moatpixel.com.": {},
"panorama.wixapps.net.": {},
- "papi.walkme.com.": {},
+ "panthers-my.sharepoint.com.": {},
"paris.remotepc.com.": {},
+ "parkhill1-my.sharepoint.com.": {},
"parkhill1.sharepoint.com.": {},
- "partiality.itunes.apple.com.": {},
- "partners.thepennyhoarder.com.cdn.cloudflare.net.": {},
+ "partition.enterprise.com.": {},
+ "partnerboost.com.": {},
"pasadena.remotepc.com.": {},
"passportalmsp.com.": {},
- "paulkitchendark.com.": {},
"pay.datatrans.com.": {},
- "pay.wps.cn.": {},
"paycorinc-my.sharepoint.com.": {},
"paylocity1-my.sharepoint.com.": {},
"paylocity1.sharepoint.com.": {},
- "payment.api.speechify.dev.": {},
- "pbc.vliplatform.com.": {},
+ "payment.api.speechify.com.": {},
"pbe1.chat.si.riotgames.com.": {},
+ "pbs.btloader.com.": {},
"pbsj.bricks-co.com.": {},
"pc-store.lenovomm.cn.": {},
"pcdn.brave.com.": {},
"pcs.baidu.com.": {},
"pd.cdnwidget.com.": {},
+ "pd.eu.a.pvp.net.": {},
"pdengagementapi.trafficmanager.net.": {},
"pdfforge.org.": {},
"pdrnetwork-my.sharepoint.com.": {},
@@ -3200,18 +3188,19 @@ var FakeECSFQDNs = map[string]struct{}{
"pepsico.sharepoint.com.": {},
"pepsico.zoom.us.": {},
"perf-eu1.hsforms.com.": {},
- "perimeter-ingress.attentivemobile.com.cdn.cloudflare.net.": {},
"permutive.arstechnica.com.": {},
"permutive.businessinsider.com.": {},
"permutive.com.": {},
"permutive.newyorker.com.": {},
"permutive.wired.com.": {},
+ "perr.brightvpn.com.": {},
"perrigo-my.sharepoint.com.": {},
+ "perrigo.sharepoint.com.": {},
"pf.intuit.com.": {},
"pfgsales-my.sharepoint.com.": {},
"pfgsales.sharepoint.com.": {},
- "pgsth.kargo.com.": {},
"ph.globe.rcs.telephony.goog.": {},
+ "pharos.studyquicks.com.": {},
"phoenix.remotepc.com.": {},
"phoenix2.remotepc.com.": {},
"phx02pap001.storage.live.com.": {},
@@ -3223,50 +3212,51 @@ var FakeECSFQDNs = map[string]struct{}{
"phx02pap007.storage.live.com.": {},
"pi2850.ci.managedwhitelisting.com.": {},
"piano.io.": {},
+ "pie-api.io.": {},
"pikabu.ru.": {},
- "ping-oci-med-us-1.mediaverse.ai.": {},
"ping.getadblock.com.": {},
"pingler.com.": {},
"pingmesh.bigo.sg.": {},
+ "pinimg.com.": {},
"piojm.tech.": {},
"pis.alicdn.com.": {},
"pittsburgh.remotepc.com.": {},
"pix.cdnwidget.com.": {},
"pixel-sync.trafficmanager.net.": {},
+ "pixel.adlooxtracking.com.": {},
"pixel.gliacloud.com.": {},
"pjcr-my.sharepoint.com.": {},
- "pk-live.cn.": {},
+ "pkgconnect-my.sharepoint.com.": {},
"pla-prod-scu-apim-01.azure-api.net.": {},
- "planconfig.openspeech.cn.": {},
- "platform.freedomadnetwork.com.": {},
- "player03.com.": {},
"playmatic.video.": {},
"playstream.media.": {},
"plrm.zone.": {},
- "pltw.org.": {},
+ "plrsrvcs.com.": {},
"pm.geniusmonkey.com.": {},
- "pngwing.com.": {},
"pns.alicdn.com.": {},
- "pods.officeapps.live.com.": {},
+ "pogothere.xyz.": {},
+ "poizon.com.": {},
"polarisind-my.sharepoint.com.": {},
"polarisind.sharepoint.com.": {},
+ "policy.www.tripadvisor.com.edge.tacdn.com.": {},
"polling.zoom.us.": {},
"polyfill.archive.org.": {},
"popt.in.": {},
- "portal.microsoftonline.com.": {},
+ "portal.mypearson.com.": {},
"portal.myweblogon.com.": {},
"portals.mobi.": {},
"portland.remotepc.com.": {},
"portlandoregongov-my.sharepoint.com.": {},
"posthog.com.": {},
- "postholdings-my.sharepoint.com.": {},
"pov.spectrum.net.": {},
+ "pow7.com.": {},
"powerpoint-collab.officeapps.live.com.": {},
+ "powerpushsell.site.": {},
"ppgames.net.": {},
- "pr-pod1-smp-device.apple.com.": {},
- "pr-pod2-smp-device.apple.com.": {},
+ "pr-pod3-smp-device.apple.com.": {},
"pr-pod5-smp-device.apple.com.": {},
"pragmaticplay.net.": {},
+ "prebid-am.casalemedia.com.": {},
"prebid-la.casalemedia.com.": {},
"prebid-ny.casalemedia.com.": {},
"prebid-sj.casalemedia.com.": {},
@@ -3275,16 +3265,13 @@ var FakeECSFQDNs = map[string]struct{}{
"prebidserver.pixfuture.com.": {},
"precisionmedicinegroup-my.sharepoint.com.": {},
"precisionmedicinegroup.sharepoint.com.": {},
- "prediction-api-gateway-7igs62jc.uc.gateway.dev.": {},
"premierhealth-my.sharepoint.com.": {},
+ "premierhealth.sharepoint.com.": {},
"premium.xvpn.io.": {},
- "preyproject.com.": {},
- "pringed.space.": {},
"printaudit.com.": {},
- "printfriendly.com.": {},
- "pro-blink-aks-tm.trafficmanager.net.": {},
"pro-swishapps-aks-tm.trafficmanager.net.": {},
"procore.com.": {},
+ "prod-catalog-autosuggest-api.dickssportinggoods.com.": {},
"prod-client-api.v.aaplimg.com.": {},
"prod-default.lb.logrocket.network.": {},
"prod-event-relay-api.v.aaplimg.com.": {},
@@ -3295,40 +3282,41 @@ var FakeECSFQDNs = map[string]struct{}{
"prod-event-relay-weather-api.v.aaplimg.com.": {},
"prod-newsletter-edge.v.aaplimg.com.": {},
"prod-rso.lol.qq.com.": {},
+ "prod-weather-widget-event-gateway.v.aaplimg.com.": {},
"prod.api.letsencrypt.org.": {},
"prod.uno.demonware.net.": {},
+ "prodimage.images-bn.com.": {},
"production-login-assets0.cdn.procore.com.": {},
+ "production-login-assets1.cdn.procore.com.": {},
"production-login-assets2.cdn.procore.com.": {},
+ "production-login-assets3.cdn.procore.com.": {},
"production.kabutoservices.com.": {},
- "progressive-app.quantummetric.com.": {},
"promega-my.sharepoint.com.": {},
"prosperitybankusa.sharepoint.com.": {},
"protonvpn.com.": {},
"provaltech.com.": {},
"proxy-safebrowsing.googleapis.com.": {},
"proxy.mob.maps.yandex.net.": {},
- "prwn.lenovomm.com.": {},
"ps.namequery.com.": {},
"psav-my.sharepoint.com.": {},
"psav.sharepoint.com.": {},
"pshud.365lpodds.com.": {},
"pths209-my.sharepoint.com.": {},
- "ptingless.4d.silverbulletcloud.com.": {},
"pttor-my.sharepoint.com.": {},
"pttplc-my.sharepoint.com.": {},
"pub.affilimateapis.com.": {},
- "pub.headerlift.com.": {},
+ "pub.network.": {},
"public.bn.files.1drv.com.": {},
"public.boxcloud.com.": {},
"public.dm.files.1drv.com.": {},
"publictracker.xyz.": {},
"publisher.liveperson.net.": {},
- "pubsub.checkvideo.net.": {},
- "pubtailer.com.": {},
"puffer.6.401402081.west-gcloud.codm.activision.com.": {},
+ "puhsd210-my.sharepoint.com.": {},
"puhsd210.sharepoint.com.": {},
"pull-cmaf-f77-tt03.fcdn.eu.tiktokcdn.com.": {},
- "pull-cmaf-f77-tt03.tiktokcdn.com.": {},
+ "pull-flv-l77-gcp01.eu.tiktokcdn.com.": {},
+ "pull-flv-l77-va01.tiktokcdn.com.": {},
"punch.p2p.qq.com.": {},
"pusd11net-my.sharepoint.com.": {},
"pusd11net.sharepoint.com.": {},
@@ -3339,9 +3327,9 @@ var FakeECSFQDNs = map[string]struct{}{
"pushmart.net.": {},
"pushnetwork.com.": {},
"pushtrs7.push.hicloud.com.": {},
+ "puswdsprmtprs.dealersocket.com.": {},
"puv.tt.browser.360.cn.": {},
"pwa.zoom.us.": {},
- "pwcgov-my.sharepoint.com.": {},
"px4.ads.linkedin.com.": {},
"pypestream.com.": {},
"qa.sockets.stackexchange.com.": {},
@@ -3356,26 +3344,27 @@ var FakeECSFQDNs = map[string]struct{}{
"qcloud.com.": {},
"qfp.intuit.com.": {},
"qikify.com.": {},
+ "qm.progressive.com.": {},
"qookkagames.com.": {},
"qorvo-my.sharepoint.com.": {},
"qorvo.sharepoint.com.": {},
"qpic.cn.": {},
"qq.com.cn.": {},
- "qsdn-web.qtlcname.com.": {},
+ "qsbr.cf2.quoracdn.net.cdn.cloudflare.net.": {},
"qualys.ca.": {},
"qualys.com.": {},
"qualys.eu.": {},
+ "quantamagazine.org.": {},
"quebeccity.remotepc.com.": {},
"questdiagnostics.sharepoint.com.": {},
- "quickcep.com.": {},
"quotemedia.com.": {},
- "quotientcrisp913871380293ftp.s.moatpixel.com.": {},
"qurl.f.360.cn.": {},
+ "qvc.com.": {},
"qwant.com.": {},
"qxwz.com.": {},
- "r.akulaku.net.": {},
"r.ingest-lr.com.": {},
"r.intake-lr.com.": {},
+ "r.logr-ingest.com.": {},
"r.logrocket.io.": {},
"r.lr-hv-in.com.": {},
"r.lr-in-prod.com.": {},
@@ -3385,253 +3374,305 @@ var FakeECSFQDNs = map[string]struct{}{
"r.lr-intake.com.": {},
"r.office.microsoft.com.": {},
"r.superhuman.com.": {},
- "r1---sn-a5msenek.c.2mdn.net.": {},
+ "r.turn.com.": {},
+ "r1---sn-a5meknzk.c.2mdn.net.": {},
+ "r1---sn-ab5l6nk6.c.2mdn.net.": {},
"r1---sn-ab5l6nkd.c.2mdn.net.": {},
"r1---sn-ab5l6nr6.c.2mdn.net.": {},
"r1---sn-ab5l6nrd.c.2mdn.net.": {},
"r1---sn-ab5l6nrk.c.2mdn.net.": {},
"r1---sn-ab5l6nrl.c.2mdn.net.": {},
- "r1---sn-ab5l6nrr.c.2mdn.net.": {},
"r1---sn-ab5l6nrs.c.2mdn.net.": {},
- "r1---sn-ab5l6nrz.c.2mdn.net.": {},
- "r1---sn-ab5sznld.c.2mdn.net.": {},
- "r1---sn-ab5sznly.c.2mdn.net.": {},
- "r1---sn-ab5sznz6.c.2mdn.net.": {},
+ "r1---sn-ab5sznlk.c.2mdn.net.": {},
"r1---sn-ab5sznzd.c.2mdn.net.": {},
"r1---sn-ab5sznzk.c.2mdn.net.": {},
+ "r1---sn-ab5sznzl.c.2mdn.net.": {},
"r1---sn-ab5sznzr.c.2mdn.net.": {},
"r1---sn-ab5sznzs.c.2mdn.net.": {},
- "r1---sn-ab5sznzy.c.2mdn.net.": {},
"r1---sn-ab5sznzz.c.2mdn.net.": {},
- "r1---sn-p5qddn76.c.2mdn.net.": {},
+ "r1---sn-p5qddn7d.c.2mdn.net.": {},
+ "r1---sn-p5qddn7k.c.2mdn.net.": {},
+ "r1---sn-p5qddn7z.c.2mdn.net.": {},
+ "r1---sn-p5qlsn7s.c.2mdn.net.": {},
"r1---sn-p5qs7nsk.c.2mdn.net.": {},
- "r1---sn-q4fl6nd6.c.2mdn.net.": {},
- "r1---sn-q4fl6nz6.c.2mdn.net.": {},
- "r1---sn-q4fzen7s.c.2mdn.net.": {},
+ "r1---sn-p5qs7nzk.c.2mdn.net.": {},
+ "r1---sn-q4fl6ndl.c.2mdn.net.": {},
+ "r1---sn-q4fl6nss.c.2mdn.net.": {},
+ "r1---sn-q4flrnl6.c.2mdn.net.": {},
+ "r1---sn-q4flrnlz.c.2mdn.net.": {},
+ "r1---sn-q4flrnsk.c.2mdn.net.": {},
+ "r1---sn-q4fzen7y.c.2mdn.net.": {},
"r1---sn-vgqskn67.c.2mdn.net.": {},
"r1---sn-vgqskn6d.c.2mdn.net.": {},
- "r1---sn-vgqsknls.c.2mdn.net.": {},
+ "r1---sn-vgqsknes.c.2mdn.net.": {},
+ "r1---sn-vgqsknez.c.2mdn.net.": {},
+ "r1---sn-vgqsknld.c.2mdn.net.": {},
+ "r1---sn-vgqsknse.c.2mdn.net.": {},
"r1---sn-vgqsknsk.c.2mdn.net.": {},
+ "r1---sn-vgqsknz6.c.2mdn.net.": {},
+ "r1---sn-vgqsknz7.c.2mdn.net.": {},
"r1---sn-vgqsknzd.c.2mdn.net.": {},
"r1---sn-vgqsknze.c.2mdn.net.": {},
- "r1---sn-vgqsknzk.c.2mdn.net.": {},
"r1---sn-vgqsknzr.c.2mdn.net.": {},
+ "r1---sn-vgqsrn66.c.2mdn.net.": {},
"r1---sn-vgqsrn67.c.2mdn.net.": {},
"r1---sn-vgqsrn6e.c.2mdn.net.": {},
"r1---sn-vgqsrn6l.c.2mdn.net.": {},
- "r1---sn-vgqsrnes.c.2mdn.net.": {},
+ "r1---sn-vgqsrn6z.c.2mdn.net.": {},
+ "r1---sn-vgqsrne6.c.2mdn.net.": {},
"r1---sn-vgqsrnld.c.2mdn.net.": {},
- "r1---sn-vgqsrnlz.c.2mdn.net.": {},
- "r1---sn-vgqsrns6.c.2mdn.net.": {},
- "r1---sn-vgqsrnsr.c.2mdn.net.": {},
+ "r1---sn-vgqsrnlk.c.2mdn.net.": {},
+ "r1---sn-vgqsrnsd.c.2mdn.net.": {},
"r1---sn-vgqsrnsy.c.2mdn.net.": {},
"r1---sn-vgqsrnz7.c.2mdn.net.": {},
- "r1---sn-vgqsrnzy.c.2mdn.net.": {},
- "r2---sn-a5mekndl.c.2mdn.net.": {},
- "r2---sn-a5mlrnl6.c.2mdn.net.": {},
- "r2---sn-ab5l6ndr.c.2mdn.net.": {},
+ "r1---sn-vgqsrnzk.c.2mdn.net.": {},
+ "r1---sn-vgqsrnzs.c.2mdn.net.": {},
+ "r1---sn-vgqsrnzz.c.2mdn.net.": {},
+ "r2---sn-a5mekn6l.c.2mdn.net.": {},
"r2---sn-ab5l6nk6.c.2mdn.net.": {},
"r2---sn-ab5l6nkd.c.2mdn.net.": {},
"r2---sn-ab5l6nr6.c.2mdn.net.": {},
"r2---sn-ab5l6nrd.c.2mdn.net.": {},
"r2---sn-ab5l6nrl.c.2mdn.net.": {},
- "r2---sn-ab5l6nrr.c.2mdn.net.": {},
- "r2---sn-ab5l6nrs.c.2mdn.net.": {},
"r2---sn-ab5l6nrz.c.2mdn.net.": {},
"r2---sn-ab5sznld.c.2mdn.net.": {},
- "r2---sn-ab5sznly.c.2mdn.net.": {},
"r2---sn-ab5sznz6.c.2mdn.net.": {},
- "r2---sn-ab5sznzd.c.2mdn.net.": {},
"r2---sn-ab5sznze.c.2mdn.net.": {},
"r2---sn-ab5sznzk.c.2mdn.net.": {},
"r2---sn-ab5sznzl.c.2mdn.net.": {},
"r2---sn-ab5sznzr.c.2mdn.net.": {},
- "r2---sn-ab5sznzs.c.2mdn.net.": {},
"r2---sn-ab5sznzy.c.2mdn.net.": {},
"r2---sn-ab5sznzz.c.2mdn.net.": {},
"r2---sn-p5qddn7k.c.2mdn.net.": {},
- "r2---sn-p5qlsn76.c.2mdn.net.": {},
+ "r2---sn-p5qlsn7s.c.2mdn.net.": {},
+ "r2---sn-p5qlsnrl.c.2mdn.net.": {},
"r2---sn-p5qlsnrr.c.2mdn.net.": {},
- "r2---sn-p5qlsny6.c.2mdn.net.": {},
- "r2---sn-p5qs7nzy.c.2mdn.net.": {},
- "r2---sn-q4fl6nsd.c.2mdn.net.": {},
- "r2---sn-q4flrnld.c.2mdn.net.": {},
+ "r2---sn-p5qs7nsr.c.2mdn.net.": {},
+ "r2---sn-q4fl6n66.c.2mdn.net.": {},
+ "r2---sn-q4flrn7r.c.2mdn.net.": {},
+ "r2---sn-q4flrney.c.2mdn.net.": {},
+ "r2---sn-q4flrnle.c.2mdn.net.": {},
"r2---sn-q4flrnsd.c.2mdn.net.": {},
+ "r2---sn-q4flrnsl.c.2mdn.net.": {},
+ "r2---sn-q4flrnss.c.2mdn.net.": {},
+ "r2---sn-q4fzen7y.c.2mdn.net.": {},
"r2---sn-q4fzene7.c.2mdn.net.": {},
- "r2---sn-q4fzenee.c.2mdn.net.": {},
"r2---sn-vgqskn66.c.2mdn.net.": {},
+ "r2---sn-vgqskn67.c.2mdn.net.": {},
"r2---sn-vgqskn6d.c.2mdn.net.": {},
- "r2---sn-vgqsknes.c.2mdn.net.": {},
+ "r2---sn-vgqsknld.c.2mdn.net.": {},
"r2---sn-vgqsknlk.c.2mdn.net.": {},
- "r2---sn-vgqsknz6.c.2mdn.net.": {},
- "r2---sn-vgqsknzd.c.2mdn.net.": {},
+ "r2---sn-vgqsknlr.c.2mdn.net.": {},
+ "r2---sn-vgqskns7.c.2mdn.net.": {},
+ "r2---sn-vgqsknz7.c.2mdn.net.": {},
+ "r2---sn-vgqsknzs.c.2mdn.net.": {},
"r2---sn-vgqsknzy.c.2mdn.net.": {},
"r2---sn-vgqsrn67.c.2mdn.net.": {},
- "r2---sn-vgqsrns6.c.2mdn.net.": {},
- "r2---sn-vgqsrnsy.c.2mdn.net.": {},
- "r2---sn-vgqsrnzd.c.2mdn.net.": {},
+ "r2---sn-vgqsrn6l.c.2mdn.net.": {},
+ "r2---sn-vgqsrnlz.c.2mdn.net.": {},
"r2---sn-vgqsrnzk.c.2mdn.net.": {},
- "r2---sn-vgqsrnzs.c.2mdn.net.": {},
- "r3---sn-ab5l6ndr.c.2mdn.net.": {},
+ "r2---sn-vgqsrnzr.c.2mdn.net.": {},
+ "r3---sn-a5m7lnld.c.2mdn.net.": {},
+ "r3---sn-a5meknds.c.2mdn.net.": {},
+ "r3---sn-a5mlrnls.c.2mdn.net.": {},
"r3---sn-ab5l6ndy.c.2mdn.net.": {},
"r3---sn-ab5l6nk6.c.2mdn.net.": {},
+ "r3---sn-ab5l6nkd.c.2mdn.net.": {},
"r3---sn-ab5l6nr6.c.2mdn.net.": {},
"r3---sn-ab5l6nrk.c.2mdn.net.": {},
"r3---sn-ab5l6nrl.c.2mdn.net.": {},
"r3---sn-ab5l6nrr.c.2mdn.net.": {},
"r3---sn-ab5l6nrs.c.2mdn.net.": {},
"r3---sn-ab5l6nrz.c.2mdn.net.": {},
+ "r3---sn-ab5sznld.c.2mdn.net.": {},
"r3---sn-ab5sznz6.c.2mdn.net.": {},
"r3---sn-ab5sznzd.c.2mdn.net.": {},
"r3---sn-ab5sznze.c.2mdn.net.": {},
"r3---sn-ab5sznzk.c.2mdn.net.": {},
"r3---sn-ab5sznzl.c.2mdn.net.": {},
- "r3---sn-ab5sznzr.c.2mdn.net.": {},
"r3---sn-ab5sznzs.c.2mdn.net.": {},
"r3---sn-ab5sznzy.c.2mdn.net.": {},
"r3---sn-ab5sznzz.c.2mdn.net.": {},
"r3---sn-p5qddn7d.c.2mdn.net.": {},
+ "r3---sn-p5qddn7k.c.2mdn.net.": {},
"r3---sn-p5qlsn6l.c.2mdn.net.": {},
+ "r3---sn-p5qlsn76.c.2mdn.net.": {},
+ "r3---sn-p5qlsn7s.c.2mdn.net.": {},
+ "r3---sn-p5qlsnrl.c.2mdn.net.": {},
+ "r3---sn-p5qlsny6.c.2mdn.net.": {},
"r3---sn-p5qs7nzr.c.2mdn.net.": {},
+ "r3---sn-p5qs7nzy.c.2mdn.net.": {},
+ "r3---sn-q4fl6n6z.c.2mdn.net.": {},
+ "r3---sn-q4fl6ndl.c.2mdn.net.": {},
+ "r3---sn-q4fl6ndz.c.2mdn.net.": {},
"r3---sn-q4fl6ns6.c.2mdn.net.": {},
- "r3---sn-q4fl6nzy.c.2mdn.net.": {},
- "r3---sn-q4flrnes.c.2mdn.net.": {},
- "r3---sn-q4flrnlz.c.2mdn.net.": {},
+ "r3---sn-q4flrnle.c.2mdn.net.": {},
"r3---sn-q4fzen7l.c.2mdn.net.": {},
- "r3---sn-vgqskn66.c.2mdn.net.": {},
- "r3---sn-vgqskn67.c.2mdn.net.": {},
- "r3---sn-vgqskn6d.c.2mdn.net.": {},
- "r3---sn-vgqskn6s.c.2mdn.net.": {},
+ "r3---sn-q4fzen7y.c.2mdn.net.": {},
+ "r3---sn-q4fzene7.c.2mdn.net.": {},
"r3---sn-vgqskn6z.c.2mdn.net.": {},
- "r3---sn-vgqsknes.c.2mdn.net.": {},
- "r3---sn-vgqsknsk.c.2mdn.net.": {},
- "r3---sn-vgqsknz6.c.2mdn.net.": {},
+ "r3---sn-vgqsknez.c.2mdn.net.": {},
+ "r3---sn-vgqsknld.c.2mdn.net.": {},
+ "r3---sn-vgqsknlk.c.2mdn.net.": {},
+ "r3---sn-vgqsknly.c.2mdn.net.": {},
+ "r3---sn-vgqsknse.c.2mdn.net.": {},
+ "r3---sn-vgqsknz7.c.2mdn.net.": {},
+ "r3---sn-vgqsknzd.c.2mdn.net.": {},
"r3---sn-vgqsknzl.c.2mdn.net.": {},
"r3---sn-vgqsknzy.c.2mdn.net.": {},
- "r3---sn-vgqsrne6.c.2mdn.net.": {},
- "r3---sn-vgqsrnek.c.2mdn.net.": {},
- "r3---sn-vgqsrnld.c.2mdn.net.": {},
- "r3---sn-vgqsrnll.c.2mdn.net.": {},
- "r3---sn-vgqsrns6.c.2mdn.net.": {},
- "r3---sn-vgqsrnz7.c.2mdn.net.": {},
+ "r3---sn-vgqsrn67.c.2mdn.net.": {},
+ "r3---sn-vgqsrn6z.c.2mdn.net.": {},
+ "r3---sn-vgqsrned.c.2mdn.net.": {},
+ "r3---sn-vgqsrnsy.c.2mdn.net.": {},
"r3---sn-vgqsrnzd.c.2mdn.net.": {},
- "r3---sn-vgqsrnzr.c.2mdn.net.": {},
+ "r3---sn-vgqsrnzk.c.2mdn.net.": {},
+ "r3---sn-vgqsrnzs.c.2mdn.net.": {},
"r3---sn-vgqsrnzz.c.2mdn.net.": {},
+ "r4---sn-a5mekn6s.c.2mdn.net.": {},
+ "r4---sn-a5mlrnlz.c.2mdn.net.": {},
+ "r4---sn-ab5l6ndr.c.2mdn.net.": {},
"r4---sn-ab5l6nk6.c.2mdn.net.": {},
"r4---sn-ab5l6nkd.c.2mdn.net.": {},
"r4---sn-ab5l6nr6.c.2mdn.net.": {},
+ "r4---sn-ab5l6nrd.c.2mdn.net.": {},
"r4---sn-ab5l6nrk.c.2mdn.net.": {},
"r4---sn-ab5l6nrl.c.2mdn.net.": {},
"r4---sn-ab5l6nrr.c.2mdn.net.": {},
"r4---sn-ab5l6nrs.c.2mdn.net.": {},
"r4---sn-ab5l6nrz.c.2mdn.net.": {},
- "r4---sn-ab5sznld.c.2mdn.net.": {},
- "r4---sn-ab5sznly.c.2mdn.net.": {},
"r4---sn-ab5sznz6.c.2mdn.net.": {},
"r4---sn-ab5sznzd.c.2mdn.net.": {},
"r4---sn-ab5sznze.c.2mdn.net.": {},
- "r4---sn-ab5sznzk.c.2mdn.net.": {},
+ "r4---sn-ab5sznzl.c.2mdn.net.": {},
"r4---sn-ab5sznzr.c.2mdn.net.": {},
"r4---sn-ab5sznzs.c.2mdn.net.": {},
"r4---sn-ab5sznzy.c.2mdn.net.": {},
- "r4---sn-ab5sznzz.c.2mdn.net.": {},
- "r4---sn-p5qlsn7s.c.2mdn.net.": {},
- "r4---sn-p5qlsnrr.c.2mdn.net.": {},
- "r4---sn-p5qs7n6d.c.2mdn.net.": {},
- "r4---sn-p5qs7nzr.c.2mdn.net.": {},
- "r4---sn-q4fl6n6s.c.2mdn.net.": {},
+ "r4---sn-p5qddn7k.c.2mdn.net.": {},
+ "r4---sn-p5qlsn76.c.2mdn.net.": {},
+ "r4---sn-p5qlsn7l.c.2mdn.net.": {},
+ "r4---sn-p5qlsnd6.c.2mdn.net.": {},
+ "r4---sn-p5qlsnrl.c.2mdn.net.": {},
+ "r4---sn-p5qlsny6.c.2mdn.net.": {},
+ "r4---sn-p5qs7nsr.c.2mdn.net.": {},
+ "r4---sn-q4fl6n6z.c.2mdn.net.": {},
+ "r4---sn-q4fl6ndl.c.2mdn.net.": {},
"r4---sn-q4fl6nds.c.2mdn.net.": {},
- "r4---sn-q4flrnld.c.2mdn.net.": {},
- "r4---sn-q4flrnlz.c.2mdn.net.": {},
- "r4---sn-q4fzen7l.c.2mdn.net.": {},
+ "r4---sn-q4fl6nsd.c.2mdn.net.": {},
+ "r4---sn-q4fl6nsr.c.2mdn.net.": {},
+ "r4---sn-q4fl6nz6.c.2mdn.net.": {},
+ "r4---sn-q4flrnel.c.2mdn.net.": {},
+ "r4---sn-q4flrney.c.2mdn.net.": {},
"r4---sn-q4fzen7y.c.2mdn.net.": {},
- "r4---sn-vgqskn6d.c.2mdn.net.": {},
- "r4---sn-vgqsknek.c.2mdn.net.": {},
+ "r4---sn-vgqskn66.c.2mdn.net.": {},
+ "r4---sn-vgqskn6s.c.2mdn.net.": {},
+ "r4---sn-vgqskn6z.c.2mdn.net.": {},
"r4---sn-vgqsknld.c.2mdn.net.": {},
- "r4---sn-vgqsknlk.c.2mdn.net.": {},
"r4---sn-vgqsknlr.c.2mdn.net.": {},
- "r4---sn-vgqsknzd.c.2mdn.net.": {},
- "r4---sn-vgqsrn66.c.2mdn.net.": {},
+ "r4---sn-vgqsknls.c.2mdn.net.": {},
+ "r4---sn-vgqsknsk.c.2mdn.net.": {},
+ "r4---sn-vgqsknze.c.2mdn.net.": {},
+ "r4---sn-vgqsknzk.c.2mdn.net.": {},
+ "r4---sn-vgqsrn67.c.2mdn.net.": {},
"r4---sn-vgqsrn6e.c.2mdn.net.": {},
- "r4---sn-vgqsrn6l.c.2mdn.net.": {},
- "r4---sn-vgqsrnsr.c.2mdn.net.": {},
- "r4---sn-vgqsrnzk.c.2mdn.net.": {},
+ "r4---sn-vgqsrn6z.c.2mdn.net.": {},
+ "r4---sn-vgqsrned.c.2mdn.net.": {},
+ "r4---sn-vgqsrnl6.c.2mdn.net.": {},
+ "r4---sn-vgqsrnld.c.2mdn.net.": {},
+ "r4---sn-vgqsrnlk.c.2mdn.net.": {},
+ "r4---sn-vgqsrnlz.c.2mdn.net.": {},
+ "r4---sn-vgqsrns6.c.2mdn.net.": {},
+ "r4---sn-vgqsrnsy.c.2mdn.net.": {},
+ "r4---sn-vgqsrnz6.c.2mdn.net.": {},
+ "r4---sn-vgqsrnzd.c.2mdn.net.": {},
"r4---sn-vgqsrnzs.c.2mdn.net.": {},
- "r4---sn-vgqsrnzz.c.2mdn.net.": {},
+ "r5---sn-a5meknds.c.2mdn.net.": {},
+ "r5---sn-ab5l6ndr.c.2mdn.net.": {},
"r5---sn-ab5l6nk6.c.2mdn.net.": {},
"r5---sn-ab5l6nkd.c.2mdn.net.": {},
"r5---sn-ab5l6nr6.c.2mdn.net.": {},
"r5---sn-ab5l6nrd.c.2mdn.net.": {},
"r5---sn-ab5l6nrk.c.2mdn.net.": {},
"r5---sn-ab5l6nrl.c.2mdn.net.": {},
- "r5---sn-ab5l6nrr.c.2mdn.net.": {},
"r5---sn-ab5l6nrs.c.2mdn.net.": {},
+ "r5---sn-ab5l6nrz.c.2mdn.net.": {},
"r5---sn-ab5sznld.c.2mdn.net.": {},
+ "r5---sn-ab5sznlk.c.2mdn.net.": {},
+ "r5---sn-ab5sznz6.c.2mdn.net.": {},
"r5---sn-ab5sznzd.c.2mdn.net.": {},
- "r5---sn-ab5sznze.c.2mdn.net.": {},
- "r5---sn-ab5sznzk.c.2mdn.net.": {},
"r5---sn-ab5sznzl.c.2mdn.net.": {},
"r5---sn-ab5sznzr.c.2mdn.net.": {},
"r5---sn-ab5sznzs.c.2mdn.net.": {},
+ "r5---sn-ab5sznzy.c.2mdn.net.": {},
"r5---sn-ab5sznzz.c.2mdn.net.": {},
- "r5---sn-nx57ynse.c.2mdn.net.": {},
- "r5---sn-nx5s7nel.c.2mdn.net.": {},
+ "r5---sn-hp57ynl6.c.2mdn.net.": {},
+ "r5---sn-p5qddn7d.c.2mdn.net.": {},
"r5---sn-p5qddn7z.c.2mdn.net.": {},
- "r5---sn-p5qlsndz.c.2mdn.net.": {},
- "r5---sn-p5qs7nsr.c.2mdn.net.": {},
+ "r5---sn-p5qlsn6l.c.2mdn.net.": {},
+ "r5---sn-p5qlsn76.c.2mdn.net.": {},
+ "r5---sn-p5qlsn7s.c.2mdn.net.": {},
+ "r5---sn-p5qlsnrr.c.2mdn.net.": {},
+ "r5---sn-p5qs7n6d.c.2mdn.net.": {},
+ "r5---sn-p5qs7nzk.c.2mdn.net.": {},
+ "r5---sn-p5qs7nzr.c.2mdn.net.": {},
+ "r5---sn-p5qs7nzy.c.2mdn.net.": {},
+ "r5---sn-q4fl6ndl.c.2mdn.net.": {},
"r5---sn-q4fl6nsr.c.2mdn.net.": {},
- "r5---sn-q4fl6nz7.c.2mdn.net.": {},
- "r5---sn-q4flrnld.c.2mdn.net.": {},
- "r5---sn-q4flrnss.c.2mdn.net.": {},
- "r5---sn-q4fzene7.c.2mdn.net.": {},
- "r5---sn-vgqskn66.c.2mdn.net.": {},
+ "r5---sn-q4flrnsd.c.2mdn.net.": {},
+ "r5---sn-q4flrnsl.c.2mdn.net.": {},
"r5---sn-vgqskn67.c.2mdn.net.": {},
"r5---sn-vgqskn6d.c.2mdn.net.": {},
- "r5---sn-vgqskn6z.c.2mdn.net.": {},
- "r5---sn-vgqsknll.c.2mdn.net.": {},
+ "r5---sn-vgqsknes.c.2mdn.net.": {},
+ "r5---sn-vgqsknlk.c.2mdn.net.": {},
+ "r5---sn-vgqsknlr.c.2mdn.net.": {},
+ "r5---sn-vgqsknls.c.2mdn.net.": {},
"r5---sn-vgqsknly.c.2mdn.net.": {},
- "r5---sn-vgqskns7.c.2mdn.net.": {},
"r5---sn-vgqsknse.c.2mdn.net.": {},
"r5---sn-vgqsknsk.c.2mdn.net.": {},
- "r5---sn-vgqsknz6.c.2mdn.net.": {},
- "r5---sn-vgqsknzd.c.2mdn.net.": {},
+ "r5---sn-vgqsknz7.c.2mdn.net.": {},
"r5---sn-vgqsknzl.c.2mdn.net.": {},
+ "r5---sn-vgqsknzr.c.2mdn.net.": {},
"r5---sn-vgqsknzs.c.2mdn.net.": {},
+ "r5---sn-vgqsknzz.c.2mdn.net.": {},
"r5---sn-vgqsrn66.c.2mdn.net.": {},
- "r5---sn-vgqsrn67.c.2mdn.net.": {},
+ "r5---sn-vgqsrn6e.c.2mdn.net.": {},
"r5---sn-vgqsrn6l.c.2mdn.net.": {},
- "r5---sn-vgqsrnes.c.2mdn.net.": {},
+ "r5---sn-vgqsrnez.c.2mdn.net.": {},
+ "r5---sn-vgqsrnl6.c.2mdn.net.": {},
"r5---sn-vgqsrnld.c.2mdn.net.": {},
+ "r5---sn-vgqsrnlk.c.2mdn.net.": {},
"r5---sn-vgqsrnlz.c.2mdn.net.": {},
+ "r5---sn-vgqsrnsy.c.2mdn.net.": {},
+ "r5---sn-vgqsrnz6.c.2mdn.net.": {},
+ "r5---sn-vgqsrnzd.c.2mdn.net.": {},
+ "r5---sn-vgqsrnzk.c.2mdn.net.": {},
+ "r5---sn-vgqsrnzr.c.2mdn.net.": {},
+ "r5---sn-vgqsrnzs.c.2mdn.net.": {},
"raccorp-my.sharepoint.com.": {},
+ "raccorp.sharepoint.com.": {},
"radar.cedexis.com.": {},
"raleigh.remotepc.com.": {},
"randomhouse.app.box.com.": {},
"raspbian.raspberrypi.org.": {},
"rba-screen.healthsafe-id.com.": {},
"rba.onehealthcareid.com.": {},
- "rbm-us.storage.googleapis.com.": {},
+ "rbmeuulvihtwm2eltjhwimi2.httpschecker.net.": {},
"rcs-acs-mcc510.jibe.google.com.": {},
"rcs-acs-tmobile-us.jibe.google.com.": {},
"rcs-copper-us.googleapis.com.": {},
"rcs-user-content-us.storage.googleapis.com.": {},
"rcs.telephony.goog.": {},
- "rctiplus.id.": {},
"rd.com.": {},
"realtime.luckyorange.com.": {},
"realtime.services.box.net.": {},
- "realtime2ws.nitrotype.com.": {},
"recharge-prod-apim.azure-api.net.": {},
"recombee.com.": {},
- "recorder.sessionstack.com.": {},
"recruiting.ultipro.com.": {},
"recruiting2.ultipro.com.": {},
+ "redcoolmedia.net.": {},
"reedelsevier-my.sharepoint.com.": {},
"reedelsevier.sharepoint.com.": {},
"referconfigexternal.americanexpress.com.": {},
- "referee.xiaohongshu.com.": {},
"reflector.makerbot.com.": {},
- "regional.azure-api.net.": {},
"registration.prap01.cmdagent.trafficmanager.net.": {},
"registration.prau01.cmdagent.trafficmanager.net.": {},
"registration.preu01.cmdagent.trafficmanager.net.": {},
@@ -3640,71 +3681,75 @@ var FakeECSFQDNs = map[string]struct{}{
"regn.sharepoint.com.": {},
"reichelcormier.bid.": {},
"rejuvenation.com.": {},
- "relay.shhnowisnottheti.me.": {},
"remote.control4.com.": {},
"remote.melonhead.me.": {},
+ "render.geozo.com.": {},
"renklitoplar.com.": {},
+ "replit.dev.": {},
"repo.zabbix.com.": {},
"republicservices-my.sharepoint.com.": {},
"republicservices.sharepoint.com.": {},
"request-global.czilladx.com.": {},
+ "resc.cloudinary.com.cdn.cloudflare.net.": {},
"resideo.com.": {},
"resource.digitalinsight.com.": {},
+ "restproxy-analytics.ascendlearning.com.": {},
"restrict.youtube.com.": {},
"restrictmoderate.youtube.com.": {},
+ "retail.rpay.roku.com.": {},
"retailrocket.net.": {},
"retailstarbucks1com-my.sharepoint.com.": {},
"retailstarbucks1com.sharepoint.com.": {},
- "retcode-sg-lazada.arms.aliyuncs.com.": {},
"retcode-us-west-1.arms.aliyuncs.com.": {},
"rethinkad.com.": {},
"retinavue.net.": {},
"reverso.net.": {},
- "revive-adserver.net.": {},
"rhmail-my.sharepoint.com.": {},
"rhmail.sharepoint.com.": {},
"ri9864.ci.managedwhitelisting.com.": {},
- "rich-content.thescore.com.": {},
"richrelevance.com.": {},
- "ridge.com.": {},
+ "ridgewireless.mm.fcix.net.": {},
+ "rivergame.net.": {},
"rivhs-my.sharepoint.com.": {},
+ "rl.progressive.com.": {},
"rl.quantummetric.com.": {},
- "rlm.haokan.mobi.": {},
"rmm.acctek.com.": {},
"rmm.aunalytics.com.": {},
- "rms-dra.platform.dbankcloud.cn.": {},
- "rms-dre.platform.dbankcloud.cn.": {},
+ "rms-dra.platform.dbankcloud.com.": {},
"rn-resource-app.xiaohongshu.com.": {},
"roberthalf-my.sharepoint.com.": {},
- "roblox-c5.cachefly.net.": {},
+ "roberthalf.sharepoint.com.": {},
"roborock.com.": {},
"rocketsutoledo-my.sharepoint.com.": {},
+ "rockhillssch.aristotleinsight.com.": {},
"rockwellautomation-my.sharepoint.com.": {},
"rockwellautomation.sharepoint.com.": {},
"rockylinux.org.": {},
"rogueone.aristotleinsight.com.": {},
- "rollbar.com.": {},
+ "roieu.xyz.": {},
"romsp-unifyconfig.vivo.com.cn.": {},
"roninchain.com.": {},
"rottentomatoes-app.quantummetric.com.": {},
"router.teamviewer.com.": {},
"roxy.azurefd.net.": {},
+ "rpiexchange-my.sharepoint.com.": {},
"rpt.cedexis.com.": {},
"rq.wh.cmcm.com.": {},
"rr1---sn-02o-ao3e.googlevideo.com.": {},
"rr1---sn-0nnpbo5a-bggl.googlevideo.com.": {},
"rr1---sn-0op8v4h5pox-cbgl.googlevideo.com.": {},
- "rr1---sn-2aqu-hoaly.googlevideo.com.": {},
"rr1---sn-2imern76.googlevideo.com.": {},
- "rr1---sn-2imern76.gvt1.com.": {},
"rr1---sn-2imern7d.googlevideo.com.": {},
- "rr1---sn-2imern7d.gvt1.com.": {},
"rr1---sn-2imeyn7k.googlevideo.com.": {},
- "rr1---sn-2imeyn7k.gvt1.com.": {},
"rr1---sn-2napbiu-p5ie.googlevideo.com.": {},
+ "rr1---sn-2napbiu-p5ie.gvt1.com.": {},
+ "rr1---sn-2pmxapm0n-gpje.googlevideo.com.": {},
+ "rr1---sn-2pmxapm0n-gpjl.googlevideo.com.": {},
+ "rr1---sn-2puupm-2pue.googlevideo.com.": {},
"rr1---sn-2vgu0b5auxaxjvh-apnd.googlevideo.com.": {},
"rr1---sn-2vgu0b5auxaxjvh-v2vd.googlevideo.com.": {},
"rr1---sn-2vgu0b5auxaxjvh-v2ve.googlevideo.com.": {},
+ "rr1---sn-2vgu0b5auxaxjvh-v2vk.googlevideo.com.": {},
"rr1---sn-2vgu0b5auxaxjvh-v2vl.googlevideo.com.": {},
"rr1---sn-2vgu0b5auxaxjvh-v2vz.googlevideo.com.": {},
"rr1---sn-30a7rne6.googlevideo.com.": {},
@@ -3715,13 +3760,12 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-30a7yner.googlevideo.com.": {},
"rr1---sn-30a7yney.googlevideo.com.": {},
"rr1---sn-30a7ynl7.googlevideo.com.": {},
+ "rr1---sn-3jpm-hjpe.googlevideo.com.": {},
+ "rr1---sn-3jpm-hjpe.gvt1.com.": {},
"rr1---sn-3n4pcxg-pjul.googlevideo.com.": {},
- "rr1---sn-42u-nboze.googlevideo.com.": {},
- "rr1---sn-42u-nbozl.googlevideo.com.": {},
- "rr1---sn-42u-nbozz.googlevideo.com.": {},
+ "rr1---sn-42a4pcxgoxu-hp5e.googlevideo.com.": {},
"rr1---sn-4g5e6ns6.googlevideo.com.": {},
"rr1---sn-4g5e6ns7.googlevideo.com.": {},
- "rr1---sn-4g5e6nsd.googlevideo.com.": {},
"rr1---sn-4g5e6nsk.googlevideo.com.": {},
"rr1---sn-4g5e6nsr.googlevideo.com.": {},
"rr1---sn-4g5e6nss.googlevideo.com.": {},
@@ -3753,8 +3797,8 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-4g5ednse.googlevideo.com.": {},
"rr1---sn-4g5ednsk.googlevideo.com.": {},
"rr1---sn-4g5ednsl.googlevideo.com.": {},
+ "rr1---sn-4g5ednsr.googlevideo.com.": {},
"rr1---sn-4g5ednss.googlevideo.com.": {},
- "rr1---sn-4g5ednsy.googlevideo.com.": {},
"rr1---sn-4g5ednsz.googlevideo.com.": {},
"rr1---sn-4g5ednz7.googlevideo.com.": {},
"rr1---sn-4g5lzne6.googlevideo.com.": {},
@@ -3769,8 +3813,10 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-4g5lznls.googlevideo.com.": {},
"rr1---sn-4g5lznlz.googlevideo.com.": {},
"rr1---sn-4jjo-apnl.googlevideo.com.": {},
- "rr1---sn-4pgnuapbiu-5acs.googlevideo.com.": {},
"rr1---sn-4pgnuapbiu-hiue.googlevideo.com.": {},
+ "rr1---sn-4pgnuapbiu-hiul.googlevideo.com.": {},
+ "rr1---sn-5gxo-in8l.googlevideo.com.": {},
+ "rr1---sn-5gxo-in8s.googlevideo.com.": {},
"rr1---sn-5hne6n6e.googlevideo.com.": {},
"rr1---sn-5hne6n6l.googlevideo.com.": {},
"rr1---sn-5hne6ns6.googlevideo.com.": {},
@@ -3786,6 +3832,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-5hne6nzy.googlevideo.com.": {},
"rr1---sn-5hnednss.googlevideo.com.": {},
"rr1---sn-5hnednsz.googlevideo.com.": {},
+ "rr1---sn-5hnednsz.gvt1.com.": {},
"rr1---sn-5hnekn76.googlevideo.com.": {},
"rr1---sn-5hnekn7d.googlevideo.com.": {},
"rr1---sn-5hnekn7k.googlevideo.com.": {},
@@ -3800,6 +3847,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-5uaezndd.googlevideo.com.": {},
"rr1---sn-5uaezne6.googlevideo.com.": {},
"rr1---sn-5uaezned.googlevideo.com.": {},
+ "rr1---sn-5uaeznes.googlevideo.com.": {},
"rr1---sn-5uaeznez.googlevideo.com.": {},
"rr1---sn-5uaeznl6.googlevideo.com.": {},
"rr1---sn-5uaeznld.googlevideo.com.": {},
@@ -3816,11 +3864,11 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-5uaeznyz.googlevideo.com.": {},
"rr1---sn-5uaeznze.googlevideo.com.": {},
"rr1---sn-5ualdnle.googlevideo.com.": {},
+ "rr1---sn-5ualdnll.googlevideo.com.": {},
"rr1---sn-5ualdnlr.googlevideo.com.": {},
"rr1---sn-5ualdnls.googlevideo.com.": {},
"rr1---sn-5ualdns6.googlevideo.com.": {},
"rr1---sn-5ualdns7.googlevideo.com.": {},
- "rr1---sn-5ualdnsd.googlevideo.com.": {},
"rr1---sn-5ualdnse.googlevideo.com.": {},
"rr1---sn-5ualdnsk.googlevideo.com.": {},
"rr1---sn-5ualdnsl.googlevideo.com.": {},
@@ -3830,10 +3878,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-5ualdnsz.googlevideo.com.": {},
"rr1---sn-5ualdnz7.googlevideo.com.": {},
"rr1---sn-5ualdnze.googlevideo.com.": {},
- "rr1---sn-8qj-i5o6k.googlevideo.com.": {},
- "rr1---sn-8qj-i5okl.googlevideo.com.": {},
- "rr1---sn-8qj-i5ozd.googlevideo.com.": {},
- "rr1---sn-8qj-i5ozr.googlevideo.com.": {},
"rr1---sn-8qj-nbo66.googlevideo.com.": {},
"rr1---sn-8qj-nbo6y.googlevideo.com.": {},
"rr1---sn-8xgp1vo-2iae.googlevideo.com.": {},
@@ -3846,12 +3890,11 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-8xgp1vo-ab5l.googlevideo.com.": {},
"rr1---sn-8xgp1vo-ab5s.googlevideo.com.": {},
"rr1---sn-8xgp1vo-ab5z.googlevideo.com.": {},
- "rr1---sn-8xgp1vo-nh4e.googlevideo.com.": {},
+ "rr1---sn-8xgp1vo-hjpl.googlevideo.com.": {},
"rr1---sn-8xgp1vo-p5ie.googlevideo.com.": {},
"rr1---sn-8xgp1vo-xfge.googlevideo.com.": {},
"rr1---sn-8xgp1vo-xfgl.googlevideo.com.": {},
"rr1---sn-8xgp1vo-xfgs.googlevideo.com.": {},
- "rr1---sn-9gv76n7e.googlevideo.com.": {},
"rr1---sn-9gv76n7l.googlevideo.com.": {},
"rr1---sn-9gv76n7s.googlevideo.com.": {},
"rr1---sn-9gv7ene6.googlevideo.com.": {},
@@ -3859,9 +3902,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-9gv7zn76.googlevideo.com.": {},
"rr1---sn-9gv7zn7e.googlevideo.com.": {},
"rr1---sn-9gv7zn7r.googlevideo.com.": {},
- "rr1---sn-9gv7zn7y.googlevideo.com.": {},
"rr1---sn-a5m7lnl6.googlevideo.com.": {},
- "rr1---sn-a5m7lnl6.gvt1.com.": {},
"rr1---sn-a5m7lnld.googlevideo.com.": {},
"rr1---sn-a5mekn6d.googlevideo.com.": {},
"rr1---sn-a5mekn6k.googlevideo.com.": {},
@@ -3869,57 +3910,40 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-a5mekn6r.googlevideo.com.": {},
"rr1---sn-a5mekn6s.googlevideo.com.": {},
"rr1---sn-a5mekn6z.googlevideo.com.": {},
- "rr1---sn-a5mekn6z.gvt1.com.": {},
+ "rr1---sn-a5meknd6.googlevideo.com.": {},
"rr1---sn-a5meknde.googlevideo.com.": {},
"rr1---sn-a5meknde.gvt1.com.": {},
"rr1---sn-a5mekndl.googlevideo.com.": {},
- "rr1---sn-a5mekndl.gvt1.com.": {},
+ "rr1---sn-a5meknds.googlevideo.com.": {},
"rr1---sn-a5mekndz.googlevideo.com.": {},
- "rr1---sn-a5meknsd.googlevideo.com.": {},
"rr1---sn-a5meknsy.googlevideo.com.": {},
"rr1---sn-a5meknzk.googlevideo.com.": {},
- "rr1---sn-a5meknzl.googlevideo.com.": {},
- "rr1---sn-a5meknzl.gvt1.com.": {},
"rr1---sn-a5meknzr.googlevideo.com.": {},
+ "rr1---sn-a5meknzr.gvt1.com.": {},
"rr1---sn-a5mlrnek.googlevideo.com.": {},
- "rr1---sn-a5mlrnek.gvt1.com.": {},
"rr1---sn-a5mlrnl6.googlevideo.com.": {},
- "rr1---sn-a5mlrnl6.gvt1.com.": {},
"rr1---sn-a5mlrnll.googlevideo.com.": {},
- "rr1---sn-a5mlrnll.gvt1.com.": {},
"rr1---sn-a5mlrnls.googlevideo.com.": {},
- "rr1---sn-a5mlrnls.gvt1.com.": {},
"rr1---sn-a5mlrnlz.googlevideo.com.": {},
- "rr1---sn-a5mlrnlz.gvt1.com.": {},
- "rr1---sn-a5msen76.googlevideo.com.": {},
- "rr1---sn-a5msen76.gvt1.com.": {},
"rr1---sn-a5msen7l.googlevideo.com.": {},
"rr1---sn-a5msen7s.googlevideo.com.": {},
+ "rr1---sn-a5msen7s.gvt1.com.": {},
"rr1---sn-a5msen7z.googlevideo.com.": {},
"rr1---sn-a5msenek.googlevideo.com.": {},
- "rr1---sn-a5msenek.gvt1.com.": {},
- "rr1---sn-a5msener.googlevideo.com.": {},
"rr1---sn-a5msenes.googlevideo.com.": {},
"rr1---sn-a5msenes.gvt1.com.": {},
"rr1---sn-a5msenl7.googlevideo.com.": {},
- "rr1---sn-a5msenl7.gvt1.com.": {},
"rr1---sn-a5msenle.googlevideo.com.": {},
"rr1---sn-a5msenle.gvt1.com.": {},
"rr1---sn-a5msenll.googlevideo.com.": {},
- "rr1---sn-a5oj5nuxg-hque.googlevideo.com.": {},
- "rr1---sn-a5oj5nuxg-hque.gvt1.com.": {},
+ "rr1---sn-a5oj5nuxg-aone.googlevideo.com.": {},
"rr1---sn-ab5l6ndr.googlevideo.com.": {},
- "rr1---sn-ab5l6ndy.googlevideo.com.": {},
"rr1---sn-ab5l6nk6.googlevideo.com.": {},
- "rr1---sn-ab5l6nk6.gvt1.com.": {},
"rr1---sn-ab5l6nkd.googlevideo.com.": {},
- "rr1---sn-ab5l6nkd.gvt1.com.": {},
"rr1---sn-ab5l6nr6.googlevideo.com.": {},
- "rr1---sn-ab5l6nr6.gvt1.com.": {},
"rr1---sn-ab5l6nrd.googlevideo.com.": {},
"rr1---sn-ab5l6nrk.googlevideo.com.": {},
"rr1---sn-ab5l6nrl.googlevideo.com.": {},
- "rr1---sn-ab5l6nrl.gvt1.com.": {},
"rr1---sn-ab5l6nrr.googlevideo.com.": {},
"rr1---sn-ab5l6nrs.googlevideo.com.": {},
"rr1---sn-ab5l6nrz.googlevideo.com.": {},
@@ -3930,15 +3954,13 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-ab5sznzd.googlevideo.com.": {},
"rr1---sn-ab5sznze.googlevideo.com.": {},
"rr1---sn-ab5sznzk.googlevideo.com.": {},
- "rr1---sn-ab5sznzk.gvt1.com.": {},
"rr1---sn-ab5sznzl.googlevideo.com.": {},
"rr1---sn-ab5sznzr.googlevideo.com.": {},
- "rr1---sn-ab5sznzr.gvt1.com.": {},
"rr1---sn-ab5sznzs.googlevideo.com.": {},
- "rr1---sn-ab5sznzs.gvt1.com.": {},
"rr1---sn-ab5sznzy.googlevideo.com.": {},
"rr1---sn-ab5sznzz.googlevideo.com.": {},
"rr1---sn-aigl6n6s.googlevideo.com.": {},
+ "rr1---sn-aigl6ned.googlevideo.com.": {},
"rr1---sn-aigl6nek.googlevideo.com.": {},
"rr1---sn-aigl6ner.googlevideo.com.": {},
"rr1---sn-aigl6ney.googlevideo.com.": {},
@@ -3961,17 +3983,15 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-aigzrn7s.googlevideo.com.": {},
"rr1---sn-aigzrn7z.googlevideo.com.": {},
"rr1---sn-aigzrne7.googlevideo.com.": {},
+ "rr1---sn-aigzrnld.googlevideo.com.": {},
"rr1---sn-aigzrnse.googlevideo.com.": {},
"rr1---sn-aigzrnsl.googlevideo.com.": {},
"rr1---sn-aigzrnsr.googlevideo.com.": {},
"rr1---sn-aigzrnss.googlevideo.com.": {},
- "rr1---sn-aigzrnss.gvt1.com.": {},
"rr1---sn-aigzrnsz.googlevideo.com.": {},
"rr1---sn-aigzrnz7.googlevideo.com.": {},
"rr1---sn-aigzrnze.googlevideo.com.": {},
- "rr1---sn-apn7en7l.googlevideo.com.": {},
"rr1---sn-apn7en7s.googlevideo.com.": {},
- "rr1---sn-avbpj-cq5e.googlevideo.com.": {},
"rr1---sn-bg5oqxjvh-50nz.googlevideo.com.": {},
"rr1---sn-bg5oqxjvh-jg2s.googlevideo.com.": {},
"rr1---sn-bg5oqxjvh-xa2s.googlevideo.com.": {},
@@ -3983,50 +4003,52 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-cvb7lnlz.googlevideo.com.": {},
"rr1---sn-cvb7sn7k.googlevideo.com.": {},
"rr1---sn-cvb7sn7r.googlevideo.com.": {},
+ "rr1---sn-fpnjoxu-h3xl.googlevideo.com.": {},
"rr1---sn-fpnjoxu-hnol.googlevideo.com.": {},
"rr1---sn-gpuuxg-hxhl.googlevideo.com.": {},
"rr1---sn-gpuuxg-hxhl.gvt1.com.": {},
"rr1---sn-gpuuxg-hxhs.googlevideo.com.": {},
"rr1---sn-gpuuxg-hxhs.gvt1.com.": {},
+ "rr1---sn-gvbxgn-tvf6.googlevideo.com.": {},
+ "rr1---sn-gvbxgn-tvfz.googlevideo.com.": {},
"rr1---sn-h0jeened.googlevideo.com.": {},
"rr1---sn-h0jeenek.googlevideo.com.": {},
"rr1---sn-h0jeener.googlevideo.com.": {},
"rr1---sn-h0jeenl6.googlevideo.com.": {},
"rr1---sn-h0jeenld.googlevideo.com.": {},
"rr1---sn-h0jeenle.googlevideo.com.": {},
+ "rr1---sn-h0jeln7e.googlevideo.com.": {},
"rr1---sn-h0jeln7l.googlevideo.com.": {},
"rr1---sn-h0jelne6.googlevideo.com.": {},
"rr1---sn-h0jelne7.googlevideo.com.": {},
"rr1---sn-h0jelnez.googlevideo.com.": {},
+ "rr1---sn-hjoj-jaul.googlevideo.com.": {},
"rr1---sn-hjoj-poul.googlevideo.com.": {},
"rr1---sn-hoa7kn76.googlevideo.com.": {},
"rr1---sn-hoa7kn7z.googlevideo.com.": {},
"rr1---sn-hoa7rn76.googlevideo.com.": {},
- "rr1---sn-hoa7rn7z.googlevideo.com.": {},
"rr1---sn-hp57kn6r.googlevideo.com.": {},
+ "rr1---sn-hp57kn6r.gvt1.com.": {},
"rr1---sn-hp57kn6y.googlevideo.com.": {},
"rr1---sn-hp57knd6.googlevideo.com.": {},
"rr1---sn-hp57kndd.googlevideo.com.": {},
"rr1---sn-hp57kndk.googlevideo.com.": {},
"rr1---sn-hp57kndr.googlevideo.com.": {},
- "rr1---sn-hp57kndr.gvt1.com.": {},
- "rr1---sn-hp57knds.googlevideo.com.": {},
"rr1---sn-hp57kndy.googlevideo.com.": {},
"rr1---sn-hp57kndz.googlevideo.com.": {},
"rr1---sn-hp57kndz.gvt1.com.": {},
"rr1---sn-hp57yn7r.googlevideo.com.": {},
+ "rr1---sn-hp57yn7r.gvt1.com.": {},
"rr1---sn-hp57yn7y.googlevideo.com.": {},
- "rr1---sn-hp57yne7.googlevideo.com.": {},
"rr1---sn-hp57ynl6.googlevideo.com.": {},
"rr1---sn-hp57ynl6.gvt1.com.": {},
- "rr1---sn-hp57ynlr.googlevideo.com.": {},
"rr1---sn-hp57ynly.googlevideo.com.": {},
"rr1---sn-hp57yns7.googlevideo.com.": {},
"rr1---sn-hp57ynse.googlevideo.com.": {},
"rr1---sn-hp57ynsl.googlevideo.com.": {},
"rr1---sn-hp57ynss.googlevideo.com.": {},
"rr1---sn-hp57ynss.gvt1.com.": {},
- "rr1---sn-hxugvoxupoj-poqz.googlevideo.com.": {},
+ "rr1---sn-hxgpu-qufs.googlevideo.com.": {},
"rr1---sn-i3b7kn6s.googlevideo.com.": {},
"rr1---sn-i3b7knld.googlevideo.com.": {},
"rr1---sn-i3b7knlk.googlevideo.com.": {},
@@ -4035,7 +4057,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-i3b7knse.googlevideo.com.": {},
"rr1---sn-i3b7knsl.googlevideo.com.": {},
"rr1---sn-i3b7knzl.googlevideo.com.": {},
- "rr1---sn-i3belne6.googlevideo.com.": {},
+ "rr1---sn-i3b7knzs.googlevideo.com.": {},
"rr1---sn-i3belney.googlevideo.com.": {},
"rr1---sn-i3belnl6.googlevideo.com.": {},
"rr1---sn-i3belnl7.googlevideo.com.": {},
@@ -4052,7 +4074,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-i5heen7d.googlevideo.com.": {},
"rr1---sn-i5heen7r.googlevideo.com.": {},
"rr1---sn-i5heen7s.googlevideo.com.": {},
- "rr1---sn-i5heen7z.googlevideo.com.": {},
"rr1---sn-jn2pgx4pcxg-w5os.googlevideo.com.": {},
"rr1---sn-jvhj5nu-2iae.googlevideo.com.": {},
"rr1---sn-jvhj5nu-2ial.googlevideo.com.": {},
@@ -4066,7 +4087,10 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-jvhj5nu-qufz.googlevideo.com.": {},
"rr1---sn-jxopj-n5oe.googlevideo.com.": {},
"rr1---sn-jxopj-n5oe.gvt1.com.": {},
+ "rr1---sn-muxa-2iae.googlevideo.com.": {},
"rr1---sn-n0g45pg-ncoe.googlevideo.com.": {},
+ "rr1---sn-n2uxaxjvh-j5xl.googlevideo.com.": {},
+ "rr1---sn-n2uxaxjvh-j5xl.gvt1.com.": {},
"rr1---sn-n2uxaxjvh-j5xs.googlevideo.com.": {},
"rr1---sn-n2uxaxjvh-j5xs.gvt1.com.": {},
"rr1---sn-n4v7snee.googlevideo.com.": {},
@@ -4078,7 +4102,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-n4v7snly.googlevideo.com.": {},
"rr1---sn-n4v7sns7.googlevideo.com.": {},
"rr1---sn-n4v7snse.googlevideo.com.": {},
- "rr1---sn-n4v7snse.gvt1.com.": {},
"rr1---sn-nh5gujvh-h4xe.googlevideo.com.": {},
"rr1---sn-nh5gujvh-h4xe.gvt1.com.": {},
"rr1---sn-npoe7ndl.googlevideo.com.": {},
@@ -4107,11 +4130,11 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-npoeenee.googlevideo.com.": {},
"rr1---sn-npoeenek.googlevideo.com.": {},
"rr1---sn-npoeener.googlevideo.com.": {},
- "rr1---sn-npoeenez.googlevideo.com.": {},
+ "rr1---sn-npoeeney.googlevideo.com.": {},
"rr1---sn-npoeenl7.googlevideo.com.": {},
"rr1---sn-npoeenle.googlevideo.com.": {},
+ "rr1---sn-npoeenlk.googlevideo.com.": {},
"rr1---sn-npoeenll.googlevideo.com.": {},
- "rr1---sn-npoeenly.googlevideo.com.": {},
"rr1---sn-npoeens7.googlevideo.com.": {},
"rr1---sn-npoldn76.googlevideo.com.": {},
"rr1---sn-npoldn7d.googlevideo.com.": {},
@@ -4122,24 +4145,21 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-npoldn7z.googlevideo.com.": {},
"rr1---sn-npoldne7.googlevideo.com.": {},
"rr1---sn-nuagpm-nuae.googlevideo.com.": {},
- "rr1---sn-nv0ui4gvou-hape.googlevideo.com.": {},
+ "rr1---sn-nv0uixgo-5ual.googlevideo.com.": {},
"rr1---sn-nv47ln6e.googlevideo.com.": {},
- "rr1---sn-nv47lns7.googlevideo.com.": {},
- "rr1---sn-nv47lnsd.googlevideo.com.": {},
"rr1---sn-nv47zn7r.googlevideo.com.": {},
"rr1---sn-nv47zn7y.googlevideo.com.": {},
"rr1---sn-nv47zne7.googlevideo.com.": {},
+ "rr1---sn-nv47znee.googlevideo.com.": {},
"rr1---sn-nv47znel.googlevideo.com.": {},
+ "rr1---sn-nx57ynlk.googlevideo.com.": {},
+ "rr1---sn-nx57ynlk.gvt1.com.": {},
"rr1---sn-nx57ynsd.googlevideo.com.": {},
- "rr1---sn-nx57ynsd.gvt1.com.": {},
"rr1---sn-nx57ynse.googlevideo.com.": {},
- "rr1---sn-nx57ynse.gvt1.com.": {},
"rr1---sn-nx57ynsk.googlevideo.com.": {},
- "rr1---sn-nx57ynsk.gvt1.com.": {},
"rr1---sn-nx57ynsl.googlevideo.com.": {},
"rr1---sn-nx57ynsl.gvt1.com.": {},
"rr1---sn-nx57ynss.googlevideo.com.": {},
- "rr1---sn-nx57ynss.gvt1.com.": {},
"rr1---sn-nx57ynsz.googlevideo.com.": {},
"rr1---sn-nx57ynsz.gvt1.com.": {},
"rr1---sn-nx5s7n76.googlevideo.com.": {},
@@ -4147,15 +4167,12 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-nx5s7n7d.googlevideo.com.": {},
"rr1---sn-nx5s7n7d.gvt1.com.": {},
"rr1---sn-nx5s7n7s.googlevideo.com.": {},
- "rr1---sn-nx5s7n7s.gvt1.com.": {},
"rr1---sn-nx5s7n7y.googlevideo.com.": {},
"rr1---sn-nx5s7n7y.gvt1.com.": {},
"rr1---sn-nx5s7n7z.googlevideo.com.": {},
- "rr1---sn-nx5s7n7z.gvt1.com.": {},
"rr1---sn-nx5s7nee.googlevideo.com.": {},
"rr1---sn-nx5s7nee.gvt1.com.": {},
"rr1---sn-nx5s7nel.googlevideo.com.": {},
- "rr1---sn-nx5s7nel.gvt1.com.": {},
"rr1---sn-o097znsd.googlevideo.com.": {},
"rr1---sn-o097znse.googlevideo.com.": {},
"rr1---sn-o097znsk.googlevideo.com.": {},
@@ -4170,10 +4187,10 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-o097znzr.googlevideo.com.": {},
"rr1---sn-opnq-n5ue.googlevideo.com.": {},
"rr1---sn-ounjvhh-acce.googlevideo.com.": {},
- "rr1---sn-oxgpj-5ace.googlevideo.com.": {},
"rr1---sn-p5qddn76.googlevideo.com.": {},
"rr1---sn-p5qddn7d.googlevideo.com.": {},
"rr1---sn-p5qddn7k.googlevideo.com.": {},
+ "rr1---sn-p5qddn7r.googlevideo.com.": {},
"rr1---sn-p5qddn7z.googlevideo.com.": {},
"rr1---sn-p5qlsn6l.googlevideo.com.": {},
"rr1---sn-p5qlsn76.googlevideo.com.": {},
@@ -4185,13 +4202,13 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-p5qlsndk.googlevideo.com.": {},
"rr1---sn-p5qlsndr.googlevideo.com.": {},
"rr1---sn-p5qlsndz.googlevideo.com.": {},
+ "rr1---sn-p5qlsnrl.googlevideo.com.": {},
"rr1---sn-p5qlsnrr.googlevideo.com.": {},
"rr1---sn-p5qlsny6.googlevideo.com.": {},
"rr1---sn-p5qs7n6d.googlevideo.com.": {},
"rr1---sn-p5qs7nsk.googlevideo.com.": {},
"rr1---sn-p5qs7nsr.googlevideo.com.": {},
"rr1---sn-p5qs7nzk.googlevideo.com.": {},
- "rr1---sn-p5qs7nzk.gvt1.com.": {},
"rr1---sn-p5qs7nzr.googlevideo.com.": {},
"rr1---sn-p5qs7nzy.googlevideo.com.": {},
"rr1---sn-paapovpnjxou0gt-nual.googlevideo.com.": {},
@@ -4200,17 +4217,18 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-q4fl6n66.googlevideo.com.": {},
"rr1---sn-q4fl6n66.gvt1.com.": {},
"rr1---sn-q4fl6n6d.googlevideo.com.": {},
+ "rr1---sn-q4fl6n6d.gvt1.com.": {},
"rr1---sn-q4fl6n6r.googlevideo.com.": {},
- "rr1---sn-q4fl6n6r.gvt1.com.": {},
"rr1---sn-q4fl6n6s.googlevideo.com.": {},
+ "rr1---sn-q4fl6n6s.gvt1.com.": {},
"rr1---sn-q4fl6n6y.googlevideo.com.": {},
"rr1---sn-q4fl6n6z.googlevideo.com.": {},
+ "rr1---sn-q4fl6n6z.gvt1.com.": {},
"rr1---sn-q4fl6nd6.googlevideo.com.": {},
"rr1---sn-q4fl6nd6.gvt1.com.": {},
"rr1---sn-q4fl6nd7.googlevideo.com.": {},
"rr1---sn-q4fl6nde.googlevideo.com.": {},
"rr1---sn-q4fl6ndl.googlevideo.com.": {},
- "rr1---sn-q4fl6ndl.gvt1.com.": {},
"rr1---sn-q4fl6nds.googlevideo.com.": {},
"rr1---sn-q4fl6nds.gvt1.com.": {},
"rr1---sn-q4fl6ndz.googlevideo.com.": {},
@@ -4227,12 +4245,10 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-q4fl6nsr.gvt1.com.": {},
"rr1---sn-q4fl6nss.googlevideo.com.": {},
"rr1---sn-q4fl6nsy.googlevideo.com.": {},
+ "rr1---sn-q4fl6nsy.gvt1.com.": {},
"rr1---sn-q4fl6nz6.googlevideo.com.": {},
- "rr1---sn-q4fl6nz6.gvt1.com.": {},
"rr1---sn-q4fl6nz7.googlevideo.com.": {},
- "rr1---sn-q4fl6nz7.gvt1.com.": {},
"rr1---sn-q4fl6nzy.googlevideo.com.": {},
- "rr1---sn-q4fl6nzy.gvt1.com.": {},
"rr1---sn-q4flrn7k.googlevideo.com.": {},
"rr1---sn-q4flrn7r.googlevideo.com.": {},
"rr1---sn-q4flrn7y.googlevideo.com.": {},
@@ -4240,30 +4256,32 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-q4flrne7.googlevideo.com.": {},
"rr1---sn-q4flrne7.gvt1.com.": {},
"rr1---sn-q4flrnee.googlevideo.com.": {},
+ "rr1---sn-q4flrnee.gvt1.com.": {},
"rr1---sn-q4flrnek.googlevideo.com.": {},
"rr1---sn-q4flrnek.gvt1.com.": {},
"rr1---sn-q4flrnel.googlevideo.com.": {},
+ "rr1---sn-q4flrnel.gvt1.com.": {},
"rr1---sn-q4flrner.googlevideo.com.": {},
"rr1---sn-q4flrnes.googlevideo.com.": {},
"rr1---sn-q4flrney.googlevideo.com.": {},
"rr1---sn-q4flrnez.googlevideo.com.": {},
"rr1---sn-q4flrnl6.googlevideo.com.": {},
"rr1---sn-q4flrnl7.googlevideo.com.": {},
+ "rr1---sn-q4flrnl7.gvt1.com.": {},
"rr1---sn-q4flrnld.googlevideo.com.": {},
+ "rr1---sn-q4flrnld.gvt1.com.": {},
"rr1---sn-q4flrnle.googlevideo.com.": {},
- "rr1---sn-q4flrnle.gvt1.com.": {},
"rr1---sn-q4flrnlz.googlevideo.com.": {},
+ "rr1---sn-q4flrnlz.gvt1.com.": {},
"rr1---sn-q4flrnsd.googlevideo.com.": {},
"rr1---sn-q4flrnsd.gvt1.com.": {},
"rr1---sn-q4flrnsk.googlevideo.com.": {},
- "rr1---sn-q4flrnsk.gvt1.com.": {},
"rr1---sn-q4flrnsl.googlevideo.com.": {},
+ "rr1---sn-q4flrnsl.gvt1.com.": {},
"rr1---sn-q4flrnss.googlevideo.com.": {},
- "rr1---sn-q4flrnss.gvt1.com.": {},
"rr1---sn-q4fzen7e.googlevideo.com.": {},
"rr1---sn-q4fzen7e.gvt1.com.": {},
"rr1---sn-q4fzen7l.googlevideo.com.": {},
- "rr1---sn-q4fzen7l.gvt1.com.": {},
"rr1---sn-q4fzen7r.googlevideo.com.": {},
"rr1---sn-q4fzen7r.gvt1.com.": {},
"rr1---sn-q4fzen7s.googlevideo.com.": {},
@@ -4271,8 +4289,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-q4fzen7y.gvt1.com.": {},
"rr1---sn-q4fzene7.googlevideo.com.": {},
"rr1---sn-q4fzenee.googlevideo.com.": {},
- "rr1---sn-qpbp-30ar.googlevideo.com.": {},
- "rr1---sn-qpbp-30ay.googlevideo.com.": {},
+ "rr1---sn-q4fzenee.gvt1.com.": {},
"rr1---sn-qxo7rn7k.googlevideo.com.": {},
"rr1---sn-qxo7rn7r.googlevideo.com.": {},
"rr1---sn-qxoedn7k.googlevideo.com.": {},
@@ -4281,87 +4298,61 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-u1hp55-5c.googlevideo.com.": {},
"rr1---sn-uhvcpaxoa-5hne.googlevideo.com.": {},
"rr1---sn-uhvcpaxoa-guhe.googlevideo.com.": {},
- "rr1---sn-v53a5oqnji-4oul.googlevideo.com.": {},
- "rr1---sn-v53a5oqnji-4oul.gvt1.com.": {},
"rr1---sn-v5goxu-jhi6.googlevideo.com.": {},
"rr1---sn-v5goxu-jhi6.gvt1.com.": {},
"rr1---sn-v5goxu-jhil.googlevideo.com.": {},
- "rr1---sn-v5goxu-jhil.gvt1.com.": {},
"rr1---sn-v5goxu-jhiz.googlevideo.com.": {},
- "rr1---sn-v5goxu-jhiz.gvt1.com.": {},
"rr1---sn-vgqskn66.googlevideo.com.": {},
"rr1---sn-vgqskn67.googlevideo.com.": {},
- "rr1---sn-vgqskn67.gvt1.com.": {},
"rr1---sn-vgqskn6d.googlevideo.com.": {},
"rr1---sn-vgqskn6s.googlevideo.com.": {},
"rr1---sn-vgqskn6z.googlevideo.com.": {},
- "rr1---sn-vgqskn6z.gvt1.com.": {},
"rr1---sn-vgqskne6.googlevideo.com.": {},
- "rr1---sn-vgqskne6.gvt1.com.": {},
"rr1---sn-vgqskned.googlevideo.com.": {},
"rr1---sn-vgqsknek.googlevideo.com.": {},
"rr1---sn-vgqsknes.googlevideo.com.": {},
"rr1---sn-vgqsknez.googlevideo.com.": {},
- "rr1---sn-vgqsknez.gvt1.com.": {},
"rr1---sn-vgqsknld.googlevideo.com.": {},
"rr1---sn-vgqsknlk.googlevideo.com.": {},
- "rr1---sn-vgqsknlk.gvt1.com.": {},
"rr1---sn-vgqsknll.googlevideo.com.": {},
+ "rr1---sn-vgqsknlr.googlevideo.com.": {},
"rr1---sn-vgqsknls.googlevideo.com.": {},
- "rr1---sn-vgqsknls.gvt1.com.": {},
"rr1---sn-vgqsknlz.googlevideo.com.": {},
"rr1---sn-vgqsknse.googlevideo.com.": {},
"rr1---sn-vgqsknsk.googlevideo.com.": {},
- "rr1---sn-vgqsknsk.gvt1.com.": {},
"rr1---sn-vgqsknz6.googlevideo.com.": {},
- "rr1---sn-vgqsknz6.gvt1.com.": {},
"rr1---sn-vgqsknz7.googlevideo.com.": {},
- "rr1---sn-vgqsknz7.gvt1.com.": {},
"rr1---sn-vgqsknzd.googlevideo.com.": {},
- "rr1---sn-vgqsknzd.gvt1.com.": {},
"rr1---sn-vgqsknze.googlevideo.com.": {},
"rr1---sn-vgqsknzk.googlevideo.com.": {},
"rr1---sn-vgqsknzl.googlevideo.com.": {},
- "rr1---sn-vgqsknzl.gvt1.com.": {},
"rr1---sn-vgqsknzr.googlevideo.com.": {},
- "rr1---sn-vgqsknzr.gvt1.com.": {},
"rr1---sn-vgqsknzs.googlevideo.com.": {},
- "rr1---sn-vgqsknzs.gvt1.com.": {},
"rr1---sn-vgqsknzy.googlevideo.com.": {},
"rr1---sn-vgqsknzz.googlevideo.com.": {},
"rr1---sn-vgqsrn66.googlevideo.com.": {},
"rr1---sn-vgqsrn67.googlevideo.com.": {},
"rr1---sn-vgqsrn6e.googlevideo.com.": {},
- "rr1---sn-vgqsrn6e.gvt1.com.": {},
"rr1---sn-vgqsrn6l.googlevideo.com.": {},
"rr1---sn-vgqsrn6z.googlevideo.com.": {},
- "rr1---sn-vgqsrn6z.gvt1.com.": {},
"rr1---sn-vgqsrne6.googlevideo.com.": {},
- "rr1---sn-vgqsrne6.gvt1.com.": {},
"rr1---sn-vgqsrned.googlevideo.com.": {},
"rr1---sn-vgqsrnek.googlevideo.com.": {},
"rr1---sn-vgqsrnes.googlevideo.com.": {},
- "rr1---sn-vgqsrnes.gvt1.com.": {},
"rr1---sn-vgqsrnez.googlevideo.com.": {},
"rr1---sn-vgqsrnl6.googlevideo.com.": {},
"rr1---sn-vgqsrnld.googlevideo.com.": {},
+ "rr1---sn-vgqsrnlk.googlevideo.com.": {},
"rr1---sn-vgqsrnll.googlevideo.com.": {},
"rr1---sn-vgqsrnls.googlevideo.com.": {},
- "rr1---sn-vgqsrnls.gvt1.com.": {},
- "rr1---sn-vgqsrnlz.googlevideo.com.": {},
"rr1---sn-vgqsrns6.googlevideo.com.": {},
"rr1---sn-vgqsrnsd.googlevideo.com.": {},
"rr1---sn-vgqsrnsr.googlevideo.com.": {},
- "rr1---sn-vgqsrnsr.gvt1.com.": {},
"rr1---sn-vgqsrnsy.googlevideo.com.": {},
"rr1---sn-vgqsrnz6.googlevideo.com.": {},
- "rr1---sn-vgqsrnz6.gvt1.com.": {},
"rr1---sn-vgqsrnz7.googlevideo.com.": {},
- "rr1---sn-vgqsrnz7.gvt1.com.": {},
"rr1---sn-vgqsrnzd.googlevideo.com.": {},
- "rr1---sn-vgqsrnzd.gvt1.com.": {},
"rr1---sn-vgqsrnzk.googlevideo.com.": {},
- "rr1---sn-vgqsrnzk.gvt1.com.": {},
"rr1---sn-vgqsrnzr.googlevideo.com.": {},
"rr1---sn-vgqsrnzs.googlevideo.com.": {},
"rr1---sn-vgqsrnzy.googlevideo.com.": {},
@@ -4370,45 +4361,36 @@ var FakeECSFQDNs = map[string]struct{}{
"rr1---sn-voxoxu-v3jl.googlevideo.com.": {},
"rr1---sn-voxoxu-v3js.googlevideo.com.": {},
"rr1---sn-xo5-co5l.googlevideo.com.": {},
- "rr1.sn-5hne6nsz.googlevideo.com.": {},
- "rr1.sn-5hneknek.googlevideo.com.": {},
- "rr1.sn-q4fl6ndl.googlevideo.com.": {},
- "rr1.sn-q4fl6ns7.googlevideo.com.": {},
- "rr1.sn-q4flrnsk.googlevideo.com.": {},
- "rr10---sn-8qj-i5ozd.googlevideo.com.": {},
- "rr10---sn-bvvbax-2ial.googlevideo.com.": {},
- "rr11---sn-bvvbax-2ial.googlevideo.com.": {},
- "rr12---sn-8qj-i5ozd.googlevideo.com.": {},
- "rr12---sn-bvvbax-2ial.googlevideo.com.": {},
+ "rr1.sn-q4fl6n66.googlevideo.com.": {},
+ "rr1.sn-q4fl6nds.googlevideo.com.": {},
+ "rr1.sn-q4flrnsd.googlevideo.com.": {},
"rr2---sn-02o-ao3e.googlevideo.com.": {},
"rr2---sn-0nnpbo5a-bggl.googlevideo.com.": {},
"rr2---sn-0op8v4h5pox-cbgl.googlevideo.com.": {},
- "rr2---sn-2aqu-hoaly.googlevideo.com.": {},
- "rr2---sn-2aqu-hoas7.googlevideo.com.": {},
"rr2---sn-2imern76.googlevideo.com.": {},
- "rr2---sn-2imern76.gvt1.com.": {},
"rr2---sn-2imern7d.googlevideo.com.": {},
- "rr2---sn-2imern7d.gvt1.com.": {},
"rr2---sn-2imeyn7k.googlevideo.com.": {},
- "rr2---sn-2imeyn7k.gvt1.com.": {},
"rr2---sn-2napbiu-p5ie.googlevideo.com.": {},
+ "rr2---sn-2napbiu-p5ie.gvt1.com.": {},
+ "rr2---sn-2pmxapm0n-gpje.googlevideo.com.": {},
+ "rr2---sn-2pmxapm0n-gpjl.googlevideo.com.": {},
+ "rr2---sn-2puupm-2pue.googlevideo.com.": {},
"rr2---sn-2vgu0b5auxaxjvh-apnd.googlevideo.com.": {},
"rr2---sn-2vgu0b5auxaxjvh-v2vd.googlevideo.com.": {},
"rr2---sn-2vgu0b5auxaxjvh-v2ve.googlevideo.com.": {},
+ "rr2---sn-2vgu0b5auxaxjvh-v2vk.googlevideo.com.": {},
"rr2---sn-2vgu0b5auxaxjvh-v2vl.googlevideo.com.": {},
"rr2---sn-2vgu0b5auxaxjvh-v2vz.googlevideo.com.": {},
"rr2---sn-30a7rne6.googlevideo.com.": {},
"rr2---sn-30a7rned.googlevideo.com.": {},
"rr2---sn-30a7rnek.googlevideo.com.": {},
"rr2---sn-30a7rner.googlevideo.com.": {},
- "rr2---sn-30a7ynek.googlevideo.com.": {},
"rr2---sn-30a7yner.googlevideo.com.": {},
"rr2---sn-30a7yney.googlevideo.com.": {},
"rr2---sn-30a7ynl7.googlevideo.com.": {},
+ "rr2---sn-3jpm-hjpe.googlevideo.com.": {},
+ "rr2---sn-3jpm-hjpe.gvt1.com.": {},
"rr2---sn-3n4pcxg-pjul.googlevideo.com.": {},
- "rr2---sn-42u-nboze.googlevideo.com.": {},
- "rr2---sn-42u-nbozl.googlevideo.com.": {},
- "rr2---sn-42u-nbozs.googlevideo.com.": {},
"rr2---sn-4g5e6ns6.googlevideo.com.": {},
"rr2---sn-4g5e6ns7.googlevideo.com.": {},
"rr2---sn-4g5e6nsd.googlevideo.com.": {},
@@ -4443,6 +4425,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-4g5ednse.googlevideo.com.": {},
"rr2---sn-4g5ednsk.googlevideo.com.": {},
"rr2---sn-4g5ednsl.googlevideo.com.": {},
+ "rr2---sn-4g5ednsr.googlevideo.com.": {},
"rr2---sn-4g5ednss.googlevideo.com.": {},
"rr2---sn-4g5ednsy.googlevideo.com.": {},
"rr2---sn-4g5ednsz.googlevideo.com.": {},
@@ -4452,7 +4435,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-4g5lznek.googlevideo.com.": {},
"rr2---sn-4g5lzner.googlevideo.com.": {},
"rr2---sn-4g5lznes.googlevideo.com.": {},
- "rr2---sn-4g5lzney.googlevideo.com.": {},
"rr2---sn-4g5lznez.googlevideo.com.": {},
"rr2---sn-4g5lznl6.googlevideo.com.": {},
"rr2---sn-4g5lznl7.googlevideo.com.": {},
@@ -4460,8 +4442,10 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-4g5lznls.googlevideo.com.": {},
"rr2---sn-4g5lznlz.googlevideo.com.": {},
"rr2---sn-4jjo-apnl.googlevideo.com.": {},
- "rr2---sn-4pgnuapbiu-5acs.googlevideo.com.": {},
"rr2---sn-4pgnuapbiu-hiue.googlevideo.com.": {},
+ "rr2---sn-4pgnuapbiu-hiul.googlevideo.com.": {},
+ "rr2---sn-5gxo-in8l.googlevideo.com.": {},
+ "rr2---sn-5gxo-in8s.googlevideo.com.": {},
"rr2---sn-5hne6n6e.googlevideo.com.": {},
"rr2---sn-5hne6n6l.googlevideo.com.": {},
"rr2---sn-5hne6ns6.googlevideo.com.": {},
@@ -4484,7 +4468,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-5hnekn7s.googlevideo.com.": {},
"rr2---sn-5hnekn7z.googlevideo.com.": {},
"rr2---sn-5hneknee.googlevideo.com.": {},
- "rr2---sn-5hneknee.gvt1.com.": {},
"rr2---sn-5hneknek.googlevideo.com.": {},
"rr2---sn-5hneknes.googlevideo.com.": {},
"rr2---sn-5pgnugx5h-hn2s.googlevideo.com.": {},
@@ -4492,6 +4475,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-5uaezndd.googlevideo.com.": {},
"rr2---sn-5uaezne6.googlevideo.com.": {},
"rr2---sn-5uaezned.googlevideo.com.": {},
+ "rr2---sn-5uaeznes.googlevideo.com.": {},
"rr2---sn-5uaeznez.googlevideo.com.": {},
"rr2---sn-5uaeznl6.googlevideo.com.": {},
"rr2---sn-5uaeznld.googlevideo.com.": {},
@@ -4523,9 +4507,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-5ualdnsz.googlevideo.com.": {},
"rr2---sn-5ualdnz7.googlevideo.com.": {},
"rr2---sn-5ualdnze.googlevideo.com.": {},
- "rr2---sn-8qj-i5o6k.googlevideo.com.": {},
- "rr2---sn-8qj-i5okl.googlevideo.com.": {},
- "rr2---sn-8qj-i5ozr.googlevideo.com.": {},
"rr2---sn-8qj-nbo66.googlevideo.com.": {},
"rr2---sn-8qj-nbo6y.googlevideo.com.": {},
"rr2---sn-8xgp1vo-2iae.googlevideo.com.": {},
@@ -4539,7 +4520,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-8xgp1vo-ab5l.googlevideo.com.": {},
"rr2---sn-8xgp1vo-ab5s.googlevideo.com.": {},
"rr2---sn-8xgp1vo-ab5z.googlevideo.com.": {},
- "rr2---sn-8xgp1vo-nh4e.googlevideo.com.": {},
+ "rr2---sn-8xgp1vo-hjpl.googlevideo.com.": {},
"rr2---sn-8xgp1vo-p5ie.googlevideo.com.": {},
"rr2---sn-8xgp1vo-vgqe.googlevideo.com.": {},
"rr2---sn-8xgp1vo-xfge.googlevideo.com.": {},
@@ -4553,73 +4534,61 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-9gv7zn7r.googlevideo.com.": {},
"rr2---sn-9gv7zn7y.googlevideo.com.": {},
"rr2---sn-a5m7lnl6.googlevideo.com.": {},
+ "rr2---sn-a5m7lnl6.gvt1.com.": {},
"rr2---sn-a5m7lnld.googlevideo.com.": {},
"rr2---sn-a5mekn6d.googlevideo.com.": {},
- "rr2---sn-a5mekn6d.gvt1.com.": {},
"rr2---sn-a5mekn6k.googlevideo.com.": {},
- "rr2---sn-a5mekn6k.gvt1.com.": {},
"rr2---sn-a5mekn6l.googlevideo.com.": {},
- "rr2---sn-a5mekn6l.gvt1.com.": {},
"rr2---sn-a5mekn6r.googlevideo.com.": {},
"rr2---sn-a5mekn6s.googlevideo.com.": {},
"rr2---sn-a5mekn6z.googlevideo.com.": {},
"rr2---sn-a5meknd6.googlevideo.com.": {},
- "rr2---sn-a5meknd6.gvt1.com.": {},
"rr2---sn-a5meknde.googlevideo.com.": {},
- "rr2---sn-a5meknde.gvt1.com.": {},
"rr2---sn-a5mekndl.googlevideo.com.": {},
- "rr2---sn-a5mekndl.gvt1.com.": {},
"rr2---sn-a5meknds.googlevideo.com.": {},
"rr2---sn-a5meknds.gvt1.com.": {},
"rr2---sn-a5mekndz.googlevideo.com.": {},
"rr2---sn-a5meknsd.googlevideo.com.": {},
"rr2---sn-a5meknsy.googlevideo.com.": {},
"rr2---sn-a5meknzk.googlevideo.com.": {},
- "rr2---sn-a5meknzk.gvt1.com.": {},
"rr2---sn-a5meknzr.googlevideo.com.": {},
"rr2---sn-a5meknzs.googlevideo.com.": {},
- "rr2---sn-a5meknzs.gvt1.com.": {},
+ "rr2---sn-a5mlrnek.googlevideo.com.": {},
"rr2---sn-a5mlrnl6.googlevideo.com.": {},
- "rr2---sn-a5mlrnl6.gvt1.com.": {},
"rr2---sn-a5mlrnll.googlevideo.com.": {},
+ "rr2---sn-a5mlrnll.gvt1.com.": {},
"rr2---sn-a5mlrnls.googlevideo.com.": {},
"rr2---sn-a5mlrnlz.googlevideo.com.": {},
- "rr2---sn-a5mlrnlz.gvt1.com.": {},
"rr2---sn-a5msen76.googlevideo.com.": {},
- "rr2---sn-a5msen76.gvt1.com.": {},
"rr2---sn-a5msen7l.googlevideo.com.": {},
"rr2---sn-a5msen7s.googlevideo.com.": {},
"rr2---sn-a5msen7z.googlevideo.com.": {},
"rr2---sn-a5msenek.googlevideo.com.": {},
- "rr2---sn-a5msenek.gvt1.com.": {},
"rr2---sn-a5msener.googlevideo.com.": {},
"rr2---sn-a5msenes.googlevideo.com.": {},
+ "rr2---sn-a5msenes.gvt1.com.": {},
"rr2---sn-a5msenl7.googlevideo.com.": {},
"rr2---sn-a5msenle.googlevideo.com.": {},
+ "rr2---sn-a5msenle.gvt1.com.": {},
"rr2---sn-a5msenll.googlevideo.com.": {},
- "rr2---sn-a5oj5nuxg-hque.gvt1.com.": {},
+ "rr2---sn-a5oj5nuxg-aone.googlevideo.com.": {},
"rr2---sn-ab5l6ndr.googlevideo.com.": {},
- "rr2---sn-ab5l6ndr.gvt1.com.": {},
"rr2---sn-ab5l6ndy.googlevideo.com.": {},
"rr2---sn-ab5l6nk6.googlevideo.com.": {},
"rr2---sn-ab5l6nkd.googlevideo.com.": {},
"rr2---sn-ab5l6nr6.googlevideo.com.": {},
- "rr2---sn-ab5l6nr6.gvt1.com.": {},
"rr2---sn-ab5l6nrd.googlevideo.com.": {},
"rr2---sn-ab5l6nrd.gvt1.com.": {},
"rr2---sn-ab5l6nrk.googlevideo.com.": {},
"rr2---sn-ab5l6nrl.googlevideo.com.": {},
"rr2---sn-ab5l6nrr.googlevideo.com.": {},
- "rr2---sn-ab5l6nrr.gvt1.com.": {},
"rr2---sn-ab5l6nrs.googlevideo.com.": {},
"rr2---sn-ab5l6nrz.googlevideo.com.": {},
- "rr2---sn-ab5l6nrz.gvt1.com.": {},
"rr2---sn-ab5sznld.googlevideo.com.": {},
"rr2---sn-ab5sznlk.googlevideo.com.": {},
"rr2---sn-ab5sznly.googlevideo.com.": {},
"rr2---sn-ab5sznz6.googlevideo.com.": {},
"rr2---sn-ab5sznzd.googlevideo.com.": {},
- "rr2---sn-ab5sznzd.gvt1.com.": {},
"rr2---sn-ab5sznze.googlevideo.com.": {},
"rr2---sn-ab5sznzk.googlevideo.com.": {},
"rr2---sn-ab5sznzl.googlevideo.com.": {},
@@ -4636,7 +4605,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-aigl6ns6.googlevideo.com.": {},
"rr2---sn-aigl6nsd.googlevideo.com.": {},
"rr2---sn-aigl6nsk.googlevideo.com.": {},
- "rr2---sn-aigl6nsk.gvt1.com.": {},
"rr2---sn-aigl6nsr.googlevideo.com.": {},
"rr2---sn-aigl6nz7.googlevideo.com.": {},
"rr2---sn-aigl6nze.googlevideo.com.": {},
@@ -4660,43 +4628,49 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-aigzrnsz.googlevideo.com.": {},
"rr2---sn-aigzrnz7.googlevideo.com.": {},
"rr2---sn-aigzrnze.googlevideo.com.": {},
+ "rr2---sn-aj5ua5-5c.googlevideo.com.": {},
"rr2---sn-apn7en7e.googlevideo.com.": {},
"rr2---sn-apn7en7l.googlevideo.com.": {},
"rr2---sn-apn7en7s.googlevideo.com.": {},
- "rr2---sn-avbpj-cq5e.googlevideo.com.": {},
"rr2---sn-bg5oqxjvh-50nz.googlevideo.com.": {},
"rr2---sn-bg5oqxjvh-jg2s.googlevideo.com.": {},
"rr2---sn-bg5oqxjvh-xa2s.googlevideo.com.": {},
+ "rr2---sn-bvvbax-2iae.googlevideo.com.": {},
"rr2---sn-c0q7lnz7.googlevideo.com.": {},
"rr2---sn-cvb7lne7.googlevideo.com.": {},
"rr2---sn-cvb7lnee.googlevideo.com.": {},
- "rr2---sn-cvb7lnl7.googlevideo.com.": {},
"rr2---sn-cvb7lnls.googlevideo.com.": {},
"rr2---sn-cvb7lnlz.googlevideo.com.": {},
"rr2---sn-cvb7sn7k.googlevideo.com.": {},
"rr2---sn-cvb7sn7r.googlevideo.com.": {},
+ "rr2---sn-fpnjoxu-h3xl.googlevideo.com.": {},
"rr2---sn-fpnjoxu-hnol.googlevideo.com.": {},
"rr2---sn-gpuuxg-hxhl.googlevideo.com.": {},
"rr2---sn-gpuuxg-hxhl.gvt1.com.": {},
"rr2---sn-gpuuxg-hxhs.googlevideo.com.": {},
"rr2---sn-gpuuxg-hxhs.gvt1.com.": {},
+ "rr2---sn-gvbxgn-tvf6.googlevideo.com.": {},
+ "rr2---sn-gvbxgn-tvfz.googlevideo.com.": {},
+ "rr2---sn-h0jeened.googlevideo.com.": {},
"rr2---sn-h0jeenek.googlevideo.com.": {},
- "rr2---sn-h0jeenl6.googlevideo.com.": {},
+ "rr2---sn-h0jeener.googlevideo.com.": {},
"rr2---sn-h0jeenld.googlevideo.com.": {},
+ "rr2---sn-h0jeenle.googlevideo.com.": {},
"rr2---sn-h0jeln7e.googlevideo.com.": {},
"rr2---sn-h0jeln7l.googlevideo.com.": {},
"rr2---sn-h0jelne6.googlevideo.com.": {},
- "rr2---sn-h0jelne7.googlevideo.com.": {},
"rr2---sn-h0jelnes.googlevideo.com.": {},
"rr2---sn-h0jelnez.googlevideo.com.": {},
"rr2---sn-hjoj-gq0l.googlevideo.com.": {},
"rr2---sn-hjoj-gq0l.gvt1.com.": {},
+ "rr2---sn-hjoj-jaul.googlevideo.com.": {},
"rr2---sn-hjoj-poul.googlevideo.com.": {},
"rr2---sn-hoa7kn76.googlevideo.com.": {},
"rr2---sn-hoa7kn7z.googlevideo.com.": {},
"rr2---sn-hoa7rn76.googlevideo.com.": {},
"rr2---sn-hoa7rn7z.googlevideo.com.": {},
"rr2---sn-hp57kn6r.googlevideo.com.": {},
+ "rr2---sn-hp57kn6r.gvt1.com.": {},
"rr2---sn-hp57kn6y.googlevideo.com.": {},
"rr2---sn-hp57knd6.googlevideo.com.": {},
"rr2---sn-hp57kndd.googlevideo.com.": {},
@@ -4704,7 +4678,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-hp57kndr.googlevideo.com.": {},
"rr2---sn-hp57knds.googlevideo.com.": {},
"rr2---sn-hp57kndy.googlevideo.com.": {},
- "rr2---sn-hp57kndy.gvt1.com.": {},
"rr2---sn-hp57kndz.googlevideo.com.": {},
"rr2---sn-hp57yn7r.googlevideo.com.": {},
"rr2---sn-hp57yn7y.googlevideo.com.": {},
@@ -4716,12 +4689,14 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-hp57ynly.googlevideo.com.": {},
"rr2---sn-hp57yns7.googlevideo.com.": {},
"rr2---sn-hp57ynse.googlevideo.com.": {},
+ "rr2---sn-hp57ynsl.googlevideo.com.": {},
+ "rr2---sn-hp57ynsl.gvt1.com.": {},
"rr2---sn-hp57ynss.googlevideo.com.": {},
- "rr2---sn-hp57ynss.gvt1.com.": {},
- "rr2---sn-hxugvoxupoj-poqz.googlevideo.com.": {},
+ "rr2---sn-hxgpu-qufs.googlevideo.com.": {},
"rr2---sn-i3b7kn6s.googlevideo.com.": {},
"rr2---sn-i3b7knld.googlevideo.com.": {},
"rr2---sn-i3b7knlk.googlevideo.com.": {},
+ "rr2---sn-i3b7kns6.googlevideo.com.": {},
"rr2---sn-i3b7knsd.googlevideo.com.": {},
"rr2---sn-i3b7knse.googlevideo.com.": {},
"rr2---sn-i3b7knsl.googlevideo.com.": {},
@@ -4732,7 +4707,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-i3belnl6.googlevideo.com.": {},
"rr2---sn-i3belnl7.googlevideo.com.": {},
"rr2---sn-i3belnll.googlevideo.com.": {},
- "rr2---sn-i3belnls.googlevideo.com.": {},
"rr2---sn-i3belnlz.googlevideo.com.": {},
"rr2---sn-i3bssn7e.googlevideo.com.": {},
"rr2---sn-i5f5ppuxa-ioal.googlevideo.com.": {},
@@ -4758,6 +4732,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-jxopj-n5oe.gvt1.com.": {},
"rr2---sn-jxopj-nh4e.googlevideo.com.": {},
"rr2---sn-jxopj-nh4e.gvt1.com.": {},
+ "rr2---sn-muxa-2iae.googlevideo.com.": {},
"rr2---sn-n0g45pg-ncoe.googlevideo.com.": {},
"rr2---sn-n2uxaxjvh-j5xl.googlevideo.com.": {},
"rr2---sn-n2uxaxjvh-j5xl.gvt1.com.": {},
@@ -4765,13 +4740,11 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-n2uxaxjvh-j5xs.gvt1.com.": {},
"rr2---sn-n4v7snee.googlevideo.com.": {},
"rr2---sn-n4v7sney.googlevideo.com.": {},
- "rr2---sn-n4v7snl7.googlevideo.com.": {},
"rr2---sn-n4v7snll.googlevideo.com.": {},
"rr2---sn-n4v7snlr.googlevideo.com.": {},
"rr2---sn-n4v7snls.googlevideo.com.": {},
"rr2---sn-n4v7snly.googlevideo.com.": {},
"rr2---sn-n4v7sns7.googlevideo.com.": {},
- "rr2---sn-n4v7sns7.gvt1.com.": {},
"rr2---sn-n4v7snse.googlevideo.com.": {},
"rr2---sn-nh5gujvh-h4xe.googlevideo.com.": {},
"rr2---sn-nh5gujvh-h4xe.gvt1.com.": {},
@@ -4791,7 +4764,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-npoe7ns7.googlevideo.com.": {},
"rr2---sn-npoe7nsd.googlevideo.com.": {},
"rr2---sn-npoe7nsk.googlevideo.com.": {},
- "rr2---sn-npoe7nsk.gvt1.com.": {},
"rr2---sn-npoe7nsl.googlevideo.com.": {},
"rr2---sn-npoe7nsr.googlevideo.com.": {},
"rr2---sn-npoe7nss.googlevideo.com.": {},
@@ -4819,54 +4791,48 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-npoldn7z.googlevideo.com.": {},
"rr2---sn-npoldne7.googlevideo.com.": {},
"rr2---sn-nuagpm-nuae.googlevideo.com.": {},
- "rr2---sn-nv0ui4gvou-hape.googlevideo.com.": {},
+ "rr2---sn-nv0uixgo-5ual.googlevideo.com.": {},
"rr2---sn-nv47ln6e.googlevideo.com.": {},
- "rr2---sn-nv47lns6.googlevideo.com.": {},
- "rr2---sn-nv47lns7.googlevideo.com.": {},
- "rr2---sn-nv47lnsr.googlevideo.com.": {},
"rr2---sn-nv47zn7r.googlevideo.com.": {},
"rr2---sn-nv47zn7y.googlevideo.com.": {},
"rr2---sn-nv47zne7.googlevideo.com.": {},
"rr2---sn-nv47znee.googlevideo.com.": {},
"rr2---sn-nv47znel.googlevideo.com.": {},
+ "rr2---sn-nx57ynlk.googlevideo.com.": {},
"rr2---sn-nx57ynsd.googlevideo.com.": {},
"rr2---sn-nx57ynsd.gvt1.com.": {},
"rr2---sn-nx57ynsk.googlevideo.com.": {},
- "rr2---sn-nx57ynsk.gvt1.com.": {},
"rr2---sn-nx57ynsl.googlevideo.com.": {},
- "rr2---sn-nx57ynsl.gvt1.com.": {},
"rr2---sn-nx57ynss.googlevideo.com.": {},
"rr2---sn-nx57ynss.gvt1.com.": {},
"rr2---sn-nx57ynsz.googlevideo.com.": {},
+ "rr2---sn-nx57ynsz.gvt1.com.": {},
"rr2---sn-nx5s7n76.googlevideo.com.": {},
+ "rr2---sn-nx5s7n7d.googlevideo.com.": {},
"rr2---sn-nx5s7n7y.googlevideo.com.": {},
- "rr2---sn-nx5s7n7y.gvt1.com.": {},
"rr2---sn-nx5s7n7z.googlevideo.com.": {},
- "rr2---sn-nx5s7n7z.gvt1.com.": {},
"rr2---sn-nx5s7nee.googlevideo.com.": {},
+ "rr2---sn-nx5s7nee.gvt1.com.": {},
"rr2---sn-nx5s7nel.googlevideo.com.": {},
"rr2---sn-nx5s7nel.gvt1.com.": {},
"rr2---sn-o097znsd.googlevideo.com.": {},
- "rr2---sn-o097znsd.gvt1.com.": {},
"rr2---sn-o097znse.googlevideo.com.": {},
"rr2---sn-o097znsk.googlevideo.com.": {},
"rr2---sn-o097znsl.googlevideo.com.": {},
"rr2---sn-o097znsr.googlevideo.com.": {},
- "rr2---sn-o097znsr.gvt1.com.": {},
"rr2---sn-o097znss.googlevideo.com.": {},
"rr2---sn-o097znsz.googlevideo.com.": {},
"rr2---sn-o097znz7.googlevideo.com.": {},
"rr2---sn-o097znzd.googlevideo.com.": {},
"rr2---sn-o097znze.googlevideo.com.": {},
- "rr2---sn-o097znze.gvt1.com.": {},
"rr2---sn-o097znzk.googlevideo.com.": {},
"rr2---sn-o097znzr.googlevideo.com.": {},
"rr2---sn-opnq-n5ue.googlevideo.com.": {},
"rr2---sn-ounjvhh-acce.googlevideo.com.": {},
- "rr2---sn-oxgpj-5ace.googlevideo.com.": {},
"rr2---sn-p5qddn76.googlevideo.com.": {},
"rr2---sn-p5qddn7d.googlevideo.com.": {},
"rr2---sn-p5qddn7k.googlevideo.com.": {},
+ "rr2---sn-p5qddn7r.googlevideo.com.": {},
"rr2---sn-p5qddn7z.googlevideo.com.": {},
"rr2---sn-p5qlsn6l.googlevideo.com.": {},
"rr2---sn-p5qlsn76.googlevideo.com.": {},
@@ -4875,13 +4841,13 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-p5qlsn7s.googlevideo.com.": {},
"rr2---sn-p5qlsnd6.googlevideo.com.": {},
"rr2---sn-p5qlsndd.googlevideo.com.": {},
- "rr2---sn-p5qlsndr.googlevideo.com.": {},
"rr2---sn-p5qlsndz.googlevideo.com.": {},
"rr2---sn-p5qlsnrl.googlevideo.com.": {},
"rr2---sn-p5qlsnrr.googlevideo.com.": {},
"rr2---sn-p5qlsny6.googlevideo.com.": {},
"rr2---sn-p5qs7n6d.googlevideo.com.": {},
"rr2---sn-p5qs7nsk.googlevideo.com.": {},
+ "rr2---sn-p5qs7nsr.googlevideo.com.": {},
"rr2---sn-p5qs7nzk.googlevideo.com.": {},
"rr2---sn-p5qs7nzr.googlevideo.com.": {},
"rr2---sn-p5qs7nzy.googlevideo.com.": {},
@@ -4890,23 +4856,20 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-pobpb-poql.googlevideo.com.": {},
"rr2---sn-q4fl6n66.googlevideo.com.": {},
"rr2---sn-q4fl6n6d.googlevideo.com.": {},
- "rr2---sn-q4fl6n6d.gvt1.com.": {},
"rr2---sn-q4fl6n6r.googlevideo.com.": {},
"rr2---sn-q4fl6n6s.googlevideo.com.": {},
+ "rr2---sn-q4fl6n6s.gvt1.com.": {},
"rr2---sn-q4fl6n6y.googlevideo.com.": {},
"rr2---sn-q4fl6n6z.googlevideo.com.": {},
"rr2---sn-q4fl6nd6.googlevideo.com.": {},
"rr2---sn-q4fl6nd7.googlevideo.com.": {},
- "rr2---sn-q4fl6nd7.gvt1.com.": {},
"rr2---sn-q4fl6nde.googlevideo.com.": {},
"rr2---sn-q4fl6ndl.googlevideo.com.": {},
- "rr2---sn-q4fl6ndl.gvt1.com.": {},
"rr2---sn-q4fl6nds.googlevideo.com.": {},
- "rr2---sn-q4fl6nds.gvt1.com.": {},
"rr2---sn-q4fl6ndz.googlevideo.com.": {},
- "rr2---sn-q4fl6ndz.gvt1.com.": {},
"rr2---sn-q4fl6nlz.googlevideo.com.": {},
"rr2---sn-q4fl6ns6.googlevideo.com.": {},
+ "rr2---sn-q4fl6ns6.gvt1.com.": {},
"rr2---sn-q4fl6ns7.googlevideo.com.": {},
"rr2---sn-q4fl6ns7.gvt1.com.": {},
"rr2---sn-q4fl6nsd.googlevideo.com.": {},
@@ -4914,13 +4877,12 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-q4fl6nsk.googlevideo.com.": {},
"rr2---sn-q4fl6nsk.gvt1.com.": {},
"rr2---sn-q4fl6nsl.googlevideo.com.": {},
- "rr2---sn-q4fl6nsl.gvt1.com.": {},
"rr2---sn-q4fl6nsr.googlevideo.com.": {},
"rr2---sn-q4fl6nss.googlevideo.com.": {},
"rr2---sn-q4fl6nsy.googlevideo.com.": {},
"rr2---sn-q4fl6nsy.gvt1.com.": {},
- "rr2---sn-q4fl6nz6.googlevideo.com.": {},
"rr2---sn-q4fl6nz7.googlevideo.com.": {},
+ "rr2---sn-q4fl6nz7.gvt1.com.": {},
"rr2---sn-q4fl6nzy.googlevideo.com.": {},
"rr2---sn-q4flrn7k.googlevideo.com.": {},
"rr2---sn-q4flrn7r.googlevideo.com.": {},
@@ -4928,13 +4890,13 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-q4flrn7y.gvt1.com.": {},
"rr2---sn-q4flrne6.googlevideo.com.": {},
"rr2---sn-q4flrne7.googlevideo.com.": {},
- "rr2---sn-q4flrne7.gvt1.com.": {},
"rr2---sn-q4flrnee.googlevideo.com.": {},
"rr2---sn-q4flrnek.googlevideo.com.": {},
"rr2---sn-q4flrnel.googlevideo.com.": {},
"rr2---sn-q4flrner.googlevideo.com.": {},
"rr2---sn-q4flrner.gvt1.com.": {},
"rr2---sn-q4flrnes.googlevideo.com.": {},
+ "rr2---sn-q4flrnes.gvt1.com.": {},
"rr2---sn-q4flrney.googlevideo.com.": {},
"rr2---sn-q4flrnez.googlevideo.com.": {},
"rr2---sn-q4flrnl6.googlevideo.com.": {},
@@ -4942,133 +4904,113 @@ var FakeECSFQDNs = map[string]struct{}{
"rr2---sn-q4flrnld.googlevideo.com.": {},
"rr2---sn-q4flrnld.gvt1.com.": {},
"rr2---sn-q4flrnle.googlevideo.com.": {},
- "rr2---sn-q4flrnle.gvt1.com.": {},
- "rr2---sn-q4flrnlz.googlevideo.com.": {},
"rr2---sn-q4flrnsd.googlevideo.com.": {},
+ "rr2---sn-q4flrnsd.gvt1.com.": {},
"rr2---sn-q4flrnsk.googlevideo.com.": {},
"rr2---sn-q4flrnsl.googlevideo.com.": {},
"rr2---sn-q4flrnsl.gvt1.com.": {},
"rr2---sn-q4flrnss.googlevideo.com.": {},
- "rr2---sn-q4flrnss.gvt1.com.": {},
"rr2---sn-q4fzen7e.googlevideo.com.": {},
"rr2---sn-q4fzen7l.googlevideo.com.": {},
"rr2---sn-q4fzen7r.googlevideo.com.": {},
- "rr2---sn-q4fzen7r.gvt1.com.": {},
"rr2---sn-q4fzen7s.googlevideo.com.": {},
- "rr2---sn-q4fzen7s.gvt1.com.": {},
"rr2---sn-q4fzen7y.googlevideo.com.": {},
"rr2---sn-q4fzene7.googlevideo.com.": {},
"rr2---sn-q4fzene7.gvt1.com.": {},
"rr2---sn-q4fzenee.googlevideo.com.": {},
- "rr2---sn-q4fzenee.gvt1.com.": {},
- "rr2---sn-qpbp-30ay.googlevideo.com.": {},
"rr2---sn-qxo7rn7k.googlevideo.com.": {},
"rr2---sn-qxo7rn7r.googlevideo.com.": {},
"rr2---sn-qxo7rn7y.googlevideo.com.": {},
+ "rr2---sn-qxoedn7k.googlevideo.com.": {},
"rr2---sn-qxoedne7.googlevideo.com.": {},
"rr2---sn-qxoednee.googlevideo.com.": {},
+ "rr2---sn-qxuxa-5xme.googlevideo.com.": {},
"rr2---sn-u1hp55-5c.googlevideo.com.": {},
"rr2---sn-uhvcpaxoa-5hne.googlevideo.com.": {},
"rr2---sn-uhvcpaxoa-guhe.googlevideo.com.": {},
- "rr2---sn-v53a5oqnji-4oul.googlevideo.com.": {},
- "rr2---sn-v53a5oqnji-4oul.gvt1.com.": {},
"rr2---sn-v5goxu-jhi6.googlevideo.com.": {},
"rr2---sn-v5goxu-jhi6.gvt1.com.": {},
"rr2---sn-v5goxu-jhil.googlevideo.com.": {},
"rr2---sn-v5goxu-jhiz.googlevideo.com.": {},
- "rr2---sn-v5goxu-jhiz.gvt1.com.": {},
"rr2---sn-vgqskn66.googlevideo.com.": {},
"rr2---sn-vgqskn67.googlevideo.com.": {},
- "rr2---sn-vgqskn67.gvt1.com.": {},
"rr2---sn-vgqskn6d.googlevideo.com.": {},
"rr2---sn-vgqskn6s.googlevideo.com.": {},
- "rr2---sn-vgqskn6s.gvt1.com.": {},
"rr2---sn-vgqskn6z.googlevideo.com.": {},
"rr2---sn-vgqskne6.googlevideo.com.": {},
- "rr2---sn-vgqskne6.gvt1.com.": {},
"rr2---sn-vgqskned.googlevideo.com.": {},
"rr2---sn-vgqsknek.googlevideo.com.": {},
"rr2---sn-vgqsknes.googlevideo.com.": {},
"rr2---sn-vgqsknez.googlevideo.com.": {},
"rr2---sn-vgqsknld.googlevideo.com.": {},
- "rr2---sn-vgqsknld.gvt1.com.": {},
"rr2---sn-vgqsknlk.googlevideo.com.": {},
"rr2---sn-vgqsknll.googlevideo.com.": {},
"rr2---sn-vgqsknlr.googlevideo.com.": {},
"rr2---sn-vgqsknlr.gvt1.com.": {},
"rr2---sn-vgqsknls.googlevideo.com.": {},
- "rr2---sn-vgqsknls.gvt1.com.": {},
"rr2---sn-vgqsknlz.googlevideo.com.": {},
- "rr2---sn-vgqsknlz.gvt1.com.": {},
+ "rr2---sn-vgqskns7.googlevideo.com.": {},
+ "rr2---sn-vgqsknse.googlevideo.com.": {},
"rr2---sn-vgqsknsk.googlevideo.com.": {},
- "rr2---sn-vgqsknsk.gvt1.com.": {},
"rr2---sn-vgqsknz6.googlevideo.com.": {},
- "rr2---sn-vgqsknz6.gvt1.com.": {},
"rr2---sn-vgqsknz7.googlevideo.com.": {},
"rr2---sn-vgqsknzd.googlevideo.com.": {},
"rr2---sn-vgqsknzd.gvt1.com.": {},
"rr2---sn-vgqsknze.googlevideo.com.": {},
- "rr2---sn-vgqsknze.gvt1.com.": {},
"rr2---sn-vgqsknzk.googlevideo.com.": {},
"rr2---sn-vgqsknzl.googlevideo.com.": {},
"rr2---sn-vgqsknzr.googlevideo.com.": {},
- "rr2---sn-vgqsknzr.gvt1.com.": {},
"rr2---sn-vgqsknzs.googlevideo.com.": {},
"rr2---sn-vgqsknzy.googlevideo.com.": {},
- "rr2---sn-vgqsknzy.gvt1.com.": {},
"rr2---sn-vgqsknzz.googlevideo.com.": {},
+ "rr2---sn-vgqsknzz.gvt1.com.": {},
"rr2---sn-vgqsrn66.googlevideo.com.": {},
- "rr2---sn-vgqsrn66.gvt1.com.": {},
"rr2---sn-vgqsrn67.googlevideo.com.": {},
+ "rr2---sn-vgqsrn67.gvt1.com.": {},
"rr2---sn-vgqsrn6e.googlevideo.com.": {},
"rr2---sn-vgqsrn6l.googlevideo.com.": {},
+ "rr2---sn-vgqsrn6l.gvt1.com.": {},
"rr2---sn-vgqsrn6z.googlevideo.com.": {},
- "rr2---sn-vgqsrn6z.gvt1.com.": {},
"rr2---sn-vgqsrne6.googlevideo.com.": {},
"rr2---sn-vgqsrned.googlevideo.com.": {},
"rr2---sn-vgqsrnek.googlevideo.com.": {},
"rr2---sn-vgqsrnes.googlevideo.com.": {},
"rr2---sn-vgqsrnez.googlevideo.com.": {},
"rr2---sn-vgqsrnl6.googlevideo.com.": {},
- "rr2---sn-vgqsrnl6.gvt1.com.": {},
+ "rr2---sn-vgqsrnld.googlevideo.com.": {},
"rr2---sn-vgqsrnlk.googlevideo.com.": {},
"rr2---sn-vgqsrnll.googlevideo.com.": {},
"rr2---sn-vgqsrnls.googlevideo.com.": {},
+ "rr2---sn-vgqsrnls.gvt1.com.": {},
"rr2---sn-vgqsrnlz.googlevideo.com.": {},
"rr2---sn-vgqsrns6.googlevideo.com.": {},
"rr2---sn-vgqsrnsd.googlevideo.com.": {},
- "rr2---sn-vgqsrnsd.gvt1.com.": {},
"rr2---sn-vgqsrnsr.googlevideo.com.": {},
"rr2---sn-vgqsrnsr.gvt1.com.": {},
"rr2---sn-vgqsrnsy.googlevideo.com.": {},
- "rr2---sn-vgqsrnsy.gvt1.com.": {},
"rr2---sn-vgqsrnz6.googlevideo.com.": {},
"rr2---sn-vgqsrnz7.googlevideo.com.": {},
+ "rr2---sn-vgqsrnz7.gvt1.com.": {},
"rr2---sn-vgqsrnzd.googlevideo.com.": {},
"rr2---sn-vgqsrnzk.googlevideo.com.": {},
"rr2---sn-vgqsrnzr.googlevideo.com.": {},
"rr2---sn-vgqsrnzr.gvt1.com.": {},
"rr2---sn-vgqsrnzs.googlevideo.com.": {},
"rr2---sn-vgqsrnzy.googlevideo.com.": {},
- "rr2---sn-vgqsrnzy.gvt1.com.": {},
"rr2---sn-vgqsrnzz.googlevideo.com.": {},
"rr2---sn-vnix5o-28ql.googlevideo.com.": {},
"rr2---sn-voxoxu-v3jl.googlevideo.com.": {},
"rr2---sn-voxoxu-v3js.googlevideo.com.": {},
"rr2---sn-xo5-co5l.googlevideo.com.": {},
- "rr2.sn-5hne6nz6.googlevideo.com.": {},
- "rr2.sn-5hnekn7d.googlevideo.com.": {},
- "rr2.sn-aigzrne7.googlevideo.com.": {},
- "rr2.sn-q4fl6n6d.googlevideo.com.": {},
+ "rr2.sn-5hnednsz.googlevideo.com.": {},
+ "rr2.sn-q4fl6n6s.googlevideo.com.": {},
+ "rr2.sn-q4fl6nd6.googlevideo.com.": {},
+ "rr2.sn-q4fl6ndl.googlevideo.com.": {},
"rr3---sn-0nnpbo5a-bggl.googlevideo.com.": {},
- "rr3---sn-2aqu-hoas7.googlevideo.com.": {},
"rr3---sn-2imern76.googlevideo.com.": {},
- "rr3---sn-2imern76.gvt1.com.": {},
- "rr3---sn-2imern7d.googlevideo.com.": {},
- "rr3---sn-2imern7d.gvt1.com.": {},
"rr3---sn-2imeyn7k.googlevideo.com.": {},
- "rr3---sn-2imeyn7k.gvt1.com.": {},
"rr3---sn-2napbiu-p5ie.googlevideo.com.": {},
+ "rr3---sn-2napbiu-p5ie.gvt1.com.": {},
"rr3---sn-2vgu0b5auxaxjvh-apnd.googlevideo.com.": {},
"rr3---sn-2vgu0b5auxaxjvh-v2vd.googlevideo.com.": {},
"rr3---sn-2vgu0b5auxaxjvh-v2ve.googlevideo.com.": {},
@@ -5076,14 +5018,13 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-2vgu0b5auxaxjvh-v2vz.googlevideo.com.": {},
"rr3---sn-30a7rne6.googlevideo.com.": {},
"rr3---sn-30a7rned.googlevideo.com.": {},
+ "rr3---sn-30a7rnek.googlevideo.com.": {},
"rr3---sn-30a7rner.googlevideo.com.": {},
"rr3---sn-30a7ynek.googlevideo.com.": {},
"rr3---sn-30a7yner.googlevideo.com.": {},
"rr3---sn-30a7yney.googlevideo.com.": {},
"rr3---sn-30a7ynl7.googlevideo.com.": {},
- "rr3---sn-42u-nboze.googlevideo.com.": {},
- "rr3---sn-42u-nbozs.googlevideo.com.": {},
- "rr3---sn-42u-nbozz.googlevideo.com.": {},
+ "rr3---sn-3jpm-hjpe.googlevideo.com.": {},
"rr3---sn-4g5e6ns6.googlevideo.com.": {},
"rr3---sn-4g5e6ns7.googlevideo.com.": {},
"rr3---sn-4g5e6nsd.googlevideo.com.": {},
@@ -5144,7 +5085,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-5hne6nsz.googlevideo.com.": {},
"rr3---sn-5hne6nz6.googlevideo.com.": {},
"rr3---sn-5hne6nzd.googlevideo.com.": {},
- "rr3---sn-5hne6nzd.gvt1.com.": {},
"rr3---sn-5hne6nzk.googlevideo.com.": {},
"rr3---sn-5hne6nzs.googlevideo.com.": {},
"rr3---sn-5hne6nzy.googlevideo.com.": {},
@@ -5163,6 +5103,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-5uaezndd.googlevideo.com.": {},
"rr3---sn-5uaezne6.googlevideo.com.": {},
"rr3---sn-5uaezned.googlevideo.com.": {},
+ "rr3---sn-5uaeznes.googlevideo.com.": {},
"rr3---sn-5uaeznez.googlevideo.com.": {},
"rr3---sn-5uaeznl6.googlevideo.com.": {},
"rr3---sn-5uaeznld.googlevideo.com.": {},
@@ -5174,8 +5115,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-5uaeznse.googlevideo.com.": {},
"rr3---sn-5uaeznsl.googlevideo.com.": {},
"rr3---sn-5uaeznss.googlevideo.com.": {},
- "rr3---sn-5uaezny6.googlevideo.com.": {},
- "rr3---sn-5uaeznys.googlevideo.com.": {},
"rr3---sn-5uaeznyz.googlevideo.com.": {},
"rr3---sn-5uaeznze.googlevideo.com.": {},
"rr3---sn-5ualdnle.googlevideo.com.": {},
@@ -5194,8 +5133,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-5ualdnsz.googlevideo.com.": {},
"rr3---sn-5ualdnz7.googlevideo.com.": {},
"rr3---sn-5ualdnze.googlevideo.com.": {},
- "rr3---sn-8qj-i5o6k.googlevideo.com.": {},
- "rr3---sn-8qj-i5ozr.googlevideo.com.": {},
"rr3---sn-8qj-nbo66.googlevideo.com.": {},
"rr3---sn-8xgp1vo-2iae.googlevideo.com.": {},
"rr3---sn-8xgp1vo-2iae7.googlevideo.com.": {},
@@ -5208,7 +5145,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-8xgp1vo-ab5l.googlevideo.com.": {},
"rr3---sn-8xgp1vo-ab5s.googlevideo.com.": {},
"rr3---sn-8xgp1vo-ab5z.googlevideo.com.": {},
- "rr3---sn-8xgp1vo-nh4e.googlevideo.com.": {},
"rr3---sn-8xgp1vo-p5ie.googlevideo.com.": {},
"rr3---sn-8xgp1vo-vgqe.googlevideo.com.": {},
"rr3---sn-8xgp1vo-xfge.googlevideo.com.": {},
@@ -5222,28 +5158,27 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-9gv7zn76.googlevideo.com.": {},
"rr3---sn-9gv7zn7e.googlevideo.com.": {},
"rr3---sn-9gv7zn7r.googlevideo.com.": {},
+ "rr3---sn-9gv7zn7y.googlevideo.com.": {},
"rr3---sn-a5m7lnld.googlevideo.com.": {},
- "rr3---sn-a5m7lnld.gvt1.com.": {},
"rr3---sn-a5mekn6d.googlevideo.com.": {},
"rr3---sn-a5mekn6d.gvt1.com.": {},
"rr3---sn-a5mekn6k.googlevideo.com.": {},
+ "rr3---sn-a5mekn6k.gvt1.com.": {},
"rr3---sn-a5mekn6l.googlevideo.com.": {},
"rr3---sn-a5mekn6l.gvt1.com.": {},
"rr3---sn-a5mekn6r.googlevideo.com.": {},
"rr3---sn-a5mekn6s.googlevideo.com.": {},
"rr3---sn-a5meknd6.googlevideo.com.": {},
- "rr3---sn-a5meknd6.gvt1.com.": {},
"rr3---sn-a5meknde.googlevideo.com.": {},
"rr3---sn-a5mekndl.googlevideo.com.": {},
"rr3---sn-a5meknds.googlevideo.com.": {},
+ "rr3---sn-a5meknds.gvt1.com.": {},
"rr3---sn-a5mekndz.googlevideo.com.": {},
"rr3---sn-a5meknsd.googlevideo.com.": {},
"rr3---sn-a5meknsy.googlevideo.com.": {},
- "rr3---sn-a5meknsy.gvt1.com.": {},
"rr3---sn-a5meknzk.googlevideo.com.": {},
- "rr3---sn-a5meknzl.googlevideo.com.": {},
- "rr3---sn-a5meknzl.gvt1.com.": {},
"rr3---sn-a5meknzr.googlevideo.com.": {},
+ "rr3---sn-a5meknzr.gvt1.com.": {},
"rr3---sn-a5meknzs.googlevideo.com.": {},
"rr3---sn-a5mlrnek.googlevideo.com.": {},
"rr3---sn-a5mlrnl6.googlevideo.com.": {},
@@ -5256,55 +5191,43 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-a5msen7l.googlevideo.com.": {},
"rr3---sn-a5msen7s.googlevideo.com.": {},
"rr3---sn-a5msen7z.googlevideo.com.": {},
+ "rr3---sn-a5msen7z.gvt1.com.": {},
"rr3---sn-a5msenek.googlevideo.com.": {},
- "rr3---sn-a5msenek.gvt1.com.": {},
"rr3---sn-a5msener.googlevideo.com.": {},
"rr3---sn-a5msenes.googlevideo.com.": {},
"rr3---sn-a5msenl7.googlevideo.com.": {},
"rr3---sn-a5msenle.googlevideo.com.": {},
- "rr3---sn-a5msenle.gvt1.com.": {},
"rr3---sn-a5msenll.googlevideo.com.": {},
- "rr3---sn-a5msenll.gvt1.com.": {},
"rr3---sn-ab5l6ndr.googlevideo.com.": {},
"rr3---sn-ab5l6ndy.googlevideo.com.": {},
"rr3---sn-ab5l6nk6.googlevideo.com.": {},
- "rr3---sn-ab5l6nk6.gvt1.com.": {},
"rr3---sn-ab5l6nkd.googlevideo.com.": {},
"rr3---sn-ab5l6nr6.googlevideo.com.": {},
- "rr3---sn-ab5l6nr6.gvt1.com.": {},
"rr3---sn-ab5l6nrd.googlevideo.com.": {},
- "rr3---sn-ab5l6nrd.gvt1.com.": {},
"rr3---sn-ab5l6nrk.googlevideo.com.": {},
"rr3---sn-ab5l6nrl.googlevideo.com.": {},
- "rr3---sn-ab5l6nrl.gvt1.com.": {},
"rr3---sn-ab5l6nrr.googlevideo.com.": {},
"rr3---sn-ab5l6nrs.googlevideo.com.": {},
"rr3---sn-ab5l6nrz.googlevideo.com.": {},
"rr3---sn-ab5l6nrz.gvt1.com.": {},
"rr3---sn-ab5sznld.googlevideo.com.": {},
"rr3---sn-ab5sznlk.googlevideo.com.": {},
- "rr3---sn-ab5sznlk.gvt1.com.": {},
"rr3---sn-ab5sznly.googlevideo.com.": {},
"rr3---sn-ab5sznz6.googlevideo.com.": {},
- "rr3---sn-ab5sznz6.gvt1.com.": {},
"rr3---sn-ab5sznzd.googlevideo.com.": {},
- "rr3---sn-ab5sznzd.gvt1.com.": {},
"rr3---sn-ab5sznze.googlevideo.com.": {},
- "rr3---sn-ab5sznze.gvt1.com.": {},
"rr3---sn-ab5sznzk.googlevideo.com.": {},
"rr3---sn-ab5sznzl.googlevideo.com.": {},
"rr3---sn-ab5sznzr.googlevideo.com.": {},
"rr3---sn-ab5sznzs.googlevideo.com.": {},
- "rr3---sn-ab5sznzs.gvt1.com.": {},
"rr3---sn-ab5sznzy.googlevideo.com.": {},
"rr3---sn-ab5sznzz.googlevideo.com.": {},
"rr3---sn-aigl6n6s.googlevideo.com.": {},
- "rr3---sn-aigl6n6s.gvt1.com.": {},
"rr3---sn-aigl6ned.googlevideo.com.": {},
+ "rr3---sn-aigl6nek.googlevideo.com.": {},
"rr3---sn-aigl6ner.googlevideo.com.": {},
"rr3---sn-aigl6ney.googlevideo.com.": {},
"rr3---sn-aigl6nl7.googlevideo.com.": {},
- "rr3---sn-aigl6nl7.gvt1.com.": {},
"rr3---sn-aigl6ns6.googlevideo.com.": {},
"rr3---sn-aigl6nsd.googlevideo.com.": {},
"rr3---sn-aigl6nsk.googlevideo.com.": {},
@@ -5317,7 +5240,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-aigl6nzs.googlevideo.com.": {},
"rr3---sn-aigzrn76.googlevideo.com.": {},
"rr3---sn-aigzrn7d.googlevideo.com.": {},
- "rr3---sn-aigzrn7d.gvt1.com.": {},
"rr3---sn-aigzrn7e.googlevideo.com.": {},
"rr3---sn-aigzrn7k.googlevideo.com.": {},
"rr3---sn-aigzrn7l.googlevideo.com.": {},
@@ -5332,7 +5254,9 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-aigzrnsz.googlevideo.com.": {},
"rr3---sn-aigzrnz7.googlevideo.com.": {},
"rr3---sn-aigzrnze.googlevideo.com.": {},
+ "rr3---sn-aj5ua5-5c.googlevideo.com.": {},
"rr3---sn-apn7en7e.googlevideo.com.": {},
+ "rr3---sn-apn7en7l.googlevideo.com.": {},
"rr3---sn-apn7en7s.googlevideo.com.": {},
"rr3---sn-bg5oqxjvh-50nz.googlevideo.com.": {},
"rr3---sn-c0q7lnz7.googlevideo.com.": {},
@@ -5345,51 +5269,55 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-cvb7sn7r.googlevideo.com.": {},
"rr3---sn-gpuuxg-hxhl.googlevideo.com.": {},
"rr3---sn-gpuuxg-hxhl.gvt1.com.": {},
+ "rr3---sn-gvbxgn-tvf6.googlevideo.com.": {},
+ "rr3---sn-gvbxgn-tvfz.googlevideo.com.": {},
"rr3---sn-h0jeened.googlevideo.com.": {},
"rr3---sn-h0jeenek.googlevideo.com.": {},
"rr3---sn-h0jeener.googlevideo.com.": {},
"rr3---sn-h0jeenl6.googlevideo.com.": {},
"rr3---sn-h0jeenld.googlevideo.com.": {},
"rr3---sn-h0jeenle.googlevideo.com.": {},
+ "rr3---sn-h0jeln7e.googlevideo.com.": {},
"rr3---sn-h0jeln7l.googlevideo.com.": {},
"rr3---sn-h0jelne6.googlevideo.com.": {},
"rr3---sn-h0jelne7.googlevideo.com.": {},
"rr3---sn-h0jelnes.googlevideo.com.": {},
"rr3---sn-h0jelnez.googlevideo.com.": {},
+ "rr3---sn-hgn7rn7k.googlevideo.com.": {},
+ "rr3---sn-hgn7rnls.googlevideo.com.": {},
"rr3---sn-hjoj-gq0l.googlevideo.com.": {},
- "rr3---sn-hjoj-gq0l.gvt1.com.": {},
+ "rr3---sn-hjoj-jaul.googlevideo.com.": {},
"rr3---sn-hjoj-poul.googlevideo.com.": {},
"rr3---sn-hoa7kn76.googlevideo.com.": {},
"rr3---sn-hoa7kn7z.googlevideo.com.": {},
"rr3---sn-hoa7rn76.googlevideo.com.": {},
"rr3---sn-hoa7rn7z.googlevideo.com.": {},
+ "rr3---sn-hp57kn6r.googlevideo.com.": {},
"rr3---sn-hp57kn6y.googlevideo.com.": {},
+ "rr3---sn-hp57kn6y.gvt1.com.": {},
"rr3---sn-hp57knd6.googlevideo.com.": {},
"rr3---sn-hp57kndd.googlevideo.com.": {},
"rr3---sn-hp57kndk.googlevideo.com.": {},
"rr3---sn-hp57kndk.gvt1.com.": {},
"rr3---sn-hp57kndr.googlevideo.com.": {},
+ "rr3---sn-hp57kndr.gvt1.com.": {},
"rr3---sn-hp57knds.googlevideo.com.": {},
- "rr3---sn-hp57knds.gvt1.com.": {},
"rr3---sn-hp57kndy.googlevideo.com.": {},
- "rr3---sn-hp57kndy.gvt1.com.": {},
"rr3---sn-hp57kndz.googlevideo.com.": {},
- "rr3---sn-hp57kndz.gvt1.com.": {},
"rr3---sn-hp57yn7r.googlevideo.com.": {},
"rr3---sn-hp57yn7y.googlevideo.com.": {},
- "rr3---sn-hp57yn7y.gvt1.com.": {},
"rr3---sn-hp57yne7.googlevideo.com.": {},
"rr3---sn-hp57ynee.googlevideo.com.": {},
"rr3---sn-hp57ynl6.googlevideo.com.": {},
- "rr3---sn-hp57ynl6.gvt1.com.": {},
"rr3---sn-hp57ynlr.googlevideo.com.": {},
"rr3---sn-hp57ynly.googlevideo.com.": {},
"rr3---sn-hp57ynly.gvt1.com.": {},
"rr3---sn-hp57yns7.googlevideo.com.": {},
"rr3---sn-hp57ynse.googlevideo.com.": {},
+ "rr3---sn-hp57ynse.gvt1.com.": {},
"rr3---sn-hp57ynsl.googlevideo.com.": {},
+ "rr3---sn-hp57ynsl.gvt1.com.": {},
"rr3---sn-hp57ynss.googlevideo.com.": {},
- "rr3---sn-hp57ynss.gvt1.com.": {},
"rr3---sn-i3b7kn6s.googlevideo.com.": {},
"rr3---sn-i3b7knld.googlevideo.com.": {},
"rr3---sn-i3b7knlk.googlevideo.com.": {},
@@ -5397,7 +5325,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-i3b7knsd.googlevideo.com.": {},
"rr3---sn-i3b7knse.googlevideo.com.": {},
"rr3---sn-i3b7knsl.googlevideo.com.": {},
- "rr3---sn-i3b7knzl.googlevideo.com.": {},
"rr3---sn-i3b7knzs.googlevideo.com.": {},
"rr3---sn-i3belne6.googlevideo.com.": {},
"rr3---sn-i3belney.googlevideo.com.": {},
@@ -5408,7 +5335,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-i3belnlz.googlevideo.com.": {},
"rr3---sn-i3bssn7e.googlevideo.com.": {},
"rr3---sn-i5f5ppuxa-ioal.googlevideo.com.": {},
- "rr3---sn-i5h7lner.googlevideo.com.": {},
"rr3---sn-i5h7lnl6.googlevideo.com.": {},
"rr3---sn-i5h7lnll.googlevideo.com.": {},
"rr3---sn-i5h7lnls.googlevideo.com.": {},
@@ -5429,11 +5355,10 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-jxopj-n5oe.gvt1.com.": {},
"rr3---sn-jxopj-nh4e.googlevideo.com.": {},
"rr3---sn-jxopj-nh4e.gvt1.com.": {},
+ "rr3---sn-muxa-2iae.googlevideo.com.": {},
"rr3---sn-n4v7snee.googlevideo.com.": {},
"rr3---sn-n4v7sney.googlevideo.com.": {},
- "rr3---sn-n4v7sney.gvt1.com.": {},
"rr3---sn-n4v7snl7.googlevideo.com.": {},
- "rr3---sn-n4v7snl7.gvt1.com.": {},
"rr3---sn-n4v7snll.googlevideo.com.": {},
"rr3---sn-n4v7snlr.googlevideo.com.": {},
"rr3---sn-n4v7snls.googlevideo.com.": {},
@@ -5470,6 +5395,9 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-npoeenez.googlevideo.com.": {},
"rr3---sn-npoeenl7.googlevideo.com.": {},
"rr3---sn-npoeenle.googlevideo.com.": {},
+ "rr3---sn-npoeenlk.googlevideo.com.": {},
+ "rr3---sn-npoeenll.googlevideo.com.": {},
+ "rr3---sn-npoeenly.googlevideo.com.": {},
"rr3---sn-npoeens7.googlevideo.com.": {},
"rr3---sn-npoldn76.googlevideo.com.": {},
"rr3---sn-npoldn7d.googlevideo.com.": {},
@@ -5479,36 +5407,31 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-npoldn7y.googlevideo.com.": {},
"rr3---sn-npoldn7z.googlevideo.com.": {},
"rr3---sn-npoldne7.googlevideo.com.": {},
- "rr3---sn-nv0ui4gvou-hape.googlevideo.com.": {},
"rr3---sn-nv47ln6e.googlevideo.com.": {},
- "rr3---sn-nv47lnly.googlevideo.com.": {},
"rr3---sn-nv47lns6.googlevideo.com.": {},
- "rr3---sn-nv47lns7.googlevideo.com.": {},
- "rr3---sn-nv47lnsr.googlevideo.com.": {},
"rr3---sn-nv47zn7r.googlevideo.com.": {},
"rr3---sn-nv47zn7y.googlevideo.com.": {},
"rr3---sn-nv47zne7.googlevideo.com.": {},
"rr3---sn-nv47znee.googlevideo.com.": {},
"rr3---sn-nv47znel.googlevideo.com.": {},
+ "rr3---sn-nx57ynlk.googlevideo.com.": {},
+ "rr3---sn-nx57ynlk.gvt1.com.": {},
"rr3---sn-nx57ynsd.googlevideo.com.": {},
- "rr3---sn-nx57ynsd.gvt1.com.": {},
"rr3---sn-nx57ynse.googlevideo.com.": {},
- "rr3---sn-nx57ynse.gvt1.com.": {},
"rr3---sn-nx57ynsk.googlevideo.com.": {},
"rr3---sn-nx57ynsk.gvt1.com.": {},
"rr3---sn-nx57ynsl.googlevideo.com.": {},
- "rr3---sn-nx57ynsl.gvt1.com.": {},
"rr3---sn-nx57ynss.googlevideo.com.": {},
- "rr3---sn-nx57ynss.gvt1.com.": {},
"rr3---sn-nx57ynsz.googlevideo.com.": {},
"rr3---sn-nx5s7n76.googlevideo.com.": {},
+ "rr3---sn-nx5s7n76.gvt1.com.": {},
"rr3---sn-nx5s7n7d.googlevideo.com.": {},
+ "rr3---sn-nx5s7n7d.gvt1.com.": {},
"rr3---sn-nx5s7n7s.googlevideo.com.": {},
"rr3---sn-nx5s7n7y.googlevideo.com.": {},
"rr3---sn-nx5s7n7y.gvt1.com.": {},
"rr3---sn-nx5s7n7z.googlevideo.com.": {},
"rr3---sn-nx5s7nee.googlevideo.com.": {},
- "rr3---sn-nx5s7nee.gvt1.com.": {},
"rr3---sn-nx5s7nel.googlevideo.com.": {},
"rr3---sn-nx5s7nel.gvt1.com.": {},
"rr3---sn-o097znsd.googlevideo.com.": {},
@@ -5516,7 +5439,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-o097znsk.googlevideo.com.": {},
"rr3---sn-o097znsl.googlevideo.com.": {},
"rr3---sn-o097znsr.googlevideo.com.": {},
- "rr3---sn-o097znsr.gvt1.com.": {},
"rr3---sn-o097znss.googlevideo.com.": {},
"rr3---sn-o097znsz.googlevideo.com.": {},
"rr3---sn-o097znz7.googlevideo.com.": {},
@@ -5528,37 +5450,39 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-p5qddn76.googlevideo.com.": {},
"rr3---sn-p5qddn7d.googlevideo.com.": {},
"rr3---sn-p5qddn7k.googlevideo.com.": {},
- "rr3---sn-p5qddn7z.googlevideo.com.": {},
+ "rr3---sn-p5qddn7r.googlevideo.com.": {},
"rr3---sn-p5qlsn6l.googlevideo.com.": {},
"rr3---sn-p5qlsn76.googlevideo.com.": {},
- "rr3---sn-p5qlsn76.gvt1.com.": {},
"rr3---sn-p5qlsn7d.googlevideo.com.": {},
"rr3---sn-p5qlsn7l.googlevideo.com.": {},
"rr3---sn-p5qlsn7s.googlevideo.com.": {},
- "rr3---sn-p5qlsn7s.gvt1.com.": {},
"rr3---sn-p5qlsnd6.googlevideo.com.": {},
"rr3---sn-p5qlsndd.googlevideo.com.": {},
"rr3---sn-p5qlsndk.googlevideo.com.": {},
+ "rr3---sn-p5qlsndr.googlevideo.com.": {},
"rr3---sn-p5qlsndz.googlevideo.com.": {},
"rr3---sn-p5qlsnrl.googlevideo.com.": {},
- "rr3---sn-p5qlsnrr.googlevideo.com.": {},
"rr3---sn-p5qlsny6.googlevideo.com.": {},
"rr3---sn-p5qs7n6d.googlevideo.com.": {},
+ "rr3---sn-p5qs7nsk.googlevideo.com.": {},
+ "rr3---sn-p5qs7nsr.googlevideo.com.": {},
"rr3---sn-p5qs7nzk.googlevideo.com.": {},
"rr3---sn-p5qs7nzr.googlevideo.com.": {},
"rr3---sn-p5qs7nzy.googlevideo.com.": {},
"rr3---sn-pobpb-poql.googlevideo.com.": {},
"rr3---sn-q4fl6n66.googlevideo.com.": {},
"rr3---sn-q4fl6n6d.googlevideo.com.": {},
+ "rr3---sn-q4fl6n6d.gvt1.com.": {},
"rr3---sn-q4fl6n6r.googlevideo.com.": {},
"rr3---sn-q4fl6n6s.googlevideo.com.": {},
+ "rr3---sn-q4fl6n6s.gvt1.com.": {},
"rr3---sn-q4fl6n6y.googlevideo.com.": {},
- "rr3---sn-q4fl6n6y.gvt1.com.": {},
"rr3---sn-q4fl6n6z.googlevideo.com.": {},
+ "rr3---sn-q4fl6n6z.gvt1.com.": {},
"rr3---sn-q4fl6nd6.googlevideo.com.": {},
- "rr3---sn-q4fl6nd6.gvt1.com.": {},
"rr3---sn-q4fl6nd7.googlevideo.com.": {},
"rr3---sn-q4fl6nde.googlevideo.com.": {},
+ "rr3---sn-q4fl6nde.gvt1.com.": {},
"rr3---sn-q4fl6ndl.googlevideo.com.": {},
"rr3---sn-q4fl6ndl.gvt1.com.": {},
"rr3---sn-q4fl6nds.googlevideo.com.": {},
@@ -5575,21 +5499,23 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-q4fl6nsr.googlevideo.com.": {},
"rr3---sn-q4fl6nss.googlevideo.com.": {},
"rr3---sn-q4fl6nsy.googlevideo.com.": {},
- "rr3---sn-q4fl6nsy.gvt1.com.": {},
"rr3---sn-q4fl6nz6.googlevideo.com.": {},
+ "rr3---sn-q4fl6nz6.gvt1.com.": {},
"rr3---sn-q4fl6nz7.googlevideo.com.": {},
"rr3---sn-q4fl6nz7.gvt1.com.": {},
"rr3---sn-q4fl6nzy.googlevideo.com.": {},
+ "rr3---sn-q4fl6nzy.gvt1.com.": {},
"rr3---sn-q4flrn7k.googlevideo.com.": {},
"rr3---sn-q4flrn7r.googlevideo.com.": {},
+ "rr3---sn-q4flrn7r.gvt1.com.": {},
"rr3---sn-q4flrn7y.googlevideo.com.": {},
- "rr3---sn-q4flrn7y.gvt1.com.": {},
"rr3---sn-q4flrne6.googlevideo.com.": {},
"rr3---sn-q4flrne6.gvt1.com.": {},
"rr3---sn-q4flrne7.googlevideo.com.": {},
"rr3---sn-q4flrnee.googlevideo.com.": {},
"rr3---sn-q4flrnee.gvt1.com.": {},
"rr3---sn-q4flrnek.googlevideo.com.": {},
+ "rr3---sn-q4flrnek.gvt1.com.": {},
"rr3---sn-q4flrnel.googlevideo.com.": {},
"rr3---sn-q4flrner.googlevideo.com.": {},
"rr3---sn-q4flrnes.googlevideo.com.": {},
@@ -5597,11 +5523,9 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-q4flrney.gvt1.com.": {},
"rr3---sn-q4flrnez.googlevideo.com.": {},
"rr3---sn-q4flrnl6.googlevideo.com.": {},
- "rr3---sn-q4flrnl6.gvt1.com.": {},
"rr3---sn-q4flrnl7.googlevideo.com.": {},
"rr3---sn-q4flrnl7.gvt1.com.": {},
"rr3---sn-q4flrnld.googlevideo.com.": {},
- "rr3---sn-q4flrnld.gvt1.com.": {},
"rr3---sn-q4flrnle.googlevideo.com.": {},
"rr3---sn-q4flrnle.gvt1.com.": {},
"rr3---sn-q4flrnlz.googlevideo.com.": {},
@@ -5619,111 +5543,97 @@ var FakeECSFQDNs = map[string]struct{}{
"rr3---sn-q4fzen7s.googlevideo.com.": {},
"rr3---sn-q4fzen7y.googlevideo.com.": {},
"rr3---sn-q4fzene7.googlevideo.com.": {},
- "rr3---sn-q4fzene7.gvt1.com.": {},
"rr3---sn-q4fzenee.googlevideo.com.": {},
"rr3---sn-q4fzenee.gvt1.com.": {},
- "rr3---sn-qpbp-30ar.googlevideo.com.": {},
"rr3---sn-qxo7rn7k.googlevideo.com.": {},
"rr3---sn-qxo7rn7r.googlevideo.com.": {},
"rr3---sn-qxo7rn7y.googlevideo.com.": {},
"rr3---sn-qxoedn7k.googlevideo.com.": {},
"rr3---sn-qxoednee.googlevideo.com.": {},
- "rr3---sn-t0a7sn7d.googlevideo.com.": {},
"rr3---sn-u1hp55-5c.googlevideo.com.": {},
- "rr3---sn-u1hp55-5c.gvt1.com.": {},
"rr3---sn-uhvcpaxoa-5hne.googlevideo.com.": {},
"rr3---sn-uhvcpaxoa-guhe.googlevideo.com.": {},
"rr3---sn-v5goxu-jhil.googlevideo.com.": {},
- "rr3---sn-v5goxu-jhil.gvt1.com.": {},
"rr3---sn-vgqskn66.googlevideo.com.": {},
"rr3---sn-vgqskn67.googlevideo.com.": {},
- "rr3---sn-vgqskn67.gvt1.com.": {},
"rr3---sn-vgqskn6d.googlevideo.com.": {},
"rr3---sn-vgqskn6s.googlevideo.com.": {},
"rr3---sn-vgqskn6z.googlevideo.com.": {},
+ "rr3---sn-vgqskn6z.gvt1.com.": {},
"rr3---sn-vgqskne6.googlevideo.com.": {},
- "rr3---sn-vgqskne6.gvt1.com.": {},
"rr3---sn-vgqskned.googlevideo.com.": {},
"rr3---sn-vgqsknek.googlevideo.com.": {},
- "rr3---sn-vgqsknes.googlevideo.com.": {},
"rr3---sn-vgqsknez.googlevideo.com.": {},
+ "rr3---sn-vgqsknld.googlevideo.com.": {},
"rr3---sn-vgqsknlk.googlevideo.com.": {},
"rr3---sn-vgqsknll.googlevideo.com.": {},
"rr3---sn-vgqsknls.googlevideo.com.": {},
- "rr3---sn-vgqsknls.gvt1.com.": {},
"rr3---sn-vgqsknly.googlevideo.com.": {},
"rr3---sn-vgqsknlz.googlevideo.com.": {},
"rr3---sn-vgqskns7.googlevideo.com.": {},
"rr3---sn-vgqsknse.googlevideo.com.": {},
- "rr3---sn-vgqsknse.gvt1.com.": {},
"rr3---sn-vgqsknsk.googlevideo.com.": {},
"rr3---sn-vgqsknsk.gvt1.com.": {},
"rr3---sn-vgqsknz6.googlevideo.com.": {},
- "rr3---sn-vgqsknz6.gvt1.com.": {},
"rr3---sn-vgqsknz7.googlevideo.com.": {},
"rr3---sn-vgqsknzd.googlevideo.com.": {},
- "rr3---sn-vgqsknzd.gvt1.com.": {},
"rr3---sn-vgqsknze.googlevideo.com.": {},
"rr3---sn-vgqsknzk.googlevideo.com.": {},
"rr3---sn-vgqsknzl.googlevideo.com.": {},
"rr3---sn-vgqsknzr.googlevideo.com.": {},
- "rr3---sn-vgqsknzr.gvt1.com.": {},
"rr3---sn-vgqsknzs.googlevideo.com.": {},
- "rr3---sn-vgqsknzs.gvt1.com.": {},
"rr3---sn-vgqsknzy.googlevideo.com.": {},
+ "rr3---sn-vgqsknzy.gvt1.com.": {},
"rr3---sn-vgqsknzz.googlevideo.com.": {},
"rr3---sn-vgqsrn66.googlevideo.com.": {},
- "rr3---sn-vgqsrn66.gvt1.com.": {},
"rr3---sn-vgqsrn67.googlevideo.com.": {},
"rr3---sn-vgqsrn6e.googlevideo.com.": {},
- "rr3---sn-vgqsrn6e.gvt1.com.": {},
"rr3---sn-vgqsrn6l.googlevideo.com.": {},
"rr3---sn-vgqsrn6z.googlevideo.com.": {},
- "rr3---sn-vgqsrn6z.gvt1.com.": {},
"rr3---sn-vgqsrne6.googlevideo.com.": {},
"rr3---sn-vgqsrned.googlevideo.com.": {},
- "rr3---sn-vgqsrned.gvt1.com.": {},
"rr3---sn-vgqsrnek.googlevideo.com.": {},
- "rr3---sn-vgqsrnek.gvt1.com.": {},
"rr3---sn-vgqsrnes.googlevideo.com.": {},
"rr3---sn-vgqsrnez.googlevideo.com.": {},
"rr3---sn-vgqsrnl6.googlevideo.com.": {},
"rr3---sn-vgqsrnld.googlevideo.com.": {},
"rr3---sn-vgqsrnlk.googlevideo.com.": {},
- "rr3---sn-vgqsrnlk.gvt1.com.": {},
"rr3---sn-vgqsrnll.googlevideo.com.": {},
+ "rr3---sn-vgqsrnls.googlevideo.com.": {},
+ "rr3---sn-vgqsrnls.gvt1.com.": {},
"rr3---sn-vgqsrnlz.googlevideo.com.": {},
"rr3---sn-vgqsrns6.googlevideo.com.": {},
- "rr3---sn-vgqsrns6.gvt1.com.": {},
"rr3---sn-vgqsrnsd.googlevideo.com.": {},
+ "rr3---sn-vgqsrnsd.gvt1.com.": {},
"rr3---sn-vgqsrnsr.googlevideo.com.": {},
- "rr3---sn-vgqsrnsr.gvt1.com.": {},
"rr3---sn-vgqsrnsy.googlevideo.com.": {},
- "rr3---sn-vgqsrnsy.gvt1.com.": {},
"rr3---sn-vgqsrnz6.googlevideo.com.": {},
- "rr3---sn-vgqsrnz6.gvt1.com.": {},
"rr3---sn-vgqsrnz7.googlevideo.com.": {},
"rr3---sn-vgqsrnzd.googlevideo.com.": {},
- "rr3---sn-vgqsrnzd.gvt1.com.": {},
"rr3---sn-vgqsrnzk.googlevideo.com.": {},
"rr3---sn-vgqsrnzr.googlevideo.com.": {},
"rr3---sn-vgqsrnzs.googlevideo.com.": {},
+ "rr3---sn-vgqsrnzs.gvt1.com.": {},
"rr3---sn-vgqsrnzy.googlevideo.com.": {},
+ "rr3---sn-vgqsrnzy.gvt1.com.": {},
"rr3---sn-vgqsrnzz.googlevideo.com.": {},
"rr3---sn-vgqsrnzz.gvt1.com.": {},
- "rr3.sn-q4fl6nd6.googlevideo.com.": {},
- "rr3.sn-q4fl6ndz.googlevideo.com.": {},
- "rr3.sn-q4fl6nsd.googlevideo.com.": {},
+ "rr3.sn-5hne6n6e.googlevideo.com.": {},
+ "rr3.sn-hgn7rnls.googlevideo.com.": {},
+ "rr3.sn-q4fl6n6r.googlevideo.com.": {},
+ "rr3.sn-q4fl6nd7.googlevideo.com.": {},
+ "rr3.sn-q4fl6nde.googlevideo.com.": {},
+ "rr3.sn-q4fl6ns6.googlevideo.com.": {},
+ "rr3.sn-q4flrn7r.googlevideo.com.": {},
"rr3.sn-q4flrne6.googlevideo.com.": {},
- "rr3.sn-q4flrne7.googlevideo.com.": {},
- "rr3.sn-t0a7sn7d.googlevideo.com.": {},
+ "rr3.sn-q4flrnee.googlevideo.com.": {},
+ "rr3.sn-q4flrnld.googlevideo.com.": {},
+ "rr3.sn-q4flrnsd.googlevideo.com.": {},
+ "rr3.sn-q4fzen7r.googlevideo.com.": {},
"rr4---sn-0nnpbo5a-bggl.googlevideo.com.": {},
- "rr4---sn-2aqu-hoas7.googlevideo.com.": {},
"rr4---sn-2imern76.googlevideo.com.": {},
- "rr4---sn-2imern76.gvt1.com.": {},
"rr4---sn-2imern7d.googlevideo.com.": {},
"rr4---sn-2imeyn7k.googlevideo.com.": {},
- "rr4---sn-2imeyn7k.gvt1.com.": {},
"rr4---sn-2vgu0b5auxaxjvh-apnd.googlevideo.com.": {},
"rr4---sn-2vgu0b5auxaxjvh-v2vd.googlevideo.com.": {},
"rr4---sn-2vgu0b5auxaxjvh-v2ve.googlevideo.com.": {},
@@ -5731,15 +5641,14 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-2vgu0b5auxaxjvh-v2vz.googlevideo.com.": {},
"rr4---sn-30a7rne6.googlevideo.com.": {},
"rr4---sn-30a7rned.googlevideo.com.": {},
+ "rr4---sn-30a7rnek.googlevideo.com.": {},
"rr4---sn-30a7rner.googlevideo.com.": {},
"rr4---sn-30a7ynek.googlevideo.com.": {},
"rr4---sn-30a7yner.googlevideo.com.": {},
"rr4---sn-30a7yney.googlevideo.com.": {},
"rr4---sn-30a7ynl7.googlevideo.com.": {},
- "rr4---sn-42u-nboze.googlevideo.com.": {},
- "rr4---sn-42u-nbozl.googlevideo.com.": {},
- "rr4---sn-42u-nbozz.googlevideo.com.": {},
"rr4---sn-4g5e6ns6.googlevideo.com.": {},
+ "rr4---sn-4g5e6ns7.googlevideo.com.": {},
"rr4---sn-4g5e6nsd.googlevideo.com.": {},
"rr4---sn-4g5e6nsk.googlevideo.com.": {},
"rr4---sn-4g5e6nsr.googlevideo.com.": {},
@@ -5776,6 +5685,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-4g5ednss.googlevideo.com.": {},
"rr4---sn-4g5ednsy.googlevideo.com.": {},
"rr4---sn-4g5ednsz.googlevideo.com.": {},
+ "rr4---sn-4g5ednz7.googlevideo.com.": {},
"rr4---sn-4g5lzne6.googlevideo.com.": {},
"rr4---sn-4g5lzned.googlevideo.com.": {},
"rr4---sn-4g5lzner.googlevideo.com.": {},
@@ -5798,9 +5708,8 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-5hne6nz6.googlevideo.com.": {},
"rr4---sn-5hne6nzd.googlevideo.com.": {},
"rr4---sn-5hne6nzk.googlevideo.com.": {},
- "rr4---sn-5hne6nzk.gvt1.com.": {},
+ "rr4---sn-5hne6nzs.googlevideo.com.": {},
"rr4---sn-5hne6nzy.googlevideo.com.": {},
- "rr4---sn-5hne6nzy.gvt1.com.": {},
"rr4---sn-5hnednss.googlevideo.com.": {},
"rr4---sn-5hnednsz.googlevideo.com.": {},
"rr4---sn-5hnekn76.googlevideo.com.": {},
@@ -5809,14 +5718,13 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-5hnekn7l.googlevideo.com.": {},
"rr4---sn-5hnekn7s.googlevideo.com.": {},
"rr4---sn-5hnekn7z.googlevideo.com.": {},
- "rr4---sn-5hneknee.googlevideo.com.": {},
"rr4---sn-5hneknek.googlevideo.com.": {},
"rr4---sn-5hneknes.googlevideo.com.": {},
- "rr4---sn-5hneknes.gvt1.com.": {},
"rr4---sn-5pgnugx5h-hn2z.googlevideo.com.": {},
"rr4---sn-5uaezndd.googlevideo.com.": {},
"rr4---sn-5uaezne6.googlevideo.com.": {},
"rr4---sn-5uaezned.googlevideo.com.": {},
+ "rr4---sn-5uaeznes.googlevideo.com.": {},
"rr4---sn-5uaeznez.googlevideo.com.": {},
"rr4---sn-5uaeznl6.googlevideo.com.": {},
"rr4---sn-5uaeznld.googlevideo.com.": {},
@@ -5832,6 +5740,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-5uaeznys.googlevideo.com.": {},
"rr4---sn-5uaeznyz.googlevideo.com.": {},
"rr4---sn-5uaeznze.googlevideo.com.": {},
+ "rr4---sn-5ualdnll.googlevideo.com.": {},
"rr4---sn-5ualdnlr.googlevideo.com.": {},
"rr4---sn-5ualdnls.googlevideo.com.": {},
"rr4---sn-5ualdns6.googlevideo.com.": {},
@@ -5846,8 +5755,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-5ualdnsz.googlevideo.com.": {},
"rr4---sn-5ualdnz7.googlevideo.com.": {},
"rr4---sn-5ualdnze.googlevideo.com.": {},
- "rr4---sn-8qj-i5o6k.googlevideo.com.": {},
- "rr4---sn-8qj-i5ozr.googlevideo.com.": {},
"rr4---sn-8qj-nbo66.googlevideo.com.": {},
"rr4---sn-8xgp1vo-2iae.googlevideo.com.": {},
"rr4---sn-8xgp1vo-2iae7.googlevideo.com.": {},
@@ -5860,7 +5767,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-8xgp1vo-ab5l.googlevideo.com.": {},
"rr4---sn-8xgp1vo-ab5s.googlevideo.com.": {},
"rr4---sn-8xgp1vo-ab5z.googlevideo.com.": {},
- "rr4---sn-8xgp1vo-nh4e.googlevideo.com.": {},
"rr4---sn-8xgp1vo-p5ie.googlevideo.com.": {},
"rr4---sn-8xgp1vo-vgqe.googlevideo.com.": {},
"rr4---sn-8xgp1vo-xfge.googlevideo.com.": {},
@@ -5869,6 +5775,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-9gv76n7e.googlevideo.com.": {},
"rr4---sn-9gv76n7l.googlevideo.com.": {},
"rr4---sn-9gv76n7s.googlevideo.com.": {},
+ "rr4---sn-9gv76n7z.googlevideo.com.": {},
"rr4---sn-9gv7ene6.googlevideo.com.": {},
"rr4---sn-9gv7ened.googlevideo.com.": {},
"rr4---sn-9gv7zn76.googlevideo.com.": {},
@@ -5876,46 +5783,35 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-9gv7zn7r.googlevideo.com.": {},
"rr4---sn-a5m7lnl6.googlevideo.com.": {},
"rr4---sn-a5m7lnld.googlevideo.com.": {},
- "rr4---sn-a5m7lnld.gvt1.com.": {},
"rr4---sn-a5mekn6d.googlevideo.com.": {},
- "rr4---sn-a5mekn6d.gvt1.com.": {},
"rr4---sn-a5mekn6k.googlevideo.com.": {},
"rr4---sn-a5mekn6k.gvt1.com.": {},
"rr4---sn-a5mekn6l.googlevideo.com.": {},
- "rr4---sn-a5mekn6l.gvt1.com.": {},
"rr4---sn-a5mekn6r.googlevideo.com.": {},
"rr4---sn-a5mekn6r.gvt1.com.": {},
"rr4---sn-a5mekn6s.googlevideo.com.": {},
"rr4---sn-a5mekn6z.googlevideo.com.": {},
"rr4---sn-a5meknd6.googlevideo.com.": {},
- "rr4---sn-a5meknd6.gvt1.com.": {},
"rr4---sn-a5meknde.googlevideo.com.": {},
"rr4---sn-a5mekndl.googlevideo.com.": {},
+ "rr4---sn-a5mekndl.gvt1.com.": {},
"rr4---sn-a5meknds.googlevideo.com.": {},
"rr4---sn-a5mekndz.googlevideo.com.": {},
- "rr4---sn-a5mekndz.gvt1.com.": {},
"rr4---sn-a5meknsd.googlevideo.com.": {},
"rr4---sn-a5meknsy.googlevideo.com.": {},
"rr4---sn-a5meknzk.googlevideo.com.": {},
- "rr4---sn-a5meknzk.gvt1.com.": {},
- "rr4---sn-a5meknzl.googlevideo.com.": {},
- "rr4---sn-a5meknzl.gvt1.com.": {},
"rr4---sn-a5meknzr.googlevideo.com.": {},
"rr4---sn-a5meknzs.googlevideo.com.": {},
- "rr4---sn-a5mlrnek.googlevideo.com.": {},
"rr4---sn-a5mlrnl6.googlevideo.com.": {},
"rr4---sn-a5mlrnll.googlevideo.com.": {},
- "rr4---sn-a5mlrnll.gvt1.com.": {},
"rr4---sn-a5mlrnls.googlevideo.com.": {},
"rr4---sn-a5mlrnlz.googlevideo.com.": {},
- "rr4---sn-a5mlrnlz.gvt1.com.": {},
"rr4---sn-a5msen7l.googlevideo.com.": {},
"rr4---sn-a5msen7s.googlevideo.com.": {},
"rr4---sn-a5msen7z.googlevideo.com.": {},
"rr4---sn-a5msenek.googlevideo.com.": {},
"rr4---sn-a5msenek.gvt1.com.": {},
"rr4---sn-a5msenes.googlevideo.com.": {},
- "rr4---sn-a5msenes.gvt1.com.": {},
"rr4---sn-a5msenl7.googlevideo.com.": {},
"rr4---sn-a5msenle.googlevideo.com.": {},
"rr4---sn-a5msenll.googlevideo.com.": {},
@@ -5927,42 +5823,30 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-ab5l6nr6.googlevideo.com.": {},
"rr4---sn-ab5l6nrd.googlevideo.com.": {},
"rr4---sn-ab5l6nrk.googlevideo.com.": {},
- "rr4---sn-ab5l6nrk.gvt1.com.": {},
"rr4---sn-ab5l6nrl.googlevideo.com.": {},
"rr4---sn-ab5l6nrr.googlevideo.com.": {},
- "rr4---sn-ab5l6nrr.gvt1.com.": {},
"rr4---sn-ab5l6nrs.googlevideo.com.": {},
- "rr4---sn-ab5l6nrs.gvt1.com.": {},
"rr4---sn-ab5l6nrz.googlevideo.com.": {},
"rr4---sn-ab5sznld.googlevideo.com.": {},
"rr4---sn-ab5sznlk.googlevideo.com.": {},
"rr4---sn-ab5sznly.googlevideo.com.": {},
"rr4---sn-ab5sznz6.googlevideo.com.": {},
- "rr4---sn-ab5sznz6.gvt1.com.": {},
"rr4---sn-ab5sznzd.googlevideo.com.": {},
- "rr4---sn-ab5sznzd.gvt1.com.": {},
"rr4---sn-ab5sznze.googlevideo.com.": {},
"rr4---sn-ab5sznzk.googlevideo.com.": {},
- "rr4---sn-ab5sznzk.gvt1.com.": {},
"rr4---sn-ab5sznzl.googlevideo.com.": {},
"rr4---sn-ab5sznzl.gvt1.com.": {},
"rr4---sn-ab5sznzr.googlevideo.com.": {},
"rr4---sn-ab5sznzs.googlevideo.com.": {},
- "rr4---sn-ab5sznzs.gvt1.com.": {},
"rr4---sn-ab5sznzy.googlevideo.com.": {},
- "rr4---sn-ab5sznzy.gvt1.com.": {},
"rr4---sn-ab5sznzz.googlevideo.com.": {},
- "rr4---sn-ab5sznzz.gvt1.com.": {},
"rr4---sn-aigl6n6s.googlevideo.com.": {},
"rr4---sn-aigl6ned.googlevideo.com.": {},
- "rr4---sn-aigl6nek.googlevideo.com.": {},
- "rr4---sn-aigl6ner.googlevideo.com.": {},
"rr4---sn-aigl6ney.googlevideo.com.": {},
"rr4---sn-aigl6nl7.googlevideo.com.": {},
"rr4---sn-aigl6ns6.googlevideo.com.": {},
"rr4---sn-aigl6nsd.googlevideo.com.": {},
"rr4---sn-aigl6nsk.googlevideo.com.": {},
- "rr4---sn-aigl6nsk.gvt1.com.": {},
"rr4---sn-aigl6nsr.googlevideo.com.": {},
"rr4---sn-aigl6nz7.googlevideo.com.": {},
"rr4---sn-aigl6nze.googlevideo.com.": {},
@@ -5977,15 +5861,16 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-aigzrn7l.googlevideo.com.": {},
"rr4---sn-aigzrn7s.googlevideo.com.": {},
"rr4---sn-aigzrn7z.googlevideo.com.": {},
+ "rr4---sn-aigzrne7.googlevideo.com.": {},
"rr4---sn-aigzrnld.googlevideo.com.": {},
"rr4---sn-aigzrnse.googlevideo.com.": {},
"rr4---sn-aigzrnsl.googlevideo.com.": {},
"rr4---sn-aigzrnsr.googlevideo.com.": {},
"rr4---sn-aigzrnss.googlevideo.com.": {},
"rr4---sn-aigzrnsz.googlevideo.com.": {},
- "rr4---sn-aigzrnsz.gvt1.com.": {},
"rr4---sn-aigzrnz7.googlevideo.com.": {},
"rr4---sn-aigzrnze.googlevideo.com.": {},
+ "rr4---sn-aj5ua5-5c.googlevideo.com.": {},
"rr4---sn-apn7en7e.googlevideo.com.": {},
"rr4---sn-apn7en7l.googlevideo.com.": {},
"rr4---sn-apn7en7s.googlevideo.com.": {},
@@ -5998,7 +5883,11 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-cvb7lnlz.googlevideo.com.": {},
"rr4---sn-cvb7sn7k.googlevideo.com.": {},
"rr4---sn-cvb7sn7r.googlevideo.com.": {},
+ "rr4---sn-gvbxgn-tvf6.googlevideo.com.": {},
+ "rr4---sn-gvbxgn-tvfz.googlevideo.com.": {},
"rr4---sn-h0jeened.googlevideo.com.": {},
+ "rr4---sn-h0jeenek.googlevideo.com.": {},
+ "rr4---sn-h0jeener.googlevideo.com.": {},
"rr4---sn-h0jeenl6.googlevideo.com.": {},
"rr4---sn-h0jeenld.googlevideo.com.": {},
"rr4---sn-h0jeenle.googlevideo.com.": {},
@@ -6006,8 +5895,8 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-h0jeln7l.googlevideo.com.": {},
"rr4---sn-h0jelne6.googlevideo.com.": {},
"rr4---sn-h0jelne7.googlevideo.com.": {},
+ "rr4---sn-h0jelnes.googlevideo.com.": {},
"rr4---sn-h0jelnez.googlevideo.com.": {},
- "rr4---sn-hgn7rn7y.googlevideo.com.": {},
"rr4---sn-hjoj-gq0l.googlevideo.com.": {},
"rr4---sn-hjoj-gq0l.gvt1.com.": {},
"rr4---sn-hoa7kn76.googlevideo.com.": {},
@@ -6016,37 +5905,32 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-hoa7rn7z.googlevideo.com.": {},
"rr4---sn-hp57kn6r.googlevideo.com.": {},
"rr4---sn-hp57kn6y.googlevideo.com.": {},
- "rr4---sn-hp57knd6.googlevideo.com.": {},
"rr4---sn-hp57kndd.googlevideo.com.": {},
"rr4---sn-hp57kndd.gvt1.com.": {},
"rr4---sn-hp57kndk.googlevideo.com.": {},
"rr4---sn-hp57kndr.googlevideo.com.": {},
"rr4---sn-hp57knds.googlevideo.com.": {},
"rr4---sn-hp57kndy.googlevideo.com.": {},
- "rr4---sn-hp57kndz.googlevideo.com.": {},
- "rr4---sn-hp57kndz.gvt1.com.": {},
+ "rr4---sn-hp57kndy.gvt1.com.": {},
"rr4---sn-hp57yn7r.googlevideo.com.": {},
- "rr4---sn-hp57yn7r.gvt1.com.": {},
"rr4---sn-hp57yn7y.googlevideo.com.": {},
"rr4---sn-hp57yne7.googlevideo.com.": {},
- "rr4---sn-hp57ynee.googlevideo.com.": {},
"rr4---sn-hp57ynl6.googlevideo.com.": {},
"rr4---sn-hp57ynl6.gvt1.com.": {},
"rr4---sn-hp57ynlr.googlevideo.com.": {},
"rr4---sn-hp57ynly.googlevideo.com.": {},
"rr4---sn-hp57yns7.googlevideo.com.": {},
"rr4---sn-hp57ynse.googlevideo.com.": {},
- "rr4---sn-hp57ynse.gvt1.com.": {},
"rr4---sn-hp57ynsl.googlevideo.com.": {},
"rr4---sn-hp57ynss.googlevideo.com.": {},
"rr4---sn-hp57ynss.gvt1.com.": {},
"rr4---sn-i3b7kn6s.googlevideo.com.": {},
"rr4---sn-i3b7knld.googlevideo.com.": {},
+ "rr4---sn-i3b7knlk.googlevideo.com.": {},
"rr4---sn-i3b7kns6.googlevideo.com.": {},
"rr4---sn-i3b7knsd.googlevideo.com.": {},
"rr4---sn-i3b7knse.googlevideo.com.": {},
"rr4---sn-i3b7knsl.googlevideo.com.": {},
- "rr4---sn-i3b7knzl.googlevideo.com.": {},
"rr4---sn-i3b7knzs.googlevideo.com.": {},
"rr4---sn-i3belne6.googlevideo.com.": {},
"rr4---sn-i3belney.googlevideo.com.": {},
@@ -6075,13 +5959,12 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-jvhj5nu-qufs.googlevideo.com.": {},
"rr4---sn-jvhj5nu-qufz.googlevideo.com.": {},
"rr4---sn-jxopj-n5oe.googlevideo.com.": {},
- "rr4---sn-jxopj-n5oe.gvt1.com.": {},
"rr4---sn-jxopj-nh4e.googlevideo.com.": {},
"rr4---sn-jxopj-nh4e.gvt1.com.": {},
+ "rr4---sn-muxa-2iae.googlevideo.com.": {},
"rr4---sn-n4v7snee.googlevideo.com.": {},
"rr4---sn-n4v7sney.googlevideo.com.": {},
"rr4---sn-n4v7snl7.googlevideo.com.": {},
- "rr4---sn-n4v7snl7.gvt1.com.": {},
"rr4---sn-n4v7snll.googlevideo.com.": {},
"rr4---sn-n4v7snlr.googlevideo.com.": {},
"rr4---sn-n4v7snls.googlevideo.com.": {},
@@ -6092,9 +5975,9 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-npoe7nds.googlevideo.com.": {},
"rr4---sn-npoe7ne6.googlevideo.com.": {},
"rr4---sn-npoe7ne7.googlevideo.com.": {},
+ "rr4---sn-npoe7ned.googlevideo.com.": {},
"rr4---sn-npoe7nek.googlevideo.com.": {},
"rr4---sn-npoe7ner.googlevideo.com.": {},
- "rr4---sn-npoe7nes.googlevideo.com.": {},
"rr4---sn-npoe7ney.googlevideo.com.": {},
"rr4---sn-npoe7nez.googlevideo.com.": {},
"rr4---sn-npoe7nl6.googlevideo.com.": {},
@@ -6119,7 +6002,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-npoeenle.googlevideo.com.": {},
"rr4---sn-npoeenlk.googlevideo.com.": {},
"rr4---sn-npoeenll.googlevideo.com.": {},
- "rr4---sn-npoeenly.googlevideo.com.": {},
"rr4---sn-npoeens7.googlevideo.com.": {},
"rr4---sn-npoldn76.googlevideo.com.": {},
"rr4---sn-npoldn7d.googlevideo.com.": {},
@@ -6129,52 +6011,49 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-npoldn7y.googlevideo.com.": {},
"rr4---sn-npoldn7z.googlevideo.com.": {},
"rr4---sn-npoldne7.googlevideo.com.": {},
- "rr4---sn-nv0ui4gvou-hape.googlevideo.com.": {},
+ "rr4---sn-ntqe6n7r.googlevideo.com.": {},
"rr4---sn-nv47ln6e.googlevideo.com.": {},
"rr4---sn-nv47lns6.googlevideo.com.": {},
- "rr4---sn-nv47lns7.googlevideo.com.": {},
- "rr4---sn-nv47lnsy.googlevideo.com.": {},
"rr4---sn-nv47zn7r.googlevideo.com.": {},
- "rr4---sn-nv47zne7.googlevideo.com.": {},
"rr4---sn-nv47znee.googlevideo.com.": {},
"rr4---sn-nv47znel.googlevideo.com.": {},
+ "rr4---sn-nx57ynlk.googlevideo.com.": {},
+ "rr4---sn-nx57ynsd.googlevideo.com.": {},
"rr4---sn-nx57ynse.googlevideo.com.": {},
+ "rr4---sn-nx57ynse.gvt1.com.": {},
"rr4---sn-nx57ynsk.googlevideo.com.": {},
+ "rr4---sn-nx57ynsk.gvt1.com.": {},
"rr4---sn-nx57ynsl.googlevideo.com.": {},
+ "rr4---sn-nx57ynsl.gvt1.com.": {},
"rr4---sn-nx57ynss.googlevideo.com.": {},
"rr4---sn-nx57ynss.gvt1.com.": {},
"rr4---sn-nx57ynsz.googlevideo.com.": {},
"rr4---sn-nx5s7n76.googlevideo.com.": {},
- "rr4---sn-nx5s7n76.gvt1.com.": {},
"rr4---sn-nx5s7n7d.googlevideo.com.": {},
"rr4---sn-nx5s7n7d.gvt1.com.": {},
"rr4---sn-nx5s7n7s.googlevideo.com.": {},
- "rr4---sn-nx5s7n7s.gvt1.com.": {},
"rr4---sn-nx5s7n7y.googlevideo.com.": {},
+ "rr4---sn-nx5s7n7y.gvt1.com.": {},
"rr4---sn-nx5s7n7z.googlevideo.com.": {},
- "rr4---sn-nx5s7n7z.gvt1.com.": {},
"rr4---sn-nx5s7nee.googlevideo.com.": {},
"rr4---sn-nx5s7nee.gvt1.com.": {},
"rr4---sn-nx5s7nel.googlevideo.com.": {},
- "rr4---sn-nx5s7nel.gvt1.com.": {},
"rr4---sn-o097znsd.googlevideo.com.": {},
"rr4---sn-o097znse.googlevideo.com.": {},
"rr4---sn-o097znsk.googlevideo.com.": {},
"rr4---sn-o097znsl.googlevideo.com.": {},
"rr4---sn-o097znsr.googlevideo.com.": {},
- "rr4---sn-o097znsr.gvt1.com.": {},
"rr4---sn-o097znss.googlevideo.com.": {},
"rr4---sn-o097znsz.googlevideo.com.": {},
"rr4---sn-o097znz7.googlevideo.com.": {},
"rr4---sn-o097znzd.googlevideo.com.": {},
- "rr4---sn-o097znzd.gvt1.com.": {},
"rr4---sn-o097znze.googlevideo.com.": {},
"rr4---sn-o097znzk.googlevideo.com.": {},
"rr4---sn-o097znzr.googlevideo.com.": {},
"rr4---sn-p5qddn76.googlevideo.com.": {},
"rr4---sn-p5qddn7d.googlevideo.com.": {},
- "rr4---sn-p5qddn7d.gvt1.com.": {},
"rr4---sn-p5qddn7k.googlevideo.com.": {},
+ "rr4---sn-p5qddn7r.googlevideo.com.": {},
"rr4---sn-p5qddn7z.googlevideo.com.": {},
"rr4---sn-p5qlsn6l.googlevideo.com.": {},
"rr4---sn-p5qlsn76.googlevideo.com.": {},
@@ -6182,8 +6061,10 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-p5qlsn7l.googlevideo.com.": {},
"rr4---sn-p5qlsn7s.googlevideo.com.": {},
"rr4---sn-p5qlsnd6.googlevideo.com.": {},
+ "rr4---sn-p5qlsndk.googlevideo.com.": {},
"rr4---sn-p5qlsndr.googlevideo.com.": {},
"rr4---sn-p5qlsndz.googlevideo.com.": {},
+ "rr4---sn-p5qlsnrl.googlevideo.com.": {},
"rr4---sn-p5qlsnrr.googlevideo.com.": {},
"rr4---sn-p5qlsny6.googlevideo.com.": {},
"rr4---sn-p5qs7n6d.googlevideo.com.": {},
@@ -6195,40 +6076,40 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-q4fl6n66.googlevideo.com.": {},
"rr4---sn-q4fl6n66.gvt1.com.": {},
"rr4---sn-q4fl6n6d.googlevideo.com.": {},
- "rr4---sn-q4fl6n6d.gvt1.com.": {},
"rr4---sn-q4fl6n6r.googlevideo.com.": {},
+ "rr4---sn-q4fl6n6r.gvt1.com.": {},
"rr4---sn-q4fl6n6s.googlevideo.com.": {},
+ "rr4---sn-q4fl6n6s.gvt1.com.": {},
"rr4---sn-q4fl6n6y.googlevideo.com.": {},
- "rr4---sn-q4fl6n6y.gvt1.com.": {},
"rr4---sn-q4fl6n6z.googlevideo.com.": {},
"rr4---sn-q4fl6nd6.googlevideo.com.": {},
"rr4---sn-q4fl6nd7.googlevideo.com.": {},
- "rr4---sn-q4fl6nd7.gvt1.com.": {},
"rr4---sn-q4fl6nde.googlevideo.com.": {},
+ "rr4---sn-q4fl6nde.gvt1.com.": {},
"rr4---sn-q4fl6ndl.googlevideo.com.": {},
- "rr4---sn-q4fl6ndl.gvt1.com.": {},
"rr4---sn-q4fl6nds.googlevideo.com.": {},
"rr4---sn-q4fl6nds.gvt1.com.": {},
"rr4---sn-q4fl6ndz.googlevideo.com.": {},
"rr4---sn-q4fl6nlz.googlevideo.com.": {},
- "rr4---sn-q4fl6nlz.gvt1.com.": {},
"rr4---sn-q4fl6ns6.googlevideo.com.": {},
+ "rr4---sn-q4fl6ns6.gvt1.com.": {},
"rr4---sn-q4fl6ns7.googlevideo.com.": {},
"rr4---sn-q4fl6nsd.googlevideo.com.": {},
"rr4---sn-q4fl6nsd.gvt1.com.": {},
"rr4---sn-q4fl6nsk.googlevideo.com.": {},
- "rr4---sn-q4fl6nsk.gvt1.com.": {},
"rr4---sn-q4fl6nsl.googlevideo.com.": {},
"rr4---sn-q4fl6nsr.googlevideo.com.": {},
"rr4---sn-q4fl6nss.googlevideo.com.": {},
+ "rr4---sn-q4fl6nss.gvt1.com.": {},
"rr4---sn-q4fl6nsy.googlevideo.com.": {},
+ "rr4---sn-q4fl6nsy.gvt1.com.": {},
"rr4---sn-q4fl6nz6.googlevideo.com.": {},
"rr4---sn-q4fl6nz7.googlevideo.com.": {},
+ "rr4---sn-q4fl6nz7.gvt1.com.": {},
"rr4---sn-q4fl6nzy.googlevideo.com.": {},
"rr4---sn-q4flrn7k.googlevideo.com.": {},
"rr4---sn-q4flrn7r.googlevideo.com.": {},
"rr4---sn-q4flrn7y.googlevideo.com.": {},
- "rr4---sn-q4flrn7y.gvt1.com.": {},
"rr4---sn-q4flrne6.googlevideo.com.": {},
"rr4---sn-q4flrne7.googlevideo.com.": {},
"rr4---sn-q4flrnee.googlevideo.com.": {},
@@ -6237,6 +6118,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-q4flrnel.googlevideo.com.": {},
"rr4---sn-q4flrnel.gvt1.com.": {},
"rr4---sn-q4flrner.googlevideo.com.": {},
+ "rr4---sn-q4flrner.gvt1.com.": {},
"rr4---sn-q4flrnes.googlevideo.com.": {},
"rr4---sn-q4flrney.googlevideo.com.": {},
"rr4---sn-q4flrney.gvt1.com.": {},
@@ -6247,20 +6129,19 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-q4flrnld.googlevideo.com.": {},
"rr4---sn-q4flrnld.gvt1.com.": {},
"rr4---sn-q4flrnle.googlevideo.com.": {},
- "rr4---sn-q4flrnle.gvt1.com.": {},
"rr4---sn-q4flrnlz.googlevideo.com.": {},
+ "rr4---sn-q4flrnlz.gvt1.com.": {},
"rr4---sn-q4flrnsd.googlevideo.com.": {},
"rr4---sn-q4flrnsk.googlevideo.com.": {},
"rr4---sn-q4flrnsl.googlevideo.com.": {},
"rr4---sn-q4flrnsl.gvt1.com.": {},
"rr4---sn-q4flrnss.googlevideo.com.": {},
- "rr4---sn-q4flrnss.gvt1.com.": {},
"rr4---sn-q4fzen7e.googlevideo.com.": {},
"rr4---sn-q4fzen7e.gvt1.com.": {},
"rr4---sn-q4fzen7l.googlevideo.com.": {},
- "rr4---sn-q4fzen7l.gvt1.com.": {},
"rr4---sn-q4fzen7r.googlevideo.com.": {},
"rr4---sn-q4fzen7s.googlevideo.com.": {},
+ "rr4---sn-q4fzen7s.gvt1.com.": {},
"rr4---sn-q4fzen7y.googlevideo.com.": {},
"rr4---sn-q4fzene7.googlevideo.com.": {},
"rr4---sn-q4fzene7.gvt1.com.": {},
@@ -6270,7 +6151,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-qxo7rn7y.googlevideo.com.": {},
"rr4---sn-qxoedn7k.googlevideo.com.": {},
"rr4---sn-qxoedne7.googlevideo.com.": {},
- "rr4---sn-qxoednee.googlevideo.com.": {},
+ "rr4---sn-t0a7ln7d.googlevideo.com.": {},
"rr4---sn-u1hp55-5c.googlevideo.com.": {},
"rr4---sn-uhvcpaxoa-5hne.googlevideo.com.": {},
"rr4---sn-uhvcpaxoa-guhe.googlevideo.com.": {},
@@ -6280,63 +6161,51 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-vgqskn67.googlevideo.com.": {},
"rr4---sn-vgqskn67.gvt1.com.": {},
"rr4---sn-vgqskn6d.googlevideo.com.": {},
- "rr4---sn-vgqskn6d.gvt1.com.": {},
"rr4---sn-vgqskn6s.googlevideo.com.": {},
"rr4---sn-vgqskn6z.googlevideo.com.": {},
"rr4---sn-vgqskne6.googlevideo.com.": {},
- "rr4---sn-vgqskne6.gvt1.com.": {},
"rr4---sn-vgqskned.googlevideo.com.": {},
"rr4---sn-vgqsknek.googlevideo.com.": {},
"rr4---sn-vgqsknes.googlevideo.com.": {},
"rr4---sn-vgqsknez.googlevideo.com.": {},
+ "rr4---sn-vgqsknez.gvt1.com.": {},
"rr4---sn-vgqsknld.googlevideo.com.": {},
- "rr4---sn-vgqsknlk.googlevideo.com.": {},
- "rr4---sn-vgqsknlk.gvt1.com.": {},
"rr4---sn-vgqsknll.googlevideo.com.": {},
+ "rr4---sn-vgqsknll.gvt1.com.": {},
"rr4---sn-vgqsknlr.googlevideo.com.": {},
- "rr4---sn-vgqsknlr.gvt1.com.": {},
"rr4---sn-vgqsknls.googlevideo.com.": {},
- "rr4---sn-vgqsknls.gvt1.com.": {},
"rr4---sn-vgqsknly.googlevideo.com.": {},
"rr4---sn-vgqsknlz.googlevideo.com.": {},
"rr4---sn-vgqskns7.googlevideo.com.": {},
"rr4---sn-vgqsknse.googlevideo.com.": {},
- "rr4---sn-vgqsknse.gvt1.com.": {},
"rr4---sn-vgqsknsk.googlevideo.com.": {},
"rr4---sn-vgqsknz6.googlevideo.com.": {},
"rr4---sn-vgqsknz7.googlevideo.com.": {},
"rr4---sn-vgqsknzd.googlevideo.com.": {},
- "rr4---sn-vgqsknzd.gvt1.com.": {},
"rr4---sn-vgqsknze.googlevideo.com.": {},
"rr4---sn-vgqsknzk.googlevideo.com.": {},
- "rr4---sn-vgqsknzk.gvt1.com.": {},
+ "rr4---sn-vgqsknzl.googlevideo.com.": {},
"rr4---sn-vgqsknzr.googlevideo.com.": {},
- "rr4---sn-vgqsknzr.gvt1.com.": {},
"rr4---sn-vgqsknzs.googlevideo.com.": {},
+ "rr4---sn-vgqsknzs.gvt1.com.": {},
"rr4---sn-vgqsknzy.googlevideo.com.": {},
- "rr4---sn-vgqsknzy.gvt1.com.": {},
"rr4---sn-vgqsknzz.googlevideo.com.": {},
"rr4---sn-vgqsrn66.googlevideo.com.": {},
- "rr4---sn-vgqsrn66.gvt1.com.": {},
"rr4---sn-vgqsrn67.googlevideo.com.": {},
- "rr4---sn-vgqsrn67.gvt1.com.": {},
"rr4---sn-vgqsrn6e.googlevideo.com.": {},
"rr4---sn-vgqsrn6l.googlevideo.com.": {},
"rr4---sn-vgqsrn6z.googlevideo.com.": {},
- "rr4---sn-vgqsrn6z.gvt1.com.": {},
"rr4---sn-vgqsrne6.googlevideo.com.": {},
- "rr4---sn-vgqsrne6.gvt1.com.": {},
"rr4---sn-vgqsrned.googlevideo.com.": {},
"rr4---sn-vgqsrnek.googlevideo.com.": {},
- "rr4---sn-vgqsrnek.gvt1.com.": {},
"rr4---sn-vgqsrnes.googlevideo.com.": {},
"rr4---sn-vgqsrnez.googlevideo.com.": {},
"rr4---sn-vgqsrnl6.googlevideo.com.": {},
"rr4---sn-vgqsrnld.googlevideo.com.": {},
- "rr4---sn-vgqsrnld.gvt1.com.": {},
"rr4---sn-vgqsrnlk.googlevideo.com.": {},
"rr4---sn-vgqsrnll.googlevideo.com.": {},
"rr4---sn-vgqsrnls.googlevideo.com.": {},
+ "rr4---sn-vgqsrnlz.googlevideo.com.": {},
"rr4---sn-vgqsrns6.googlevideo.com.": {},
"rr4---sn-vgqsrnsr.googlevideo.com.": {},
"rr4---sn-vgqsrnsy.googlevideo.com.": {},
@@ -6345,21 +6214,17 @@ var FakeECSFQDNs = map[string]struct{}{
"rr4---sn-vgqsrnzd.googlevideo.com.": {},
"rr4---sn-vgqsrnzk.googlevideo.com.": {},
"rr4---sn-vgqsrnzr.googlevideo.com.": {},
- "rr4---sn-vgqsrnzr.gvt1.com.": {},
"rr4---sn-vgqsrnzs.googlevideo.com.": {},
"rr4---sn-vgqsrnzy.googlevideo.com.": {},
"rr4---sn-vgqsrnzz.googlevideo.com.": {},
- "rr4.sn-hgn7rn7y.googlevideo.com.": {},
- "rr4.sn-q4fl6nd6.googlevideo.com.": {},
- "rr4.sn-q4fl6nz7.googlevideo.com.": {},
- "rr4.sn-q4flrnl7.googlevideo.com.": {},
+ "rr4.sn-5hne6nzd.googlevideo.com.": {},
+ "rr4.sn-q4fl6n6s.googlevideo.com.": {},
+ "rr4.sn-q4fl6n6y.googlevideo.com.": {},
+ "rr4.sn-q4flrner.googlevideo.com.": {},
"rr5---sn-0nnpbo5a-bggl.googlevideo.com.": {},
"rr5---sn-2imern76.googlevideo.com.": {},
- "rr5---sn-2imern76.gvt1.com.": {},
"rr5---sn-2imern7d.googlevideo.com.": {},
- "rr5---sn-2imern7d.gvt1.com.": {},
"rr5---sn-2imeyn7k.googlevideo.com.": {},
- "rr5---sn-2imeyn7k.gvt1.com.": {},
"rr5---sn-2vgu0b5auxaxjvh-apnd.googlevideo.com.": {},
"rr5---sn-2vgu0b5auxaxjvh-v2vd.googlevideo.com.": {},
"rr5---sn-2vgu0b5auxaxjvh-v2ve.googlevideo.com.": {},
@@ -6372,7 +6237,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-30a7yner.googlevideo.com.": {},
"rr5---sn-30a7yney.googlevideo.com.": {},
"rr5---sn-30a7ynl7.googlevideo.com.": {},
- "rr5---sn-42u-nbozs.googlevideo.com.": {},
"rr5---sn-4g5e6ns6.googlevideo.com.": {},
"rr5---sn-4g5e6ns7.googlevideo.com.": {},
"rr5---sn-4g5e6nsd.googlevideo.com.": {},
@@ -6387,7 +6251,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-4g5e6nzs.googlevideo.com.": {},
"rr5---sn-4g5e6nzz.googlevideo.com.": {},
"rr5---sn-4g5edn6k.googlevideo.com.": {},
- "rr5---sn-4g5edn6r.googlevideo.com.": {},
"rr5---sn-4g5edn6y.googlevideo.com.": {},
"rr5---sn-4g5ednd7.googlevideo.com.": {},
"rr5---sn-4g5edndd.googlevideo.com.": {},
@@ -6408,6 +6271,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-4g5ednsk.googlevideo.com.": {},
"rr5---sn-4g5ednsl.googlevideo.com.": {},
"rr5---sn-4g5ednsr.googlevideo.com.": {},
+ "rr5---sn-4g5ednss.googlevideo.com.": {},
"rr5---sn-4g5ednsy.googlevideo.com.": {},
"rr5---sn-4g5ednsz.googlevideo.com.": {},
"rr5---sn-4g5ednz7.googlevideo.com.": {},
@@ -6430,7 +6294,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-5hne6nsk.googlevideo.com.": {},
"rr5---sn-5hne6nsr.googlevideo.com.": {},
"rr5---sn-5hne6nsy.googlevideo.com.": {},
- "rr5---sn-5hne6nsy.gvt1.com.": {},
"rr5---sn-5hne6nsz.googlevideo.com.": {},
"rr5---sn-5hne6nz6.googlevideo.com.": {},
"rr5---sn-5hne6nzd.googlevideo.com.": {},
@@ -6441,18 +6304,17 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-5hnednsz.googlevideo.com.": {},
"rr5---sn-5hnekn76.googlevideo.com.": {},
"rr5---sn-5hnekn7d.googlevideo.com.": {},
- "rr5---sn-5hnekn7k.googlevideo.com.": {},
"rr5---sn-5hnekn7l.googlevideo.com.": {},
"rr5---sn-5hnekn7s.googlevideo.com.": {},
"rr5---sn-5hnekn7z.googlevideo.com.": {},
"rr5---sn-5hneknee.googlevideo.com.": {},
"rr5---sn-5hneknek.googlevideo.com.": {},
- "rr5---sn-5hneknek.gvt1.com.": {},
"rr5---sn-5hneknes.googlevideo.com.": {},
"rr5---sn-5pgnugx5h-hn2z.googlevideo.com.": {},
"rr5---sn-5uaezndd.googlevideo.com.": {},
"rr5---sn-5uaezne6.googlevideo.com.": {},
"rr5---sn-5uaezned.googlevideo.com.": {},
+ "rr5---sn-5uaeznes.googlevideo.com.": {},
"rr5---sn-5uaeznez.googlevideo.com.": {},
"rr5---sn-5uaeznl6.googlevideo.com.": {},
"rr5---sn-5uaeznld.googlevideo.com.": {},
@@ -6466,7 +6328,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-5uaeznss.googlevideo.com.": {},
"rr5---sn-5uaezny6.googlevideo.com.": {},
"rr5---sn-5uaeznys.googlevideo.com.": {},
- "rr5---sn-5uaeznyz.googlevideo.com.": {},
"rr5---sn-5uaeznze.googlevideo.com.": {},
"rr5---sn-5ualdnll.googlevideo.com.": {},
"rr5---sn-5ualdnlr.googlevideo.com.": {},
@@ -6475,6 +6336,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-5ualdns7.googlevideo.com.": {},
"rr5---sn-5ualdnsd.googlevideo.com.": {},
"rr5---sn-5ualdnse.googlevideo.com.": {},
+ "rr5---sn-5ualdnsk.googlevideo.com.": {},
"rr5---sn-5ualdnsl.googlevideo.com.": {},
"rr5---sn-5ualdnsr.googlevideo.com.": {},
"rr5---sn-5ualdnss.googlevideo.com.": {},
@@ -6482,9 +6344,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-5ualdnsz.googlevideo.com.": {},
"rr5---sn-5ualdnz7.googlevideo.com.": {},
"rr5---sn-5ualdnze.googlevideo.com.": {},
- "rr5---sn-8qj-i5o6k.googlevideo.com.": {},
- "rr5---sn-8qj-i5ozd.googlevideo.com.": {},
- "rr5---sn-8qj-i5ozr.googlevideo.com.": {},
"rr5---sn-8qj-nbo66.googlevideo.com.": {},
"rr5---sn-8xgp1vo-2iae.googlevideo.com.": {},
"rr5---sn-8xgp1vo-2iae7.googlevideo.com.": {},
@@ -6497,50 +6356,44 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-8xgp1vo-ab5l.googlevideo.com.": {},
"rr5---sn-8xgp1vo-ab5s.googlevideo.com.": {},
"rr5---sn-8xgp1vo-ab5z.googlevideo.com.": {},
- "rr5---sn-8xgp1vo-nh4e.googlevideo.com.": {},
"rr5---sn-8xgp1vo-p5ie.googlevideo.com.": {},
"rr5---sn-8xgp1vo-vgqe.googlevideo.com.": {},
"rr5---sn-8xgp1vo-xfge.googlevideo.com.": {},
"rr5---sn-8xgp1vo-xfgl.googlevideo.com.": {},
"rr5---sn-9gv76n7e.googlevideo.com.": {},
+ "rr5---sn-9gv76n7l.googlevideo.com.": {},
"rr5---sn-9gv76n7s.googlevideo.com.": {},
- "rr5---sn-9gv76n7z.googlevideo.com.": {},
"rr5---sn-9gv7ene6.googlevideo.com.": {},
"rr5---sn-9gv7ened.googlevideo.com.": {},
+ "rr5---sn-9gv7zn76.googlevideo.com.": {},
"rr5---sn-9gv7zn7e.googlevideo.com.": {},
"rr5---sn-9gv7zn7r.googlevideo.com.": {},
+ "rr5---sn-9gv7zn7y.googlevideo.com.": {},
"rr5---sn-a5m7lnl6.googlevideo.com.": {},
- "rr5---sn-a5m7lnl6.gvt1.com.": {},
"rr5---sn-a5m7lnld.googlevideo.com.": {},
"rr5---sn-a5mekn6d.googlevideo.com.": {},
"rr5---sn-a5mekn6k.googlevideo.com.": {},
- "rr5---sn-a5mekn6l.googlevideo.com.": {},
"rr5---sn-a5mekn6r.googlevideo.com.": {},
- "rr5---sn-a5mekn6r.gvt1.com.": {},
"rr5---sn-a5mekn6s.googlevideo.com.": {},
"rr5---sn-a5mekn6z.googlevideo.com.": {},
- "rr5---sn-a5mekn6z.gvt1.com.": {},
"rr5---sn-a5meknd6.googlevideo.com.": {},
"rr5---sn-a5meknd6.gvt1.com.": {},
"rr5---sn-a5meknde.googlevideo.com.": {},
"rr5---sn-a5mekndl.googlevideo.com.": {},
- "rr5---sn-a5mekndl.gvt1.com.": {},
+ "rr5---sn-a5meknds.googlevideo.com.": {},
+ "rr5---sn-a5meknds.gvt1.com.": {},
"rr5---sn-a5mekndz.googlevideo.com.": {},
"rr5---sn-a5mekndz.gvt1.com.": {},
"rr5---sn-a5meknsd.googlevideo.com.": {},
- "rr5---sn-a5meknsd.gvt1.com.": {},
"rr5---sn-a5meknsy.googlevideo.com.": {},
- "rr5---sn-a5meknsy.gvt1.com.": {},
"rr5---sn-a5meknzk.googlevideo.com.": {},
- "rr5---sn-a5meknzl.googlevideo.com.": {},
"rr5---sn-a5meknzr.googlevideo.com.": {},
"rr5---sn-a5meknzs.googlevideo.com.": {},
"rr5---sn-a5mlrnek.googlevideo.com.": {},
"rr5---sn-a5mlrnl6.googlevideo.com.": {},
- "rr5---sn-a5mlrnl6.gvt1.com.": {},
"rr5---sn-a5mlrnll.googlevideo.com.": {},
- "rr5---sn-a5mlrnll.gvt1.com.": {},
"rr5---sn-a5mlrnls.googlevideo.com.": {},
+ "rr5---sn-a5mlrnls.gvt1.com.": {},
"rr5---sn-a5mlrnlz.googlevideo.com.": {},
"rr5---sn-a5mlrnlz.gvt1.com.": {},
"rr5---sn-a5msen76.googlevideo.com.": {},
@@ -6548,47 +6401,33 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-a5msen7s.googlevideo.com.": {},
"rr5---sn-a5msen7z.googlevideo.com.": {},
"rr5---sn-a5msenek.googlevideo.com.": {},
- "rr5---sn-a5msenek.gvt1.com.": {},
"rr5---sn-a5msener.googlevideo.com.": {},
- "rr5---sn-a5msener.gvt1.com.": {},
"rr5---sn-a5msenes.googlevideo.com.": {},
"rr5---sn-a5msenl7.googlevideo.com.": {},
- "rr5---sn-a5msenl7.gvt1.com.": {},
"rr5---sn-a5msenle.googlevideo.com.": {},
- "rr5---sn-a5msenle.gvt1.com.": {},
"rr5---sn-a5msenll.googlevideo.com.": {},
"rr5---sn-ab5l6ndr.googlevideo.com.": {},
"rr5---sn-ab5l6ndy.googlevideo.com.": {},
"rr5---sn-ab5l6nk6.googlevideo.com.": {},
- "rr5---sn-ab5l6nk6.gvt1.com.": {},
"rr5---sn-ab5l6nkd.googlevideo.com.": {},
"rr5---sn-ab5l6nr6.googlevideo.com.": {},
- "rr5---sn-ab5l6nr6.gvt1.com.": {},
"rr5---sn-ab5l6nrd.googlevideo.com.": {},
"rr5---sn-ab5l6nrk.googlevideo.com.": {},
"rr5---sn-ab5l6nrl.googlevideo.com.": {},
- "rr5---sn-ab5l6nrl.gvt1.com.": {},
"rr5---sn-ab5l6nrr.googlevideo.com.": {},
"rr5---sn-ab5l6nrs.googlevideo.com.": {},
- "rr5---sn-ab5l6nrs.gvt1.com.": {},
"rr5---sn-ab5l6nrz.googlevideo.com.": {},
- "rr5---sn-ab5l6nrz.gvt1.com.": {},
"rr5---sn-ab5sznld.googlevideo.com.": {},
- "rr5---sn-ab5sznld.gvt1.com.": {},
"rr5---sn-ab5sznlk.googlevideo.com.": {},
"rr5---sn-ab5sznly.googlevideo.com.": {},
"rr5---sn-ab5sznz6.googlevideo.com.": {},
"rr5---sn-ab5sznz6.gvt1.com.": {},
"rr5---sn-ab5sznzd.googlevideo.com.": {},
"rr5---sn-ab5sznze.googlevideo.com.": {},
- "rr5---sn-ab5sznze.gvt1.com.": {},
"rr5---sn-ab5sznzk.googlevideo.com.": {},
"rr5---sn-ab5sznzl.googlevideo.com.": {},
- "rr5---sn-ab5sznzl.gvt1.com.": {},
"rr5---sn-ab5sznzr.googlevideo.com.": {},
- "rr5---sn-ab5sznzr.gvt1.com.": {},
"rr5---sn-ab5sznzs.googlevideo.com.": {},
- "rr5---sn-ab5sznzs.gvt1.com.": {},
"rr5---sn-ab5sznzy.googlevideo.com.": {},
"rr5---sn-ab5sznzz.googlevideo.com.": {},
"rr5---sn-aigl6n6s.googlevideo.com.": {},
@@ -6597,10 +6436,8 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-aigl6ner.googlevideo.com.": {},
"rr5---sn-aigl6ney.googlevideo.com.": {},
"rr5---sn-aigl6nl7.googlevideo.com.": {},
- "rr5---sn-aigl6nl7.gvt1.com.": {},
"rr5---sn-aigl6ns6.googlevideo.com.": {},
"rr5---sn-aigl6nsd.googlevideo.com.": {},
- "rr5---sn-aigl6nsd.gvt1.com.": {},
"rr5---sn-aigl6nsk.googlevideo.com.": {},
"rr5---sn-aigl6nsr.googlevideo.com.": {},
"rr5---sn-aigl6nz7.googlevideo.com.": {},
@@ -6623,10 +6460,9 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-aigzrnsr.googlevideo.com.": {},
"rr5---sn-aigzrnss.googlevideo.com.": {},
"rr5---sn-aigzrnsz.googlevideo.com.": {},
- "rr5---sn-aigzrnsz.gvt1.com.": {},
"rr5---sn-aigzrnz7.googlevideo.com.": {},
- "rr5---sn-aigzrnz7.gvt1.com.": {},
"rr5---sn-aigzrnze.googlevideo.com.": {},
+ "rr5---sn-aj5ua5-5c.googlevideo.com.": {},
"rr5---sn-apn7en7e.googlevideo.com.": {},
"rr5---sn-apn7en7l.googlevideo.com.": {},
"rr5---sn-apn7en7s.googlevideo.com.": {},
@@ -6642,7 +6478,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-h0jeener.googlevideo.com.": {},
"rr5---sn-h0jeenl6.googlevideo.com.": {},
"rr5---sn-h0jeenld.googlevideo.com.": {},
- "rr5---sn-h0jeenle.googlevideo.com.": {},
"rr5---sn-h0jeln7e.googlevideo.com.": {},
"rr5---sn-h0jeln7l.googlevideo.com.": {},
"rr5---sn-h0jelne6.googlevideo.com.": {},
@@ -6654,30 +6489,28 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-hoa7rn76.googlevideo.com.": {},
"rr5---sn-hoa7rn7z.googlevideo.com.": {},
"rr5---sn-hp57kn6r.googlevideo.com.": {},
- "rr5---sn-hp57kn6r.gvt1.com.": {},
"rr5---sn-hp57kn6y.googlevideo.com.": {},
"rr5---sn-hp57kn6y.gvt1.com.": {},
"rr5---sn-hp57knd6.googlevideo.com.": {},
"rr5---sn-hp57knd6.gvt1.com.": {},
"rr5---sn-hp57kndd.googlevideo.com.": {},
+ "rr5---sn-hp57kndd.gvt1.com.": {},
"rr5---sn-hp57kndk.googlevideo.com.": {},
"rr5---sn-hp57kndr.googlevideo.com.": {},
"rr5---sn-hp57knds.googlevideo.com.": {},
+ "rr5---sn-hp57knds.gvt1.com.": {},
"rr5---sn-hp57kndy.googlevideo.com.": {},
- "rr5---sn-hp57kndy.gvt1.com.": {},
"rr5---sn-hp57kndz.googlevideo.com.": {},
"rr5---sn-hp57yn7y.googlevideo.com.": {},
"rr5---sn-hp57yne7.googlevideo.com.": {},
"rr5---sn-hp57ynee.googlevideo.com.": {},
"rr5---sn-hp57ynl6.googlevideo.com.": {},
"rr5---sn-hp57ynlr.googlevideo.com.": {},
+ "rr5---sn-hp57ynlr.gvt1.com.": {},
"rr5---sn-hp57ynly.googlevideo.com.": {},
- "rr5---sn-hp57ynly.gvt1.com.": {},
"rr5---sn-hp57yns7.googlevideo.com.": {},
- "rr5---sn-hp57yns7.gvt1.com.": {},
"rr5---sn-hp57ynse.googlevideo.com.": {},
"rr5---sn-hp57ynsl.googlevideo.com.": {},
- "rr5---sn-hp57ynsl.gvt1.com.": {},
"rr5---sn-hp57ynss.googlevideo.com.": {},
"rr5---sn-i3b7kn6s.googlevideo.com.": {},
"rr5---sn-i3b7knld.googlevideo.com.": {},
@@ -6686,19 +6519,20 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-i3b7knse.googlevideo.com.": {},
"rr5---sn-i3b7knsl.googlevideo.com.": {},
"rr5---sn-i3b7knzl.googlevideo.com.": {},
+ "rr5---sn-i3b7knzs.googlevideo.com.": {},
"rr5---sn-i3belne6.googlevideo.com.": {},
- "rr5---sn-i3belney.googlevideo.com.": {},
"rr5---sn-i3belnl6.googlevideo.com.": {},
"rr5---sn-i3belnl7.googlevideo.com.": {},
"rr5---sn-i3belnll.googlevideo.com.": {},
"rr5---sn-i3belnls.googlevideo.com.": {},
- "rr5---sn-i3belnlz.googlevideo.com.": {},
"rr5---sn-i3bssn7e.googlevideo.com.": {},
"rr5---sn-i5h7lner.googlevideo.com.": {},
+ "rr5---sn-i5h7lnl6.googlevideo.com.": {},
"rr5---sn-i5h7lnll.googlevideo.com.": {},
"rr5---sn-i5h7lnls.googlevideo.com.": {},
"rr5---sn-i5heen7r.googlevideo.com.": {},
"rr5---sn-i5heen7s.googlevideo.com.": {},
+ "rr5---sn-jn2pgx4pcxg-w5os.googlevideo.com.": {},
"rr5---sn-jvhj5nu-2iae.googlevideo.com.": {},
"rr5---sn-jvhj5nu-2ias.googlevideo.com.": {},
"rr5---sn-jvhj5nu-nh4e.googlevideo.com.": {},
@@ -6708,18 +6542,16 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-jvhj5nu-qufl.googlevideo.com.": {},
"rr5---sn-jvhj5nu-qufs.googlevideo.com.": {},
"rr5---sn-jxopj-n5oe.googlevideo.com.": {},
- "rr5---sn-jxopj-n5oe.gvt1.com.": {},
"rr5---sn-jxopj-nh4e.googlevideo.com.": {},
"rr5---sn-jxopj-nh4e.gvt1.com.": {},
+ "rr5---sn-muxa-2iae.googlevideo.com.": {},
"rr5---sn-n4v7snee.googlevideo.com.": {},
"rr5---sn-n4v7sney.googlevideo.com.": {},
- "rr5---sn-n4v7snl7.googlevideo.com.": {},
"rr5---sn-n4v7snll.googlevideo.com.": {},
"rr5---sn-n4v7snlr.googlevideo.com.": {},
"rr5---sn-n4v7snls.googlevideo.com.": {},
"rr5---sn-n4v7snly.googlevideo.com.": {},
"rr5---sn-n4v7sns7.googlevideo.com.": {},
- "rr5---sn-n4v7sns7.gvt1.com.": {},
"rr5---sn-n4v7snse.googlevideo.com.": {},
"rr5---sn-npoe7ndl.googlevideo.com.": {},
"rr5---sn-npoe7nds.googlevideo.com.": {},
@@ -6748,10 +6580,10 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-npoeener.googlevideo.com.": {},
"rr5---sn-npoeeney.googlevideo.com.": {},
"rr5---sn-npoeenez.googlevideo.com.": {},
- "rr5---sn-npoeenl7.googlevideo.com.": {},
"rr5---sn-npoeenle.googlevideo.com.": {},
"rr5---sn-npoeenlk.googlevideo.com.": {},
"rr5---sn-npoeenll.googlevideo.com.": {},
+ "rr5---sn-npoeenly.googlevideo.com.": {},
"rr5---sn-npoeens7.googlevideo.com.": {},
"rr5---sn-npoldn76.googlevideo.com.": {},
"rr5---sn-npoldn7d.googlevideo.com.": {},
@@ -6761,42 +6593,40 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-npoldn7y.googlevideo.com.": {},
"rr5---sn-npoldn7z.googlevideo.com.": {},
"rr5---sn-npoldne7.googlevideo.com.": {},
- "rr5---sn-nv0ui4gvou-hape.googlevideo.com.": {},
+ "rr5---sn-ntq7yns7.googlevideo.com.": {},
"rr5---sn-nv47ln6e.googlevideo.com.": {},
- "rr5---sn-nv47lnly.googlevideo.com.": {},
"rr5---sn-nv47lns6.googlevideo.com.": {},
+ "rr5---sn-nv47lnsr.googlevideo.com.": {},
"rr5---sn-nv47zn7r.googlevideo.com.": {},
"rr5---sn-nv47zn7y.googlevideo.com.": {},
"rr5---sn-nv47zne7.googlevideo.com.": {},
"rr5---sn-nv47znee.googlevideo.com.": {},
"rr5---sn-nv47znel.googlevideo.com.": {},
"rr5---sn-nx57ynsd.googlevideo.com.": {},
- "rr5---sn-nx57ynsd.gvt1.com.": {},
"rr5---sn-nx57ynse.googlevideo.com.": {},
+ "rr5---sn-nx57ynse.gvt1.com.": {},
"rr5---sn-nx57ynsk.googlevideo.com.": {},
+ "rr5---sn-nx57ynsk.gvt1.com.": {},
"rr5---sn-nx57ynsl.googlevideo.com.": {},
"rr5---sn-nx57ynss.googlevideo.com.": {},
- "rr5---sn-nx57ynss.gvt1.com.": {},
"rr5---sn-nx57ynsz.googlevideo.com.": {},
- "rr5---sn-nx57ynsz.gvt1.com.": {},
"rr5---sn-nx5s7n76.googlevideo.com.": {},
"rr5---sn-nx5s7n76.gvt1.com.": {},
"rr5---sn-nx5s7n7d.googlevideo.com.": {},
- "rr5---sn-nx5s7n7d.gvt1.com.": {},
"rr5---sn-nx5s7n7s.googlevideo.com.": {},
+ "rr5---sn-nx5s7n7s.gvt1.com.": {},
"rr5---sn-nx5s7n7y.googlevideo.com.": {},
"rr5---sn-nx5s7n7y.gvt1.com.": {},
"rr5---sn-nx5s7n7z.googlevideo.com.": {},
+ "rr5---sn-nx5s7n7z.gvt1.com.": {},
"rr5---sn-nx5s7nee.googlevideo.com.": {},
"rr5---sn-nx5s7nee.gvt1.com.": {},
"rr5---sn-nx5s7nel.googlevideo.com.": {},
- "rr5---sn-nx5s7nel.gvt1.com.": {},
"rr5---sn-o097znsd.googlevideo.com.": {},
"rr5---sn-o097znse.googlevideo.com.": {},
"rr5---sn-o097znsk.googlevideo.com.": {},
"rr5---sn-o097znsl.googlevideo.com.": {},
"rr5---sn-o097znsr.googlevideo.com.": {},
- "rr5---sn-o097znsr.gvt1.com.": {},
"rr5---sn-o097znss.googlevideo.com.": {},
"rr5---sn-o097znsz.googlevideo.com.": {},
"rr5---sn-o097znz7.googlevideo.com.": {},
@@ -6807,8 +6637,8 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-p5qddn76.googlevideo.com.": {},
"rr5---sn-p5qddn7d.googlevideo.com.": {},
"rr5---sn-p5qddn7k.googlevideo.com.": {},
+ "rr5---sn-p5qddn7r.googlevideo.com.": {},
"rr5---sn-p5qddn7z.googlevideo.com.": {},
- "rr5---sn-p5qddn7z.gvt1.com.": {},
"rr5---sn-p5qlsn6l.googlevideo.com.": {},
"rr5---sn-p5qlsn76.googlevideo.com.": {},
"rr5---sn-p5qlsn7d.googlevideo.com.": {},
@@ -6817,9 +6647,10 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-p5qlsnd6.googlevideo.com.": {},
"rr5---sn-p5qlsndd.googlevideo.com.": {},
"rr5---sn-p5qlsndz.googlevideo.com.": {},
+ "rr5---sn-p5qlsnrl.googlevideo.com.": {},
+ "rr5---sn-p5qlsnrr.googlevideo.com.": {},
"rr5---sn-p5qlsny6.googlevideo.com.": {},
"rr5---sn-p5qs7n6d.googlevideo.com.": {},
- "rr5---sn-p5qs7nsk.googlevideo.com.": {},
"rr5---sn-p5qs7nsr.googlevideo.com.": {},
"rr5---sn-p5qs7nzk.googlevideo.com.": {},
"rr5---sn-p5qs7nzr.googlevideo.com.": {},
@@ -6830,51 +6661,45 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-q4fl6n6d.gvt1.com.": {},
"rr5---sn-q4fl6n6s.googlevideo.com.": {},
"rr5---sn-q4fl6n6y.googlevideo.com.": {},
- "rr5---sn-q4fl6n6y.gvt1.com.": {},
"rr5---sn-q4fl6n6z.googlevideo.com.": {},
"rr5---sn-q4fl6n6z.gvt1.com.": {},
"rr5---sn-q4fl6nd6.googlevideo.com.": {},
- "rr5---sn-q4fl6nd6.gvt1.com.": {},
"rr5---sn-q4fl6nd7.googlevideo.com.": {},
"rr5---sn-q4fl6nd7.gvt1.com.": {},
"rr5---sn-q4fl6nde.googlevideo.com.": {},
"rr5---sn-q4fl6ndl.googlevideo.com.": {},
- "rr5---sn-q4fl6ndl.gvt1.com.": {},
"rr5---sn-q4fl6nds.googlevideo.com.": {},
- "rr5---sn-q4fl6nds.gvt1.com.": {},
"rr5---sn-q4fl6ndz.googlevideo.com.": {},
"rr5---sn-q4fl6nlz.googlevideo.com.": {},
"rr5---sn-q4fl6ns6.googlevideo.com.": {},
"rr5---sn-q4fl6ns6.gvt1.com.": {},
"rr5---sn-q4fl6ns7.googlevideo.com.": {},
- "rr5---sn-q4fl6ns7.gvt1.com.": {},
"rr5---sn-q4fl6nsd.googlevideo.com.": {},
"rr5---sn-q4fl6nsd.gvt1.com.": {},
"rr5---sn-q4fl6nsk.googlevideo.com.": {},
"rr5---sn-q4fl6nsk.gvt1.com.": {},
"rr5---sn-q4fl6nsl.googlevideo.com.": {},
+ "rr5---sn-q4fl6nsl.gvt1.com.": {},
"rr5---sn-q4fl6nsr.googlevideo.com.": {},
"rr5---sn-q4fl6nss.googlevideo.com.": {},
+ "rr5---sn-q4fl6nss.gvt1.com.": {},
"rr5---sn-q4fl6nsy.googlevideo.com.": {},
- "rr5---sn-q4fl6nsy.gvt1.com.": {},
"rr5---sn-q4fl6nz6.googlevideo.com.": {},
"rr5---sn-q4fl6nz7.googlevideo.com.": {},
"rr5---sn-q4fl6nzy.googlevideo.com.": {},
- "rr5---sn-q4fl6nzy.gvt1.com.": {},
"rr5---sn-q4flrn7k.googlevideo.com.": {},
"rr5---sn-q4flrn7r.googlevideo.com.": {},
"rr5---sn-q4flrn7y.googlevideo.com.": {},
"rr5---sn-q4flrne6.googlevideo.com.": {},
"rr5---sn-q4flrne7.googlevideo.com.": {},
"rr5---sn-q4flrnee.googlevideo.com.": {},
- "rr5---sn-q4flrnee.gvt1.com.": {},
"rr5---sn-q4flrnek.googlevideo.com.": {},
"rr5---sn-q4flrnel.googlevideo.com.": {},
"rr5---sn-q4flrnel.gvt1.com.": {},
"rr5---sn-q4flrner.googlevideo.com.": {},
+ "rr5---sn-q4flrner.gvt1.com.": {},
"rr5---sn-q4flrnes.googlevideo.com.": {},
"rr5---sn-q4flrney.googlevideo.com.": {},
- "rr5---sn-q4flrney.gvt1.com.": {},
"rr5---sn-q4flrnez.googlevideo.com.": {},
"rr5---sn-q4flrnl6.googlevideo.com.": {},
"rr5---sn-q4flrnl6.gvt1.com.": {},
@@ -6883,37 +6708,31 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-q4flrnld.googlevideo.com.": {},
"rr5---sn-q4flrnld.gvt1.com.": {},
"rr5---sn-q4flrnle.googlevideo.com.": {},
- "rr5---sn-q4flrnle.gvt1.com.": {},
"rr5---sn-q4flrnlz.googlevideo.com.": {},
- "rr5---sn-q4flrnlz.gvt1.com.": {},
"rr5---sn-q4flrnsd.googlevideo.com.": {},
"rr5---sn-q4flrnsk.googlevideo.com.": {},
- "rr5---sn-q4flrnsk.gvt1.com.": {},
"rr5---sn-q4flrnsl.googlevideo.com.": {},
"rr5---sn-q4flrnss.googlevideo.com.": {},
"rr5---sn-q4flrnss.gvt1.com.": {},
"rr5---sn-q4fzen7e.googlevideo.com.": {},
- "rr5---sn-q4fzen7e.gvt1.com.": {},
"rr5---sn-q4fzen7l.googlevideo.com.": {},
"rr5---sn-q4fzen7r.googlevideo.com.": {},
+ "rr5---sn-q4fzen7r.gvt1.com.": {},
"rr5---sn-q4fzen7s.googlevideo.com.": {},
+ "rr5---sn-q4fzen7s.gvt1.com.": {},
"rr5---sn-q4fzen7y.googlevideo.com.": {},
- "rr5---sn-q4fzen7y.gvt1.com.": {},
"rr5---sn-q4fzene7.googlevideo.com.": {},
- "rr5---sn-q4fzene7.gvt1.com.": {},
"rr5---sn-q4fzenee.googlevideo.com.": {},
- "rr5---sn-q4fzenee.gvt1.com.": {},
"rr5---sn-qxo7rn7k.googlevideo.com.": {},
"rr5---sn-qxo7rn7r.googlevideo.com.": {},
"rr5---sn-qxo7rn7y.googlevideo.com.": {},
"rr5---sn-qxoedn7k.googlevideo.com.": {},
"rr5---sn-qxoedne7.googlevideo.com.": {},
"rr5---sn-qxoednee.googlevideo.com.": {},
+ "rr5---sn-t0a7ln7d.googlevideo.com.": {},
"rr5---sn-u1hp55-5c.googlevideo.com.": {},
"rr5---sn-vgqskn66.googlevideo.com.": {},
- "rr5---sn-vgqskn66.gvt1.com.": {},
"rr5---sn-vgqskn67.googlevideo.com.": {},
- "rr5---sn-vgqskn67.gvt1.com.": {},
"rr5---sn-vgqskn6d.googlevideo.com.": {},
"rr5---sn-vgqskn6s.googlevideo.com.": {},
"rr5---sn-vgqskn6z.googlevideo.com.": {},
@@ -6921,12 +6740,9 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-vgqskned.googlevideo.com.": {},
"rr5---sn-vgqsknek.googlevideo.com.": {},
"rr5---sn-vgqsknes.googlevideo.com.": {},
- "rr5---sn-vgqsknes.gvt1.com.": {},
"rr5---sn-vgqsknez.googlevideo.com.": {},
"rr5---sn-vgqsknez.gvt1.com.": {},
- "rr5---sn-vgqsknld.googlevideo.com.": {},
"rr5---sn-vgqsknlk.googlevideo.com.": {},
- "rr5---sn-vgqsknll.googlevideo.com.": {},
"rr5---sn-vgqsknlr.googlevideo.com.": {},
"rr5---sn-vgqsknlr.gvt1.com.": {},
"rr5---sn-vgqsknls.googlevideo.com.": {},
@@ -6939,66 +6755,57 @@ var FakeECSFQDNs = map[string]struct{}{
"rr5---sn-vgqsknz6.googlevideo.com.": {},
"rr5---sn-vgqsknz7.googlevideo.com.": {},
"rr5---sn-vgqsknzd.googlevideo.com.": {},
- "rr5---sn-vgqsknzd.gvt1.com.": {},
"rr5---sn-vgqsknze.googlevideo.com.": {},
- "rr5---sn-vgqsknze.gvt1.com.": {},
"rr5---sn-vgqsknzk.googlevideo.com.": {},
- "rr5---sn-vgqsknzk.gvt1.com.": {},
"rr5---sn-vgqsknzl.googlevideo.com.": {},
"rr5---sn-vgqsknzr.googlevideo.com.": {},
- "rr5---sn-vgqsknzr.gvt1.com.": {},
"rr5---sn-vgqsknzs.googlevideo.com.": {},
- "rr5---sn-vgqsknzs.gvt1.com.": {},
"rr5---sn-vgqsknzy.googlevideo.com.": {},
"rr5---sn-vgqsknzz.googlevideo.com.": {},
"rr5---sn-vgqsrn66.googlevideo.com.": {},
- "rr5---sn-vgqsrn67.googlevideo.com.": {},
"rr5---sn-vgqsrn6e.googlevideo.com.": {},
- "rr5---sn-vgqsrn6e.gvt1.com.": {},
"rr5---sn-vgqsrn6l.googlevideo.com.": {},
"rr5---sn-vgqsrn6z.googlevideo.com.": {},
"rr5---sn-vgqsrn6z.gvt1.com.": {},
"rr5---sn-vgqsrne6.googlevideo.com.": {},
"rr5---sn-vgqsrnek.googlevideo.com.": {},
- "rr5---sn-vgqsrnek.gvt1.com.": {},
"rr5---sn-vgqsrnes.googlevideo.com.": {},
"rr5---sn-vgqsrnez.googlevideo.com.": {},
- "rr5---sn-vgqsrnez.gvt1.com.": {},
"rr5---sn-vgqsrnl6.googlevideo.com.": {},
"rr5---sn-vgqsrnld.googlevideo.com.": {},
+ "rr5---sn-vgqsrnlk.googlevideo.com.": {},
"rr5---sn-vgqsrnll.googlevideo.com.": {},
"rr5---sn-vgqsrnls.googlevideo.com.": {},
"rr5---sn-vgqsrnlz.googlevideo.com.": {},
- "rr5---sn-vgqsrnlz.gvt1.com.": {},
"rr5---sn-vgqsrns6.googlevideo.com.": {},
"rr5---sn-vgqsrns6.gvt1.com.": {},
"rr5---sn-vgqsrnsd.googlevideo.com.": {},
- "rr5---sn-vgqsrnsd.gvt1.com.": {},
"rr5---sn-vgqsrnsr.googlevideo.com.": {},
- "rr5---sn-vgqsrnsr.gvt1.com.": {},
"rr5---sn-vgqsrnsy.googlevideo.com.": {},
+ "rr5---sn-vgqsrnsy.gvt1.com.": {},
"rr5---sn-vgqsrnz6.googlevideo.com.": {},
"rr5---sn-vgqsrnz7.googlevideo.com.": {},
"rr5---sn-vgqsrnzd.googlevideo.com.": {},
- "rr5---sn-vgqsrnzd.gvt1.com.": {},
"rr5---sn-vgqsrnzk.googlevideo.com.": {},
"rr5---sn-vgqsrnzr.googlevideo.com.": {},
"rr5---sn-vgqsrnzs.googlevideo.com.": {},
"rr5---sn-vgqsrnzy.googlevideo.com.": {},
"rr5---sn-vgqsrnzz.googlevideo.com.": {},
"rr5---sn-vgqsrnzz.gvt1.com.": {},
- "rr5.sn-q4fl6nsd.googlevideo.com.": {},
- "rr6---sn-2aqu-hoas7.googlevideo.com.": {},
+ "rr5.sn-ntq7yns7.googlevideo.com.": {},
+ "rr5.sn-q4fl6nd7.googlevideo.com.": {},
+ "rr5.sn-q4fl6nde.googlevideo.com.": {},
+ "rr5.sn-q4flrne6.googlevideo.com.": {},
+ "rr5.sn-q4flrnl6.googlevideo.com.": {},
+ "rr5.sn-q4flrnl7.googlevideo.com.": {},
+ "rr5.sn-q4flrnld.googlevideo.com.": {},
+ "rr5.sn-q4fzen7e.googlevideo.com.": {},
+ "rr5.sn-q4fzen7s.googlevideo.com.": {},
"rr6---sn-2vgu0b5auxaxjvh-apnd.googlevideo.com.": {},
"rr6---sn-2vgu0b5auxaxjvh-v2vd.googlevideo.com.": {},
"rr6---sn-2vgu0b5auxaxjvh-v2ve.googlevideo.com.": {},
"rr6---sn-2vgu0b5auxaxjvh-v2vl.googlevideo.com.": {},
- "rr6---sn-42u-nbozl.googlevideo.com.": {},
- "rr6---sn-42u-nbozz.googlevideo.com.": {},
"rr6---sn-5pgnugx5h-hn2z.googlevideo.com.": {},
- "rr6---sn-8qj-i5o6k.googlevideo.com.": {},
- "rr6---sn-8qj-i5ozd.googlevideo.com.": {},
- "rr6---sn-8qj-i5ozr.googlevideo.com.": {},
"rr6---sn-8qj-nbo66.googlevideo.com.": {},
"rr6---sn-8xgp1vo-2iae.googlevideo.com.": {},
"rr6---sn-8xgp1vo-2iae7.googlevideo.com.": {},
@@ -7012,10 +6819,8 @@ var FakeECSFQDNs = map[string]struct{}{
"rr6---sn-8xgp1vo-ab5z.googlevideo.com.": {},
"rr6---sn-8xgp1vo-p5ie.googlevideo.com.": {},
"rr6---sn-8xgp1vo-vgqe.googlevideo.com.": {},
- "rr6---sn-8xgp1vo-xfge.googlevideo.com.": {},
"rr6---sn-8xgp1vo-xfgl.googlevideo.com.": {},
"rr6---sn-8xgp1vo-xfgs.googlevideo.com.": {},
- "rr6---sn-bvvbax-2ial.googlevideo.com.": {},
"rr6---sn-i5f5ppuxa-ioal.googlevideo.com.": {},
"rr6---sn-jvhj5nu-2iae.googlevideo.com.": {},
"rr6---sn-jvhj5nu-2ial.googlevideo.com.": {},
@@ -7037,12 +6842,6 @@ var FakeECSFQDNs = map[string]struct{}{
"rr7---sn-2vgu0b5auxaxjvh-v2vd.googlevideo.com.": {},
"rr7---sn-2vgu0b5auxaxjvh-v2ve.googlevideo.com.": {},
"rr7---sn-2vgu0b5auxaxjvh-v2vl.googlevideo.com.": {},
- "rr7---sn-42u-nboze.googlevideo.com.": {},
- "rr7---sn-42u-nbozz.googlevideo.com.": {},
- "rr7---sn-8qj-i5o6k.googlevideo.com.": {},
- "rr7---sn-8qj-i5ody.googlevideo.com.": {},
- "rr7---sn-8qj-i5ozd.googlevideo.com.": {},
- "rr7---sn-8qj-i5ozr.googlevideo.com.": {},
"rr7---sn-8qj-nbo66.googlevideo.com.": {},
"rr7---sn-8xgp1vo-2iae.googlevideo.com.": {},
"rr7---sn-8xgp1vo-2ial.googlevideo.com.": {},
@@ -7056,12 +6855,9 @@ var FakeECSFQDNs = map[string]struct{}{
"rr7---sn-8xgp1vo-p5ie.googlevideo.com.": {},
"rr7---sn-8xgp1vo-vgqe.googlevideo.com.": {},
"rr7---sn-8xgp1vo-xfge.googlevideo.com.": {},
- "rr7---sn-8xgp1vo-xfgl.googlevideo.com.": {},
- "rr7---sn-bvvbax-2ial.googlevideo.com.": {},
"rr7---sn-jvhj5nu-nh4e.googlevideo.com.": {},
"rr7---sn-jvhj5nu-nh4l.googlevideo.com.": {},
"rr7---sn-jvhj5nu-nh4z.googlevideo.com.": {},
- "rr7---sn-jvhj5nu-qufe.googlevideo.com.": {},
"rr7---sn-jvhj5nu-qufl.googlevideo.com.": {},
"rr7---sn-jvhj5nu-qufs.googlevideo.com.": {},
"rr7---sn-jvhj5nu-qufz.googlevideo.com.": {},
@@ -7070,9 +6866,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rr8---sn-2vgu0b5auxaxjvh-apnd.googlevideo.com.": {},
"rr8---sn-2vgu0b5auxaxjvh-v2vd.googlevideo.com.": {},
"rr8---sn-2vgu0b5auxaxjvh-v2ve.googlevideo.com.": {},
- "rr8---sn-42u-nbozz.googlevideo.com.": {},
- "rr8---sn-8qj-i5o6k.googlevideo.com.": {},
- "rr8---sn-8qj-i5ozr.googlevideo.com.": {},
+ "rr8---sn-2vgu0b5auxaxjvh-v2vl.googlevideo.com.": {},
"rr8---sn-8xgp1vo-2iae.googlevideo.com.": {},
"rr8---sn-8xgp1vo-2ial.googlevideo.com.": {},
"rr8---sn-8xgp1vo-ab56.googlevideo.com.": {},
@@ -7087,14 +6881,11 @@ var FakeECSFQDNs = map[string]struct{}{
"rr8---sn-8xgp1vo-xfgl.googlevideo.com.": {},
"rr8---sn-bvvbax-2iae.googlevideo.com.": {},
"rr8---sn-bvvbax-2ial.googlevideo.com.": {},
- "rr9---sn-8qj-i5ozd.googlevideo.com.": {},
- "rs.cricketwireless.com.": {},
+ "rs-stripe.alm.com.": {},
"rs1.qq.com.": {},
"rs2.qq.com.": {},
- "rsfhealth-my.sharepoint.com.": {},
"rsx.afterpay.com.": {},
"rt.teramind.co.": {},
- "rt3055.infolinks.com.": {},
"rtb-apac.rtbserve.io.": {},
"rtb-eu.rtbserve.io.": {},
"rtb-useast.creativedot.net.": {},
@@ -7108,8 +6899,7 @@ var FakeECSFQDNs = map[string]struct{}{
"rtbasia.com.": {},
"rtbsuperhub.com.": {},
"rtbwave.com.": {},
- "rtc.platform.dbankcloud.com.": {},
- "rtp-static.marketo.com.": {},
+ "rtlog22-normal-alisg.tiktokv.com.": {},
"rttf.citrix.com.": {},
"ru1.chat.si.riotgames.com.": {},
"ruijienetworks.com.": {},
@@ -7121,35 +6911,30 @@ var FakeECSFQDNs = map[string]struct{}{
"rxsafeway.sharepoint.com.": {},
"s-cs.send.microad.jp.": {},
"s-rtb-pb.send.microad.jp.": {},
- "s.ccsyncuuid.net.": {},
"s.dblks.net.": {},
"s.deepl.com.": {},
+ "s.dualspaceapi.com.": {},
"s.exitbee.com.": {},
"s.optifine.net.": {},
+ "s.q.easebar.com.": {},
"s.seedtag.com.": {},
"s1.thcdn.com.": {},
- "s13emagst.akamaized.net.": {},
"s3.us-east-005.backblazeb2.com.": {},
- "s3.us-west-004.backblazeb2.com.": {},
- "s8.addthis.com.": {},
+ "s7d6.scene7.com.": {},
"sa1.chat.si.riotgames.com.": {},
"sa2.chat.si.riotgames.com.": {},
"sa3.chat.si.riotgames.com.": {},
"sabre-app.quantummetric.com.": {},
"sabre-sync.quantummetric.com.": {},
+ "safelitegroup-my.sharepoint.com.": {},
"saintasaph.remotepc.com.": {},
"salesbridge-my.sharepoint.com.": {},
"salesbridge.sharepoint.com.": {},
"saltlakecity.remotepc.com.": {},
- "samhealthanon.genetec.com.": {},
- "samip.genetec.com.": {},
- "sampkac.genetec.com.": {},
- "sams-checkin.mobile.walmart.com.": {},
"samsclub.quantummetric.com.": {},
- "san.foxsports.com.edgekey.net.": {},
"san.support.hp.com.edgekey.net.": {},
"sanantonio.remotepc.com.": {},
- "sandbox.wdesk.com.": {},
+ "sanctionssearch.ofac.treas.gov.": {},
"sandboxclient.retinavue.net.": {},
"sandboxregister.retinavue.net.": {},
"sandiego.remotepc.com.": {},
@@ -7159,10 +6944,10 @@ var FakeECSFQDNs = map[string]struct{}{
"santandernet-my.sharepoint.com.": {},
"santandernet.sharepoint.com.": {},
"santiago.remotepc.com.": {},
+ "sanxia.studyquicks.com.": {},
"saopaulo.remotepc.com.": {},
"saopaulo1.remotepc.com.": {},
"saskpower-my.sharepoint.com.": {},
- "sasoffice365-my.sharepoint.com.": {},
"saspeed.igamecj.com.": {},
"sat02pap001.storage.live.com.": {},
"sat02pap001files.storage.live.com.": {},
@@ -7175,11 +6960,14 @@ var FakeECSFQDNs = map[string]struct{}{
"sat02pap005.storage.live.com.": {},
"sat02pap005files.storage.live.com.": {},
"sav.cynet.com.": {},
+ "sc.cnbc.com.": {},
"sc.zoom.us.": {},
"scasurgery-my.sharepoint.com.": {},
"scasurgery.sharepoint.com.": {},
+ "scdss-my.sharepoint.com.": {},
"schneidercorp.com.": {},
"sciener.cn.": {},
+ "sconf.f.360.cn.": {},
"scontent-ams2-1.cdninstagram.com.": {},
"scontent-ams2-1.xx.fbcdn.net.": {},
"scontent-ams4-1.cdninstagram.com.": {},
@@ -7192,10 +6980,12 @@ var FakeECSFQDNs = map[string]struct{}{
"scontent-atl3-2.xx.fbcdn.net.": {},
"scontent-ber1-1.cdninstagram.com.": {},
"scontent-ber1-1.xx.fbcdn.net.": {},
- "scontent-bog1-1.cdninstagram.com.": {},
- "scontent-bog1-1.xx.fbcdn.net.": {},
+ "scontent-bkk1-1.xx.fbcdn.net.": {},
+ "scontent-bkk1-2.xx.fbcdn.net.": {},
"scontent-bog2-1.cdninstagram.com.": {},
"scontent-bog2-1.xx.fbcdn.net.": {},
+ "scontent-bog2-2.cdninstagram.com.": {},
+ "scontent-bog2-2.xx.fbcdn.net.": {},
"scontent-bos5-1.cdninstagram.com.": {},
"scontent-bos5-1.xx.fbcdn.net.": {},
"scontent-bru2-1.cdninstagram.com.": {},
@@ -7210,16 +7000,14 @@ var FakeECSFQDNs = map[string]struct{}{
"scontent-cgk1-1.xx.fbcdn.net.": {},
"scontent-cgk1-2.cdninstagram.com.": {},
"scontent-cgk1-2.xx.fbcdn.net.": {},
- "scontent-den4-1.cdninstagram.com.": {},
- "scontent-den4-1.xx.fbcdn.net.": {},
+ "scontent-den2-1.cdninstagram.com.": {},
+ "scontent-den2-1.xx.fbcdn.net.": {},
"scontent-dfw5-1.cdninstagram.com.": {},
"scontent-dfw5-1.xx.fbcdn.net.": {},
"scontent-dfw5-2.cdninstagram.com.": {},
"scontent-dfw5-2.xx.fbcdn.net.": {},
"scontent-dus1-1.cdninstagram.com.": {},
"scontent-dus1-1.xx.fbcdn.net.": {},
- "scontent-fml20-1.cdninstagram.com.": {},
- "scontent-fml20-1.xx.fbcdn.net.": {},
"scontent-fra3-1.cdninstagram.com.": {},
"scontent-fra3-1.xx.fbcdn.net.": {},
"scontent-fra3-2.cdninstagram.com.": {},
@@ -7229,14 +7017,6 @@ var FakeECSFQDNs = map[string]struct{}{
"scontent-fra5-2.cdninstagram.com.": {},
"scontent-fra5-2.xx.fbcdn.net.": {},
"scontent-gmp1-1.cdninstagram.com.": {},
- "scontent-gru1-1.cdninstagram.com.": {},
- "scontent-gru1-1.xx.fbcdn.net.": {},
- "scontent-gru1-2.cdninstagram.com.": {},
- "scontent-gru1-2.xx.fbcdn.net.": {},
- "scontent-gru2-1.cdninstagram.com.": {},
- "scontent-gru2-1.xx.fbcdn.net.": {},
- "scontent-gru2-2.cdninstagram.com.": {},
- "scontent-gru2-2.xx.fbcdn.net.": {},
"scontent-ham3-1.cdninstagram.com.": {},
"scontent-ham3-1.xx.fbcdn.net.": {},
"scontent-hel3-1.cdninstagram.com.": {},
@@ -7281,7 +7061,9 @@ var FakeECSFQDNs = map[string]struct{}{
"scontent-mia3-2.xx.fbcdn.net.": {},
"scontent-mnl1-1.xx.fbcdn.net.": {},
"scontent-mnl1-2.xx.fbcdn.net.": {},
+ "scontent-mrs2-1.cdninstagram.com.": {},
"scontent-mrs2-1.xx.fbcdn.net.": {},
+ "scontent-mrs2-2.cdninstagram.com.": {},
"scontent-mrs2-2.xx.fbcdn.net.": {},
"scontent-msp1-1.cdninstagram.com.": {},
"scontent-msp1-1.xx.fbcdn.net.": {},
@@ -7289,12 +7071,10 @@ var FakeECSFQDNs = map[string]struct{}{
"scontent-mty2-1.xx.fbcdn.net.": {},
"scontent-muc2-1.cdninstagram.com.": {},
"scontent-muc2-1.xx.fbcdn.net.": {},
- "scontent-nrt1-2.cdninstagram.com.": {},
"scontent-ord5-1.cdninstagram.com.": {},
"scontent-ord5-1.xx.fbcdn.net.": {},
"scontent-ord5-2.cdninstagram.com.": {},
"scontent-ord5-2.xx.fbcdn.net.": {},
- "scontent-pmo1-1.xx.fbcdn.net.": {},
"scontent-prg1-1.cdninstagram.com.": {},
"scontent-prg1-1.xx.fbcdn.net.": {},
"scontent-qro1-1.cdninstagram.com.": {},
@@ -7313,6 +7093,7 @@ var FakeECSFQDNs = map[string]struct{}{
"scontent-sin6-4.xx.fbcdn.net.": {},
"scontent-sjc3-1.cdninstagram.com.": {},
"scontent-sjc3-1.xx.fbcdn.net.": {},
+ "scontent-sof1-1.xx.fbcdn.net.": {},
"scontent-ssn1-1.cdninstagram.com.": {},
"scontent-vie1-1.cdninstagram.com.": {},
"scontent-vie1-1.xx.fbcdn.net.": {},
@@ -7328,18 +7109,20 @@ var FakeECSFQDNs = map[string]struct{}{
"scontent-xsp2-1.xx.fbcdn.net.": {},
"scontent-yyz1-1.cdninstagram.com.": {},
"scontent-yyz1-1.xx.fbcdn.net.": {},
+ "scotiabank.com.": {},
"scraper2.onlineradiobox.com.": {},
"scus.his.arc.azure.com.": {},
"scus.his.hybridcompute.trafficmanager.net.": {},
+ "sd-suggestions.operacdn.com.": {},
"sdeconfig.kaspersky-labs.com.": {},
- "sdk.51.la.": {},
"sdk.beizi.biz.": {},
+ "sdk.canva.com.": {},
+ "sdk.iad-04.braze.com.cdn.cloudflare.net.": {},
+ "sdk.jetbluevacations.com.": {},
"sdk.qcloud.com.": {},
"sdkgate.pushv3.easebar.com.": {},
"sdktmp.hubcloud.com.cn.": {},
"sdn.lxdns.com.": {},
- "sdn.qtlcname.com.": {},
- "seabroadnet.com.": {},
"seagate.com.": {},
"seagullscientific.com.": {},
"sealsubscriptions.com.": {},
@@ -7347,31 +7130,22 @@ var FakeECSFQDNs = map[string]struct{}{
"search.namequery.com.": {},
"search.us.namequery.com.": {},
"searchanise.com.": {},
- "searchnews-dre.dt.dbankcloud.com.": {},
+ "searchfeed.adssquared.com.": {},
"searchserverapi.com.": {},
"seattle.remotepc.com.": {},
- "seattle2.remotepc.com.": {},
- "seattle3.remotepc.com.": {},
"secaucus.remotepc.com.": {},
+ "secure-web.cisco.com.": {},
"secure.accurint.com.": {},
- "secure.appex-rf.msn.com.edgekey.net.": {},
- "secure.channel4.com.edgekey.net.": {},
+ "secure.skypeassets.com.": {},
"secure.syndetics.com.": {},
"secure5.arcot.com.": {},
"securelink.rivhs.com.": {},
"securelink.valleywisehealth.org.": {},
"securityapi.d3-pr-tm.com.": {},
"securitybankcorporation-my.sharepoint.com.": {},
+ "securitybankcorporation.sharepoint.com.": {},
"seedtag.com.": {},
- "select1.notoldrb.monster.": {},
- "select10.notoldrb.monster.": {},
- "select3.notoldrb.monster.": {},
- "select4.notoldrb.monster.": {},
- "select5.notoldrb.monster.": {},
- "select6.notoldrb.monster.": {},
- "select7.notoldrb.monster.": {},
- "select9.notoldrb.monster.": {},
- "selectmedia.asia.": {},
+ "segway.prod.k8s.onepeloton.com.": {},
"send.microad.jp.": {},
"sendibt3.com.": {},
"sensei.ruselabs.com.": {},
@@ -7381,6 +7155,9 @@ var FakeECSFQDNs = map[string]struct{}{
"sentry.archive.org.": {},
"sentry.ksztone.com.": {},
"sentry.quillbot.com.": {},
+ "sentry.wrike.com.": {},
+ "seoul.remotepc.com.": {},
+ "sephora-live.inside-graph.com.cdn.cloudflare.net.": {},
"serv.vuukle.com.": {},
"serve.pubapp.network.": {},
"served-by.pixfuture.com.": {},
@@ -7388,75 +7165,93 @@ var FakeECSFQDNs = map[string]struct{}{
"server.bidstack.com.": {},
"serverforge.org.": {},
"service.minute.ly.": {},
+ "service.weather.microsoft.com.": {},
+ "service2.ultipro.com.": {},
+ "servicebus101.myconnectsecure.com.": {},
+ "servicebus102.myconnectsecure.com.": {},
+ "servicebus103.myconnectsecure.com.": {},
+ "servicebus104.myconnectsecure.com.": {},
+ "services-mob.panerabread.com.": {},
"services.lego.com.": {},
"services.starfinanz.de.": {},
"services.ucp.kaspersky-labs.com.": {},
"servicetitan.com.": {},
"servt.vuukle.com.": {},
"servx.opamarketplace.com.": {},
- "sessionstack.com.": {},
+ "servx.playstream.media.": {},
"settings.live.net.": {},
"settings.luckyorange.com.": {},
+ "sewjn80htn-1.algolianet.com.": {},
+ "sewjn80htn-2.algolianet.com.": {},
"sewjn80htn-3.algolianet.com.": {},
"sf-express.com.": {},
"sg.api.translator.voice.gcloudsdk.com.": {},
- "sg.mmstat.com.": {},
- "sg.rr2.internet-intl.spanner.alipaydns.com.": {},
+ "sg1a-excel-collab.officeapps.live.com.": {},
"sgmbocast.com.": {},
"sgpcas.ezvizlife.com.": {},
- "sgtm.journeys.com.": {},
- "shaka.ruselabs.com.": {},
+ "shappify.com.": {},
"share.connect.aig.": {},
- "shared.tournament.a.pvp.net.": {},
- "sharkninja-prd-cus-001.azure-api.net.": {},
+ "sharenotes.co.": {},
"sharpschool.com.": {},
"shc6.y.qq.com.": {},
+ "shop.mango.com.": {},
"shopify-gtm-suite.getelevar.com.": {},
"shoplazza.com.": {},
+ "shortintl.push.oppomobile.com.": {},
"shortpixel.ai.": {},
"shoutout.wix.com.": {},
- "shp.ee.": {},
- "shutterfly-app.quantummetric.com.": {},
- "shutterfly-sync.quantummetric.com.": {},
+ "shredder-us.osi.office.net.": {},
"shuzilm.cn.": {},
- "signet.groupbycloud.com.": {},
"signin.ultipro.com.": {},
- "simpshopifyapps.com.": {},
- "sin-itm-radar-testobject.citrix.com.": {},
"sina.com.": {},
"sinaimg.cn.": {},
+ "sip-backup.phonepower.com.": {},
+ "sip-primary.phonepower.com.": {},
"sip.ringcentral.com.": {},
+ "sip112-1121.ringcentral.com.": {},
+ "sip112-1131.ringcentral.com.": {},
+ "sip112-1141.ringcentral.com.": {},
"sip113-1121.ringcentral.com.": {},
"sip113-1131.ringcentral.com.": {},
"sip113-1141.ringcentral.com.": {},
"sip121-1121.ringcentral.com.": {},
"sip121-1131.ringcentral.com.": {},
+ "sip121-1141.ringcentral.com.": {},
+ "sip121-1241.ringcentral.com.": {},
"sip123-1121.ringcentral.com.": {},
"sip123-1131.ringcentral.com.": {},
+ "sip123-1141.ringcentral.com.": {},
+ "sip131-1121.ringcentral.com.": {},
"sip131-1131.ringcentral.com.": {},
+ "sip131-1141.ringcentral.com.": {},
+ "sip132-1121.ringcentral.com.": {},
"sip132-1131.ringcentral.com.": {},
"sip132-1141.ringcentral.com.": {},
"sip421-121.ringcentral.biz.": {},
- "sisense.com.": {},
+ "sipis.acrobits.cz.": {},
+ "sis-ipv6.jpush.cn.": {},
"sitemaji.com.": {},
+ "situsamc365-my.sharepoint.com.": {},
"sjc.zoom.us.": {},
"sjc04pap001.storage.live.com.": {},
"sjc04pap001files.storage.live.com.": {},
"sjc04pap002.storage.live.com.": {},
"sjc04pap002files.storage.live.com.": {},
+ "skanska-my.sharepoint.com.": {},
"skims.com.": {},
"skybet.com.": {},
+ "skyglobal.sharepoint.com.": {},
"skyward-lisdprod.iscorp.com.": {},
"skyward-ocprod.iscorp.com.": {},
"skyward.iscorp.com.": {},
- "sl.streamhub.tech.": {},
"slb.cynet.com.": {},
- "slickdealscdn.com.cdn.cloudflare.net.": {},
- "sling-app.quantummetric.com.": {},
+ "slickdealscdn.com.": {},
"sm.cn.": {},
"sm1.selectmedia.asia.": {},
"smartcloudcon.com.": {},
- "smartcommunications.cloud.": {},
+ "smarthome.ctdevice.ott4china.com.": {},
+ "smartpay.profitstars.com.": {},
+ "smetrics.att.com.": {},
"smoot-searchv2-aapse1c.v.aaplimg.com.": {},
"smoot-searchv2-aeuc1a.v.aaplimg.com.": {},
"smoot-searchv2-aeuc1b.v.aaplimg.com.": {},
@@ -7473,25 +7268,23 @@ var FakeECSFQDNs = map[string]struct{}{
"smoot-searchv2-ausw2c.v.aaplimg.com.": {},
"smrcy-my.sharepoint.com.": {},
"smrcy.sharepoint.com.": {},
+ "sms-sg.ads.heytapmobile.com.": {},
"sms.ads.heytapmobi.com.": {},
- "sn2files.storage.live.com.": {},
- "sn3301files.storage.live.com.": {},
+ "sn.api.np.km.playstation.net.": {},
"snap-storage-cdn.l.google.com.": {},
"snippet.affilimatejs.com.": {},
+ "snokido.com.": {},
"snz04pap001.storage.live.com.": {},
"snz04pap001files.storage.live.com.": {},
"snz04pap002.storage.live.com.": {},
"snz04pap002files.storage.live.com.": {},
- "socialize.us1.gigya.com.": {},
+ "social.thescore.com.": {},
+ "socialchain.app.": {},
"sockets.stackexchange.com.": {},
"sofia.remotepc.com.": {},
- "sogoucdn.com.": {},
"sohu.com.": {},
"sohucs.com.": {},
"solid.preyproject.com.": {},
- "solitaireevents.microsoftcasualgames.com.": {},
- "solve-api.forethought.ai.": {},
- "somplo.com.": {},
"sonar-akl1-1.xx.fbcdn.net.": {},
"sonar-ams2-1.xx.fbcdn.net.": {},
"sonar-ams4-1.xx.fbcdn.net.": {},
@@ -7502,10 +7295,12 @@ var FakeECSFQDNs = map[string]struct{}{
"sonar-ber1-1.xx.fbcdn.net.": {},
"sonar-bkk1-1.xx.fbcdn.net.": {},
"sonar-bkk1-2.xx.fbcdn.net.": {},
- "sonar-bog1-1.xx.fbcdn.net.": {},
"sonar-bog2-1.xx.fbcdn.net.": {},
+ "sonar-bog2-2.xx.fbcdn.net.": {},
"sonar-bom1-1.xx.fbcdn.net.": {},
"sonar-bom1-2.xx.fbcdn.net.": {},
+ "sonar-bom2-1.xx.fbcdn.net.": {},
+ "sonar-bom2-2.xx.fbcdn.net.": {},
"sonar-bos5-1.xx.fbcdn.net.": {},
"sonar-bru2-1.xx.fbcdn.net.": {},
"sonar-ccu1-1.xx.fbcdn.net.": {},
@@ -7522,7 +7317,7 @@ var FakeECSFQDNs = map[string]struct{}{
"sonar-del1-2.xx.fbcdn.net.": {},
"sonar-del2-1.xx.fbcdn.net.": {},
"sonar-del2-2.xx.fbcdn.net.": {},
- "sonar-den4-1.xx.fbcdn.net.": {},
+ "sonar-den2-1.xx.fbcdn.net.": {},
"sonar-dfw5-1.xx.fbcdn.net.": {},
"sonar-dfw5-2.xx.fbcdn.net.": {},
"sonar-doh1-1.xx.fbcdn.net.": {},
@@ -7530,6 +7325,7 @@ var FakeECSFQDNs = map[string]struct{}{
"sonar-dus1-1.xx.fbcdn.net.": {},
"sonar-eze1-1.xx.fbcdn.net.": {},
"sonar-fco2-1.xx.fbcdn.net.": {},
+ "sonar-fml1-1.xx.fbcdn.net.": {},
"sonar-fml20-1.xx.fbcdn.net.": {},
"sonar-for1-1.xx.fbcdn.net.": {},
"sonar-fra3-1.xx.fbcdn.net.": {},
@@ -7559,7 +7355,6 @@ var FakeECSFQDNs = map[string]struct{}{
"sonar-iev1-1.xx.fbcdn.net.": {},
"sonar-ist1-1.xx.fbcdn.net.": {},
"sonar-itm1-1.xx.fbcdn.net.": {},
- "sonar-jnb1-1.xx.fbcdn.net.": {},
"sonar-jnb2-1.xx.fbcdn.net.": {},
"sonar-kul2-1.xx.fbcdn.net.": {},
"sonar-kul2-2.xx.fbcdn.net.": {},
@@ -7624,64 +7419,52 @@ var FakeECSFQDNs = map[string]struct{}{
"sonar-xsp1-2.xx.fbcdn.net.": {},
"sonar-xsp1-3.xx.fbcdn.net.": {},
"sonar-xsp2-1.xx.fbcdn.net.": {},
- "sonar-xxb1-1.xx.fbcdn.net.": {},
"sonar-yyz1-1.xx.fbcdn.net.": {},
"sonar-zrh1-1.xx.fbcdn.net.": {},
"sonar.viously.com.": {},
"sooners-my.sharepoint.com.": {},
"sound-ai-stream.alibaba.com.": {},
"southcarolina.remotepc.com.": {},
+ "southfront.mm.fcix.net.": {},
"sp.replit.com.": {},
"sparteo.com.": {},
"spc2com-my.sharepoint.com.": {},
"spcdn.incartupsell.com.": {},
"spectrumhealth-my.sharepoint.com.": {},
"spectrumhealth.sharepoint.com.": {},
- "speechify.com.": {},
+ "speedtest.gcore.com.": {},
"spiny.ai.": {},
"spion.savvy.security.": {},
"splash-online-decision.xiaohongshu.com.": {},
"splash.unity.cn.": {},
- "sportsmans.com.": {},
- "sportsuggest-dre.things.dbankcloud.cn.": {},
"springfieldclinic-my.sharepoint.com.": {},
"springfieldclinic.sharepoint.com.": {},
"src.ebay-us.com.": {},
+ "srv1.maxhost.io.": {},
"ssafp.samsclub.com.": {},
"ssc.independent.co.uk.": {},
"ssctech.com.": {},
- "ssl.microsofttranslator.com.": {},
+ "ssimn.org.": {},
+ "sso.dealersocket.com.": {},
"sso.services.box.net.": {},
"ssp.hbrd.io.": {},
"ssp.hybrid.ai.": {},
"sstatic.net.": {},
+ "ssxd.mediav.com.": {},
"st-sysupgrade.vivo.com.cn.": {},
"staffbase.com.": {},
- "standaard.be.": {},
- "staples.com.": {},
"stardustgod.com.": {},
"starfinanz.de.": {},
"startssl.com.": {},
- "stat.360safe.com.": {},
- "stat.flashtalking.com.edgekey.net.": {},
- "stat.lianmeng.360.cn.": {},
"stat.mixi.media.": {},
"stat.pdfforge.org.": {},
- "stat2.notoldrb.monster.": {},
- "stat3.notoldrb.monster.": {},
- "stat4.notoldrb.monster.": {},
- "stat5.notoldrb.monster.": {},
- "stat6.notoldrb.monster.": {},
- "stat7.notoldrb.monster.": {},
"statad.ru.": {},
- "stathome.org.": {},
"static-ams2-1.xx.fbcdn.net.": {},
"static-ams4-1.xx.fbcdn.net.": {},
- "static-assets.highwebmedia.com.": {},
"static-atl3-1.xx.fbcdn.net.": {},
"static-atl3-2.xx.fbcdn.net.": {},
"static-bos5-1.xx.fbcdn.net.": {},
- "static-den4-1.xx.fbcdn.net.": {},
+ "static-den2-1.xx.fbcdn.net.": {},
"static-dfw5-1.xx.fbcdn.net.": {},
"static-dfw5-2.xx.fbcdn.net.": {},
"static-hou1-1.xx.fbcdn.net.": {},
@@ -7702,88 +7485,80 @@ var FakeECSFQDNs = map[string]struct{}{
"static-ord5-2.xx.fbcdn.net.": {},
"static-sea1-1.xx.fbcdn.net.": {},
"static-sjc3-1.xx.fbcdn.net.": {},
+ "static-vie1-1.xx.fbcdn.net.": {},
"static-waw1-1.xx.fbcdn.net.": {},
- "static.chewy.com.": {},
- "static.dable.io.": {},
- "static.etracker.com.": {},
"static.fastly.carvana.io.": {},
+ "static.foxnews.com.edgekey.net.": {},
"static.independent.co.uk.": {},
- "static.mobilkoy.ru.": {},
- "static.rgpub.io.": {},
+ "static.mixi.media.": {},
+ "static.nortoncdn.com.": {},
+ "static.springbuilder.site.": {},
"static.standard.co.uk.": {},
"static.thcdn.com.": {},
- "static1.mixi.media.": {},
- "static3.mixi.media.": {},
+ "static.writable.com.": {},
+ "static2.mixi.media.": {},
"static4.mixi.media.": {},
"static7.mixi.media.": {},
"static8.mixi.media.": {},
- "staticw2.yotpo.com-v1.edgekey.net.": {},
"statistic.live.126.net.": {},
+ "stats.adinplay.com.": {},
"stats.aeries.com.": {},
"stats.bannernow.com.": {},
+ "stats.dell.com.": {},
"stats.mightytext.co.": {},
+ "stats.norton.com.": {},
"stats.rip.": {},
+ "stats.studyquicks.com.": {},
"stats.transitapp.com.": {},
"statsig.anthropic.com.": {},
+ "statsigapi.net.": {},
"stblaw0-my.sharepoint.com.": {},
"stcdn.leadconnectorhq.com.": {},
"stcharleshealthsystem-my.sharepoint.com.": {},
+ "steelseries.com.": {},
+ "stemchristie.rome2rio.com.": {},
"stericyclecorp-my.sharepoint.com.": {},
- "stevemadden.com.": {},
"stg-data.ads.heytapmobi.com.": {},
- "stlouis.remotepc.com.": {},
"stockholm.remotepc.com.": {},
"stocks-analytics-events.apple.com.": {},
"stockx-app.quantummetric.com.": {},
"storagecraft.com.": {},
- "store-dra-hispace-dbankcloud-cn-dra.appacc.dbankedge.net.": {},
"store-dra.hispace.dbankcloud.cn.": {},
- "store.epicgames.com.": {},
"store.qq.com.": {},
"streamhub.tech.": {},
"streetviewpixels-pa.googleapis.com.": {},
"stse02.ultipro.com.": {},
"stsew02.ultipro.com.": {},
"stsn02.ultipro.com.": {},
+ "student.atitesting.com.": {},
+ "studentjths-my.sharepoint.com.": {},
+ "studentjths.sharepoint.com.": {},
"studentsecisd-my.sharepoint.com.": {},
"studentsecuedu66932-my.sharepoint.com.": {},
"studentsecuedu66932.sharepoint.com.": {},
"studenttuhsd-my.sharepoint.com.": {},
"studenttuhsd.sharepoint.com.": {},
+ "studyquicks.com.": {},
"stun.2talk.com.": {},
"stun.cdnbye.com.": {},
"stun1.ringcentral.com.": {},
- "stun101.signon.gravityshavings.net.": {},
- "stun102.signon.gravityshavings.net.": {},
- "stun103.signon.gravityshavings.net.": {},
- "stun104.signon.gravityshavings.net.": {},
- "stun105.signon.gravityshavings.net.": {},
- "stun106.signon.gravityshavings.net.": {},
- "stun107.signon.gravityshavings.net.": {},
- "stun108.signon.gravityshavings.net.": {},
"stun2.ringcentral.com.": {},
- "styx.data.dashlane.com.": {},
+ "subs.theepochtimes.com.": {},
"subway-sync.quantummetric.com.": {},
- "suggest.v-mate.mobi.": {},
"sumari-prod-1.srv.jbisumari.org.": {},
- "sumari.jbi.global.": {},
"sumologic.com.": {},
"sunamerica.com.": {},
"sunmedia.tv.": {},
"sunmi.com.": {},
"sunocoinc-my.sharepoint.com.": {},
"sunocoinc.sharepoint.com.": {},
- "suntcontent.se.": {},
"supl.qxwz.com.": {},
- "support.microsoft.com.": {},
"support.powerschool.com.": {},
"sutterhealth-my.sharepoint.com.": {},
- "sv-ookla.geolinks.com.": {},
+ "sutterhealth.sharepoint.com.": {},
"sv8.cyberhaven.io.": {},
"svlive.serraview.com.": {},
- "sweatco.in.": {},
"switch.babybus.com.": {},
- "swsim.stamps.com.": {},
"sydney-sydney-bing-com.trafficmanager.net.": {},
"sydney.bing.com.": {},
"sydney.remotepc.com.": {},
@@ -7796,28 +7571,20 @@ var FakeECSFQDNs = map[string]struct{}{
"syndetics.com.": {},
"sysdk.cl2009.com.": {},
"systemreportservices.genetec.com.": {},
- "t-apil2.mythad.com.": {},
"t-odx.op-mobile.opera.com.": {},
"t.adcell.com.": {},
"t.marketingcloudfx.com.": {},
"t.mookie1.com.": {},
"t.nit.ro.": {},
"t.poki.io.": {},
- "t.wepay.com.": {},
- "t1.ssl.ak.dynamic.tiles.virtualearth.net.": {},
- "t2.nativendo.de.": {},
- "t24469.featuretv.live.": {},
- "t2711.featuretv.live.": {},
+ "t.ssl.ak.dynamic.tiles.virtualearth.net.": {},
+ "t1.tiles.virtualearth.net.": {},
"t3.xiaohongshu.com.": {},
- "t9638.featuretv.live.": {},
- "t97182.featuretv.live.": {},
- "t9790.featuretv.live.": {},
- "tafaop.xiazaisoft111.com.": {},
"tag.winister.app.": {},
- "tagcommander.com.": {},
- "tags.johnlewis.com.": {},
+ "tags.adsafety.net.": {},
"tags.natwest.com.": {},
"taipei.remotepc.com.": {},
+ "tamersunion.org.": {},
"tampa.remotepc.com.": {},
"tanx.com.": {},
"tao.barstoolsports.com.": {},
@@ -7826,8 +7593,8 @@ var FakeECSFQDNs = map[string]struct{}{
"tapestry-app.quantummetric.com.": {},
"tarrantcounty-my.sharepoint.com.": {},
"tasteofhome.com.": {},
+ "tatracker-us.rivergame.net.": {},
"taylorfarms1com-my.sharepoint.com.": {},
- "tb.sb-cd.com.": {},
"tbcache.com.": {},
"tccprod01.honeywell.com.": {},
"tccprod02.honeywell.com.": {},
@@ -7836,28 +7603,30 @@ var FakeECSFQDNs = map[string]struct{}{
"tclclouds.com.": {},
"tdcservices.tandemdiabetes.com.": {},
"tdm.qq.com.": {},
+ "teachingstrategies.com.": {},
+ "teams.microsoft.com.": {},
"teams.office.com.": {},
"teamviewer.com.": {},
"tec-do.cn.": {},
- "techgus.com.": {},
"teddymobile.cn.": {},
- "tegna.profiles.tagger.opecloud.com.": {},
"telaviv.remotepc.com.": {},
"telecom.shuzilm.cn.": {},
"telemetry-sdk-inmobi-comtm.trafficmanager.net.": {},
+ "telemetry.docusign.net.": {},
"telemetry.savvy.security.": {},
+ "telemetry.sdk.inmobi.com.": {},
"telephony.goog.": {},
- "teleport.media.": {},
"tencent-cloud.com.": {},
"tencent-cloud.net.": {},
"tencent.com.": {},
"tencentmusic.com.": {},
"tenda.com.cn.": {},
- "tenpay.com.": {},
+ "tepoch.finzfin.com.": {},
"teraswitch.com.": {},
"terms3.hicloud.com.": {},
- "test.internetdownloadmanager.com.": {},
"testnjjhb.com.": {},
+ "text.com.": {},
+ "tfl-staticscdn.trafficmanager.net.": {},
"tgp.qq.com.": {},
"tgpa.qq.com.": {},
"thanhnien.vn.": {},
@@ -7865,13 +7634,16 @@ var FakeECSFQDNs = map[string]struct{}{
"thenewsbox.net.": {},
"theoks.net.": {},
"thetracker.org.": {},
+ "think12stg.wpengine.com.": {},
"thinkific.com.": {},
"thinkingdata.cn.": {},
"thm.visa.com.": {},
"thm12.visa.com.": {},
+ "thumb-v4.xhcdn.com.": {},
"tigermailauburn-my.sharepoint.com.": {},
+ "tigermailauburn.sharepoint.com.": {},
+ "tile.openstreetmap.org.": {},
"tile.osm.org.": {},
- "time.akamai.com.edgekey.net.": {},
"time.ecansol.net.": {},
"time.lmtlabs.com.": {},
"time.nest.com.": {},
@@ -7886,14 +7658,13 @@ var FakeECSFQDNs = map[string]struct{}{
"time4.google.com.": {},
"timi-esports.qq.com.": {},
"timken-my.sharepoint.com.": {},
+ "tivan.naver.com.": {},
"tkx.mp.lura.live.": {},
"tlivecdn.com.": {},
"tlivesource.com.": {},
- "tloxp.tlo.com.": {},
"tls-amap.dingtalk.com.": {},
"tls12.eu01.nr-data.net.cdn.cloudflare.net.": {},
"tls12.newrelic.com.cdn.cloudflare.net.": {},
- "tlsext.com.": {},
"tm.barclays.co.uk.": {},
"tm.bdc-cdn.com.": {},
"tm.cybersource.com.": {},
@@ -7901,35 +7672,34 @@ var FakeECSFQDNs = map[string]struct{}{
"tmall.com.": {},
"tmbbank-my.sharepoint.com.": {},
"tmbbank.sharepoint.com.": {},
- "tmbi.com.": {},
"tmc-g2.tm-4.office.com.": {},
+ "tmdeviceapi.tclking.com.": {},
"tmfp.klarna.com.": {},
"tmga.qq.com.": {},
"tmge.alicdn.com.": {},
"tmobile-app.quantummetric.com.": {},
"tmobile-sync.quantummetric.com.": {},
- "tmx.bestbuy.com.": {},
- "tmx.monzo.co.uk.": {},
+ "tmx.td.com.": {},
"tmx.tdbank.com.": {},
"tmx.uptodate.com.": {},
"tngdigital.com.my.": {},
- "tocoding.com.": {},
- "together.plex.tv.": {},
+ "today.line.me.": {},
+ "tokyo.remotepc.com.": {},
"tollbrothersinc-my.sharepoint.com.": {},
"tollbrothersinc.sharepoint.com.": {},
"top-widgets-va.us-east-1.log.aliyuncs.com.": {},
"toronto.remotepc.com.": {},
- "tos-d-maliva16-up.byteoversea.net.": {},
- "tosee-upg.tocoding.com.": {},
+ "tos-prd-api-mgmt.azure-api.net.": {},
"towerhealth-my.sharepoint.com.": {},
"towerhealth.sharepoint.com.": {},
"tplay.qq.com.": {},
- "tpns.gz2.tencent.com.": {},
"tpns.sgp.tencent.com.": {},
"tpns.sh.tencent.com.": {},
"tpns.tencent.com.": {},
"tpsservice-files-inner.cn-hangzhou.oss-cdn.aliyun-inc.com.": {},
+ "tqtli1-inapps.appsflyersdk.com.": {},
"tr-tmc-geo.office.com.": {},
+ "tr.p.360.cn.": {},
"tr1.chat.si.riotgames.com.": {},
"tra-ac-ae.apktorrents.com.": {},
"tra-ac-ae.best82.com.": {},
@@ -7965,33 +7735,31 @@ var FakeECSFQDNs = map[string]struct{}{
"track.sendlane.com.": {},
"track.ultimate-guitar.com.": {},
"tracker-udp.gbitt.info.": {},
+ "tracker.4.babico.name.tr.": {},
"tracker.best61.com.": {},
- "tracker.bitsearch.to.": {},
"tracker.ccp.ovh.": {},
"tracker.files.fm.": {},
"tracker.grepler.com.": {},
"tracker.hyper-torrent.com.": {},
"tracker.moeking.me.": {},
- "tracker.newtvcdn.com.": {},
- "tracker.openwebtorrent.com.": {},
+ "tracker.nwps.ws.": {},
"tracker.theoks.net.": {},
"tracker1.bt.moack.co.kr.": {},
"tracker2.dler.org.": {},
"tracking.eu.antskre.com.": {},
+ "tracking.g2crowd.com.": {},
"tracking.ksztone.com.": {},
"tradplusad.com.": {},
- "traffic.omny.fm.": {},
- "transec.usbank.com.": {},
+ "trafficbass.com.": {},
"transplace-my.sharepoint.com.": {},
"traversal.syncromsp.com.": {},
"treas.gov.": {},
"treasury.gov.": {},
+ "treasurydirect.gov.": {},
"tribalfusion.com.": {},
- "trophy.ww.np.community.playstation.net.": {},
"trovit.com.": {},
"ts1.qq.com.": {},
"ts2.qq.com.": {},
- "tsa.gov.": {},
"tse1.explicit.bing.net.": {},
"tse1.mm.bing.net.": {},
"tse2.explicit.bing.net.": {},
@@ -8000,45 +7768,36 @@ var FakeECSFQDNs = map[string]struct{}{
"tse3.mm.bing.net.": {},
"tse4.explicit.bing.net.": {},
"tse4.mm.bing.net.": {},
- "tsms-dre.security.dbankcloud.cn.": {},
+ "tsms-dre.security.dbankcloud.com.": {},
"tt.browser.360.cn.": {},
"ttcache.com.": {},
"ttigroup-my.sharepoint.com.": {},
"ttigroup.sharepoint.com.": {},
"tubecup.net.": {},
"tuhsdk12azus-my.sharepoint.com.": {},
+ "tuhsdk12azus.sharepoint.com.": {},
"tunnel.googlezip.net.": {},
"tuoitre.vn.": {},
- "turn.aristotleinsight.com.": {},
- "turnerusd202org-my.sharepoint.com.": {},
- "tusd1-my.sharepoint.com.": {},
- "tusd1.sharepoint.com.": {},
"tuya.com.": {},
"tw.ntp.org.cn.": {},
"twcgov-my.sharepoint.com.": {},
"twcgov.sharepoint.com.": {},
- "tx-mirror.tier.net.": {},
- "txcmmov.a.etoote.com.": {},
"txdot-my.sharepoint.com.": {},
"txdot.sharepoint.com.": {},
+ "txoag-my.sharepoint.com.": {},
"txoag.sharepoint.com.": {},
- "txqcmmov.a.etoote.com.": {},
- "txryan.com.": {},
+ "tyjr-fgj.aliyun.com.vipgds.alibabadns.com.": {},
+ "typenetwork.com.": {},
"u.4dex.io.": {},
"uapi.mp.360.cn.": {},
"uber.zoom.us.": {},
- "uc.chatra-usercontent.com.": {},
"uc.cn.": {},
- "uci.edog.cdn.office.net.edgekey.net.": {},
"ucweb.com.": {},
+ "ud.reasonsecurity.com.": {},
"udemycdn.com.": {},
- "ue.lenovomm.cn.": {},
- "ugc.bazaarvoice.com.": {},
- "uhabo.com.": {},
- "ui5.sap.com.": {},
+ "udesk.cn.": {},
"uk-api.asm.skype.com.": {},
"uk-prod.asyncgw.teams.microsoft.com.": {},
- "uk3-word-collab.officeapps.live.com.": {},
"ukc-excel-collab.officeapps.live.com.": {},
"ukg.com.": {},
"uks.his.arc.azure.com.": {},
@@ -8046,67 +7805,68 @@ var FakeECSFQDNs = map[string]struct{}{
"ukyuh.tech.": {},
"ulikecam.com.": {},
"uline-app.quantummetric.com.": {},
- "uline-sync.quantummetric.com.": {},
- "ulinq.asia.": {},
+ "ulmoyc.com.": {},
"ulta-app.quantummetric.com.": {},
"ulta-sync.quantummetric.com.": {},
- "ulta.com.": {},
"ulta.quantummetric.com.": {},
"ultipro.com.": {},
"ultiprotime.com.": {},
"ultiproworkplace.com.": {},
"umainesystem-my.sharepoint.com.": {},
"umeng.com.": {},
- "ums-telemetry-cn.heytapmobi.com.": {},
+ "unbxd.io.": {},
"uncw4-my.sharepoint.com.": {},
+ "uncw4.sharepoint.com.": {},
"unicom.shuzilm.cn.": {},
"unified-inbox-1-gw.ultipro.com.": {},
"unified-inbox-2-gw.ultipro.com.": {},
"union.barstoolsports.com.": {},
"union.ucweb.com.": {},
"unipay.qq.com.": {},
+ "unisoc.com.": {},
"united.quantummetric.com.": {},
- "unitrends.com.": {},
"unity.cn.": {},
- "unity3d.com.": {},
"universityofwieauclaire-my.sharepoint.com.": {},
- "up.cfxdewifi.top.": {},
"update-master.ixsystems.com.": {},
"update.360safe.com.": {},
"update.huorong.cn.": {},
"update.kingsoftstore.com.": {},
+ "update.norton.securebrowser.com.": {},
"update.pdfforge.org.": {},
"update.vivaldi.com.": {},
"updatechannel.sharegate.com.": {},
- "updater.techsmith.com.": {},
"updaterservices.genetec.com.": {},
"updatesnl.macrium.com.": {},
"upload.app.box.com.": {},
"upload.box.com.": {},
"upload.ent.box.com.": {},
"upload.gifshow.com.": {},
+ "upload.ksapisrv.com.": {},
"uploads.gamecoast.net.": {},
"upravel.com.": {},
+ "upremium.asia.": {},
"upscore.com.": {},
- "upselling.apps.seabroadnet.com.": {},
- "upstart.com.": {},
"upyun.com.": {},
"urekamedia.com.": {},
- "url.cn.": {},
"us-api.asm.skype.com.": {},
+ "us-atl-anx-r001.router.teamviewer.com.": {},
+ "us-atl-anx-r002.router.teamviewer.com.": {},
+ "us-atl-anx-r003.router.teamviewer.com.": {},
+ "us-atl-anx-r004.router.teamviewer.com.": {},
+ "us-atl-anx-r010.router.teamviewer.com.": {},
"us-central1-adaptive-growth.cloudfunctions.net.": {},
"us-central1-addshoppers-data-production.cloudfunctions.net.": {},
- "us-central1-aeo-datasci-microsrv-pr-afe8.cloudfunctions.net.": {},
"us-central1-affilimate.cloudfunctions.net.": {},
"us-central1-amp-error-reporting.cloudfunctions.net.": {},
"us-central1-blaze-today.cloudfunctions.net.": {},
+ "us-central1-blazing-fire-8445.cloudfunctions.net.": {},
"us-central1-bps-oi-production.cloudfunctions.net.": {},
+ "us-central1-buzz-3eeb8.cloudfunctions.net.": {},
"us-central1-castify-notifications-prod.cloudfunctions.net.": {},
- "us-central1-clubroom-prod.cloudfunctions.net.": {},
"us-central1-cohinc-146020.cloudfunctions.net.": {},
- "us-central1-custom-site-analytics.cloudfunctions.net.": {},
"us-central1-digitalproducts-gabbo.cloudfunctions.net.": {},
"us-central1-ds-specials-dev.cloudfunctions.net.": {},
+ "us-central1-esi-consumer.cloudfunctions.net.": {},
"us-central1-fsgenergy-shared.cloudfunctions.net.": {},
"us-central1-gaggle-staging.cloudfunctions.net.": {},
"us-central1-justbuild-cdb86.cloudfunctions.net.": {},
@@ -8117,15 +7877,54 @@ var FakeECSFQDNs = map[string]struct{}{
"us-central1-noteit-4dca3.cloudfunctions.net.": {},
"us-central1-royal-match-prod-cce6d.cloudfunctions.net.": {},
"us-central1-shopify-instrumentat-ff788286.cloudfunctions.net.": {},
+ "us-central1-speechifymobile.cloudfunctions.net.": {},
"us-central1-sq-sgtm-prod.cloudfunctions.net.": {},
"us-central1-teach-monster.cloudfunctions.net.": {},
"us-central1-webgltest-17af1.cloudfunctions.net.": {},
"us-central1-wetterapp-1.cloudfunctions.net.": {},
- "us-den-anx-r008.router.teamviewer.com.": {},
+ "us-central1-wrapper-analytics-prod.cloudfunctions.net.": {},
+ "us-dal-anx-r003.router.teamviewer.com.": {},
+ "us-dal-anx-r006.router.teamviewer.com.": {},
+ "us-dal-anx-r008.router.teamviewer.com.": {},
+ "us-dal-anx-r010.router.teamviewer.com.": {},
+ "us-den-anx-r001.router.teamviewer.com.": {},
+ "us-den-anx-r004.router.teamviewer.com.": {},
+ "us-den-anx-r005.router.teamviewer.com.": {},
+ "us-den-anx-r006.router.teamviewer.com.": {},
+ "us-den-anx-r007.router.teamviewer.com.": {},
+ "us-den-anx-r010.router.teamviewer.com.": {},
+ "us-east-1.console.aws.amazon.com.": {},
"us-east-1.log.aliyuncs.com.": {},
+ "us-east-2.console.cname-proxy.amazon.com.": {},
"us-east4-chkp-gcp-rnd-threat-hunt-box.cloudfunctions.net.": {},
- "us-las-gcp-r001.router.teamviewer.com.": {},
- "us-lax-anx-r013.router.teamviewer.com.": {},
+ "us-lax-anx-r006.router.teamviewer.com.": {},
+ "us-lax-anx-r014.router.teamviewer.com.": {},
+ "us-mia-anx-r003.router.teamviewer.com.": {},
+ "us-mia-anx-r005.router.teamviewer.com.": {},
+ "us-mia-anx-r009.router.teamviewer.com.": {},
+ "us-mia-anx-r010.router.teamviewer.com.": {},
+ "us-mia-anx-r011.router.teamviewer.com.": {},
+ "us-mia-anx-r014.router.teamviewer.com.": {},
+ "us-mia-anx-r015.router.teamviewer.com.": {},
+ "us-njc-anx-r001.router.teamviewer.com.": {},
+ "us-njc-anx-r002.router.teamviewer.com.": {},
+ "us-njc-anx-r003.router.teamviewer.com.": {},
+ "us-njc-anx-r004.router.teamviewer.com.": {},
+ "us-njc-anx-r006.router.teamviewer.com.": {},
+ "us-njc-anx-r007.router.teamviewer.com.": {},
+ "us-njc-anx-r008.router.teamviewer.com.": {},
+ "us-njc-anx-r009.router.teamviewer.com.": {},
+ "us-njc-anx-r010.router.teamviewer.com.": {},
+ "us-njc-anx-r011.router.teamviewer.com.": {},
+ "us-njc-anx-r012.router.teamviewer.com.": {},
+ "us-njc-anx-r013.router.teamviewer.com.": {},
+ "us-njc-anx-r014.router.teamviewer.com.": {},
+ "us-njc-anx-r015.router.teamviewer.com.": {},
+ "us-njc-anx-r016.router.teamviewer.com.": {},
+ "us-njc-anx-r017.router.teamviewer.com.": {},
+ "us-njc-anx-r018.router.teamviewer.com.": {},
+ "us-njc-anx-r019.router.teamviewer.com.": {},
+ "us-njc-anx-r020.router.teamviewer.com.": {},
"us-pftk-temu-com.trafficmanager.net.": {},
"us-prod.asyncgw.teams.microsoft.com.": {},
"us-sea-anx-r001.router.teamviewer.com.": {},
@@ -8133,17 +7932,27 @@ var FakeECSFQDNs = map[string]struct{}{
"us-sea-anx-r003.router.teamviewer.com.": {},
"us-sea-anx-r004.router.teamviewer.com.": {},
"us-sea-anx-r005.router.teamviewer.com.": {},
+ "us-sea-anx-r006.router.teamviewer.com.": {},
"us-sea-anx-r007.router.teamviewer.com.": {},
"us-sea-anx-r008.router.teamviewer.com.": {},
"us-spectrum.rcs.telephony.goog.": {},
+ "us-was-anx-r001.router.teamviewer.com.": {},
+ "us-was-anx-r004.router.teamviewer.com.": {},
+ "us-was-anx-r005.router.teamviewer.com.": {},
+ "us-was-anx-r009.router.teamviewer.com.": {},
+ "us-was-anx-r012.router.teamviewer.com.": {},
+ "us-was-anx-r017.router.teamviewer.com.": {},
+ "us-was-anx-r020.router.teamviewer.com.": {},
"us-west-1.log.aliyuncs.com.": {},
"us.att.rcs.telephony.goog.": {},
+ "us.evidation.com.": {},
"us.peerhub.net.": {},
"us.pftk.temu.com.": {},
- "us.rtbsystem.org.": {},
+ "us.studyquicks.com.": {},
"us.tmobile.rcs.telephony.goog.": {},
"us.tracfone.rcs.telephony.goog.": {},
"us.uscc.rcs.telephony.goog.": {},
+ "us.v-cdn.net.": {},
"us.xfinity.rcs.telephony.goog.": {},
"us01.ws-api.ringcentral.com.": {},
"us02.ws-api.ringcentral.com.": {},
@@ -8161,19 +7970,20 @@ var FakeECSFQDNs = map[string]struct{}{
"us06polling.zoom.us.": {},
"us06web.zoom.us.": {},
"us06www3.zoom.us.": {},
+ "us1.ecdn2.badoocdn.com.": {},
"us1.ecdn2.bumbcdn.com.": {},
- "us2-live.inside-graph.com.": {},
"us2.rtbsystem.org.": {},
- "us3a-excel-collab.officeapps.live.com.": {},
- "us4-wms.zoho.com.": {},
+ "us20.list-manage.com.": {},
+ "us3a-powerpoint-collab.officeapps.live.com.": {},
+ "us4a-powerpoint-collab.officeapps.live.com.": {},
"us4b-excel-collab.officeapps.live.com.": {},
- "us4b-word-collab.officeapps.live.com.": {},
- "us4s-excel-collab.officeapps.live.com.": {},
- "us8.list-manage.com.": {},
+ "us4b-powerpoint-collab.officeapps.live.com.": {},
+ "us8-excel-collab.officeapps.live.com.": {},
"usbank.quantummetric.com.": {},
"usc-excel-collab.officeapps.live.com.": {},
"usc-powerpoint-collab.officeapps.live.com.": {},
"usc-word-collab.officeapps.live.com.": {},
+ "user.auth.xboxlive.com.": {},
"userexperience.thehut.net.": {},
"userflow.com.": {},
"userlike.com.": {},
@@ -8185,51 +7995,61 @@ var FakeECSFQDNs = map[string]struct{}{
"uslbm-my.sharepoint.com.": {},
"ussav.cynet.com.": {},
"usslb.cynet.com.": {},
+ "uswest-beacon.deepintent.com.": {},
"uu.qq.com.": {},
"uuidksinc.net.": {},
- "ux.21cn.com.": {},
+ "uvermont.mm.fcix.net.": {},
+ "uvu365-my.sharepoint.com.": {},
"uxfeedback.ru.": {},
"uyunad.com.": {},
"v.streaming.qq.com.": {},
"v.vivintsky.com.": {},
+ "v16-img.djvod.ndcimgs.com.": {},
"v2-zj-shxcm.kwaicdn.com.": {},
+ "v34.tiktokcdn.com.": {},
"v39-as.tiktokcdn.com.": {},
"v39-ca.tiktokcdn.com.": {},
"v39-id.gts.byteoversea.net.": {},
"v39-id.tiktokcdn.com.": {},
- "v39-my.tiktokcdn.com.": {},
- "v39-tr.tiktokcdn.com.": {},
+ "v39-my.gts.byteoversea.net.": {},
+ "v39-row.gts.byteoversea.net.": {},
+ "v39-row.tiktokcdn.com.": {},
"v39-us.gts.byteoversea.net.": {},
"v39-us.tiktokcdn.com.": {},
+ "v39-vn-vnpt.tiktokcdn.com.": {},
"v39.byteicdn.com.": {},
+ "v45-ph-globe.tiktokcdn.com.": {},
"v6-gdvod.kwaicdn.com.": {},
"v8.analytics.pinsightmedia.com.": {},
"v8engine.pinsightmedia.com.": {},
- "v9-iq.tiktokcdn.com.": {},
- "v9-th.tiktokcdn.com.": {},
- "va.v.liveperson.net.": {},
+ "vadesecure.com.": {},
"vador.com.": {},
- "vak345.com.": {},
+ "vancitycu-my.sharepoint.com.": {},
"vancitycu.sharepoint.com.": {},
+ "varify.io.": {},
"vast.playmatic.video.": {},
"vb17123filippaaniketos.pw.": {},
+ "vb24131crasosnemesis.com.": {},
"vbw.vivoglobal.com.": {},
- "vcdn.cloud.": {},
- "vclient-api.smoothwall.com.": {},
"vconf.f.360.cn.": {},
"verifone365-my.sharepoint.com.": {},
+ "verifypass.com.": {},
"verticals.wix.com.": {},
+ "veteransunited-my.sharepoint.com.": {},
"veteransunited.sharepoint.com.": {},
"vexgateway.fastly.carvana.io.": {},
+ "vfa.hpplay.cn.": {},
"vgorigin.hakunaymatata.com.": {},
+ "vhq.verifone.com.": {},
"viadcorp-my.sharepoint.com.": {},
+ "viadcorp.sharepoint.com.": {},
"vibe.co.": {},
"vibeaconstr.onezapp.com.": {},
"vicoo.tech.": {},
"video-atl3-1.xx.fbcdn.net.": {},
"video-atl3-2.xx.fbcdn.net.": {},
"video-bos5-1.xx.fbcdn.net.": {},
- "video-den4-1.xx.fbcdn.net.": {},
+ "video-den2-1.xx.fbcdn.net.": {},
"video-dfw5-1.xx.fbcdn.net.": {},
"video-dfw5-2.xx.fbcdn.net.": {},
"video-hou1-1.xx.fbcdn.net.": {},
@@ -8252,26 +8072,27 @@ var FakeECSFQDNs = map[string]struct{}{
"video-sjc3-1.xx.fbcdn.net.": {},
"video.dailymail.co.uk.": {},
"videocloud.cn-hangzhou.log.aliyuncs.com.": {},
+ "videocontent-dra.himovie.dbankcloud.com.": {},
+ "videoeditor-api-dra.cloud.huawei.com.": {},
"videoqoe-fastly.stvidtest.net.": {},
- "videos.dailymail.co.uk.": {},
+ "videowalldirect.com.": {},
"vidmate.net.": {},
"vieon.vn.": {},
"view2fa.prosourcehosted.com.": {},
"vik-ca.moonactive.net.": {},
- "vintagemonster.onefootball.com.": {},
"viously.com.": {},
+ "vip-chinanet.ynuf.aliapp.org.": {},
"vipads.live.": {},
"virusinfo-cloudscan-cn.heytapmobi.com.": {},
"visainc-my.sharepoint.com.": {},
"visainc.sharepoint.com.": {},
"visionserviceplan-my.sharepoint.com.": {},
"visionserviceplan.sharepoint.com.": {},
- "visit-prod-us.occa.ocs.oraclecloud.com.": {},
"visitor.fiftyt.com.": {},
"visitors.live.": {},
"vitalant-my.sharepoint.com.": {},
"vividseats.com.": {},
- "vlscppe.microsoft.com.": {},
+ "vivoglobal.com.": {},
"vms-videos.minutemediaservices.com.": {},
"vn-viettel.rcs.telephony.goog.": {},
"vn.pool.ntp.org.": {},
@@ -8281,20 +8102,18 @@ var FakeECSFQDNs = map[string]struct{}{
"voe.sx.": {},
"voice.gcloudcs.com.": {},
"voice.telephony.goog.": {},
- "voicecloud.cn.": {},
- "void.omiapp.me.": {},
"volusiastudents-my.sharepoint.com.": {},
- "vox.amp.permutive.com.": {},
+ "volusiastudents.sharepoint.com.": {},
+ "vour.io.": {},
"vpn.cshealthforlife.com.": {},
"vpn.garypools.com.": {},
"vpp-license-proxy.aliyuncs.com.": {},
"vzuu.com.": {},
"w.deepl.com.": {},
+ "w24.cf.2ksports.com.": {},
"w3.mp.lura.live.": {},
- "w3.org.cdn.cloudflare.net.": {},
- "w3dist.mp.lura.live.": {},
- "w3id-ns.sso.ibm.com.edgekey.net.": {},
- "wallpaperflare.com.": {},
+ "wallet.omiapp.me.": {},
+ "walletconnect.com.": {},
"walmart.quantummetric.com.": {},
"walshgroup-my.sharepoint.com.": {},
"wap.cmpassport.com.": {},
@@ -8302,57 +8121,70 @@ var FakeECSFQDNs = map[string]struct{}{
"washoeschools-my.sharepoint.com.": {},
"washoeschools.sharepoint.com.": {},
"waynek12inus-my.sharepoint.com.": {},
+ "wbte.drcedirect.com.": {},
"wcpss-my.sharepoint.com.": {},
"wcpss.sharepoint.com.": {},
+ "wcsdpaorg-my.sharepoint.com.": {},
+ "wct-2.com.": {},
"weather-analytics-events.apple.com.": {},
"weather-server-sg.allawnos.com.": {},
+ "weather-server.allawntech.com.": {},
"weather-widget-events.apple.com.": {},
"weather.swishapps.ai.": {},
"weathercn.com.": {},
"weatheroffer.com.": {},
+ "web-extract.constantcontact.com.": {},
"web-g.kontiki.com.": {},
+ "web.archive.org.": {},
"web.fe.1drv.com.": {},
+ "web.pypestream.com.": {},
"web.voice.telephony.goog.": {},
"web.wg1.kontiki.com.": {},
"web1.remotepc.com.": {},
"web3.drfirst.com.": {},
"webapi.teamviewer.com.": {},
+ "webapp.src.discover.com.": {},
+ "webcast22-ws-alisg.tiktokv.com.": {},
"webmd.com.": {},
"weborama-tech.ru.": {},
+ "webql-redesign.cnbcfm.com.": {},
"webrad.io.": {},
+ "websocket-01.app.pdq.com.": {},
+ "websocket-04.app.pdq.com.": {},
"wechatos.net.": {},
"weibocdn.com.": {},
+ "welcome.ultipro.com.": {},
"wellspan-my.sharepoint.com.": {},
"wellspan.sharepoint.com.": {},
+ "wemuslim.com.": {},
"wesingapp.com.": {},
- "wesingcdn.com.": {},
"westerngovernorsuniversity-my.sharepoint.com.": {},
"westpalm.remotepc.com.": {},
"westrockco-my.sharepoint.com.": {},
"westrockco.sharepoint.com.": {},
"wetype.weixin.qq.com.": {},
"weu.his.arc.azure.com.": {},
+ "wewjyw.qb6ges.com.": {},
"wf-proxy-01.algolia.com.": {},
"wf-proxy-02.algolia.com.": {},
"wf-proxy-03.algolia.com.": {},
- "whatismyip.akamai.com.": {},
- "whatismyipaddress.com.": {},
+ "whitingturner-my.sharepoint.com.": {},
+ "whitingturner.sharepoint.com.": {},
"whizzco.com.": {},
- "widebundle.com.": {},
+ "wida-insight.drcedirect.com.": {},
"widgets.leadconnectorhq.com.": {},
+ "widgets.sociablekit.com.": {},
"wifispot.io.": {},
"wildcard.cdn.optimizely.com.edgekey.net.": {},
- "wildcard.marketo.net.edgekey.net.": {},
- "wildcard.scene7.com.edgekey.net.": {},
+ "wildcard.dayforcehcm.com.edgekey.net.": {},
+ "wildcard.ntv.io.edgekey.net.": {},
"williamssonomainc-app.quantummetric.com.": {},
- "win-rtb2-useast.xaprio.net.": {},
- "win1807.ipv6.microsoft.com.": {},
- "win1910.ipv6.microsoft.com.": {},
"winscp.net.": {},
+ "wizzair.com.": {},
"wkhpe.com.": {},
+ "wl.hpyrdr.com.": {},
"wlgore-my.sharepoint.com.": {},
"wlgore.sharepoint.com.": {},
- "wmg-my.sharepoint.com.": {},
"word-collab.officeapps.live.com.": {},
"workdaycdn.com.cn.": {},
"worldnic.com.": {},
@@ -8360,19 +8192,16 @@ var FakeECSFQDNs = map[string]struct{}{
"worldwideexpress2323-my.sharepoint.com.": {},
"wosign.com.": {},
"wp.safe.360.cn.": {},
+ "wpcmdat.itsupport247.net.": {},
"wpk-auth.ucweb.com.": {},
"wpp.net.": {},
+ "wpp.okta.com.": {},
"wr.moyoung.com.": {},
"wr.pvp.net.": {},
- "ws-assets.zoominfo.com.": {},
- "ws-school.v.aaplimg.com.": {},
- "ws.business.apple.com.": {},
"ws.gleap.io.": {},
"ws.mybib.com.": {},
- "ws.qualified.com.": {},
- "ws.reamaze.com.": {},
- "ws.school.apple.com.": {},
"ws.tildacdn.com.": {},
+ "ws1seg.rwjbh.org.": {},
"wsfcsk12nc-my.sharepoint.com.": {},
"wsfsbank-my.sharepoint.com.": {},
"wsfsbank.sharepoint.com.": {},
@@ -8380,152 +8209,101 @@ var FakeECSFQDNs = map[string]struct{}{
"wsoversea.com.": {},
"wtpsnj-my.sharepoint.com.": {},
"wtsparadigm.com.": {},
- "wunderground.com.": {},
+ "wtzw.com.": {},
"wus2.his.arc.azure.com.": {},
+ "wwt-my.sharepoint.com.": {},
"wwt.sharepoint.com.": {},
- "www.agoda.com.": {},
+ "www.2tx.com.": {},
"www.aigconnect.aig.": {},
+ "www.atitesting.com.": {},
"www.automizely-analytics.com.": {},
- "www.basspro.com.": {},
"www.bbc.co.uk.": {},
"www.bbc.co.uk.pri.bbc.co.uk.": {},
"www.bbc.com.": {},
"www.bbc.com.pri.bbc.com.": {},
"www.bbthat.com.": {},
- "www.bose.com.": {},
+ "www.bleepingcomputer.com.": {},
"www.box.com.": {},
"www.breitbart.com.": {},
"www.bridge2bwb.com.": {},
- "www.canva.com.": {},
- "www.chewy.com.": {},
+ "www.calottery.com.": {},
+ "www.cdn.viber.com.": {},
+ "www.clearblue.com.": {},
"www.cmpassport.com.": {},
- "www.cnbc.com.": {},
- "www.croxyproxy.com.": {},
- "www.currys.co.uk.": {},
- "www.dashlane.com.": {},
- "www.directv.com.": {},
- "www.discover.com.": {},
+ "www.dickssportinggoods.com.": {},
"www.docusign.com.": {},
+ "www.drugs.com.": {},
+ "www.emjcd.com.": {},
"www.esosuite.net.": {},
"www.etsy.com.": {},
- "www.evtrust.com.": {},
- "www.fmcschedule.com.": {},
+ "www.expedia.com.": {},
+ "www.futbin.org.": {},
"www.gbnews.com.": {},
+ "www.gmc.com.": {},
"www.google.org.": {},
- "www.greatschools.org.": {},
"www.handmadewithjoann.com.": {},
- "www.ifconfig.io.": {},
- "www.imanageshare.com.": {},
"www.in.gov.": {},
"www.independent.co.uk.": {},
"www.inoreader.com.": {},
+ "www.internetdownloadmanager.com.": {},
+ "www.iorad.com.": {},
"www.jimmyjohns.com.": {},
- "www.landsend.com.": {},
- "www.lexisnexis.com.": {},
- "www.life360.com.cdn.cloudflare.net.": {},
- "www.llbean.net.": {},
- "www.logmeininc.com.": {},
- "www.loopnet.com.": {},
- "www.macys.com.": {},
- "www.mediamarkt.de.": {},
- "www.mendeley.com.": {},
- "www.menti.com.": {},
- "www.myquickcloud.com.": {},
+ "www.libertymutual.com.": {},
+ "www.maintenanceconnection.com.": {},
+ "www.mobileiron.com.": {},
+ "www.nationalreview.com.": {},
"www.nativecos.com.": {},
+ "www.nba.com.": {},
"www.nzz.ch.": {},
+ "www.officedepot.com.": {},
"www.overleaf.com.": {},
"www.pingler.com.": {},
+ "www.pnc.com.": {},
"www.pool.ntp.org.": {},
- "www.printfriendly.com.": {},
"www.rawstory.com.": {},
+ "www.regions.com.": {},
+ "www.scholastic.com.": {},
+ "www.sciencedirect.com.": {},
"www.searchanise.com.": {},
- "www.sephora.com.edgekey.net.": {},
"www.sevenrooms.com.": {},
- "www.shopdisney.com.": {},
- "www.snokido.com.": {},
- "www.soso.com.": {},
- "www.standard.co.uk.": {},
+ "www.startribune.com.": {},
"www.startssl.com.": {},
- "www.tomodoko.com.": {},
- "www.uber-assets.com.": {},
- "www.usbank.com.": {},
"www.users.storage.live.com.": {},
- "www.usnews.com.": {},
"www.vipads.live.": {},
"www.virustotal.com.": {},
"www.wifispot.io.": {},
"www.wix.com.": {},
"www.worldtimeserver.com.": {},
- "www.yext-pixel.com.": {},
"www.zoom.us.": {},
"www1.remotepc.com.": {},
"www2.deepl.com.": {},
"www3.zoom.us.": {},
- "wwwtvcdn.com.": {},
- "wxliaotian.top.": {},
+ "wx.huion.cn.": {},
"wxqcloud.qq.com.": {},
"wxqcloud.qq.com.cn.": {},
"wyze.com.": {},
"x-flow.app.": {},
+ "x.netease.com.": {},
"x.research.qq.com.": {},
- "xapads.com.": {},
- "xbox-guide-public.rec.mp.microsoft.com.": {},
- "xfs-hd01.batcg.org.": {},
- "xfs-hd03.batcg.org.": {},
- "xfs-hd04.batcg.org.": {},
- "xfs-hd06.batcg.org.": {},
- "xfs-hd07.batcg.org.": {},
- "xfs-hd08.batcg.org.": {},
- "xfs-hd09.batcg.org.": {},
- "xfs-hd10.batcg.org.": {},
- "xfs-s100.batcg.org.": {},
- "xfs-s101.batcg.org.": {},
- "xfs-s102.batcg.org.": {},
- "xfs-s103.batcg.org.": {},
- "xfs-s104.batcg.org.": {},
- "xfs-s105.batcg.org.": {},
- "xfs-s106.batcg.org.": {},
- "xfs-s107.batcg.org.": {},
- "xfs-s108.batcg.org.": {},
- "xfs-s109.batcg.org.": {},
- "xfs-s110.batcg.org.": {},
- "xfs-s111.batcg.org.": {},
- "xfs-s112.batcg.org.": {},
- "xfs-s113.batcg.org.": {},
- "xfs-s114.batcg.org.": {},
- "xfs-s115.batcg.org.": {},
- "xfs-s116.batcg.org.": {},
- "xfs-s117.batcg.org.": {},
- "xfs-s118.batcg.org.": {},
- "xfs-s119.batcg.org.": {},
- "xfs-s120.batcg.org.": {},
- "xfs-s121.batcg.org.": {},
- "xfs-s122.batcg.org.": {},
- "xfs-s123.batcg.org.": {},
- "xfs-s124.batcg.org.": {},
- "xfs-s125.batcg.org.": {},
- "xfs-s126.batcg.org.": {},
- "xfs-s127.batcg.org.": {},
- "xfs-s128.batcg.org.": {},
- "xfs-s129.batcg.org.": {},
- "xfs-s130.batcg.org.": {},
- "xfs-uh00.batcg.org.": {},
+ "xfs-s108.xfsbb.com.": {},
+ "xfs-s118.xfsbb.com.": {},
+ "xfs-s127.xfsbb.com.": {},
+ "xhcdn.com.": {},
"xiaoyi-css-us-15d.oss-us-west-1.aliyuncs.com.": {},
"xiaoyi-css-us-7d.oss-us-west-1.aliyuncs.com.": {},
"xiaoyi.com.": {},
+ "xintaicz.cn.": {},
"xjp-msgacs.m.taobao.com.": {},
- "xlivesex.com.": {},
"xmcsrv.net.": {},
"xml-eu-v4.ezmob.com.": {},
"xml-v4.ezmob.com.": {},
+ "xml-v4.rtxfeed.com.": {},
"xml.acertb.com.": {},
- "xml.cow-timerbudder.org.": {},
+ "xml.blue-biddingz.org.": {},
"xml.ezmob.com.": {},
- "xml.green-resultsbid.com.": {},
"xml.popmonetizer.net.": {},
- "xml.yellow-resultsbidder.com.": {},
+ "xml.xmlking.com.": {},
"xml.zeusadx.com.": {},
- "xnet.da.mgtv.com.": {},
"xp002.itsupport247.net.": {},
"xp004.itsupport247.net.": {},
"xp005.itsupport247.net.": {},
@@ -8540,27 +8318,34 @@ var FakeECSFQDNs = map[string]struct{}{
"xp019.itsupport247.net.": {},
"xpdrwp.itsupport247.net.": {},
"xtom.com.": {},
- "yalla.live.": {},
"yealink.com.": {},
+ "yeezy.com.": {},
"ymmobi.com.": {},
+ "ynuf.aliapp.org.": {},
+ "ynuf.aliapp.org.gds.alibabadns.com.": {},
"yomedia.vn.": {},
"yomeno.xyz.": {},
"youngjoygame.com.": {},
"yp.cdnstream1.com.": {},
+ "ys7.com.": {},
"yunxindns.com.": {},
+ "yunxinfw.com.": {},
"z-m-scontent-lis1-1.xx.fbcdn.net.": {},
- "z-m-scontent-ord5-2.xx.fbcdn.net.": {},
"z.cdn.adpool.bet.": {},
"z.cdn.ftd.agency.": {},
"z.cdn.trafficbass.com.": {},
"zego.im.": {},
"zemanta.com.": {},
+ "zeotap.com.": {},
+ "zhaohf.com.": {},
+ "zigpoll.com.": {},
"zimgs.cn.": {},
+ "ziply.mm.fcix.net.": {},
"zjcdn.com.yangyi19.com.": {},
"zmedia.vn.": {},
- "zohopublic.eu.": {},
"zoom.us.": {},
"ztoken.uyunad.com.": {},
"zui.com.": {},
"zurich.remotepc.com.": {},
+ "zybooks.com.": {},
}
diff --git a/internal/filter/internal/internal.go b/internal/filter/internal/internal.go
index 1faddec..9549afe 100644
--- a/internal/filter/internal/internal.go
+++ b/internal/filter/internal/internal.go
@@ -1,7 +1,5 @@
// Package internal contains common constants, types, and utilities shared by
// other subpackages of package filter/.
-//
-// TODO(a.garipov): Move more code to subpackages, see AGDNS-824.
package internal
import (
diff --git a/internal/geoip/asntops.go b/internal/geoip/asntops.go
index ce956a6..59bd5e2 100644
--- a/internal/geoip/asntops.go
+++ b/internal/geoip/asntops.go
@@ -5,13 +5,13 @@ package geoip
// DefaultTopASNs contains all specially handled ASNs.
var DefaultTopASNs = map[ASN]struct{}{
2: {},
- 3: {},
174: {},
209: {},
224: {},
577: {},
701: {},
719: {},
+ 786: {},
803: {},
812: {},
834: {},
@@ -26,14 +26,14 @@ var DefaultTopASNs = map[ASN]struct{}{
1299: {},
1403: {},
1547: {},
- 1659: {},
1680: {},
- 1741: {},
+ 1756: {},
1759: {},
- 1764: {},
1835: {},
1836: {},
1901: {},
+ 1955: {},
+ 2018: {},
2108: {},
2110: {},
2116: {},
@@ -49,22 +49,20 @@ var DefaultTopASNs = map[ASN]struct{}{
2602: {},
2607: {},
2609: {},
- 2614: {},
+ 2611: {},
2740: {},
- 2764: {},
2847: {},
2852: {},
2856: {},
2860: {},
3132: {},
- 3177: {},
3178: {},
- 3194: {},
3209: {},
3212: {},
3215: {},
3216: {},
3221: {},
+ 3223: {},
3225: {},
3238: {},
3243: {},
@@ -86,7 +84,6 @@ var DefaultTopASNs = map[ASN]struct{}{
3549: {},
3605: {},
3695: {},
- 3737: {},
3741: {},
3758: {},
3786: {},
@@ -94,9 +91,9 @@ var DefaultTopASNs = map[ASN]struct{}{
3855: {},
4007: {},
4134: {},
- 4181: {},
4230: {},
4515: {},
+ 4528: {},
4538: {},
4540: {},
4609: {},
@@ -129,13 +126,16 @@ var DefaultTopASNs = map[ASN]struct{}{
5384: {},
5390: {},
5391: {},
+ 5408: {},
5410: {},
5413: {},
5416: {},
5432: {},
5466: {},
5483: {},
+ 5504: {},
5518: {},
+ 5532: {},
5578: {},
5603: {},
5607: {},
@@ -151,11 +151,11 @@ var DefaultTopASNs = map[ASN]struct{}{
6128: {},
6147: {},
6167: {},
- 6181: {},
6306: {},
6327: {},
6400: {},
6407: {},
+ 6461: {},
6535: {},
6568: {},
6639: {},
@@ -169,7 +169,7 @@ var DefaultTopASNs = map[ASN]struct{}{
6739: {},
6752: {},
6758: {},
- 6762: {},
+ 6769: {},
6772: {},
6799: {},
6805: {},
@@ -195,20 +195,18 @@ var DefaultTopASNs = map[ASN]struct{}{
7438: {},
7470: {},
7482: {},
+ 7497: {},
7522: {},
7524: {},
7545: {},
7552: {},
7565: {},
- 7582: {},
- 7590: {},
7642: {},
7679: {},
7713: {},
7727: {},
7738: {},
7794: {},
- 7862: {},
7922: {},
7979: {},
7992: {},
@@ -223,6 +221,7 @@ var DefaultTopASNs = map[ASN]struct{}{
8251: {},
8257: {},
8273: {},
+ 8290: {},
8301: {},
8339: {},
8346: {},
@@ -241,22 +240,22 @@ var DefaultTopASNs = map[ASN]struct{}{
8449: {},
8452: {},
8462: {},
+ 8468: {},
8473: {},
8544: {},
8551: {},
8560: {},
- 8562: {},
8585: {},
8612: {},
8632: {},
8661: {},
- 8670: {},
8680: {},
8681: {},
8697: {},
8708: {},
8717: {},
8728: {},
+ 8744: {},
8758: {},
8764: {},
8767: {},
@@ -265,15 +264,16 @@ var DefaultTopASNs = map[ASN]struct{}{
8781: {},
8818: {},
8821: {},
+ 8829: {},
8847: {},
8849: {},
8866: {},
8881: {},
+ 8887: {},
8926: {},
8948: {},
8953: {},
8966: {},
- 8978: {},
8990: {},
9002: {},
9008: {},
@@ -285,7 +285,6 @@ var DefaultTopASNs = map[ASN]struct{}{
9051: {},
9063: {},
9070: {},
- 9085: {},
9105: {},
9119: {},
9121: {},
@@ -303,6 +302,7 @@ var DefaultTopASNs = map[ASN]struct{}{
9260: {},
9269: {},
9299: {},
+ 9303: {},
9304: {},
9316: {},
9318: {},
@@ -314,6 +314,7 @@ var DefaultTopASNs = map[ASN]struct{}{
9365: {},
9381: {},
9416: {},
+ 9431: {},
9443: {},
9471: {},
9484: {},
@@ -324,7 +325,6 @@ var DefaultTopASNs = map[ASN]struct{}{
9595: {},
9605: {},
9617: {},
- 9622: {},
9644: {},
9674: {},
9694: {},
@@ -340,8 +340,8 @@ var DefaultTopASNs = map[ASN]struct{}{
9902: {},
9908: {},
9919: {},
+ 9922: {},
9924: {},
- 9929: {},
9930: {},
9931: {},
9934: {},
@@ -354,10 +354,10 @@ var DefaultTopASNs = map[ASN]struct{}{
10036: {},
10066: {},
10075: {},
- 10076: {},
10094: {},
10099: {},
10101: {},
+ 10103: {},
10118: {},
10131: {},
10139: {},
@@ -370,9 +370,10 @@ var DefaultTopASNs = map[ASN]struct{}{
10299: {},
10396: {},
10474: {},
- 10569: {},
+ 10617: {},
10620: {},
10796: {},
+ 11014: {},
11081: {},
11139: {},
11172: {},
@@ -382,12 +383,12 @@ var DefaultTopASNs = map[ASN]struct{}{
11290: {},
11315: {},
11351: {},
- 11404: {},
11426: {},
11427: {},
11492: {},
11556: {},
11562: {},
+ 11580: {},
11594: {},
11664: {},
11721: {},
@@ -399,6 +400,7 @@ var DefaultTopASNs = map[ASN]struct{}{
11888: {},
12066: {},
12083: {},
+ 12127: {},
12252: {},
12271: {},
12297: {},
@@ -407,16 +409,14 @@ var DefaultTopASNs = map[ASN]struct{}{
12322: {},
12334: {},
12338: {},
- 12350: {},
12353: {},
+ 12361: {},
12365: {},
12389: {},
12390: {},
12392: {},
12400: {},
- 12406: {},
12414: {},
- 12426: {},
12430: {},
12436: {},
12455: {},
@@ -427,11 +427,11 @@ var DefaultTopASNs = map[ASN]struct{}{
12570: {},
12576: {},
12578: {},
+ 12590: {},
12605: {},
- 12620: {},
12638: {},
- 12660: {},
12668: {},
+ 12684: {},
12709: {},
12714: {},
12716: {},
@@ -454,7 +454,6 @@ var DefaultTopASNs = map[ASN]struct{}{
12969: {},
12975: {},
12978: {},
- 12993: {},
12997: {},
13000: {},
13030: {},
@@ -462,7 +461,7 @@ var DefaultTopASNs = map[ASN]struct{}{
13037: {},
13045: {},
13046: {},
- 13070: {},
+ 13092: {},
13099: {},
13101: {},
13110: {},
@@ -489,6 +488,7 @@ var DefaultTopASNs = map[ASN]struct{}{
14434: {},
14522: {},
14593: {},
+ 14618: {},
14638: {},
14709: {},
14754: {},
@@ -497,7 +497,6 @@ var DefaultTopASNs = map[ASN]struct{}{
14979: {},
14988: {},
15146: {},
- 15321: {},
15344: {},
15366: {},
15377: {},
@@ -509,7 +508,6 @@ var DefaultTopASNs = map[ASN]struct{}{
15405: {},
15433: {},
15435: {},
- 15440: {},
15457: {},
15474: {},
15480: {},
@@ -545,20 +543,19 @@ var DefaultTopASNs = map[ASN]struct{}{
15958: {},
15962: {},
15964: {},
- 15975: {},
+ 15965: {},
15994: {},
- 16006: {},
16010: {},
16019: {},
16028: {},
- 16030: {},
16058: {},
16086: {},
+ 16095: {},
16116: {},
16117: {},
16135: {},
16178: {},
- 16190: {},
+ 16185: {},
16202: {},
16223: {},
16229: {},
@@ -572,6 +569,7 @@ var DefaultTopASNs = map[ASN]struct{}{
16342: {},
16345: {},
16367: {},
+ 16413: {},
16437: {},
16509: {},
16591: {},
@@ -582,7 +580,6 @@ var DefaultTopASNs = map[ASN]struct{}{
16735: {},
16814: {},
16906: {},
- 16929: {},
16960: {},
17072: {},
17079: {},
@@ -598,19 +595,18 @@ var DefaultTopASNs = map[ASN]struct{}{
17506: {},
17511: {},
17529: {},
+ 17539: {},
17547: {},
17552: {},
17557: {},
17621: {},
17622: {},
17623: {},
- 17638: {},
17639: {},
17665: {},
17670: {},
17676: {},
17698: {},
- 17705: {},
17716: {},
17726: {},
17806: {},
@@ -618,10 +614,8 @@ var DefaultTopASNs = map[ASN]struct{}{
17816: {},
17828: {},
17839: {},
- 17849: {},
17853: {},
17858: {},
- 17864: {},
17882: {},
17893: {},
17924: {},
@@ -630,7 +624,6 @@ var DefaultTopASNs = map[ASN]struct{}{
18001: {},
18004: {},
18013: {},
- 18015: {},
18024: {},
18049: {},
18053: {},
@@ -642,11 +635,11 @@ var DefaultTopASNs = map[ASN]struct{}{
18199: {},
18200: {},
18209: {},
+ 18278: {},
18371: {},
18390: {},
18399: {},
18403: {},
- 18412: {},
18419: {},
18734: {},
18747: {},
@@ -661,16 +654,15 @@ var DefaultTopASNs = map[ASN]struct{}{
19180: {},
19182: {},
19246: {},
- 19318: {},
19422: {},
19429: {},
- 19437: {},
19447: {},
19624: {},
+ 19626: {},
19711: {},
19863: {},
+ 19889: {},
20001: {},
- 20055: {},
20057: {},
20115: {},
20207: {},
@@ -684,20 +676,19 @@ var DefaultTopASNs = map[ASN]struct{}{
20634: {},
20661: {},
20676: {},
+ 20719: {},
20723: {},
- 20746: {},
20771: {},
20776: {},
20804: {},
20845: {},
20846: {},
- 20874: {},
+ 20860: {},
20875: {},
20880: {},
20904: {},
20910: {},
20911: {},
- 20960: {},
20963: {},
20978: {},
21001: {},
@@ -705,8 +696,6 @@ var DefaultTopASNs = map[ASN]struct{}{
21021: {},
21040: {},
21050: {},
- 21069: {},
- 21100: {},
21107: {},
21183: {},
21211: {},
@@ -744,6 +733,7 @@ var DefaultTopASNs = map[ASN]struct{}{
22394: {},
22423: {},
22581: {},
+ 22690: {},
22724: {},
22773: {},
22869: {},
@@ -751,11 +741,11 @@ var DefaultTopASNs = map[ASN]struct{}{
22927: {},
22933: {},
22995: {},
- 23031: {},
23114: {},
23201: {},
23243: {},
23383: {},
+ 23470: {},
23487: {},
23520: {},
23655: {},
@@ -777,17 +767,18 @@ var DefaultTopASNs = map[ASN]struct{}{
23956: {},
23959: {},
23969: {},
+ 24016: {},
24033: {},
24086: {},
24157: {},
24158: {},
24163: {},
24164: {},
+ 24165: {},
24186: {},
24203: {},
24309: {},
24323: {},
- 24334: {},
24337: {},
24378: {},
24389: {},
@@ -796,7 +787,6 @@ var DefaultTopASNs = map[ASN]struct{}{
24439: {},
24444: {},
24445: {},
- 24482: {},
24492: {},
24499: {},
24547: {},
@@ -805,36 +795,38 @@ var DefaultTopASNs = map[ASN]struct{}{
24560: {},
24589: {},
24608: {},
- 24645: {},
+ 24631: {},
+ 24641: {},
24651: {},
24691: {},
24722: {},
+ 24743: {},
+ 24751: {},
24757: {},
- 24792: {},
24800: {},
24812: {},
24822: {},
24835: {},
+ 24851: {},
24852: {},
24863: {},
24875: {},
- 24877: {},
- 24889: {},
24921: {},
24940: {},
- 24953: {},
24955: {},
+ 24961: {},
+ 25003: {},
25019: {},
25106: {},
25117: {},
- 25124: {},
+ 25129: {},
25133: {},
25135: {},
25139: {},
25144: {},
25159: {},
+ 25184: {},
25190: {},
- 25198: {},
25229: {},
25248: {},
25250: {},
@@ -848,11 +840,13 @@ var DefaultTopASNs = map[ASN]struct{}{
25424: {},
25429: {},
25441: {},
+ 25447: {},
25454: {},
25467: {},
25471: {},
25472: {},
25491: {},
+ 25496: {},
25512: {},
25513: {},
25543: {},
@@ -860,6 +854,8 @@ var DefaultTopASNs = map[ASN]struct{}{
25607: {},
25620: {},
25668: {},
+ 25695: {},
+ 25820: {},
26130: {},
26210: {},
26383: {},
@@ -888,16 +884,17 @@ var DefaultTopASNs = map[ASN]struct{}{
27742: {},
27745: {},
27747: {},
- 27751: {},
27757: {},
27759: {},
27773: {},
27775: {},
27781: {},
27789: {},
+ 27796: {},
27800: {},
27813: {},
27831: {},
+ 27833: {},
27837: {},
27839: {},
27843: {},
@@ -913,13 +910,12 @@ var DefaultTopASNs = map[ASN]struct{}{
27923: {},
27924: {},
27927: {},
+ 27928: {},
27932: {},
27947: {},
27951: {},
- 27953: {},
27983: {},
27984: {},
- 27988: {},
27995: {},
28005: {},
28006: {},
@@ -932,24 +928,24 @@ var DefaultTopASNs = map[ASN]struct{}{
28048: {},
28075: {},
28080: {},
- 28088: {},
28094: {},
+ 28103: {},
28104: {},
- 28110: {},
28118: {},
28126: {},
28146: {},
+ 28171: {},
28182: {},
28186: {},
28198: {},
28201: {},
- 28202: {},
28210: {},
28220: {},
28258: {},
28343: {},
28398: {},
28403: {},
+ 28432: {},
28458: {},
28469: {},
28481: {},
@@ -970,7 +966,9 @@ var DefaultTopASNs = map[ASN]struct{}{
28580: {},
28598: {},
28649: {},
+ 28656: {},
28668: {},
+ 28669: {},
28683: {},
28685: {},
28698: {},
@@ -981,18 +979,18 @@ var DefaultTopASNs = map[ASN]struct{}{
28787: {},
28812: {},
28840: {},
- 28849: {},
- 28851: {},
28854: {},
+ 28858: {},
28884: {},
28885: {},
28909: {},
- 28919: {},
28952: {},
28964: {},
28972: {},
29027: {},
29030: {},
+ 29031: {},
+ 29039: {},
29049: {},
29061: {},
29070: {},
@@ -1001,6 +999,7 @@ var DefaultTopASNs = map[ASN]struct{}{
29119: {},
29124: {},
29170: {},
+ 29194: {},
29208: {},
29238: {},
29244: {},
@@ -1011,19 +1010,18 @@ var DefaultTopASNs = map[ASN]struct{}{
29314: {},
29355: {},
29357: {},
- 29384: {},
29405: {},
29447: {},
29465: {},
29485: {},
+ 29492: {},
29497: {},
29518: {},
29544: {},
29555: {},
29571: {},
29580: {},
- 29582: {},
- 29584: {},
+ 29600: {},
29614: {},
29667: {},
29687: {},
@@ -1031,21 +1029,21 @@ var DefaultTopASNs = map[ASN]struct{}{
29975: {},
30036: {},
30058: {},
- 30272: {},
30526: {},
30600: {},
30619: {},
30689: {},
30722: {},
30764: {},
- 30838: {},
30844: {},
+ 30860: {},
30873: {},
+ 30896: {},
+ 30929: {},
30969: {},
30982: {},
30985: {},
30986: {},
- 30987: {},
30990: {},
30992: {},
30999: {},
@@ -1053,7 +1051,6 @@ var DefaultTopASNs = map[ASN]struct{}{
31027: {},
31037: {},
31042: {},
- 31115: {},
31117: {},
31122: {},
31126: {},
@@ -1071,7 +1068,6 @@ var DefaultTopASNs = map[ASN]struct{}{
31224: {},
31242: {},
31246: {},
- 31250: {},
31252: {},
31272: {},
31287: {},
@@ -1083,14 +1079,15 @@ var DefaultTopASNs = map[ASN]struct{}{
31510: {},
31543: {},
31549: {},
+ 31608: {},
31615: {},
31642: {},
31655: {},
+ 31689: {},
31721: {},
31725: {},
- 31736: {},
- 31856: {},
31898: {},
+ 31960: {},
32020: {},
32098: {},
32398: {},
@@ -1108,26 +1105,29 @@ var DefaultTopASNs = map[ASN]struct{}{
33788: {},
33796: {},
33874: {},
+ 33883: {},
33885: {},
33915: {},
33922: {},
- 33943: {},
33983: {},
34001: {},
34058: {},
34087: {},
+ 34113: {},
34120: {},
34170: {},
34187: {},
34224: {},
34244: {},
+ 34245: {},
34263: {},
34295: {},
34296: {},
+ 34347: {},
34362: {},
- 34410: {},
34447: {},
34471: {},
+ 34515: {},
34525: {},
34533: {},
34547: {},
@@ -1135,7 +1135,9 @@ var DefaultTopASNs = map[ASN]struct{}{
34569: {},
34577: {},
34594: {},
+ 34636: {},
34661: {},
+ 34666: {},
34700: {},
34702: {},
34705: {},
@@ -1148,15 +1150,17 @@ var DefaultTopASNs = map[ASN]struct{}{
34781: {},
34797: {},
34803: {},
+ 34814: {},
34857: {},
34876: {},
34916: {},
- 34917: {},
34918: {},
34977: {},
34984: {},
+ 34989: {},
35046: {},
35047: {},
+ 35063: {},
35091: {},
35104: {},
35132: {},
@@ -1170,7 +1174,6 @@ var DefaultTopASNs = map[ASN]struct{}{
35244: {},
35297: {},
35311: {},
- 35313: {},
35320: {},
35328: {},
35346: {},
@@ -1182,19 +1185,20 @@ var DefaultTopASNs = map[ASN]struct{}{
35457: {},
35467: {},
35518: {},
+ 35546: {},
35549: {},
35566: {},
35567: {},
35568: {},
35612: {},
35613: {},
- 35656: {},
35699: {},
35706: {},
35725: {},
35729: {},
35732: {},
35753: {},
+ 35765: {},
35790: {},
35805: {},
35807: {},
@@ -1202,27 +1206,32 @@ var DefaultTopASNs = map[ASN]struct{}{
35892: {},
35900: {},
35911: {},
+ 35913: {},
+ 35916: {},
36040: {},
36290: {},
36352: {},
+ 36445: {},
36492: {},
36511: {},
36549: {},
+ 36599: {},
36864: {},
36865: {},
36866: {},
36873: {},
36874: {},
- 36877: {},
36884: {},
36890: {},
36892: {},
36902: {},
36903: {},
+ 36905: {},
36907: {},
36908: {},
36909: {},
36912: {},
+ 36913: {},
36914: {},
36920: {},
36923: {},
@@ -1234,20 +1243,20 @@ var DefaultTopASNs = map[ASN]struct{}{
36937: {},
36939: {},
36947: {},
- 36955: {},
36958: {},
36962: {},
36963: {},
- 36972: {},
+ 36969: {},
36974: {},
36977: {},
+ 36986: {},
36988: {},
36992: {},
36994: {},
36996: {},
- 36998: {},
36999: {},
37002: {},
+ 37004: {},
37006: {},
37009: {},
37014: {},
@@ -1283,11 +1292,13 @@ var DefaultTopASNs = map[ASN]struct{}{
37133: {},
37136: {},
37141: {},
+ 37143: {},
37148: {},
37154: {},
37164: {},
37168: {},
37173: {},
+ 37182: {},
37183: {},
37184: {},
37187: {},
@@ -1298,6 +1309,7 @@ var DefaultTopASNs = map[ASN]struct{}{
37204: {},
37205: {},
37208: {},
+ 37215: {},
37223: {},
37228: {},
37229: {},
@@ -1313,33 +1325,33 @@ var DefaultTopASNs = map[ASN]struct{}{
37313: {},
37315: {},
37323: {},
+ 37326: {},
37334: {},
37336: {},
37337: {},
37340: {},
37342: {},
37343: {},
- 37347: {},
37349: {},
- 37350: {},
37358: {},
37371: {},
- 37376: {},
37385: {},
+ 37395: {},
37406: {},
37410: {},
- 37414: {},
37424: {},
37425: {},
- 37429: {},
+ 37427: {},
+ 37430: {},
37440: {},
37447: {},
+ 37449: {},
37451: {},
37453: {},
37457: {},
37460: {},
37461: {},
- 37468: {},
+ 37463: {},
37473: {},
37487: {},
37492: {},
@@ -1352,30 +1364,28 @@ var DefaultTopASNs = map[ASN]struct{}{
37531: {},
37532: {},
37541: {},
- 37542: {},
- 37545: {},
37550: {},
37552: {},
- 37558: {},
37559: {},
37563: {},
- 37566: {},
37575: {},
37577: {},
- 37580: {},
37584: {},
- 37586: {},
37594: {},
+ 37604: {},
37611: {},
37612: {},
37614: {},
37616: {},
37621: {},
37622: {},
+ 37637: {},
+ 37638: {},
37642: {},
37645: {},
37649: {},
37654: {},
+ 37662: {},
37665: {},
37671: {},
37678: {},
@@ -1384,18 +1394,22 @@ var DefaultTopASNs = map[ASN]struct{}{
37693: {},
37697: {},
37705: {},
+ 37713: {},
37721: {},
37963: {},
38008: {},
38009: {},
+ 38019: {},
38067: {},
38077: {},
38136: {},
38186: {},
+ 38193: {},
38195: {},
38198: {},
38201: {},
38203: {},
+ 38209: {},
38227: {},
38235: {},
38247: {},
@@ -1405,14 +1419,14 @@ var DefaultTopASNs = map[ASN]struct{}{
38442: {},
38466: {},
38511: {},
+ 38527: {},
38553: {},
38565: {},
- 38584: {},
38600: {},
38623: {},
+ 38710: {},
38742: {},
38800: {},
- 38805: {},
38819: {},
38841: {},
38875: {},
@@ -1422,32 +1436,34 @@ var DefaultTopASNs = map[ASN]struct{}{
38999: {},
39007: {},
39010: {},
+ 39013: {},
39032: {},
39067: {},
- 39093: {},
+ 39120: {},
+ 39122: {},
39184: {},
39216: {},
39232: {},
39251: {},
39273: {},
- 39279: {},
39280: {},
39344: {},
+ 39351: {},
39354: {},
39375: {},
39386: {},
39397: {},
- 39401: {},
39402: {},
- 39440: {},
+ 39455: {},
39501: {},
39507: {},
- 39572: {},
+ 39544: {},
39574: {},
39603: {},
39608: {},
39611: {},
39642: {},
+ 39647: {},
39650: {},
39699: {},
39737: {},
@@ -1455,32 +1471,33 @@ var DefaultTopASNs = map[ASN]struct{}{
39798: {},
39823: {},
39824: {},
- 39878: {},
+ 39826: {},
39891: {},
- 39912: {},
40029: {},
+ 40065: {},
40788: {},
40945: {},
40980: {},
+ 41011: {},
41032: {},
41046: {},
- 41068: {},
- 41088: {},
+ 41096: {},
41124: {},
41164: {},
41202: {},
+ 41228: {},
41230: {},
+ 41273: {},
41275: {},
41313: {},
41329: {},
41330: {},
- 41354: {},
41371: {},
41378: {},
41435: {},
- 41436: {},
41454: {},
41496: {},
+ 41549: {},
41557: {},
41563: {},
41564: {},
@@ -1490,7 +1507,6 @@ var DefaultTopASNs = map[ASN]struct{}{
41704: {},
41733: {},
41738: {},
- 41745: {},
41750: {},
41798: {},
41820: {},
@@ -1500,6 +1516,7 @@ var DefaultTopASNs = map[ASN]struct{}{
41897: {},
41937: {},
41956: {},
+ 41966: {},
41997: {},
41998: {},
42003: {},
@@ -1514,8 +1531,8 @@ var DefaultTopASNs = map[ASN]struct{}{
42313: {},
42334: {},
42337: {},
- 42343: {},
42437: {},
+ 42455: {},
42525: {},
42532: {},
42541: {},
@@ -1537,47 +1554,48 @@ var DefaultTopASNs = map[ASN]struct{}{
42828: {},
42837: {},
42841: {},
- 42844: {},
42863: {},
42864: {},
42908: {},
42912: {},
42925: {},
+ 42947: {},
+ 42956: {},
+ 42960: {},
42961: {},
42991: {},
43019: {},
- 43028: {},
43060: {},
+ 43094: {},
43139: {},
43197: {},
43205: {},
43242: {},
43248: {},
- 43256: {},
- 43289: {},
+ 43341: {},
43350: {},
43447: {},
43451: {},
43452: {},
+ 43456: {},
43513: {},
43529: {},
43533: {},
43557: {},
+ 43568: {},
43612: {},
43627: {},
- 43633: {},
43653: {},
- 43656: {},
43700: {},
43708: {},
43733: {},
43754: {},
43766: {},
- 43791: {},
- 43811: {},
43824: {},
43870: {},
43883: {},
+ 43892: {},
+ 43905: {},
43925: {},
43939: {},
43940: {},
@@ -1588,17 +1606,18 @@ var DefaultTopASNs = map[ASN]struct{}{
44087: {},
44134: {},
44143: {},
+ 44208: {},
+ 44213: {},
44217: {},
- 44234: {},
44244: {},
44247: {},
44272: {},
- 44313: {},
+ 44285: {},
44327: {},
44377: {},
- 44384: {},
44391: {},
44395: {},
+ 44436: {},
44477: {},
44483: {},
44489: {},
@@ -1610,7 +1629,6 @@ var DefaultTopASNs = map[ASN]struct{}{
44725: {},
44735: {},
44869: {},
- 44894: {},
44901: {},
44925: {},
45007: {},
@@ -1620,15 +1638,13 @@ var DefaultTopASNs = map[ASN]struct{}{
45177: {},
45178: {},
45193: {},
- 45224: {},
+ 45230: {},
45245: {},
- 45267: {},
45271: {},
45305: {},
45345: {},
45355: {},
45356: {},
- 45361: {},
45410: {},
45430: {},
45458: {},
@@ -1639,6 +1655,7 @@ var DefaultTopASNs = map[ASN]struct{}{
45588: {},
45609: {},
45629: {},
+ 45637: {},
45650: {},
45669: {},
45727: {},
@@ -1658,13 +1675,16 @@ var DefaultTopASNs = map[ASN]struct{}{
45960: {},
46198: {},
46408: {},
+ 46562: {},
+ 46573: {},
46650: {},
46868: {},
- 46941: {},
+ 47116: {},
47132: {},
47139: {},
47159: {},
47169: {},
+ 47217: {},
47232: {},
47237: {},
47253: {},
@@ -1672,62 +1692,68 @@ var DefaultTopASNs = map[ASN]struct{}{
47331: {},
47377: {},
47394: {},
+ 47402: {},
47485: {},
+ 47499: {},
47524: {},
+ 47583: {},
47588: {},
47589: {},
- 47719: {},
47782: {},
47790: {},
+ 47798: {},
+ 47881: {},
47883: {},
47887: {},
47898: {},
47956: {},
+ 47959: {},
47962: {},
48092: {},
- 48101: {},
- 48147: {},
48161: {},
48190: {},
48206: {},
- 48239: {},
48252: {},
48288: {},
+ 48359: {},
48431: {},
48437: {},
- 48480: {},
48492: {},
48503: {},
48506: {},
+ 48551: {},
48629: {},
48675: {},
+ 48685: {},
48695: {},
- 48715: {},
48728: {},
- 48803: {},
48830: {},
48832: {},
48847: {},
48887: {},
48917: {},
48926: {},
- 48945: {},
+ 48953: {},
48966: {},
+ 49040: {},
49044: {},
49056: {},
- 49091: {},
49100: {},
49101: {},
+ 49103: {},
49115: {},
49117: {},
49129: {},
49183: {},
+ 49221: {},
49223: {},
49242: {},
49273: {},
- 49472: {},
+ 49282: {},
+ 49392: {},
49528: {},
49561: {},
+ 49567: {},
49628: {},
49724: {},
49770: {},
@@ -1735,7 +1761,6 @@ var DefaultTopASNs = map[ASN]struct{}{
49800: {},
49808: {},
49826: {},
- 49870: {},
49889: {},
49902: {},
49914: {},
@@ -1743,64 +1768,69 @@ var DefaultTopASNs = map[ASN]struct{}{
49985: {},
50010: {},
50025: {},
+ 50084: {},
50181: {},
+ 50186: {},
50223: {},
50231: {},
+ 50242: {},
50251: {},
50266: {},
50274: {},
- 50294: {},
50304: {},
- 50360: {},
+ 50316: {},
+ 50334: {},
+ 50349: {},
50411: {},
50463: {},
50467: {},
50500: {},
50581: {},
+ 50593: {},
50597: {},
- 50606: {},
50613: {},
50616: {},
+ 50627: {},
50635: {},
50648: {},
50670: {},
50673: {},
50685: {},
- 50698: {},
50710: {},
+ 50718: {},
50749: {},
50767: {},
50810: {},
50821: {},
50825: {},
- 50923: {},
50925: {},
+ 50953: {},
50959: {},
+ 50962: {},
50973: {},
50979: {},
51018: {},
- 51069: {},
+ 51056: {},
+ 51074: {},
51110: {},
51167: {},
51175: {},
51184: {},
51207: {},
51265: {},
+ 51319: {},
51336: {},
- 51341: {},
51342: {},
51346: {},
- 51371: {},
51375: {},
51395: {},
- 51399: {},
51407: {},
51430: {},
- 51469: {},
51495: {},
51504: {},
51582: {},
51604: {},
+ 51615: {},
51653: {},
51684: {},
51765: {},
@@ -1811,10 +1841,8 @@ var DefaultTopASNs = map[ASN]struct{}{
51896: {},
52075: {},
52145: {},
- 52173: {},
52195: {},
52228: {},
- 52232: {},
52233: {},
52238: {},
52242: {},
@@ -1823,17 +1851,20 @@ var DefaultTopASNs = map[ASN]struct{}{
52260: {},
52262: {},
52263: {},
+ 52286: {},
52312: {},
+ 52322: {},
52323: {},
52341: {},
52361: {},
52362: {},
52363: {},
52373: {},
+ 52381: {},
52398: {},
52405: {},
+ 52409: {},
52412: {},
- 52423: {},
52433: {},
52436: {},
52444: {},
@@ -1845,12 +1876,13 @@ var DefaultTopASNs = map[ASN]struct{}{
52783: {},
52974: {},
53006: {},
- 53363: {},
53667: {},
53764: {},
53913: {},
54198: {},
+ 54252: {},
54614: {},
+ 54825: {},
54994: {},
55330: {},
55391: {},
@@ -1858,6 +1890,7 @@ var DefaultTopASNs = map[ASN]struct{}{
55424: {},
55427: {},
55430: {},
+ 55501: {},
55577: {},
55685: {},
55699: {},
@@ -1899,16 +1932,14 @@ var DefaultTopASNs = map[ASN]struct{}{
56491: {},
56497: {},
56568: {},
- 56630: {},
- 56642: {},
56653: {},
56655: {},
- 56656: {},
56665: {},
56696: {},
+ 56704: {},
56747: {},
- 56803: {},
56902: {},
+ 57013: {},
57016: {},
57043: {},
57070: {},
@@ -1916,6 +1947,7 @@ var DefaultTopASNs = map[ASN]struct{}{
57133: {},
57134: {},
57218: {},
+ 57223: {},
57248: {},
57256: {},
57269: {},
@@ -1925,37 +1957,32 @@ var DefaultTopASNs = map[ASN]struct{}{
57374: {},
57388: {},
57389: {},
- 57443: {},
+ 57491: {},
57513: {},
57564: {},
57566: {},
57588: {},
- 57606: {},
+ 57608: {},
57630: {},
+ 57722: {},
57728: {},
- 57743: {},
57760: {},
+ 57761: {},
57764: {},
- 57776: {},
- 57778: {},
57794: {},
- 57826: {},
57852: {},
- 57858: {},
57869: {},
57888: {},
58056: {},
58061: {},
58065: {},
58098: {},
- 58118: {},
+ 58130: {},
58224: {},
- 58243: {},
+ 58254: {},
58264: {},
- 58321: {},
58322: {},
58328: {},
- 58424: {},
58453: {},
58460: {},
58461: {},
@@ -1971,16 +1998,20 @@ var DefaultTopASNs = map[ASN]struct{}{
58717: {},
58731: {},
58821: {},
+ 58893: {},
58895: {},
58945: {},
58952: {},
- 59108: {},
+ 59078: {},
59125: {},
59126: {},
59127: {},
59253: {},
59257: {},
59362: {},
+ 59371: {},
+ 59381: {},
+ 59443: {},
59497: {},
59588: {},
59625: {},
@@ -1990,71 +2021,56 @@ var DefaultTopASNs = map[ASN]struct{}{
59847: {},
59861: {},
59890: {},
- 59912: {},
59931: {},
59989: {},
+ 60016: {},
60068: {},
- 60111: {},
60258: {},
60294: {},
- 60304: {},
60352: {},
60367: {},
60372: {},
60377: {},
60398: {},
60471: {},
- 60485: {},
60517: {},
60636: {},
60725: {},
- 60754: {},
60757: {},
60781: {},
60806: {},
- 60876: {},
- 60966: {},
+ 60895: {},
60999: {},
61010: {},
61071: {},
61135: {},
61143: {},
- 61174: {},
+ 61154: {},
61189: {},
- 61208: {},
- 61211: {},
61272: {},
61275: {},
+ 61287: {},
61307: {},
61317: {},
- 61345: {},
- 61367: {},
- 61390: {},
- 61449: {},
61461: {},
61466: {},
61478: {},
- 61490: {},
61512: {},
- 61588: {},
+ 61996: {},
62005: {},
62013: {},
- 62023: {},
- 62059: {},
62099: {},
- 62129: {},
62161: {},
62179: {},
62183: {},
62211: {},
+ 62212: {},
62240: {},
- 62281: {},
- 62282: {},
- 62336: {},
+ 62250: {},
+ 62337: {},
62563: {},
63023: {},
63199: {},
- 63473: {},
63526: {},
63852: {},
63859: {},
@@ -2063,34 +2079,31 @@ var DefaultTopASNs = map[ASN]struct{}{
63969: {},
63991: {},
63996: {},
- 63998: {},
+ 64022: {},
64043: {},
64073: {},
64098: {},
64105: {},
+ 64126: {},
64134: {},
- 64139: {},
64270: {},
64286: {},
- 64300: {},
64443: {},
64466: {},
131090: {},
131111: {},
- 131149: {},
131178: {},
131207: {},
131267: {},
131284: {},
- 131322: {},
131429: {},
131445: {},
131464: {},
131471: {},
- 131584: {},
131591: {},
131596: {},
131627: {},
+ 131706: {},
131769: {},
132045: {},
132061: {},
@@ -2101,10 +2114,11 @@ var DefaultTopASNs = map[ASN]struct{}{
132173: {},
132199: {},
132203: {},
- 132255: {},
+ 132222: {},
132298: {},
132429: {},
132447: {},
+ 132449: {},
132462: {},
132468: {},
132471: {},
@@ -2112,31 +2126,27 @@ var DefaultTopASNs = map[ASN]struct{}{
132525: {},
132618: {},
132686: {},
- 132825: {},
132831: {},
+ 132857: {},
133012: {},
133076: {},
- 133137: {},
- 133159: {},
133206: {},
133287: {},
133334: {},
133384: {},
133385: {},
- 133440: {},
- 133480: {},
133481: {},
133524: {},
+ 133533: {},
133579: {},
133606: {},
133612: {},
- 133613: {},
133623: {},
133661: {},
+ 133748: {},
133752: {},
133875: {},
133894: {},
- 133957: {},
133982: {},
134090: {},
134113: {},
@@ -2144,13 +2154,12 @@ var DefaultTopASNs = map[ASN]struct{}{
134204: {},
134356: {},
134467: {},
- 134550: {},
+ 134489: {},
134562: {},
134651: {},
134674: {},
134697: {},
134707: {},
- 134711: {},
134714: {},
134715: {},
134732: {},
@@ -2163,14 +2172,12 @@ var DefaultTopASNs = map[ASN]struct{}{
134972: {},
134995: {},
135043: {},
- 135059: {},
135069: {},
135126: {},
135298: {},
135300: {},
+ 135327: {},
135341: {},
- 135345: {},
- 135371: {},
135375: {},
135376: {},
135377: {},
@@ -2187,6 +2194,7 @@ var DefaultTopASNs = map[ASN]struct{}{
136039: {},
136093: {},
136119: {},
+ 136141: {},
136167: {},
136210: {},
136224: {},
@@ -2198,13 +2206,13 @@ var DefaultTopASNs = map[ASN]struct{}{
136400: {},
136442: {},
136454: {},
+ 136477: {},
136479: {},
136480: {},
136515: {},
136525: {},
136538: {},
136557: {},
- 136780: {},
136787: {},
136873: {},
136897: {},
@@ -2215,6 +2223,7 @@ var DefaultTopASNs = map[ASN]struct{}{
137047: {},
137080: {},
137226: {},
+ 137236: {},
137409: {},
137412: {},
137424: {},
@@ -2222,37 +2231,31 @@ var DefaultTopASNs = map[ASN]struct{}{
137453: {},
137477: {},
137526: {},
- 137549: {},
137561: {},
+ 137811: {},
137824: {},
+ 137853: {},
137872: {},
- 137880: {},
+ 137891: {},
137895: {},
137959: {},
137967: {},
- 137982: {},
137989: {},
+ 138064: {},
138089: {},
- 138167: {},
- 138168: {},
138179: {},
138197: {},
- 138322: {},
- 138346: {},
138368: {},
138384: {},
138423: {},
- 138500: {},
138529: {},
138590: {},
+ 138606: {},
+ 138634: {},
138655: {},
138754: {},
138886: {},
- 138902: {},
- 138915: {},
- 138934: {},
138997: {},
- 139003: {},
139009: {},
139029: {},
139043: {},
@@ -2262,7 +2265,6 @@ var DefaultTopASNs = map[ASN]struct{}{
139580: {},
139609: {},
139628: {},
- 139651: {},
139741: {},
139759: {},
139831: {},
@@ -2270,24 +2272,24 @@ var DefaultTopASNs = map[ASN]struct{}{
139879: {},
139898: {},
139922: {},
- 139952: {},
+ 139967: {},
+ 139981: {},
139994: {},
140045: {},
140061: {},
140072: {},
- 140096: {},
140100: {},
+ 140210: {},
140220: {},
+ 140265: {},
140292: {},
+ 140330: {},
140401: {},
- 140443: {},
140499: {},
140504: {},
- 140594: {},
- 140608: {},
- 140635: {},
- 140686: {},
+ 140726: {},
140900: {},
+ 140989: {},
141015: {},
141024: {},
141031: {},
@@ -2295,143 +2297,148 @@ var DefaultTopASNs = map[ASN]struct{}{
141145: {},
141212: {},
141216: {},
- 141361: {},
+ 141224: {},
+ 141226: {},
141421: {},
141607: {},
141680: {},
141681: {},
141711: {},
141767: {},
- 141778: {},
141995: {},
+ 142032: {},
142065: {},
142120: {},
- 142295: {},
- 142300: {},
142352: {},
- 142403: {},
142552: {},
- 142647: {},
147049: {},
147184: {},
149024: {},
149034: {},
- 149521: {},
- 149645: {},
+ 149360: {},
149660: {},
+ 149707: {},
149768: {},
149771: {},
149866: {},
150131: {},
150153: {},
- 150359: {},
+ 150155: {},
+ 150371: {},
150683: {},
150692: {},
150750: {},
+ 150774: {},
151080: {},
151396: {},
+ 196640: {},
196735: {},
196838: {},
196874: {},
196925: {},
196961: {},
+ 197071: {},
197077: {},
+ 197119: {},
197207: {},
- 197212: {},
197225: {},
+ 197248: {},
197296: {},
197301: {},
197350: {},
197398: {},
197423: {},
- 197470: {},
- 197540: {},
197556: {},
197623: {},
- 197637: {},
- 197648: {},
+ 197663: {},
197674: {},
197704: {},
197706: {},
197830: {},
+ 197862: {},
197882: {},
197897: {},
198068: {},
198252: {},
+ 198259: {},
198265: {},
198279: {},
198288: {},
198440: {},
198441: {},
+ 198471: {},
198589: {},
198605: {},
+ 198632: {},
+ 198651: {},
198668: {},
198735: {},
+ 198785: {},
198820: {},
198961: {},
198966: {},
- 199061: {},
199128: {},
199140: {},
199274: {},
199276: {},
199284: {},
- 199468: {},
+ 199346: {},
199469: {},
+ 199490: {},
199493: {},
199524: {},
199620: {},
+ 199636: {},
199698: {},
199731: {},
199739: {},
199995: {},
- 200019: {},
200088: {},
200134: {},
200154: {},
200313: {},
+ 200436: {},
200446: {},
- 200565: {},
200590: {},
- 200612: {},
200640: {},
200651: {},
200665: {},
200697: {},
- 200698: {},
200724: {},
200736: {},
200740: {},
200742: {},
- 200796: {},
200845: {},
200865: {},
201019: {},
+ 201073: {},
201150: {},
201167: {},
+ 201187: {},
201241: {},
201249: {},
+ 201290: {},
201411: {},
+ 201476: {},
+ 201502: {},
201505: {},
201603: {},
201749: {},
201767: {},
201776: {},
- 201814: {},
- 201817: {},
201838: {},
201884: {},
201890: {},
- 201898: {},
201986: {},
201997: {},
- 202050: {},
+ 202085: {},
202087: {},
202098: {},
202103: {},
202204: {},
202254: {},
202293: {},
+ 202354: {},
202422: {},
202433: {},
202441: {},
@@ -2440,15 +2447,15 @@ var DefaultTopASNs = map[ASN]struct{}{
202498: {},
202561: {},
202613: {},
- 202618: {},
202632: {},
- 202635: {},
202662: {},
+ 202672: {},
202699: {},
202870: {},
+ 202914: {},
202921: {},
+ 202931: {},
202940: {},
- 202943: {},
202987: {},
203020: {},
203136: {},
@@ -2460,12 +2467,11 @@ var DefaultTopASNs = map[ASN]struct{}{
203448: {},
203451: {},
203459: {},
+ 203561: {},
203622: {},
- 203653: {},
203675: {},
203680: {},
203735: {},
- 203744: {},
203811: {},
203877: {},
203912: {},
@@ -2473,66 +2479,72 @@ var DefaultTopASNs = map[ASN]struct{}{
203964: {},
203971: {},
203995: {},
+ 203999: {},
204106: {},
204108: {},
- 204141: {},
204151: {},
204165: {},
204170: {},
204171: {},
- 204209: {},
- 204249: {},
+ 204267: {},
204274: {},
204279: {},
- 204317: {},
204342: {},
204356: {},
+ 204390: {},
204393: {},
204403: {},
- 204457: {},
- 204548: {},
- 204565: {},
+ 204429: {},
+ 204467: {},
+ 204566: {},
204595: {},
- 204601: {},
204649: {},
- 204716: {},
+ 204731: {},
+ 204802: {},
204804: {},
- 204814: {},
+ 204873: {},
+ 204894: {},
204902: {},
+ 204918: {},
204957: {},
- 204997: {},
205015: {},
- 205090: {},
205110: {},
205119: {},
205168: {},
205244: {},
205254: {},
- 205277: {},
205278: {},
+ 205285: {},
205293: {},
205362: {},
205367: {},
205368: {},
+ 205371: {},
+ 205400: {},
205473: {},
- 205521: {},
205547: {},
+ 205619: {},
205638: {},
205647: {},
205714: {},
+ 205832: {},
205889: {},
+ 205984: {},
206026: {},
206065: {},
206067: {},
- 206092: {},
206119: {},
+ 206194: {},
206206: {},
206238: {},
206262: {},
+ 206283: {},
+ 206358: {},
206375: {},
206406: {},
+ 206446: {},
206471: {},
- 206519: {},
+ 206485: {},
206557: {},
206610: {},
206611: {},
@@ -2540,97 +2552,98 @@ var DefaultTopASNs = map[ASN]struct{}{
206666: {},
206774: {},
206783: {},
- 206912: {},
206920: {},
+ 206977: {},
207044: {},
207081: {},
207097: {},
207137: {},
207154: {},
207164: {},
+ 207187: {},
207192: {},
+ 207251: {},
+ 207348: {},
207355: {},
207369: {},
207375: {},
- 207459: {},
- 207464: {},
- 207502: {},
+ 207493: {},
+ 207541: {},
207569: {},
207589: {},
207651: {},
207713: {},
207728: {},
- 207766: {},
+ 207782: {},
+ 207786: {},
207790: {},
207810: {},
207876: {},
207980: {},
+ 207990: {},
207991: {},
- 208149: {},
208286: {},
- 208306: {},
208320: {},
208339: {},
- 208448: {},
+ 208365: {},
208555: {},
- 208570: {},
208592: {},
- 208668: {},
+ 208645: {},
208670: {},
- 208671: {},
208730: {},
208734: {},
- 208857: {},
+ 208888: {},
208905: {},
+ 208909: {},
208972: {},
208997: {},
+ 209001: {},
+ 209012: {},
209046: {},
209049: {},
- 209196: {},
209240: {},
209262: {},
209277: {},
- 209302: {},
209360: {},
209424: {},
209442: {},
- 209531: {},
- 209743: {},
- 209835: {},
+ 209491: {},
+ 209641: {},
209839: {},
209854: {},
- 209984: {},
210003: {},
210021: {},
210079: {},
210095: {},
+ 210125: {},
+ 210147: {},
210150: {},
210218: {},
+ 210273: {},
210278: {},
210315: {},
- 210392: {},
210402: {},
210616: {},
210625: {},
210644: {},
- 210693: {},
+ 210748: {},
210808: {},
210964: {},
210974: {},
211028: {},
211057: {},
- 211147: {},
+ 211098: {},
211210: {},
211211: {},
- 211322: {},
211356: {},
211385: {},
- 211458: {},
+ 211450: {},
211468: {},
+ 211504: {},
211555: {},
211559: {},
- 211689: {},
211790: {},
+ 211913: {},
211995: {},
212046: {},
212183: {},
@@ -2646,12 +2659,16 @@ var DefaultTopASNs = map[ASN]struct{}{
212655: {},
212661: {},
212752: {},
+ 212766: {},
212865: {},
+ 212897: {},
212898: {},
212910: {},
- 212974: {},
212999: {},
213155: {},
+ 213250: {},
+ 213261: {},
+ 213295: {},
213373: {},
213398: {},
213402: {},
@@ -2661,25 +2678,29 @@ var DefaultTopASNs = map[ASN]struct{}{
262179: {},
262181: {},
262186: {},
+ 262188: {},
262191: {},
262197: {},
262202: {},
262210: {},
- 262220: {},
+ 262215: {},
+ 262221: {},
262223: {},
262234: {},
262239: {},
+ 262241: {},
262253: {},
262262: {},
262354: {},
262378: {},
+ 262459: {},
262468: {},
262481: {},
262589: {},
+ 262663: {},
262753: {},
262773: {},
262916: {},
- 262928: {},
262932: {},
263073: {},
263170: {},
@@ -2687,12 +2708,10 @@ var DefaultTopASNs = map[ASN]struct{}{
263189: {},
263210: {},
263222: {},
- 263223: {},
263224: {},
263238: {},
263242: {},
263245: {},
- 263292: {},
263327: {},
263686: {},
263689: {},
@@ -2706,21 +2725,18 @@ var DefaultTopASNs = map[ASN]struct{}{
263749: {},
263750: {},
263751: {},
- 263759: {},
- 263760: {},
263761: {},
263762: {},
263763: {},
263765: {},
- 263767: {},
263781: {},
263783: {},
263791: {},
263792: {},
263793: {},
263805: {},
+ 263809: {},
263824: {},
- 263834: {},
263980: {},
264605: {},
264609: {},
@@ -2733,22 +2749,24 @@ var DefaultTopASNs = map[ASN]struct{}{
264646: {},
264663: {},
264668: {},
+ 264681: {},
264685: {},
- 264686: {},
264694: {},
264696: {},
264731: {},
264733: {},
264738: {},
264744: {},
+ 264746: {},
264750: {},
264756: {},
- 264758: {},
264770: {},
264778: {},
264779: {},
264780: {},
264783: {},
+ 264796: {},
+ 264800: {},
264814: {},
264821: {},
264825: {},
@@ -2756,69 +2774,73 @@ var DefaultTopASNs = map[ASN]struct{}{
264838: {},
264844: {},
264847: {},
- 264984: {},
+ 265509: {},
265540: {},
- 265561: {},
265594: {},
- 265608: {},
+ 265605: {},
265631: {},
265632: {},
+ 265633: {},
265636: {},
265675: {},
265684: {},
- 265686: {},
265688: {},
265691: {},
- 265695: {},
265698: {},
+ 265706: {},
265711: {},
265721: {},
+ 265724: {},
265727: {},
- 265741: {},
- 265745: {},
+ 265767: {},
265780: {},
265798: {},
265799: {},
+ 265816: {},
265818: {},
265822: {},
- 265823: {},
265855: {},
+ 265862: {},
265867: {},
266445: {},
266668: {},
266673: {},
+ 266677: {},
+ 266698: {},
+ 266725: {},
+ 266730: {},
266734: {},
266742: {},
266755: {},
- 266757: {},
- 266762: {},
+ 266779: {},
266783: {},
266792: {},
+ 266802: {},
266809: {},
- 266812: {},
266814: {},
266815: {},
- 266830: {},
- 266831: {},
+ 266832: {},
266841: {},
266853: {},
+ 266858: {},
266860: {},
+ 266870: {},
266880: {},
266893: {},
266894: {},
266904: {},
- 267587: {},
267684: {},
267685: {},
267699: {},
- 267700: {},
267705: {},
267708: {},
267713: {},
267749: {},
267761: {},
267765: {},
+ 267790: {},
267795: {},
+ 267797: {},
267803: {},
267809: {},
267828: {},
@@ -2828,14 +2850,17 @@ var DefaultTopASNs = map[ASN]struct{}{
267882: {},
267883: {},
267904: {},
- 267916: {},
+ 267917: {},
268323: {},
268976: {},
- 269194: {},
+ 269725: {},
269729: {},
269730: {},
269733: {},
269734: {},
+ 269736: {},
+ 269738: {},
+ 269748: {},
269749: {},
269750: {},
269763: {},
@@ -2844,29 +2869,27 @@ var DefaultTopASNs = map[ASN]struct{}{
269782: {},
269783: {},
269788: {},
- 269794: {},
269797: {},
+ 269804: {},
269806: {},
269816: {},
269820: {},
269822: {},
- 269829: {},
269831: {},
269832: {},
269838: {},
269840: {},
+ 269843: {},
+ 269846: {},
269853: {},
269857: {},
269862: {},
269894: {},
- 269898: {},
269901: {},
269908: {},
- 269909: {},
- 269918: {},
269919: {},
269921: {},
- 269928: {},
+ 269927: {},
269931: {},
269934: {},
269936: {},
@@ -2875,12 +2898,9 @@ var DefaultTopASNs = map[ASN]struct{}{
269950: {},
269953: {},
269955: {},
- 269964: {},
269965: {},
- 269973: {},
+ 269974: {},
269976: {},
- 269981: {},
- 270007: {},
270026: {},
270029: {},
270035: {},
@@ -2896,75 +2916,71 @@ var DefaultTopASNs = map[ASN]struct{}{
270161: {},
270814: {},
271773: {},
+ 271785: {},
271791: {},
271793: {},
271795: {},
+ 271799: {},
+ 271806: {},
+ 271808: {},
271812: {},
271814: {},
271819: {},
271822: {},
271835: {},
271837: {},
- 271846: {},
271855: {},
271868: {},
271874: {},
- 271898: {},
271899: {},
271907: {},
271909: {},
271911: {},
271929: {},
271930: {},
- 271931: {},
- 271932: {},
271935: {},
- 271936: {},
271942: {},
271965: {},
271971: {},
+ 271978: {},
271985: {},
- 271996: {},
+ 271988: {},
272011: {},
272015: {},
- 272018: {},
- 272019: {},
+ 272025: {},
272026: {},
- 272055: {},
272057: {},
- 272073: {},
+ 272062: {},
272083: {},
272102: {},
- 272106: {},
272110: {},
272112: {},
+ 272120: {},
272122: {},
272134: {},
272809: {},
272818: {},
- 272832: {},
272836: {},
- 272851: {},
- 272868: {},
+ 272853: {},
+ 272867: {},
272882: {},
272916: {},
- 272943: {},
272946: {},
- 272954: {},
+ 272955: {},
327687: {},
327693: {},
327697: {},
- 327700: {},
327707: {},
327712: {},
327714: {},
+ 327716: {},
327724: {},
327725: {},
+ 327728: {},
327738: {},
327747: {},
327750: {},
327756: {},
- 327760: {},
327765: {},
327768: {},
327769: {},
@@ -2972,14 +2988,13 @@ var DefaultTopASNs = map[ASN]struct{}{
327776: {},
327782: {},
327786: {},
- 327794: {},
- 327795: {},
327799: {},
327802: {},
327819: {},
327828: {},
- 327829: {},
327830: {},
+ 327862: {},
+ 327864: {},
327871: {},
327879: {},
327885: {},
@@ -2987,14 +3002,15 @@ var DefaultTopASNs = map[ASN]struct{}{
327901: {},
327903: {},
327931: {},
+ 327932: {},
327934: {},
+ 327947: {},
+ 327956: {},
327972: {},
327975: {},
- 327990: {},
+ 327987: {},
327991: {},
- 327992: {},
327996: {},
- 328015: {},
328061: {},
328073: {},
328075: {},
@@ -3005,8 +3021,7 @@ var DefaultTopASNs = map[ASN]struct{}{
328140: {},
328144: {},
328169: {},
- 328182: {},
- 328187: {},
+ 328178: {},
328191: {},
328196: {},
328198: {},
@@ -3018,18 +3033,18 @@ var DefaultTopASNs = map[ASN]struct{}{
328250: {},
328253: {},
328258: {},
- 328259: {},
+ 328271: {},
328286: {},
328297: {},
328304: {},
328309: {},
328310: {},
+ 328316: {},
328319: {},
328331: {},
328341: {},
328358: {},
328411: {},
- 328432: {},
328436: {},
328442: {},
328469: {},
@@ -3041,19 +3056,22 @@ var DefaultTopASNs = map[ASN]struct{}{
328488: {},
328490: {},
328494: {},
+ 328500: {},
+ 328509: {},
328510: {},
328514: {},
328535: {},
328539: {},
328546: {},
328549: {},
- 328576: {},
- 328578: {},
+ 328566: {},
+ 328570: {},
328581: {},
328586: {},
328590: {},
328594: {},
328605: {},
+ 328608: {},
328610: {},
328611: {},
328614: {},
@@ -3061,59 +3079,63 @@ var DefaultTopASNs = map[ASN]struct{}{
328636: {},
328638: {},
328652: {},
+ 328659: {},
+ 328676: {},
328679: {},
328697: {},
328702: {},
328708: {},
- 328717: {},
328727: {},
328733: {},
328734: {},
328753: {},
328755: {},
328770: {},
- 328777: {},
- 328808: {},
328817: {},
+ 328835: {},
328844: {},
+ 328850: {},
328856: {},
328858: {},
+ 328880: {},
328887: {},
+ 328891: {},
328895: {},
- 328939: {},
+ 328919: {},
+ 328923: {},
+ 328941: {},
328943: {},
328954: {},
+ 328959: {},
328961: {},
+ 328965: {},
328975: {},
328977: {},
- 328983: {},
328987: {},
328988: {},
- 328989: {},
328993: {},
328997: {},
329014: {},
329027: {},
+ 329028: {},
329029: {},
329044: {},
329048: {},
+ 329074: {},
329078: {},
329082: {},
- 329094: {},
329101: {},
329103: {},
- 329110: {},
329129: {},
329135: {},
- 329140: {},
329167: {},
+ 329170: {},
329174: {},
- 329179: {},
+ 329177: {},
329183: {},
+ 329192: {},
329205: {},
329211: {},
- 329219: {},
- 329288: {},
393275: {},
393629: {},
393894: {},
@@ -3122,23 +3144,19 @@ var DefaultTopASNs = map[ASN]struct{}{
395561: {},
395570: {},
395965: {},
- 396082: {},
396304: {},
+ 396338: {},
396357: {},
- 396420: {},
- 397470: {},
- 397545: {},
+ 396982: {},
397563: {},
397961: {},
398228: {},
- 398326: {},
398721: {},
- 398901: {},
399382: {},
+ 399674: {},
399686: {},
399724: {},
400266: {},
- 400618: {},
}
// DefaultCountryTopASNs is a mapping of a country to their top ASNs.
@@ -3147,11 +3165,10 @@ var DefaultCountryTopASNs = map[Country]ASN{
CountryAE: 5384,
CountryAF: 55330,
CountryAG: 11594,
- CountryAI: 2740,
- CountryAL: 21183,
- CountryAM: 12297,
+ CountryAI: 396304,
+ CountryAL: 50616,
+ CountryAM: 44395,
CountryAO: 37119,
- CountryAQ: 13335,
CountryAR: 7303,
CountryAS: 9751,
CountryAT: 8412,
@@ -3161,14 +3178,14 @@ var DefaultCountryTopASNs = map[Country]ASN{
CountryAZ: 28787,
CountryBA: 9146,
CountryBB: 14813,
- CountryBD: 24389,
+ CountryBD: 24432,
CountryBE: 5432,
- CountryBF: 37577,
+ CountryBF: 36924,
CountryBG: 8866,
CountryBH: 5416,
CountryBI: 327799,
CountryBJ: 37424,
- CountryBM: 32020,
+ CountryBM: 3855,
CountryBN: 10094,
CountryBO: 6568,
CountryBQ: 27745,
@@ -3202,7 +3219,7 @@ var DefaultCountryTopASNs = map[Country]ASN{
CountryDO: 6400,
CountryDZ: 36947,
CountryEC: 27947,
- CountryEE: 44477,
+ CountryEE: 2586,
CountryEG: 8452,
CountryER: 24757,
CountryES: 3352,
@@ -3222,10 +3239,10 @@ var DefaultCountryTopASNs = map[Country]ASN{
CountryGH: 30986,
CountryGI: 8301,
CountryGL: 8818,
- CountryGM: 37309,
+ CountryGM: 37552,
CountryGN: 37461,
CountryGP: 3215,
- CountryGQ: 37529,
+ CountryGQ: 37173,
CountryGR: 6799,
CountryGT: 14754,
CountryGU: 9246,
@@ -3238,12 +3255,12 @@ var DefaultCountryTopASNs = map[Country]ASN{
CountryHU: 5483,
CountryID: 7713,
CountryIE: 15502,
- CountryIL: 1680,
+ CountryIL: 12400,
CountryIM: 13122,
CountryIN: 55836,
CountryIO: 17458,
CountryIQ: 203214,
- CountryIR: 44244,
+ CountryIR: 197207,
CountryIS: 44735,
CountryIT: 1267,
CountryJE: 8680,
@@ -3253,23 +3270,22 @@ var DefaultCountryTopASNs = map[Country]ASN{
CountryKE: 33771,
CountryKG: 50223,
CountryKH: 38623,
- CountryKI: 134783,
- CountryKM: 36939,
- CountryKN: 11139,
- CountryKP: 198605,
+ CountryKI: 135409,
+ CountryKM: 328061,
+ CountryKN: 14813,
CountryKR: 4766,
CountryKW: 29357,
- CountryKY: 16705,
+ CountryKY: 6639,
CountryKZ: 206026,
CountryLA: 131267,
CountryLB: 42003,
CountryLC: 15344,
- CountryLI: 56653,
+ CountryLI: 20634,
CountryLK: 18001,
CountryLR: 37094,
- CountryLS: 33567,
+ CountryLS: 37057,
CountryLT: 8764,
- CountryLU: 6661,
+ CountryLU: 53667,
CountryLV: 24921,
CountryLY: 21003,
CountryMA: 36903,
@@ -3281,14 +3297,14 @@ var DefaultCountryTopASNs = map[Country]ASN{
CountryMH: 24439,
CountryMK: 6821,
CountryML: 30985,
- CountryMM: 136255,
+ CountryMM: 13335,
CountryMN: 17882,
CountryMO: 4609,
CountryMP: 7131,
CountryMQ: 3215,
CountryMR: 29544,
CountryMS: 396304,
- CountryMT: 12709,
+ CountryMT: 15735,
CountryMU: 23889,
CountryMV: 7642,
CountryMW: 37440,
@@ -3301,7 +3317,7 @@ var DefaultCountryTopASNs = map[Country]ASN{
CountryNG: 29465,
CountryNI: 14754,
CountryNL: 1136,
- CountryNO: 29695,
+ CountryNO: 2119,
CountryNP: 17501,
CountryNR: 140504,
CountryNZ: 9790,
@@ -3329,10 +3345,10 @@ var DefaultCountryTopASNs = map[Country]ASN{
CountrySB: 45891,
CountrySC: 36958,
CountrySD: 15706,
- CountrySE: 1257,
+ CountrySE: 3301,
CountrySG: 4773,
CountrySH: 33763,
- CountrySI: 3212,
+ CountrySI: 5603,
CountrySK: 6855,
CountrySL: 36988,
CountrySM: 15433,
@@ -3352,7 +3368,7 @@ var DefaultCountryTopASNs = map[Country]ASN{
CountryTJ: 43197,
CountryTL: 58731,
CountryTM: 20661,
- CountryTN: 37693,
+ CountryTN: 37705,
CountryTO: 38201,
CountryTR: 47331,
CountryTT: 27800,
@@ -3363,13 +3379,12 @@ var DefaultCountryTopASNs = map[Country]ASN{
CountryUS: 7922,
CountryUY: 6057,
CountryUZ: 8193,
- CountryVA: 8978,
CountryVC: 46408,
CountryVE: 8048,
- CountryVG: 396357,
+ CountryVG: 11139,
CountryVI: 14434,
CountryVN: 7552,
- CountryVU: 9249,
+ CountryVU: 45355,
CountryWF: 45879,
CountryWS: 38800,
CountryXK: 21246,
diff --git a/internal/metrics/backend.go b/internal/metrics/backend.go
index 2d70f8a..fe36b5e 100644
--- a/internal/metrics/backend.go
+++ b/internal/metrics/backend.go
@@ -23,6 +23,15 @@ var DevicesNewCountGauge = promauto.NewGauge(prometheus.GaugeOpts{
Help: "The number of user devices that were changed or added since the previous sync.",
})
+// DevicesInvalidTotal is a gauge with the number of invalid user devices loaded
+// from the backend.
+var DevicesInvalidTotal = promauto.NewCounter(prometheus.CounterOpts{
+ Name: "devices_invalid_total",
+ Subsystem: subsystemBackend,
+ Namespace: namespace,
+ Help: "The total number of invalid user devices loaded from the backend.",
+})
+
// ProfilesCountGauge is a gauge with the total number of user profiles loaded
// from the backend.
var ProfilesCountGauge = promauto.NewGauge(prometheus.GaugeOpts{
diff --git a/internal/metrics/dnssvc.go b/internal/metrics/dnssvc.go
index 6afecd6..0228201 100644
--- a/internal/metrics/dnssvc.go
+++ b/internal/metrics/dnssvc.go
@@ -21,6 +21,9 @@ var DNSSvcRequestByASNTotal = promauto.NewCounterVec(prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystemDNSSvc,
Help: "The number of processed DNS requests labeled by country and ASN.",
+ ConstLabels: prometheus.Labels{
+ dontStoreLabel: dontStoreLabelValue,
+ },
}, []string{"country", "asn"})
// DNSSvcRequestByFilterTotal is a counter with the total number of queries
diff --git a/internal/metrics/metrics.go b/internal/metrics/metrics.go
index 9e86d28..110013c 100644
--- a/internal/metrics/metrics.go
+++ b/internal/metrics/metrics.go
@@ -35,6 +35,16 @@ const (
subsystemWebSvc = "websvc"
)
+const (
+ // dontStoreLabel is a label that signals that the metric should not be
+ // stored in the long-term storage.
+ dontStoreLabel = "do_not_store_metric"
+
+ // dontStoreLabelValue is a positive value of the [dontStoreLabel] label to
+ // avoid calling [BoolString] every time.
+ dontStoreLabelValue = "1"
+)
+
// SetUpGauge signals that the server has been started. Use a function here to
// avoid circular dependencies.
func SetUpGauge(version, buildtime, branch, revision, goversion string) {
diff --git a/internal/profiledb/profiledb.go b/internal/profiledb/profiledb.go
index 8557852..0991127 100644
--- a/internal/profiledb/profiledb.go
+++ b/internal/profiledb/profiledb.go
@@ -39,6 +39,39 @@ type Interface interface {
ProfileByLinkedIP(ctx context.Context, ip netip.Addr) (p *agd.Profile, d *agd.Device, err error)
}
+// type check
+var _ Interface = (*Disabled)(nil)
+
+// Disabled is a profile database that panics on any call.
+type Disabled struct{}
+
+// profilesDBUnexpectedCall is a panic message template for lookup methods when
+// profiles database is disabled.
+const profilesDBUnexpectedCall string = "profiles db: unexpected call to %s"
+
+// ProfileByDeviceID implements the [Interface] interface for *Disabled.
+func (d *Disabled) ProfileByDeviceID(
+ _ context.Context,
+ _ agd.DeviceID,
+) (_ *agd.Profile, _ *agd.Device, _ error) {
+ panic(fmt.Errorf(profilesDBUnexpectedCall, "ProfileByDeviceID"))
+}
+
+// ProfileByDedicatedIP implements the [Interface] interface for *Disabled.
+func (d *Disabled) ProfileByDedicatedIP(
+ _ context.Context, _ netip.Addr,
+) (_ *agd.Profile, _ *agd.Device, _ error) {
+ panic(fmt.Errorf(profilesDBUnexpectedCall, "ProfileByDedicatedIP"))
+}
+
+// ProfileByLinkedIP implements the [Interface] interface for *Disabled.
+func (d *Disabled) ProfileByLinkedIP(
+ _ context.Context,
+ _ netip.Addr,
+) (_ *agd.Profile, _ *agd.Device, _ error) {
+ panic(fmt.Errorf(profilesDBUnexpectedCall, "ProfileByLinkedIP"))
+}
+
// Config represents the profile database configuration.
type Config struct {
// Storage returns the data for this profile DB.
diff --git a/internal/tools/go.mod b/internal/tools/go.mod
index 3c698ff..8bbc4b1 100644
--- a/internal/tools/go.mod
+++ b/internal/tools/go.mod
@@ -1,38 +1,36 @@
module github.com/AdguardTeam/AdGuardDNS/internal/tools
-go 1.21.5
+go 1.21.8
require (
github.com/fzipp/gocyclo v0.6.0
github.com/golangci/misspell v0.4.1
github.com/gordonklaus/ineffassign v0.1.0
- github.com/kisielk/errcheck v1.6.3
+ github.com/kisielk/errcheck v1.7.0
github.com/kyoh86/looppointer v0.2.1
- github.com/securego/gosec/v2 v2.18.2
- // TODO(a.garipov): Return to latest once the release is tagged
- // correctly. See uudashr/gocognit#31.
+ github.com/securego/gosec/v2 v2.19.0
github.com/uudashr/gocognit v1.1.2
- golang.org/x/tools v0.16.0
- golang.org/x/vuln v1.0.1
+ golang.org/x/tools v0.18.0
+ golang.org/x/vuln v1.0.4
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0
- google.golang.org/protobuf v1.31.0
- honnef.co/go/tools v0.4.6
- mvdan.cc/gofumpt v0.5.0
- mvdan.cc/unparam v0.0.0-20230917202934-3ee2d22f45fb
+ google.golang.org/protobuf v1.32.0
+ honnef.co/go/tools v0.4.7
+ mvdan.cc/gofumpt v0.6.0
+ mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14
)
require (
github.com/BurntSushi/toml v1.3.2 // indirect
- github.com/ccojocar/zxcvbn-go v1.0.1 // indirect
+ github.com/ccojocar/zxcvbn-go v1.0.2 // indirect
github.com/google/go-cmp v0.6.0 // indirect
- github.com/google/uuid v1.4.0 // indirect
+ github.com/google/uuid v1.6.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-20230307190834-24139beb5833 // indirect
- golang.org/x/exp/typeparams v0.0.0-20231127185646-65229373498e // indirect
- golang.org/x/mod v0.14.0 // indirect
- golang.org/x/sync v0.5.0 // indirect
- golang.org/x/sys v0.15.0 // indirect
+ golang.org/x/exp/typeparams v0.0.0-20240222234643-814bf88cf225 // indirect
+ golang.org/x/mod v0.15.0 // indirect
+ golang.org/x/sync v0.6.0 // indirect
+ golang.org/x/sys v0.17.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/internal/tools/go.sum b/internal/tools/go.sum
index 3865de6..907222a 100644
--- a/internal/tools/go.sum
+++ b/internal/tools/go.sum
@@ -1,37 +1,35 @@
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
-github.com/ccojocar/zxcvbn-go v1.0.1 h1:+sxrANSCj6CdadkcMnvde/GWU1vZiiXRbqYSCalV4/4=
-github.com/ccojocar/zxcvbn-go v1.0.1/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60=
+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/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.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
-github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
+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/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.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
-github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golangci/misspell v0.4.1 h1:+y73iSicVy2PqyX7kmUefHusENlrP9YwuHZHPLGQj/g=
github.com/golangci/misspell v0.4.1/go.mod h1:9mAN1quEo3DlpbaIKKyEvRxK1pwqR9s/Sea1bJCtlNI=
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.5.5/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-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/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/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=
github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0=
-github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8=
-github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw=
+github.com/kisielk/errcheck v1.7.0 h1:+SbscKmWJ5mOK/bO1zS60F5I9WwZDWOfRsC4RwfwRV0=
+github.com/kisielk/errcheck v1.7.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -40,16 +38,16 @@ 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.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
-github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
-github.com/onsi/gomega v1.28.1 h1:MijcGUbfYuznzK/5R4CPNoUP/9Xvuo20sXfEm6XxoTA=
-github.com/onsi/gomega v1.28.1/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
+github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY=
+github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
+github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo=
+github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0=
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/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
-github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
-github.com/securego/gosec/v2 v2.18.2 h1:DkDt3wCiOtAHf1XkiXZBhQ6m6mK/b9T/wD257R3/c+I=
-github.com/securego/gosec/v2 v2.18.2/go.mod h1:xUuqSF6i0So56Y2wwohWAmB07EdBkUN6crbLlHwbyJs=
+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.19.0 h1:gl5xMkOI0/E6Hxx0XCY2XujA3V7SNSefA8sC+3f1gnk=
+github.com/securego/gosec/v2 v2.19.0/go.mod h1:hOkDcHz9J/XIgIlPDXalxjeVYsHxoWUc5zJSHxcB8YM=
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=
@@ -65,27 +63,26 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20230307190834-24139beb5833 h1:SChBja7BCQewoTAU7IgvucQKMIXrEpFxNMs0spT3/5s=
golang.org/x/exp v0.0.0-20230307190834-24139beb5833/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
-golang.org/x/exp/typeparams v0.0.0-20231127185646-65229373498e h1:Iel2aGgaO80fSb1N54L7SE6XMeVvYy6caKt8u/5LvR8=
-golang.org/x/exp/typeparams v0.0.0-20231127185646-65229373498e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
+golang.org/x/exp/typeparams v0.0.0-20240222234643-814bf88cf225 h1:BzKNaIRXh1bD+1557OcFIHlpYBiVbK4zEyn8zBHi1SE=
+golang.org/x/exp/typeparams v0.0.0-20240222234643-814bf88cf225/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
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.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8=
+golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
-golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
+golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
+golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
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.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -96,41 +93,38 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
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.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
-golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
+golang.org/x/sys v0.17.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.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.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
-golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
+golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
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.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
-golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM=
-golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
-golang.org/x/vuln v1.0.1 h1:KUas02EjQK5LTuIx1OylBQdKKZ9jeugs+HiqO5HormU=
-golang.org/x/vuln v1.0.1/go.mod h1:bb2hMwln/tqxg32BNY4CcxHWtHXuYa3SbIBmtsyjxtM=
+golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
+golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
+golang.org/x/vuln v1.0.4 h1:SP0mPeg2PmGCu03V+61EcQiOjmpri2XijexKdzv8Z1I=
+golang.org/x/vuln v1.0.4/go.mod h1:NbJdUQhX8jY++FtuhrXs2Eyx0yePo9pF7nPlIjo9aaQ=
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/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
+google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
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.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.4.6 h1:oFEHCKeID7to/3autwsWfnuv69j3NsfcXbvJKuIcep8=
-honnef.co/go/tools v0.4.6/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0=
-mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E=
-mvdan.cc/gofumpt v0.5.0/go.mod h1:HBeVDtMKRZpXyxFciAirzdKklDlGu8aAy1wEbH5Y9js=
-mvdan.cc/unparam v0.0.0-20230917202934-3ee2d22f45fb h1:xiF91GJnDSbyPdiZB5d52N2VpZfGhjM4Ji75cjzuooQ=
-mvdan.cc/unparam v0.0.0-20230917202934-3ee2d22f45fb/go.mod h1:ZzZjEpJDOmx8TdVU6umamY3Xy0UAQUI2DHbf05USVbI=
+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-20240104100049-c549a3470d14 h1:zCr3iRRgdk5eIikZNDphGcM6KGVTx3Yu+/Uu9Es254w=
+mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14/go.mod h1:ZzZjEpJDOmx8TdVU6umamY3Xy0UAQUI2DHbf05USVbI=
diff --git a/internal/websvc/websvc.go b/internal/websvc/websvc.go
index 1d1edbc..253aa27 100644
--- a/internal/websvc/websvc.go
+++ b/internal/websvc/websvc.go
@@ -10,10 +10,10 @@ import (
"net/url"
"time"
- "github.com/AdguardTeam/AdGuardDNS/internal/agdservice"
"github.com/AdguardTeam/AdGuardDNS/internal/errcoll"
"github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/log"
+ "github.com/AdguardTeam/golibs/service"
)
// Config is the AdGuard DNS web service configuration structure.
@@ -201,11 +201,16 @@ func blockPageServers(
}
// type check
-var _ agdservice.Interface = (*Service)(nil)
+var _ service.Interface = (*Service)(nil)
-// Start implements the [agdservice.Interface] interface for *Service. svc may
-// be nil. It panics if one of the servers could not start.
-func (svc *Service) Start(ctx context.Context) (err error) {
+// Start implements the [service.Interface] interface for *Service. It starts
+// serving all endpoints but does not wait for them to actually go online. svc
+// may be nil. err is always nil; if any endpoint fails to start, it panics.
+//
+// TODO(a.garipov): Wait for the services to go online.
+//
+// TODO(a.garipov): Use the context for cancelation.
+func (svc *Service) Start(_ context.Context) (err error) {
if svc == nil {
return nil
}
@@ -261,8 +266,8 @@ func mustStartServer(srv *http.Server) {
}
}
-// Shutdown implements the [agdservice.Interface] interface for *Service. svc
-// may be nil.
+// Shutdown implements the [service.Interface] interface for *Service. svc may
+// be nil.
func (svc *Service) Shutdown(ctx context.Context) (err error) {
if svc == nil {
return nil
diff --git a/scripts/backend/main.go b/scripts/backend/main.go
index b3449ac..c946a21 100644
--- a/scripts/backend/main.go
+++ b/scripts/backend/main.go
@@ -95,11 +95,11 @@ func mockDNSProfile() (dp *backendpb.DNSProfile) {
}
devices := []*backendpb.DeviceSettings{{
- Id: "118ffe93",
- Name: "118ffe93-name",
+ Id: "test",
+ Name: "test-name",
FilteringEnabled: false,
LinkedIp: []byte{1, 1, 1, 1},
- DedicatedIps: [][]byte{{1, 1, 1, 2}},
+ DedicatedIps: [][]byte{{127, 0, 0, 1}},
}}
return &backendpb.DNSProfile{
diff --git a/scripts/make/go-upd-tools.sh b/scripts/make/go-upd-tools.sh
new file mode 100644
index 0000000..7486661
--- /dev/null
+++ b/scripts/make/go-upd-tools.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# 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
+
+verbose="${VERBOSE:-0}"
+readonly verbose
+
+if [ "$verbose" -gt '1' ]
+then
+ env
+ set -x
+ x_flags='-x=1'
+elif [ "$verbose" -gt '0' ]
+then
+ set -x
+ x_flags='-x=0'
+else
+ set +x
+ x_flags='-x=0'
+fi
+readonly x_flags
+
+set -e -f -u
+
+go="${GO:-go}"
+readonly go
+
+cd ./internal/tools/
+"$go" get -u
+"$go" mod tidy