diff --git a/.github/update.log b/.github/update.log index 23c5803a55..5ac5231f8d 100644 --- a/.github/update.log +++ b/.github/update.log @@ -709,3 +709,4 @@ Update On Wed Jul 17 20:32:28 CEST 2024 Update On Thu Jul 18 20:31:52 CEST 2024 Update On Fri Jul 19 20:31:21 CEST 2024 Update On Sat Jul 20 20:32:08 CEST 2024 +Update On Sun Jul 21 20:28:53 CEST 2024 diff --git a/clash-meta/dns/doh.go b/clash-meta/dns/doh.go index 54b8279657..504f79f2a5 100644 --- a/clash-meta/dns/doh.go +++ b/clash-meta/dns/doh.go @@ -204,24 +204,24 @@ func (doh *dnsOverHTTPS) exchangeHTTPSClient( method = http3.MethodGet0RTT } - url := doh.url - url.RawQuery = fmt.Sprintf("dns=%s", base64.RawURLEncoding.EncodeToString(buf)) - httpReq, err := http.NewRequestWithContext(ctx, method, url.String(), nil) + requestUrl := *doh.url // don't modify origin url + requestUrl.RawQuery = fmt.Sprintf("dns=%s", base64.RawURLEncoding.EncodeToString(buf)) + httpReq, err := http.NewRequestWithContext(ctx, method, requestUrl.String(), nil) if err != nil { - return nil, fmt.Errorf("creating http request to %s: %w", url, err) + return nil, fmt.Errorf("creating http request to %s: %w", doh.url, err) } httpReq.Header.Set("Accept", "application/dns-message") httpReq.Header.Set("User-Agent", "") httpResp, err := client.Do(httpReq) if err != nil { - return nil, fmt.Errorf("requesting %s: %w", url, err) + return nil, fmt.Errorf("requesting %s: %w", doh.url, err) } defer httpResp.Body.Close() body, err := io.ReadAll(httpResp.Body) if err != nil { - return nil, fmt.Errorf("reading %s: %w", url, err) + return nil, fmt.Errorf("reading %s: %w", doh.url, err) } if httpResp.StatusCode != http.StatusOK { @@ -230,7 +230,7 @@ func (doh *dnsOverHTTPS) exchangeHTTPSClient( "expected status %d, got %d from %s", http.StatusOK, httpResp.StatusCode, - url, + doh.url, ) } @@ -239,7 +239,7 @@ func (doh *dnsOverHTTPS) exchangeHTTPSClient( if err != nil { return nil, fmt.Errorf( "unpacking response from %s: body is %s: %w", - url, + doh.url, body, err, ) diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock index 1975f8393d..e1c217b567 100644 --- a/clash-nyanpasu/backend/Cargo.lock +++ b/clash-nyanpasu/backend/Cargo.lock @@ -936,7 +936,7 @@ dependencies = [ "windows-sys 0.52.0", "winreg 0.52.0", "wry", - "zip 2.1.4", + "zip 2.1.5", "zip-extensions", ] @@ -7921,9 +7921,9 @@ dependencies = [ [[package]] name = "zip" -version = "2.1.4" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e29ab4097989787b2029a5981c41b7bfb427b5a601e23f455daacb4d0360a9e9" +checksum = "b895748a3ebcb69b9d38dcfdf21760859a4b0d0b0015277640c2ef4c69640e6f" dependencies = [ "aes", "arbitrary", @@ -7954,7 +7954,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb0a99499b3497d765525c5d05e3ade9ca4a731c184365c19472c3fd6ba86341" dependencies = [ - "zip 2.1.4", + "zip 2.1.5", ] [[package]] diff --git a/echo/pkg/lb/round_robin.go b/echo/internal/lb/round_robin.go similarity index 96% rename from echo/pkg/lb/round_robin.go rename to echo/internal/lb/round_robin.go index 136426abca..dbacfc2344 100644 --- a/echo/pkg/lb/round_robin.go +++ b/echo/internal/lb/round_robin.go @@ -6,7 +6,6 @@ import ( "go.uber.org/atomic" ) -// todo: move to internal/lb type Node struct { Address string Label string diff --git a/echo/pkg/lb/round_robin_test.go b/echo/internal/lb/round_robin_test.go similarity index 100% rename from echo/pkg/lb/round_robin_test.go rename to echo/internal/lb/round_robin_test.go diff --git a/echo/internal/relay/conf/cfg.go b/echo/internal/relay/conf/cfg.go index 20a1c319d4..69d4445774 100644 --- a/echo/internal/relay/conf/cfg.go +++ b/echo/internal/relay/conf/cfg.go @@ -6,8 +6,8 @@ import ( "net/url" "github.com/Ehco1996/ehco/internal/constant" + "github.com/Ehco1996/ehco/internal/lb" - "github.com/Ehco1996/ehco/pkg/lb" "go.uber.org/zap" ) diff --git a/echo/internal/transporter/base.go b/echo/internal/transporter/base.go index ddb2abb8db..22923559a9 100644 --- a/echo/internal/transporter/base.go +++ b/echo/internal/transporter/base.go @@ -8,13 +8,13 @@ import ( "github.com/Ehco1996/ehco/internal/cmgr" "github.com/Ehco1996/ehco/internal/conn" "github.com/Ehco1996/ehco/internal/constant" + "github.com/Ehco1996/ehco/internal/lb" "github.com/Ehco1996/ehco/internal/metrics" "github.com/Ehco1996/ehco/internal/relay/conf" "github.com/sagernet/sing-box/common/sniff" "github.com/sagernet/sing/common/buf" "github.com/sagernet/sing/common/bufio" - "github.com/Ehco1996/ehco/pkg/lb" "go.uber.org/zap" ) diff --git a/echo/internal/transporter/interface.go b/echo/internal/transporter/interface.go index dd1da9d4b7..301d78b00c 100644 --- a/echo/internal/transporter/interface.go +++ b/echo/internal/transporter/interface.go @@ -7,8 +7,8 @@ import ( "github.com/Ehco1996/ehco/internal/cmgr" "github.com/Ehco1996/ehco/internal/constant" + "github.com/Ehco1996/ehco/internal/lb" "github.com/Ehco1996/ehco/internal/relay/conf" - "github.com/Ehco1996/ehco/pkg/lb" ) type TCPHandShakeF func(remote *lb.Node) (net.Conn, error) diff --git a/echo/internal/transporter/raw.go b/echo/internal/transporter/raw.go index b6d3a8508a..def1fa8b98 100644 --- a/echo/internal/transporter/raw.go +++ b/echo/internal/transporter/raw.go @@ -7,9 +7,9 @@ import ( "time" "github.com/Ehco1996/ehco/internal/constant" + "github.com/Ehco1996/ehco/internal/lb" "github.com/Ehco1996/ehco/internal/metrics" "github.com/Ehco1996/ehco/internal/relay/conf" - "github.com/Ehco1996/ehco/pkg/lb" "go.uber.org/zap" ) diff --git a/echo/internal/transporter/raw_mux.go b/echo/internal/transporter/raw_mux.go index b13d83806c..bc7ed22cde 100644 --- a/echo/internal/transporter/raw_mux.go +++ b/echo/internal/transporter/raw_mux.go @@ -8,9 +8,9 @@ import ( "github.com/xtaci/smux" "go.uber.org/zap" + "github.com/Ehco1996/ehco/internal/lb" "github.com/Ehco1996/ehco/internal/metrics" "github.com/Ehco1996/ehco/internal/relay/conf" - "github.com/Ehco1996/ehco/pkg/lb" ) var ( diff --git a/echo/internal/transporter/ws.go b/echo/internal/transporter/ws.go index 847ed618ea..d3e01b51a5 100644 --- a/echo/internal/transporter/ws.go +++ b/echo/internal/transporter/ws.go @@ -12,10 +12,10 @@ import ( "github.com/Ehco1996/ehco/internal/conn" "github.com/Ehco1996/ehco/internal/constant" + "github.com/Ehco1996/ehco/internal/lb" "github.com/Ehco1996/ehco/internal/metrics" "github.com/Ehco1996/ehco/internal/relay/conf" "github.com/Ehco1996/ehco/internal/web" - "github.com/Ehco1996/ehco/pkg/lb" ) var ( diff --git a/echo/internal/transporter/ws_mux.go b/echo/internal/transporter/ws_mux.go index d9b6cd46aa..5260a5ae4a 100644 --- a/echo/internal/transporter/ws_mux.go +++ b/echo/internal/transporter/ws_mux.go @@ -13,9 +13,9 @@ import ( "github.com/labstack/echo/v4" "github.com/xtaci/smux" + "github.com/Ehco1996/ehco/internal/lb" "github.com/Ehco1996/ehco/internal/metrics" "github.com/Ehco1996/ehco/internal/relay/conf" - "github.com/Ehco1996/ehco/pkg/lb" ) var ( diff --git a/echo/internal/transporter/wss_mux.go b/echo/internal/transporter/wss_mux.go index 1b7f60506b..5c38925d09 100644 --- a/echo/internal/transporter/wss_mux.go +++ b/echo/internal/transporter/wss_mux.go @@ -13,9 +13,9 @@ import ( "github.com/labstack/echo/v4" "github.com/xtaci/smux" + "github.com/Ehco1996/ehco/internal/lb" "github.com/Ehco1996/ehco/internal/metrics" "github.com/Ehco1996/ehco/internal/relay/conf" - "github.com/Ehco1996/ehco/pkg/lb" ) var ( diff --git a/lede/package/kernel/linux/modules/video.mk b/lede/package/kernel/linux/modules/video.mk index d6412ffad6..2d45aa9ce9 100644 --- a/lede/package/kernel/linux/modules/video.mk +++ b/lede/package/kernel/linux/modules/video.mk @@ -102,7 +102,8 @@ define KernelPackage/fb CONFIG_VT_CONSOLE=y \ CONFIG_VT_HW_CONSOLE_BINDING=y FILES:=$(LINUX_DIR)/drivers/video/fbdev/core/fb.ko \ - $(LINUX_DIR)/lib/fonts/font.ko + $(LINUX_DIR)/lib/fonts/font.ko \ + $(LINUX_DIR)/drivers/video/fbdev/core/fb_io_fops.ko@ge6.6 AUTOLOAD:=$(call AutoLoad,06,fb font) endef diff --git a/lede/target/linux/loongarch64/config-6.6 b/lede/target/linux/loongarch64/config-6.6 index 596301f0f4..6f637a6f01 100644 --- a/lede/target/linux/loongarch64/config-6.6 +++ b/lede/target/linux/loongarch64/config-6.6 @@ -247,6 +247,7 @@ CONFIG_FB_CORE=y CONFIG_FB_DEFERRED_IO=y CONFIG_FB_DEVICE=y CONFIG_FB_EFI=y +CONFIG_FB_IOMEM_FOPS=y CONFIG_FB_IOMEM_HELPERS=y CONFIG_FB_MODE_HELPERS=y CONFIG_FB_SIMPLE=y diff --git a/mihomo/dns/doh.go b/mihomo/dns/doh.go index 54b8279657..504f79f2a5 100644 --- a/mihomo/dns/doh.go +++ b/mihomo/dns/doh.go @@ -204,24 +204,24 @@ func (doh *dnsOverHTTPS) exchangeHTTPSClient( method = http3.MethodGet0RTT } - url := doh.url - url.RawQuery = fmt.Sprintf("dns=%s", base64.RawURLEncoding.EncodeToString(buf)) - httpReq, err := http.NewRequestWithContext(ctx, method, url.String(), nil) + requestUrl := *doh.url // don't modify origin url + requestUrl.RawQuery = fmt.Sprintf("dns=%s", base64.RawURLEncoding.EncodeToString(buf)) + httpReq, err := http.NewRequestWithContext(ctx, method, requestUrl.String(), nil) if err != nil { - return nil, fmt.Errorf("creating http request to %s: %w", url, err) + return nil, fmt.Errorf("creating http request to %s: %w", doh.url, err) } httpReq.Header.Set("Accept", "application/dns-message") httpReq.Header.Set("User-Agent", "") httpResp, err := client.Do(httpReq) if err != nil { - return nil, fmt.Errorf("requesting %s: %w", url, err) + return nil, fmt.Errorf("requesting %s: %w", doh.url, err) } defer httpResp.Body.Close() body, err := io.ReadAll(httpResp.Body) if err != nil { - return nil, fmt.Errorf("reading %s: %w", url, err) + return nil, fmt.Errorf("reading %s: %w", doh.url, err) } if httpResp.StatusCode != http.StatusOK { @@ -230,7 +230,7 @@ func (doh *dnsOverHTTPS) exchangeHTTPSClient( "expected status %d, got %d from %s", http.StatusOK, httpResp.StatusCode, - url, + doh.url, ) } @@ -239,7 +239,7 @@ func (doh *dnsOverHTTPS) exchangeHTTPSClient( if err != nil { return nil, fmt.Errorf( "unpacking response from %s: body is %s: %w", - url, + doh.url, body, err, ) diff --git a/naiveproxy/USAGE.txt b/naiveproxy/USAGE.txt index 4c1660e645..8e921a415f 100644 --- a/naiveproxy/USAGE.txt +++ b/naiveproxy/USAGE.txt @@ -14,8 +14,8 @@ Description: "proxy": "..." } - `--listen` can be specified multiple times on the command line, - and can be either a string or an array of strings in the JSON file. + Specifying a flag multiple times on the command line is equivalent to + having an array of multiple strings in the JSON file. Uses "config.json" by default if run without arguments. @@ -29,18 +29,16 @@ Options: Prints version. - --listen=://[addr][:port] - --listen=socks://[[user]:[pass]@][addr][:port] + --listen=LISTEN-URI - Listens at addr:port with protocol . + LISTEN-URI = "://"[":""@"][][":"] + LISTEN-PROTO = "socks" | "http" | "redir" + + Listens at addr:port with protocol . Can be specified multiple times to listen on multiple ports. - - Available proto: socks, http, redir. Default proto, addr, port: socks, 0.0.0.0, 1080. - * http: Supports only proxying https:// URLs, no http://. - - * redir: Works with certain iptables setup. + Note: redir requires specific iptables rules and uses no authentication. (Redirecting locally originated traffic) iptables -t nat -A OUTPUT -d $proxy_server_ip -j RETURN @@ -57,10 +55,21 @@ Options: The artificial results are not saved for privacy, so restarting the resolver may cause downstream to cache stale results. - --proxy=://:@[:] + --proxy=PROXY - Routes traffic via the proxy server. Connects directly by default. - Available proto: https, quic. Infers port by default. + PROXY = PROXY-CHAIN | SOCKS-PROXY + PROXY-CHAIN = [","] + PROXY-URI = "://"":""@"[":"] + PROXY-PROTO = "http" | "https" | "quic" + SOCKS-PROXY = "socks://"[":"] + + Routes traffic via the proxy chain. + The default proxy is directly connection without proxying. + The last PROXY-URI is negotiated automatically for Naive padding. + Limitations: + * QUIC proxies cannot follow TCP-based proxies in a proxy chain. + * The user needs to ensure there is no loop in the proxy chain. + * SOCKS proxies do not support chaining, authentication, or Naive padding. --insecure-concurrency= diff --git a/naiveproxy/src/net/base/proxy_chain.cc b/naiveproxy/src/net/base/proxy_chain.cc index 4288cc30bf..5ae183287c 100644 --- a/naiveproxy/src/net/base/proxy_chain.cc +++ b/naiveproxy/src/net/base/proxy_chain.cc @@ -137,7 +137,7 @@ bool ProxyChain::IsValidInternal() const { return false; } seen_quic = true; - } else if (proxy_server.is_https()) { + } else if (proxy_server.is_https() || proxy_server.is_http()) { seen_https = true; } else { return false; diff --git a/naiveproxy/src/net/http/http_proxy_connect_job.cc b/naiveproxy/src/net/http/http_proxy_connect_job.cc index f11edb5dbc..b70d876a5d 100644 --- a/naiveproxy/src/net/http/http_proxy_connect_job.cc +++ b/naiveproxy/src/net/http/http_proxy_connect_job.cc @@ -487,9 +487,17 @@ int HttpProxyConnectJob::DoBeginConnect() { int HttpProxyConnectJob::DoTransportConnect() { ProxyServer::Scheme scheme = GetProxyServerScheme(); if (scheme == ProxyServer::SCHEME_HTTP) { - nested_connect_job_ = std::make_unique( - priority(), socket_tag(), common_connect_job_params(), - params_->transport_params(), this, &net_log()); + if (params_->is_over_transport()) { + nested_connect_job_ = std::make_unique( + priority(), socket_tag(), common_connect_job_params(), + params_->transport_params(), this, &net_log()); + } else if (params_->is_over_http()) { + nested_connect_job_ = std::make_unique( + priority(), socket_tag(), common_connect_job_params(), + params_->http_params(), this, &net_log()); + } else { + CHECK(false) << "Invalid nested connect job"; + } } else { DCHECK_EQ(scheme, ProxyServer::SCHEME_HTTPS); DCHECK(params_->is_over_ssl()); diff --git a/naiveproxy/src/net/http/http_proxy_connect_job.h b/naiveproxy/src/net/http/http_proxy_connect_job.h index c176371fbc..afc09d1a97 100644 --- a/naiveproxy/src/net/http/http_proxy_connect_job.h +++ b/naiveproxy/src/net/http/http_proxy_connect_job.h @@ -99,6 +99,13 @@ class NET_EXPORT_PRIVATE HttpProxySocketParams return quic_ssl_config_; } + bool is_over_http() const { + return nested_params_ && nested_params_->is_http_proxy(); + } + const scoped_refptr& http_params() const { + return nested_params_->http_proxy(); + } + const HostPortPair& endpoint() const { return endpoint_; } const ProxyChain& proxy_chain() const { return proxy_chain_; } const ProxyServer& proxy_server() const { diff --git a/naiveproxy/src/net/socket/tcp_socket_posix.cc b/naiveproxy/src/net/socket/tcp_socket_posix.cc index b7758c29b4..730d21b4ec 100644 --- a/naiveproxy/src/net/socket/tcp_socket_posix.cc +++ b/naiveproxy/src/net/socket/tcp_socket_posix.cc @@ -388,15 +388,15 @@ int TCPSocketPosix::GetPeerAddress(IPEndPoint* address) const { int TCPSocketPosix::SetDefaultOptionsForServer() { DCHECK(socket_); -#if BUILDFLAG(IS_LINUX) +#ifdef SO_REUSEPORT int reuseport = 1; int rv = setsockopt(socket_->socket_fd(), SOL_SOCKET, SO_REUSEPORT, reinterpret_cast(&reuseport), sizeof(reuseport)); - if (rv < 0) { + // Ignore errors that the option does not exist. + if (rv != 0 && errno != ENOPROTOOPT) return MapSystemError(errno); - } -#endif +#endif // SO_REUSEPORT return AllowAddressReuse(); } diff --git a/naiveproxy/src/net/tools/naive/http_proxy_server_socket.cc b/naiveproxy/src/net/tools/naive/http_proxy_server_socket.cc index f4afd1ff68..e878999356 100644 --- a/naiveproxy/src/net/tools/naive/http_proxy_server_socket.cc +++ b/naiveproxy/src/net/tools/naive/http_proxy_server_socket.cc @@ -10,6 +10,7 @@ #include #include +#include "base/base64.h" #include "base/functional/bind.h" #include "base/functional/callback_helpers.h" #include "base/logging.h" @@ -40,6 +41,8 @@ constexpr int kMaxPaddingSize = kMinPaddingSize + 32; HttpProxyServerSocket::HttpProxyServerSocket( std::unique_ptr transport_socket, + const std::string& user, + const std::string& pass, ClientPaddingDetectorDelegate* padding_detector_delegate, const NetworkTrafficAnnotationTag& traffic_annotation, const std::vector& supported_padding_types) @@ -53,7 +56,12 @@ HttpProxyServerSocket::HttpProxyServerSocket( header_write_size_(-1), net_log_(transport_->NetLog()), traffic_annotation_(traffic_annotation), - supported_padding_types_(supported_padding_types) {} + supported_padding_types_(supported_padding_types) { + if (!user.empty() || !pass.empty()) { + basic_auth_ = + std::string("Basic ").append(base::Base64Encode(user + ":" + pass)); + } +} HttpProxyServerSocket::~HttpProxyServerSocket() { Disconnect(); @@ -347,6 +355,15 @@ int HttpProxyServerSocket::DoHeaderReadComplete(int result) { headers.AddHeadersFromString(headers_str); } + if (!basic_auth_.empty()) { + std::string proxy_auth; + headers.GetHeader(HttpRequestHeaders::kProxyAuthorization, &proxy_auth); + if (proxy_auth != basic_auth_) { + LOG(WARNING) << "Invalid Proxy-Authorization: " << proxy_auth; + return ERR_INVALID_ARGUMENT; + } + } + if (is_http_1_0) { GURL url(uri); if (!url.is_valid()) { diff --git a/naiveproxy/src/net/tools/naive/http_proxy_server_socket.h b/naiveproxy/src/net/tools/naive/http_proxy_server_socket.h index 22d6ed43ac..81a735abc8 100644 --- a/naiveproxy/src/net/tools/naive/http_proxy_server_socket.h +++ b/naiveproxy/src/net/tools/naive/http_proxy_server_socket.h @@ -35,6 +35,8 @@ class HttpProxyServerSocket : public StreamSocket { public: HttpProxyServerSocket( std::unique_ptr transport_socket, + const std::string& user, + const std::string& pass, ClientPaddingDetectorDelegate* padding_detector_delegate, const NetworkTrafficAnnotationTag& traffic_annotation, const std::vector& supported_padding_types); @@ -117,6 +119,8 @@ class HttpProxyServerSocket : public StreamSocket { bool was_ever_used_; int header_write_size_; + std::string basic_auth_; + HostPortPair request_endpoint_; NetLogWithSource net_log_; diff --git a/naiveproxy/src/net/tools/naive/naive_config.cc b/naiveproxy/src/net/tools/naive/naive_config.cc index 9a8fccd22a..8d5b36aba4 100644 --- a/naiveproxy/src/net/tools/naive/naive_config.cc +++ b/naiveproxy/src/net/tools/naive/naive_config.cc @@ -3,14 +3,27 @@ // found in the LICENSE file. #include "net/tools/naive/naive_config.h" +#include #include #include "base/strings/escape.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_tokenizer.h" +#include "net/base/proxy_server.h" +#include "net/base/proxy_string_util.h" #include "net/base/url_util.h" #include "url/gurl.h" namespace net { +namespace { +ProxyServer MyProxyUriToProxyServer(std::string_view uri) { + if (uri.compare(0, 7, "quic://") == 0) { + return ProxySchemeHostAndPortToProxyServer(ProxyServer::SCHEME_QUIC, + uri.substr(7)); + } + return ProxyUriToProxyServer(uri, ProxyServer::SCHEME_INVALID); +} +} // namespace NaiveListenConfig::NaiveListenConfig() = default; NaiveListenConfig::NaiveListenConfig(const NaiveListenConfig&) = default; @@ -114,22 +127,79 @@ bool NaiveConfig::Parse(const base::Value::Dict& value) { if (const base::Value* v = value.Find("proxy")) { if (const std::string* str = v->GetIfString(); str && !str->empty()) { - GURL url(*str); - net::GetIdentityFromURL(url, &proxy_user, &proxy_pass); + base::StringTokenizer proxy_uri_list(*str, ","); + std::vector proxy_servers; + bool seen_tcp = false; + while (proxy_uri_list.GetNext()) { + std::string token(proxy_uri_list.token()); + GURL url(token); - GURL::Replacements remove_auth; - remove_auth.ClearUsername(); - remove_auth.ClearPassword(); - GURL url_no_auth = url.ReplaceComponents(remove_auth); - proxy_url = url_no_auth.GetWithEmptyPath().spec(); - if (proxy_url.empty()) { - std::cerr << "Invalid proxy" << std::endl; + std::u16string proxy_user; + std::u16string proxy_pass; + net::GetIdentityFromURL(url, &proxy_user, &proxy_pass); + GURL::Replacements remove_auth; + remove_auth.ClearUsername(); + remove_auth.ClearPassword(); + GURL url_no_auth = url.ReplaceComponents(remove_auth); + std::string proxy_uri = url_no_auth.GetWithEmptyPath().spec(); + if (proxy_uri.back() == '/') { + proxy_uri.pop_back(); + } + + proxy_servers.emplace_back(MyProxyUriToProxyServer(proxy_uri)); + const ProxyServer& last = proxy_servers.back(); + if (last.is_quic()) { + if (seen_tcp) { + std::cerr << "QUIC proxy cannot follow TCP-based proxies" + << std::endl; + return false; + } + origins_to_force_quic_on.insert(HostPortPair::FromURL(url)); + } else if (last.is_https() || last.is_http() || last.is_socks()) { + seen_tcp = true; + } else { + std::cerr << "Invalid proxy scheme" << std::endl; + return false; + } + + AuthCredentials auth(proxy_user, proxy_pass); + if (!auth.Empty()) { + if (last.is_socks()) { + std::cerr << "SOCKS proxy with auth is not supported" << std::endl; + } else { + std::string proxy_url(token); + if (proxy_url.compare(0, 7, "quic://") == 0) { + proxy_url.replace(0, 4, "https"); + } + auth_store[url::SchemeHostPort{GURL{proxy_url}}] = auth; + } + } + } + + if (proxy_servers.size() > 1 && + std::any_of(proxy_servers.begin(), proxy_servers.end(), + [](const ProxyServer& s) { return s.is_socks(); })) { + // See net/socket/connect_job_params_factory.cc + // DCHECK(proxy_server.is_socks()); + // DCHECK_EQ(1u, proxy_chain.length()); + std::cerr + << "Multi-proxy chain containing SOCKS proxies is not supported." + << std::endl; + return false; + } + if (std::any_of(proxy_servers.begin(), proxy_servers.end(), + [](const ProxyServer& s) { return s.is_quic(); })) { + proxy_chain = ProxyChain::ForIpProtection(proxy_servers); + } else { + proxy_chain = ProxyChain(proxy_servers); + } + + if (!proxy_chain.IsValid()) { + std::cerr << "Invalid proxy chain" << std::endl; return false; - } else if (proxy_url.back() == '/') { - proxy_url.pop_back(); } } else { - std::cerr << "Invalid proxy" << std::endl; + std::cerr << "Invalid proxy argument" << std::endl; return false; } } diff --git a/naiveproxy/src/net/tools/naive/naive_config.h b/naiveproxy/src/net/tools/naive/naive_config.h index b157f74f95..186fca1b2f 100644 --- a/naiveproxy/src/net/tools/naive/naive_config.h +++ b/naiveproxy/src/net/tools/naive/naive_config.h @@ -4,16 +4,22 @@ #ifndef NET_TOOLS_NAIVE_NAIVE_CONFIG_H_ #define NET_TOOLS_NAIVE_NAIVE_CONFIG_H_ +#include #include +#include #include #include #include "base/files/file_path.h" #include "base/logging.h" #include "base/values.h" +#include "net/base/auth.h" +#include "net/base/host_port_pair.h" #include "net/base/ip_address.h" +#include "net/base/proxy_chain.h" #include "net/http/http_request_headers.h" #include "net/tools/naive/naive_protocol.h" +#include "url/scheme_host_port.h" namespace net { @@ -37,10 +43,10 @@ struct NaiveConfig { HttpRequestHeaders extra_headers; - std::string proxy_url = "direct://"; - - std::u16string proxy_user; - std::u16string proxy_pass; + // The last server is assumed to be Naive. + ProxyChain proxy_chain = ProxyChain::Direct(); + std::set origins_to_force_quic_on; + std::map auth_store; std::string host_resolver_rules; diff --git a/naiveproxy/src/net/tools/naive/naive_proxy.cc b/naiveproxy/src/net/tools/naive/naive_proxy.cc index 0c50b0de2c..7e07b9f4ac 100644 --- a/naiveproxy/src/net/tools/naive/naive_proxy.cc +++ b/naiveproxy/src/net/tools/naive/naive_proxy.cc @@ -116,8 +116,9 @@ void NaiveProxy::DoConnect() { traffic_annotation_); } else if (protocol_ == ClientProtocol::kHttp) { socket = std::make_unique( - std::move(accepted_socket_), padding_detector_delegate.get(), - traffic_annotation_, supported_padding_types_); + std::move(accepted_socket_), listen_user_, listen_pass_, + padding_detector_delegate.get(), traffic_annotation_, + supported_padding_types_); } else if (protocol_ == ClientProtocol::kRedir) { socket = std::move(accepted_socket_); } else { diff --git a/naiveproxy/src/net/tools/naive/naive_proxy_bin.cc b/naiveproxy/src/net/tools/naive/naive_proxy_bin.cc index c580e0cc4d..892afbdced 100644 --- a/naiveproxy/src/net/tools/naive/naive_proxy_bin.cc +++ b/naiveproxy/src/net/tools/naive/naive_proxy_bin.cc @@ -175,22 +175,11 @@ std::unique_ptr BuildURLRequestContext( builder.DisableHttpCache(); builder.set_net_log(net_log); - std::string proxy_url = config.proxy_url; - bool force_quic = false; - if (proxy_url.compare(0, 7, "quic://") == 0) { - proxy_url.replace(0, 4, "https"); - force_quic = true; - } - ProxyConfig proxy_config; - proxy_config.proxy_rules().ParseFromString(proxy_url); - if (force_quic) { - const ProxyServer& proxy_server = - proxy_config.proxy_rules().single_proxies.First().First(); - proxy_config.proxy_rules().single_proxies.SetSingleProxyChain( - ProxyChain::ForIpProtection({ProxyServer( - ProxyServer::Scheme::SCHEME_QUIC, proxy_server.host_port_pair())})); - } + proxy_config.proxy_rules().type = + net::ProxyConfig::ProxyRules::Type::PROXY_LIST; + proxy_config.proxy_rules().single_proxies.SetSingleProxyChain( + config.proxy_chain); LOG(INFO) << "Proxying via " << proxy_config.proxy_rules().single_proxies.ToDebugString(); auto proxy_service = @@ -209,7 +198,7 @@ std::unique_ptr BuildURLRequestContext( CertVerifier::CreateDefault(std::move(cert_net_fetcher))); builder.set_proxy_delegate(std::make_unique( - config.extra_headers, + config.extra_headers, std::vector{PaddingType::kVariant1, PaddingType::kNone})); if (config.no_post_quantum == true) { @@ -229,22 +218,20 @@ std::unique_ptr BuildURLRequestContext( auto context = builder.Build(); - if (!config.proxy_url.empty() && !config.proxy_user.empty() && - !config.proxy_pass.empty()) { + if (!config.origins_to_force_quic_on.empty()) { + auto* quic = context->quic_context()->params(); + quic->supported_versions = {quic::ParsedQuicVersion::RFCv1()}; + quic->origins_to_force_quic_on.insert( + config.origins_to_force_quic_on.begin(), + config.origins_to_force_quic_on.end()); + } + + for (const auto& [k, v] : config.auth_store) { auto* session = context->http_transaction_factory()->GetSession(); auto* auth_cache = session->http_auth_cache(); - GURL proxy_gurl(proxy_url); - if (force_quic) { - auto* quic = context->quic_context()->params(); - quic->supported_versions = {quic::ParsedQuicVersion::RFCv1()}; - quic->origins_to_force_quic_on.insert( - net::HostPortPair::FromURL(proxy_gurl)); - } - url::SchemeHostPort auth_origin(proxy_gurl); - AuthCredentials credentials(config.proxy_user, config.proxy_pass); - auth_cache->Add(auth_origin, HttpAuth::AUTH_PROXY, + auth_cache->Add(k, HttpAuth::AUTH_PROXY, /*realm=*/{}, HttpAuth::AUTH_SCHEME_BASIC, {}, - /*challenge=*/"Basic", credentials, /*path=*/"/"); + /*challenge=*/"Basic", v, /*path=*/"/"); } return context; diff --git a/naiveproxy/src/net/tools/naive/naive_proxy_delegate.cc b/naiveproxy/src/net/tools/naive/naive_proxy_delegate.cc index ba3313429c..3c246d06f2 100644 --- a/naiveproxy/src/net/tools/naive/naive_proxy_delegate.cc +++ b/naiveproxy/src/net/tools/naive/naive_proxy_delegate.cc @@ -72,8 +72,13 @@ Error NaiveProxyDelegate::OnBeforeTunnelRequest( // protocols. if (proxy_chain.is_direct()) return OK; - CHECK_EQ(proxy_chain.length(), 1u) << "Multi-hop proxy not supported"; - if (proxy_chain.GetProxyServer(chain_index).is_socks()) + const ProxyServer& proxy_server = proxy_chain.GetProxyServer(chain_index); + if (proxy_server.is_socks()) + return OK; + + // Only the last server is attempted for padding + // because proxy chaining will corrupt the padding. + if (chain_index != proxy_chain.length() - 1) return OK; // Sends client-side padding header regardless of server support @@ -83,7 +88,7 @@ Error NaiveProxyDelegate::OnBeforeTunnelRequest( // Enables Fast Open in H2/H3 proxy client socket once the state of server // padding support is known. - if (padding_type_by_server_[proxy_chain].has_value()) { + if (padding_type_by_server_[proxy_server].has_value()) { extra_headers->SetHeader("fastopen", "1"); } extra_headers->MergeFrom(extra_headers_); @@ -123,8 +128,13 @@ Error NaiveProxyDelegate::OnTunnelHeadersReceived( // protocols. if (proxy_chain.is_direct()) return OK; - CHECK_EQ(proxy_chain.length(), 1u) << "Multi-hop proxy not supported"; - if (proxy_chain.GetProxyServer(chain_index).is_socks()) + const ProxyServer& proxy_server = proxy_chain.GetProxyServer(chain_index); + if (proxy_server.is_socks()) + return OK; + + // Only the last server is attempted for padding + // because proxy chaining will corrupt the padding. + if (chain_index != proxy_chain.length() - 1) return OK; // Detects server padding support, even if it changes dynamically. @@ -134,26 +144,23 @@ Error NaiveProxyDelegate::OnTunnelHeadersReceived( return ERR_INVALID_RESPONSE; } std::optional& padding_type = - padding_type_by_server_[proxy_chain]; + padding_type_by_server_[proxy_server]; if (!padding_type.has_value() || padding_type != new_padding_type) { - LOG(INFO) << proxy_chain.ToDebugString() << " negotiated padding type: " + LOG(INFO) << ProxyServerToProxyUri(proxy_server) + << " negotiated padding type: " << ToReadableString(*new_padding_type); padding_type = new_padding_type; } return OK; } -std::optional NaiveProxyDelegate::GetProxyServerPaddingType( +std::optional NaiveProxyDelegate::GetProxyChainPaddingType( const ProxyChain& proxy_chain) { // Not possible to negotiate padding capability given the underlying // protocols. if (proxy_chain.is_direct()) return PaddingType::kNone; - CHECK_EQ(proxy_chain.length(), 1u) << "Multi-hop proxy not supported"; - if (proxy_chain.GetProxyServer(0).is_socks()) - return PaddingType::kNone; - - return padding_type_by_server_[proxy_chain]; + return padding_type_by_server_[proxy_chain.Last()]; } PaddingDetectorDelegate::PaddingDetectorDelegate( @@ -186,7 +193,7 @@ std::optional PaddingDetectorDelegate::GetServerPaddingType() { if (cached_server_padding_type_.has_value()) return cached_server_padding_type_; cached_server_padding_type_ = - naive_proxy_delegate_->GetProxyServerPaddingType(proxy_chain_); + naive_proxy_delegate_->GetProxyChainPaddingType(proxy_chain_); return cached_server_padding_type_; } diff --git a/naiveproxy/src/net/tools/naive/naive_proxy_delegate.h b/naiveproxy/src/net/tools/naive/naive_proxy_delegate.h index b4c2ab8ff3..8cb25b248e 100644 --- a/naiveproxy/src/net/tools/naive/naive_proxy_delegate.h +++ b/naiveproxy/src/net/tools/naive/naive_proxy_delegate.h @@ -44,8 +44,8 @@ class NaiveProxyDelegate : public ProxyDelegate { // This only affects h2 proxy client socket. Error OnBeforeTunnelRequest(const ProxyChain& proxy_chain, - size_t chain_index, - HttpRequestHeaders* extra_headers) override; + size_t chain_index, + HttpRequestHeaders* extra_headers) override; Error OnTunnelHeadersReceived( const ProxyChain& proxy_chain, @@ -56,7 +56,7 @@ class NaiveProxyDelegate : public ProxyDelegate { ProxyResolutionService* proxy_resolution_service) override {} // Returns empty if the padding type has not been negotiated. - std::optional GetProxyServerPaddingType( + std::optional GetProxyChainPaddingType( const ProxyChain& proxy_chain); private: @@ -66,7 +66,7 @@ class NaiveProxyDelegate : public ProxyDelegate { HttpRequestHeaders extra_headers_; // Empty value means padding type has not been negotiated. - std::map> padding_type_by_server_; + std::map> padding_type_by_server_; }; class ClientPaddingDetectorDelegate { diff --git a/naiveproxy/tests/basic.py b/naiveproxy/tests/basic.py index 88c4275ddb..584a7353d6 100644 --- a/naiveproxy/tests/basic.py +++ b/naiveproxy/tests/basic.py @@ -295,3 +295,16 @@ test_naive('HTTP-HTTP-HTTP', 'http://127.0.0.1:{PORT1}', '--log --listen=http://:{PORT1} --proxy=http://127.0.0.1:{PORT2}', '--log --listen=http://:{PORT2} --proxy=http://127.0.0.1:{PORT3}', '--log --listen=http://:{PORT3}') + +test_naive('HTTP-HTTP (with auth)', 'http://127.0.0.1:{PORT1}', + '--log --listen=http://:{PORT1} --proxy=http://hello:world@127.0.0.1:{PORT2}', + '--log --listen=http://hello:world@127.0.0.1:{PORT2}') + +test_naive('HTTPa-HTTPb,HTTPc (chaining with remote loop)', 'http://127.0.0.1:{PORT1}', + '--log --listen=http://:{PORT2}', + '--log --listen=http://:{PORT1} --proxy=http://127.0.0.1:{PORT2},http://127.0.0.1:{PORT2}') + +test_naive('HTTPa-HTTPb,HTTPc (chaining with multiple auth)', 'http://127.0.0.1:{PORT1}', + '--log --listen=http://hello:world2@127.0.0.1:{PORT2}', + '--log --listen=http://hello:world3@127.0.0.1:{PORT3}', + '--log --listen=http://127.0.0.1:{PORT1} --proxy=http://hello:world2@127.0.0.1:{PORT2},http://hello:world3@127.0.0.1:{PORT3}') diff --git a/openwrt-packages/alist/Makefile b/openwrt-packages/alist/Makefile index 8fb6fdade6..0b40dad4eb 100644 --- a/openwrt-packages/alist/Makefile +++ b/openwrt-packages/alist/Makefile @@ -7,13 +7,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=alist -PKG_VERSION:=3.35.0 -PKG_WEB_VERSION:=3.35.0 -PKG_RELEASE:=8 +PKG_VERSION:=3.36.0 +PKG_WEB_VERSION:=3.36.0 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/alist-org/alist/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=e349a178cd41fff9b668e9d8df9ff1b407b7f6d6fd3dbb2f8a7ca9d0d5ecad55 +PKG_HASH:=809072becc16613755c33286c5b19539f81dcb2b40f0c4cd4838c4614946c874 PKG_LICENSE:=GPL-3.0 PKG_LICENSE_FILE:=LICENSE @@ -23,7 +23,7 @@ define Download/$(PKG_NAME)-web FILE:=$(PKG_NAME)-web-$(PKG_WEB_VERSION).tar.gz URL_FILE:=dist.tar.gz URL:=https://github.com/alist-org/alist-web/releases/download/$(PKG_WEB_VERSION)/ - HASH:=940608c2b9f64cf585ad4d241545e5f1e59e5f6e54ef8ea2c9c3a29998313fc7 + HASH:=b997d3ecf92f447cc1daca9b1ae9b9dc3f28445589db3dc054174ecc15a600a9 endef PKG_BUILD_DEPENDS:=golang/host diff --git a/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/app.sh b/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/app.sh index 3ed0b5d859..03dc8c7b1e 100755 --- a/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/app.sh +++ b/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/app.sh @@ -616,6 +616,10 @@ run_chinadns_ng() { ([ -z "${_default_tag}" ] || [ "${_default_tag}" = "smart" ] || [ "${_default_tag}" = "none_noip" ]) && _default_tag="none" echo "default-tag ${_default_tag}" >> ${_CONF_FILE} + [ "${_flag}" = "default" ] && [ "${_default_tag}" = "none" ] && { + echo "verdict-cache 4096" >> ${_CONF_FILE} + } + ln_run "$(first_type chinadns-ng)" chinadns-ng "${_LOG_FILE}" -C ${_CONF_FILE} } diff --git a/ryujinx/src/Ryujinx.Gtk3/UI/Widgets/GameTableContextMenu.cs b/ryujinx/src/Ryujinx.Gtk3/UI/Widgets/GameTableContextMenu.cs index e37906d5bc..a3e3d4c8cd 100644 --- a/ryujinx/src/Ryujinx.Gtk3/UI/Widgets/GameTableContextMenu.cs +++ b/ryujinx/src/Ryujinx.Gtk3/UI/Widgets/GameTableContextMenu.cs @@ -473,7 +473,7 @@ namespace Ryujinx.UI.Widgets private void ManageDlc_Clicked(object sender, EventArgs args) { - new DlcWindow(_virtualFileSystem, _applicationData.IdString, _applicationData).Show(); + new DlcWindow(_virtualFileSystem, _applicationData.IdBaseString, _applicationData).Show(); } private void ManageCheats_Clicked(object sender, EventArgs args) diff --git a/ryujinx/src/Ryujinx.Gtk3/UI/Windows/DlcWindow.cs b/ryujinx/src/Ryujinx.Gtk3/UI/Windows/DlcWindow.cs index b69cc00322..fb3189e1ce 100644 --- a/ryujinx/src/Ryujinx.Gtk3/UI/Windows/DlcWindow.cs +++ b/ryujinx/src/Ryujinx.Gtk3/UI/Windows/DlcWindow.cs @@ -24,7 +24,7 @@ namespace Ryujinx.UI.Windows public class DlcWindow : Window { private readonly VirtualFileSystem _virtualFileSystem; - private readonly string _applicationId; + private readonly string _applicationIdBase; private readonly string _dlcJsonPath; private readonly List _dlcContainerList; @@ -36,16 +36,16 @@ namespace Ryujinx.UI.Windows [GUI] TreeSelection _dlcTreeSelection; #pragma warning restore CS0649, IDE0044 - public DlcWindow(VirtualFileSystem virtualFileSystem, string titleId, ApplicationData applicationData) : this(new Builder("Ryujinx.Gtk3.UI.Windows.DlcWindow.glade"), virtualFileSystem, titleId, applicationData) { } + public DlcWindow(VirtualFileSystem virtualFileSystem, string applicationIdBase, ApplicationData applicationData) : this(new Builder("Ryujinx.Gtk3.UI.Windows.DlcWindow.glade"), virtualFileSystem, applicationIdBase, applicationData) { } - private DlcWindow(Builder builder, VirtualFileSystem virtualFileSystem, string applicationId, ApplicationData applicationData) : base(builder.GetRawOwnedObject("_dlcWindow")) + private DlcWindow(Builder builder, VirtualFileSystem virtualFileSystem, string applicationIdBase, ApplicationData applicationData) : base(builder.GetRawOwnedObject("_dlcWindow")) { builder.Autoconnect(this); - _applicationId = applicationId; + _applicationIdBase = applicationIdBase; _virtualFileSystem = virtualFileSystem; - _dlcJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, _applicationId, "dlc.json"); - _baseTitleInfoLabel.Text = $"DLC Available for {applicationData.Name} [{applicationId.ToUpper()}]"; + _dlcJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, _applicationIdBase, "dlc.json"); + _baseTitleInfoLabel.Text = $"DLC Available for {applicationData.Name} [{applicationIdBase.ToUpper()}]"; try { @@ -163,7 +163,7 @@ namespace Ryujinx.UI.Windows if (nca.Header.ContentType == NcaContentType.PublicData) { - if (nca.GetProgramIdBase() != (ulong.Parse(_applicationId, NumberStyles.HexNumber) & ~0x1FFFUL)) + if (nca.GetProgramIdBase() != ulong.Parse(_applicationIdBase, NumberStyles.HexNumber)) { continue; } diff --git a/ryujinx/src/Ryujinx.Gtk3/UI/Windows/TitleUpdateWindow.cs b/ryujinx/src/Ryujinx.Gtk3/UI/Windows/TitleUpdateWindow.cs index 3ac972eadf..a08f595974 100644 --- a/ryujinx/src/Ryujinx.Gtk3/UI/Windows/TitleUpdateWindow.cs +++ b/ryujinx/src/Ryujinx.Gtk3/UI/Windows/TitleUpdateWindow.cs @@ -51,7 +51,7 @@ namespace Ryujinx.UI.Windows _applicationData = applicationData; _virtualFileSystem = virtualFileSystem; - _updateJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, applicationData.IdString, "updates.json"); + _updateJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, applicationData.IdBaseString, "updates.json"); _radioButtonToPathDictionary = new Dictionary(); try @@ -67,7 +67,7 @@ namespace Ryujinx.UI.Windows }; } - _baseTitleInfoLabel.Text = $"Updates Available for {applicationData.Name} [{applicationData.IdString}]"; + _baseTitleInfoLabel.Text = $"Updates Available for {applicationData.Name} [{applicationData.IdBaseString}]"; // Try to get updates from PFS first AddUpdate(_applicationData.Path, true); diff --git a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ACI0.cs b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ACI0.cs index 9a5b6b0aa0..8d828e8edb 100644 --- a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ACI0.cs +++ b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ACI0.cs @@ -15,6 +15,12 @@ namespace Ryujinx.HLE.Loaders.Npdm public ServiceAccessControl ServiceAccessControl { get; private set; } public KernelAccessControl KernelAccessControl { get; private set; } + /// The stream doesn't contain valid ACI0 data. + /// The stream does not support reading, is , or is already closed. + /// The end of the stream is reached. + /// The stream is closed. + /// An I/O error occurred. + /// The FsAccessHeader.ContentOwnerId section is not implemented. public Aci0(Stream stream, int offset) { stream.Seek(offset, SeekOrigin.Begin); diff --git a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ACID.cs b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ACID.cs index ab30b40cae..57d0ee2743 100644 --- a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ACID.cs +++ b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ACID.cs @@ -19,6 +19,11 @@ namespace Ryujinx.HLE.Loaders.Npdm public ServiceAccessControl ServiceAccessControl { get; private set; } public KernelAccessControl KernelAccessControl { get; private set; } + /// The stream doesn't contain valid ACID data. + /// The stream does not support reading, is , or is already closed. + /// The end of the stream is reached. + /// The stream is closed. + /// An I/O error occurred. public Acid(Stream stream, int offset) { stream.Seek(offset, SeekOrigin.Begin); diff --git a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/FsAccessControl.cs b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/FsAccessControl.cs index f17ca348b1..a369f9f2d5 100644 --- a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/FsAccessControl.cs +++ b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/FsAccessControl.cs @@ -11,6 +11,10 @@ namespace Ryujinx.HLE.Loaders.Npdm public int Unknown3 { get; private set; } public int Unknown4 { get; private set; } + /// The stream does not support reading, is , or is already closed. + /// The end of the stream is reached. + /// The stream is closed. + /// An I/O error occurred. public FsAccessControl(Stream stream, int offset, int size) { stream.Seek(offset, SeekOrigin.Begin); diff --git a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/FsAccessHeader.cs b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/FsAccessHeader.cs index 5987be0ef1..249f8dd9d1 100644 --- a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/FsAccessHeader.cs +++ b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/FsAccessHeader.cs @@ -9,6 +9,12 @@ namespace Ryujinx.HLE.Loaders.Npdm public int Version { get; private set; } public ulong PermissionsBitmask { get; private set; } + /// The stream contains invalid data. + /// The ContentOwnerId section is not implemented. + /// The stream does not support reading, is , or is already closed. + /// The end of the stream is reached. + /// The stream is closed. + /// An I/O error occurred. public FsAccessHeader(Stream stream, int offset, int size) { stream.Seek(offset, SeekOrigin.Begin); diff --git a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/KernelAccessControl.cs b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/KernelAccessControl.cs index 171243799d..979c6f6690 100644 --- a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/KernelAccessControl.cs +++ b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/KernelAccessControl.cs @@ -6,6 +6,10 @@ namespace Ryujinx.HLE.Loaders.Npdm { public int[] Capabilities { get; private set; } + /// The stream does not support reading, is , or is already closed. + /// The end of the stream is reached. + /// The stream is closed. + /// An I/O error occurred. public KernelAccessControl(Stream stream, int offset, int size) { stream.Seek(offset, SeekOrigin.Begin); diff --git a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/Npdm.cs b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/Npdm.cs index 622d7ee034..4a99de98c2 100644 --- a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/Npdm.cs +++ b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/Npdm.cs @@ -24,6 +24,13 @@ namespace Ryujinx.HLE.Loaders.Npdm public Aci0 Aci0 { get; private set; } public Acid Acid { get; private set; } + /// The stream doesn't contain valid NPDM data. + /// The FsAccessHeader.ContentOwnerId section is not implemented. + /// The stream does not support reading, is , or is already closed. + /// An error occured while reading bytes from the stream. + /// The end of the stream is reached. + /// The stream is closed. + /// An I/O error occurred. public Npdm(Stream stream) { BinaryReader reader = new(stream); diff --git a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ServiceAccessControl.cs b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ServiceAccessControl.cs index bb6df27faa..b6bc6492d5 100644 --- a/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ServiceAccessControl.cs +++ b/ryujinx/src/Ryujinx.HLE/Loaders/Npdm/ServiceAccessControl.cs @@ -9,6 +9,11 @@ namespace Ryujinx.HLE.Loaders.Npdm { public IReadOnlyDictionary Services { get; private set; } + /// The stream does not support reading, is , or is already closed. + /// An error occured while reading bytes from the stream. + /// The end of the stream is reached. + /// The stream is closed. + /// An I/O error occurred. public ServiceAccessControl(Stream stream, int offset, int size) { stream.Seek(offset, SeekOrigin.Begin); diff --git a/ryujinx/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs b/ryujinx/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs index da56372096..2928ac7fe5 100644 --- a/ryujinx/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs +++ b/ryujinx/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs @@ -139,7 +139,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions ulong titleIdBase = mainNca.GetProgramIdBase(); // Load update information if exists. - string titleUpdateMetadataPath = Path.Combine(AppDataManager.GamesDirPath, mainNca.Header.TitleId.ToString("x16"), "updates.json"); + string titleUpdateMetadataPath = Path.Combine(AppDataManager.GamesDirPath, titleIdBase.ToString("x16"), "updates.json"); if (File.Exists(titleUpdateMetadataPath)) { updatePath = JsonHelper.DeserializeFromFile(titleUpdateMetadataPath, _applicationSerializerContext.TitleUpdateMetadata).Selected; diff --git a/ryujinx/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs b/ryujinx/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs index bee2572a87..b3590d9bd7 100644 --- a/ryujinx/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs +++ b/ryujinx/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs @@ -118,7 +118,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions device.Configuration.ContentManager.ClearAocData(); // Load DownloadableContents. - string addOnContentMetadataPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, mainNca.Header.TitleId.ToString("x16"), "dlc.json"); + string addOnContentMetadataPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, mainNca.GetProgramIdBase().ToString("x16"), "dlc.json"); if (File.Exists(addOnContentMetadataPath)) { List dlcContainerList = JsonHelper.DeserializeFromFile(addOnContentMetadataPath, _contentSerializerContext.ListDownloadableContentContainer); diff --git a/ryujinx/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs b/ryujinx/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs index 2aefb0db55..4063520039 100644 --- a/ryujinx/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs +++ b/ryujinx/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs @@ -21,6 +21,8 @@ namespace Ryujinx.Horizon.Sdk.OsTypes.Impl public long CurrentTime { get; private set; } + public IEnumerable MultiWaits => _multiWaits; + public MultiWaitImpl() { _multiWaits = new List(); diff --git a/ryujinx/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs b/ryujinx/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs index 0e73e3f883..41d17802a2 100644 --- a/ryujinx/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs +++ b/ryujinx/src/Ryujinx.Horizon/Sdk/OsTypes/MultiWait.cs @@ -1,4 +1,5 @@ using Ryujinx.Horizon.Sdk.OsTypes.Impl; +using System.Collections.Generic; namespace Ryujinx.Horizon.Sdk.OsTypes { @@ -6,6 +7,8 @@ namespace Ryujinx.Horizon.Sdk.OsTypes { private readonly MultiWaitImpl _impl; + public IEnumerable MultiWaits => _impl.MultiWaits; + public MultiWait() { _impl = new MultiWaitImpl(); diff --git a/ryujinx/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs b/ryujinx/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs index 9886e1cbf3..570e3c8028 100644 --- a/ryujinx/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs +++ b/ryujinx/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs @@ -3,6 +3,7 @@ using Ryujinx.Horizon.Sdk.OsTypes; using Ryujinx.Horizon.Sdk.Sf.Cmif; using Ryujinx.Horizon.Sdk.Sm; using System; +using System.Linq; namespace Ryujinx.Horizon.Sdk.Sf.Hipc { @@ -116,6 +117,18 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc while (WaitAndProcessRequestsImpl()) { } + + // Unlink pending sessions, dispose expects them to be already unlinked. + + ServerSession[] serverSessions = Enumerable.OfType(_multiWait.MultiWaits).ToArray(); + + foreach (ServerSession serverSession in serverSessions) + { + if (serverSession.IsLinked) + { + serverSession.UnlinkFromMultiWaitHolder(); + } + } } public void WaitAndProcessRequests() diff --git a/ryujinx/src/Ryujinx.UI.Common/App/ApplicationData.cs b/ryujinx/src/Ryujinx.UI.Common/App/ApplicationData.cs index 7108defc38..08bd2677df 100644 --- a/ryujinx/src/Ryujinx.UI.Common/App/ApplicationData.cs +++ b/ryujinx/src/Ryujinx.UI.Common/App/ApplicationData.cs @@ -42,6 +42,8 @@ namespace Ryujinx.UI.App.Common [JsonIgnore] public ulong IdBase => Id & ~0x1FFFUL; + [JsonIgnore] public string IdBaseString => IdBase.ToString("x16"); + public static string GetBuildId(VirtualFileSystem virtualFileSystem, IntegrityCheckLevel checkLevel, string titleFilePath) { using FileStream file = new(titleFilePath, FileMode.Open, FileAccess.Read); diff --git a/ryujinx/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs b/ryujinx/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs index 2baf060873..e7c48162aa 100644 --- a/ryujinx/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs +++ b/ryujinx/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs @@ -72,37 +72,43 @@ namespace Ryujinx.UI.App.Common return resourceByteArray; } + /// The npdm file doesn't contain valid data. + /// The FsAccessHeader.ContentOwnerId section is not implemented. + /// An error occured while reading bytes from the stream. + /// The end of the stream is reached. + /// An I/O error occurred. private ApplicationData GetApplicationFromExeFs(PartitionFileSystem pfs, string filePath) { ApplicationData data = new() { Icon = _nspIcon, + Path = filePath, }; using UniqueRef npdmFile = new(); - try + Result result = pfs.OpenFile(ref npdmFile.Ref, "/main.npdm".ToU8Span(), OpenMode.Read); + + if (ResultFs.PathNotFound.Includes(result)) { - Result result = pfs.OpenFile(ref npdmFile.Ref, "/main.npdm".ToU8Span(), OpenMode.Read); + Npdm npdm = new(npdmFile.Get.AsStream()); - if (ResultFs.PathNotFound.Includes(result)) - { - Npdm npdm = new(npdmFile.Get.AsStream()); - - data.Name = npdm.TitleName; - data.Id = npdm.Aci0.TitleId; - } - - return data; + data.Name = npdm.TitleName; + data.Id = npdm.Aci0.TitleId; } - catch (Exception exception) - { - Logger.Warning?.Print(LogClass.Application, $"The file encountered was not of a valid type. File: '{filePath}' Error: {exception.Message}"); - return null; - } + return data; } + /// The configured key set is missing a key. + /// The NCA header could not be decrypted. + /// The NCA version is not supported. + /// An error occured while reading PFS data. + /// The npdm file doesn't contain valid data. + /// The FsAccessHeader.ContentOwnerId section is not implemented. + /// An error occured while reading bytes from the stream. + /// The end of the stream is reached. + /// An I/O error occurred. private ApplicationData GetApplicationFromNsp(PartitionFileSystem pfs, string filePath) { bool isExeFs = false; @@ -170,99 +176,88 @@ namespace Ryujinx.UI.App.Common return null; } + /// The configured key set is missing a key. + /// The NCA header could not be decrypted. + /// The NCA version is not supported. + /// An error occured while reading PFS data. private List GetApplicationsFromPfs(IFileSystem pfs, string filePath) { var applications = new List(); string extension = Path.GetExtension(filePath).ToLower(); - try + foreach ((ulong titleId, ContentMetaData content) in pfs.GetContentData(ContentMetaType.Application, _virtualFileSystem, _checkLevel)) { - foreach ((ulong titleId, ContentMetaData content) in pfs.GetContentData(ContentMetaType.Application, _virtualFileSystem, _checkLevel)) + ApplicationData applicationData = new() { - ApplicationData applicationData = new() + Id = titleId, + Path = filePath, + }; + + Nca mainNca = content.GetNcaByType(_virtualFileSystem.KeySet, ContentType.Program); + Nca controlNca = content.GetNcaByType(_virtualFileSystem.KeySet, ContentType.Control); + + BlitStruct controlHolder = new(1); + + IFileSystem controlFs = controlNca?.OpenFileSystem(NcaSectionType.Data, _checkLevel); + + // Check if there is an update available. + if (IsUpdateApplied(mainNca, out IFileSystem updatedControlFs)) + { + // Replace the original ControlFs by the updated one. + controlFs = updatedControlFs; + } + + if (controlFs == null) + { + continue; + } + + ReadControlData(controlFs, controlHolder.ByteSpan); + + GetApplicationInformation(ref controlHolder.Value, ref applicationData); + + // Read the icon from the ControlFS and store it as a byte array + try + { + using UniqueRef icon = new(); + + controlFs.OpenFile(ref icon.Ref, $"/icon_{_desiredTitleLanguage}.dat".ToU8Span(), OpenMode.Read).ThrowIfFailure(); + + using MemoryStream stream = new(); + + icon.Get.AsStream().CopyTo(stream); + applicationData.Icon = stream.ToArray(); + } + catch (HorizonResultException) + { + foreach (DirectoryEntryEx entry in controlFs.EnumerateEntries("/", "*")) { - Id = titleId, - Path = filePath, - }; + if (entry.Name == "control.nacp") + { + continue; + } - Nca mainNca = content.GetNcaByType(_virtualFileSystem.KeySet, ContentType.Program); - Nca controlNca = content.GetNcaByType(_virtualFileSystem.KeySet, ContentType.Control); + using var icon = new UniqueRef(); - BlitStruct controlHolder = new(1); - - IFileSystem controlFs = controlNca?.OpenFileSystem(NcaSectionType.Data, _checkLevel); - - // Check if there is an update available. - if (IsUpdateApplied(mainNca, out IFileSystem updatedControlFs)) - { - // Replace the original ControlFs by the updated one. - controlFs = updatedControlFs; - } - - if (controlFs == null) - { - continue; - } - - ReadControlData(controlFs, controlHolder.ByteSpan); - - GetApplicationInformation(ref controlHolder.Value, ref applicationData); - - // Read the icon from the ControlFS and store it as a byte array - try - { - using UniqueRef icon = new(); - - controlFs.OpenFile(ref icon.Ref, $"/icon_{_desiredTitleLanguage}.dat".ToU8Span(), OpenMode.Read).ThrowIfFailure(); + controlFs.OpenFile(ref icon.Ref, entry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); using MemoryStream stream = new(); icon.Get.AsStream().CopyTo(stream); applicationData.Icon = stream.ToArray(); - } - catch (HorizonResultException) - { - foreach (DirectoryEntryEx entry in controlFs.EnumerateEntries("/", "*")) + + if (applicationData.Icon != null) { - if (entry.Name == "control.nacp") - { - continue; - } - - using var icon = new UniqueRef(); - - controlFs.OpenFile(ref icon.Ref, entry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); - - using MemoryStream stream = new(); - - icon.Get.AsStream().CopyTo(stream); - applicationData.Icon = stream.ToArray(); - - if (applicationData.Icon != null) - { - break; - } + break; } - - applicationData.Icon ??= extension == ".xci" ? _xciIcon : _nspIcon; } - applicationData.ControlHolder = controlHolder; - - applications.Add(applicationData); + applicationData.Icon ??= extension == ".xci" ? _xciIcon : _nspIcon; } - } - catch (MissingKeyException exception) - { - Logger.Warning?.Print(LogClass.Application, $"Your key set is missing a key with the name: {exception.Name}"); - } - catch (InvalidDataException) - { - Logger.Warning?.Print(LogClass.Application, $"The header key is incorrect or missing and therefore the NCA header content type check has failed. Errored File: {filePath}"); - } - catch (Exception exception) - { - Logger.Warning?.Print(LogClass.Application, $"The file encountered was not of a valid type. File: '{filePath}' Error: {exception}"); + + applicationData.ControlHolder = controlHolder; + + applications.Add(applicationData); } return applications; @@ -319,52 +314,43 @@ namespace Ryujinx.UI.App.Common BinaryReader reader = new(file); ApplicationData application = new(); - try + file.Seek(24, SeekOrigin.Begin); + + int assetOffset = reader.ReadInt32(); + + if (Encoding.ASCII.GetString(Read(assetOffset, 4)) == "ASET") { - file.Seek(24, SeekOrigin.Begin); + byte[] iconSectionInfo = Read(assetOffset + 8, 0x10); - int assetOffset = reader.ReadInt32(); + long iconOffset = BitConverter.ToInt64(iconSectionInfo, 0); + long iconSize = BitConverter.ToInt64(iconSectionInfo, 8); - if (Encoding.ASCII.GetString(Read(assetOffset, 4)) == "ASET") + ulong nacpOffset = reader.ReadUInt64(); + ulong nacpSize = reader.ReadUInt64(); + + // Reads and stores game icon as byte array + if (iconSize > 0) { - byte[] iconSectionInfo = Read(assetOffset + 8, 0x10); - - long iconOffset = BitConverter.ToInt64(iconSectionInfo, 0); - long iconSize = BitConverter.ToInt64(iconSectionInfo, 8); - - ulong nacpOffset = reader.ReadUInt64(); - ulong nacpSize = reader.ReadUInt64(); - - // Reads and stores game icon as byte array - if (iconSize > 0) - { - application.Icon = Read(assetOffset + iconOffset, (int)iconSize); - } - else - { - application.Icon = _nroIcon; - } - - // Read the NACP data - Read(assetOffset + (int)nacpOffset, (int)nacpSize).AsSpan().CopyTo(controlHolder.ByteSpan); - - GetApplicationInformation(ref controlHolder.Value, ref application); + application.Icon = Read(assetOffset + iconOffset, (int)iconSize); } else { application.Icon = _nroIcon; - application.Name = Path.GetFileNameWithoutExtension(applicationPath); } - application.ControlHolder = controlHolder; - applications.Add(application); - } - catch - { - Logger.Warning?.Print(LogClass.Application, $"The file encountered was not of a valid type. Errored File: {applicationPath}"); + // Read the NACP data + Read(assetOffset + (int)nacpOffset, (int)nacpSize).AsSpan().CopyTo(controlHolder.ByteSpan); - return false; + GetApplicationInformation(ref controlHolder.Value, ref application); } + else + { + application.Icon = _nroIcon; + application.Name = Path.GetFileNameWithoutExtension(applicationPath); + } + + application.ControlHolder = controlHolder; + applications.Add(application); break; @@ -377,34 +363,21 @@ namespace Ryujinx.UI.App.Common } case ".nca": { - try + ApplicationData application = new(); + + Nca nca = new(_virtualFileSystem.KeySet, new FileStream(applicationPath, FileMode.Open, FileAccess.Read).AsStorage()); + + if (!nca.IsProgram() || nca.IsPatch()) { - ApplicationData application = new(); - - Nca nca = new(_virtualFileSystem.KeySet, new FileStream(applicationPath, FileMode.Open, FileAccess.Read).AsStorage()); - - if (!nca.IsProgram() || nca.IsPatch()) - { - return false; - } - - application.Icon = _ncaIcon; - application.Name = Path.GetFileNameWithoutExtension(applicationPath); - application.ControlHolder = controlHolder; - - applications.Add(application); - } - catch (InvalidDataException) - { - Logger.Warning?.Print(LogClass.Application, $"The NCA header content type check has failed. This is usually because the header key is incorrect or missing. Errored File: {applicationPath}"); - } - catch - { - Logger.Warning?.Print(LogClass.Application, $"The file encountered was not of a valid type. Errored File: {applicationPath}"); - return false; } + application.Icon = _ncaIcon; + application.Name = Path.GetFileNameWithoutExtension(applicationPath); + application.ControlHolder = controlHolder; + + applications.Add(application); + break; } // If its an NSO we just set defaults @@ -417,16 +390,35 @@ namespace Ryujinx.UI.App.Common }; applications.Add(application); + break; } } } + catch (MissingKeyException exception) + { + Logger.Warning?.Print(LogClass.Application, $"Your key set is missing a key with the name: {exception.Name}"); + + return false; + } + catch (InvalidDataException) + { + Logger.Warning?.Print(LogClass.Application, $"The header key is incorrect or missing and therefore the NCA header content type check has failed. Errored File: {applicationPath}"); + + return false; + } catch (IOException exception) { Logger.Warning?.Print(LogClass.Application, exception.Message); return false; } + catch (Exception exception) + { + Logger.Warning?.Print(LogClass.Application, $"The file encountered was not of a valid type. File: '{applicationPath}' Error: {exception}"); + + return false; + } foreach (var data in applications) { diff --git a/ryujinx/src/Ryujinx/AppHost.cs b/ryujinx/src/Ryujinx/AppHost.cs index 8c643f3402..0db8ef4143 100644 --- a/ryujinx/src/Ryujinx/AppHost.cs +++ b/ryujinx/src/Ryujinx/AppHost.cs @@ -367,32 +367,24 @@ namespace Ryujinx.Ava } var colorType = e.IsBgra ? SKColorType.Bgra8888 : SKColorType.Rgba8888; - using var bitmap = new SKBitmap(new SKImageInfo(e.Width, e.Height, colorType, SKAlphaType.Premul)); + using SKBitmap bitmap = new SKBitmap(new SKImageInfo(e.Width, e.Height, colorType, SKAlphaType.Premul)); Marshal.Copy(e.Data, 0, bitmap.GetPixels(), e.Data.Length); - SKBitmap bitmapToSave = null; + using SKBitmap bitmapToSave = new SKBitmap(bitmap.Width, bitmap.Height); + using SKCanvas canvas = new SKCanvas(bitmapToSave); - if (e.FlipX || e.FlipY) - { - bitmapToSave = new SKBitmap(bitmap.Width, bitmap.Height); + canvas.Clear(SKColors.Black); - using var canvas = new SKCanvas(bitmapToSave); + float scaleX = e.FlipX ? -1 : 1; + float scaleY = e.FlipY ? -1 : 1; - canvas.Clear(SKColors.Transparent); + var matrix = SKMatrix.CreateScale(scaleX, scaleY, bitmap.Width / 2f, bitmap.Height / 2f); - float scaleX = e.FlipX ? -1 : 1; - float scaleY = e.FlipY ? -1 : 1; + canvas.SetMatrix(matrix); + canvas.DrawBitmap(bitmap, SKPoint.Empty); - var matrix = SKMatrix.CreateScale(scaleX, scaleY, bitmap.Width / 2f, bitmap.Height / 2f); - - canvas.SetMatrix(matrix); - - canvas.DrawBitmap(bitmap, new SKPoint(e.FlipX ? -bitmap.Width : 0, e.FlipY ? -bitmap.Height : 0)); - } - - SaveBitmapAsPng(bitmapToSave ?? bitmap, path); - bitmapToSave?.Dispose(); + SaveBitmapAsPng(bitmapToSave, path); Logger.Notice.Print(LogClass.Application, $"Screenshot saved to {path}", "Screenshot"); } diff --git a/ryujinx/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/ryujinx/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index 6af4004543..c919a7ad19 100644 --- a/ryujinx/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/ryujinx/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -103,7 +103,7 @@ namespace Ryujinx.Ava.UI.ViewModels _storageProvider = desktop.MainWindow.StorageProvider; } - _downloadableContentJsonPath = Path.Combine(AppDataManager.GamesDirPath, applicationData.IdString, "dlc.json"); + _downloadableContentJsonPath = Path.Combine(AppDataManager.GamesDirPath, applicationData.IdBaseString, "dlc.json"); if (!File.Exists(_downloadableContentJsonPath)) { diff --git a/ryujinx/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/ryujinx/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs index 6382e5ae3d..1acd9bee07 100644 --- a/ryujinx/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs +++ b/ryujinx/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs @@ -88,7 +88,7 @@ namespace Ryujinx.Ava.UI.ViewModels StorageProvider = desktop.MainWindow.StorageProvider; } - TitleUpdateJsonPath = Path.Combine(AppDataManager.GamesDirPath, ApplicationData.IdString, "updates.json"); + TitleUpdateJsonPath = Path.Combine(AppDataManager.GamesDirPath, ApplicationData.IdBaseString, "updates.json"); try { @@ -96,7 +96,7 @@ namespace Ryujinx.Ava.UI.ViewModels } catch { - Logger.Warning?.Print(LogClass.Application, $"Failed to deserialize title update data for {ApplicationData.IdString} at {TitleUpdateJsonPath}"); + Logger.Warning?.Print(LogClass.Application, $"Failed to deserialize title update data for {ApplicationData.IdBaseString} at {TitleUpdateJsonPath}"); TitleUpdateWindowData = new TitleUpdateMetadata { diff --git a/ryujinx/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs b/ryujinx/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs index 72cd963192..ab04fd68fa 100644 --- a/ryujinx/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs +++ b/ryujinx/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs @@ -38,7 +38,7 @@ namespace Ryujinx.Ava.UI.Windows SecondaryButtonText = "", CloseButtonText = "", Content = new DownloadableContentManagerWindow(virtualFileSystem, applicationData), - Title = string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowTitle], applicationData.Name, applicationData.IdString), + Title = string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowTitle], applicationData.Name, applicationData.IdBaseString), }; Style bottomBorder = new(x => x.OfType().Name("DialogSpace").Child().OfType()); diff --git a/ryujinx/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs b/ryujinx/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs index 8de5cb145c..af917e7f33 100644 --- a/ryujinx/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs +++ b/ryujinx/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs @@ -40,7 +40,7 @@ namespace Ryujinx.Ava.UI.Windows SecondaryButtonText = "", CloseButtonText = "", Content = new TitleUpdateWindow(virtualFileSystem, applicationData), - Title = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.GameUpdateWindowHeading, applicationData.Name, applicationData.IdString), + Title = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.GameUpdateWindowHeading, applicationData.Name, applicationData.IdBaseString), }; Style bottomBorder = new(x => x.OfType().Name("DialogSpace").Child().OfType()); diff --git a/small/chinadns-ng/Makefile b/small/chinadns-ng/Makefile index c643fab561..a41bca881b 100644 --- a/small/chinadns-ng/Makefile +++ b/small/chinadns-ng/Makefile @@ -3,38 +3,38 @@ include $(TOPDIR)/rules.mk PKG_NAME:=chinadns-ng -PKG_VERSION:=2024.07.20 +PKG_VERSION:=2024.07.21 PKG_RELEASE:=1 ifeq ($(ARCH),aarch64) ifeq ($(BOARD),rockchip) PKG_ARCH:=chinadns-ng+wolfssl@aarch64-linux-musl@generic+v8a@fast+lto - PKG_HASH:=605cdcf46b2b82a4c4989747e5e16b577a5b42574d0432d1ff0bc689daa62124 + PKG_HASH:=1a65fadc48956231eba439efd9ae914f6e5eb0f5d257a34cd8c6b0d5734ade57 else PKG_ARCH:=chinadns-ng+wolfssl_noasm@aarch64-linux-musl@generic+v8a@fast+lto - PKG_HASH:=dfa60cf7cdac7bd4ccfc9d3ed4bc99e8a8ed4e8542e42dacfb2daa2ca9e0fc85 + PKG_HASH:=9414c8f237b8a919d411fb38a7d2aa83c7617ae441695af54ea84feb22b0639c endif else ifeq ($(ARCH),arm) ARM_CPU_FEATURES:=$(word 2,$(subst +,$(space),$(call qstrip,$(CONFIG_CPU_TYPE)))) ifeq ($(ARM_CPU_FEATURES),) PKG_ARCH:=chinadns-ng+wolfssl@arm-linux-musleabi@generic+v6+soft_float@fast+lto - PKG_HASH:=873bb30baf21372860652dbff40a08cfbf5b727e1150e63fd81fa0f262f6091a + PKG_HASH:=d9095d72dba4018c21ab794c81e467011eee8b3582822a3fa45b803bfdf0d4fa else PKG_ARCH:=chinadns-ng+wolfssl@arm-linux-musleabihf@generic+v7a@fast+lto - PKG_HASH:=228a4d46d5f16b6cf7d6bb3aa03838dfdee0ffd62ad6f23d22b2d0d0294f719c + PKG_HASH:=61fff30848f687d93e58bb91029252818d76e0980d4d32fd2bf6d67dfa51cd4f endif else ifeq ($(ARCH),mips) PKG_ARCH:=chinadns-ng+wolfssl@mips-linux-musl@mips32+soft_float@fast+lto - PKG_HASH:=35c70189394e55c1f71b1b35ac8bece1fa82d45c28dbd31fcda7cf47c676df8a + PKG_HASH:=1b804d4c450d10cb6f91ac0656121bf9fd3e499f15ea569770b8d5523d5290c2 else ifeq ($(ARCH),mipsel) PKG_ARCH:=chinadns-ng+wolfssl@mipsel-linux-musl@mips32+soft_float@fast+lto - PKG_HASH:=bf399fd12935b5982d054ce531d3a70f19f1f2fbf26c4c5b8a934ce3538699d0 + PKG_HASH:=82d07d148e2c20d4247df7baa0421f1c365954c0953e0e0fbe76e1cd78d1f1b2 else ifeq ($(ARCH),i386) PKG_ARCH:=chinadns-ng+wolfssl@i386-linux-musl@i686@fast+lto - PKG_HASH:=c43cce76dd63f4dd1a938718dc3a7360b72814ec12893aa4af1a63ca2a6d46aa + PKG_HASH:=8fd1f8cc1ee5f24a10a45367d3444a7af0618f01bf5ea1d14c8bfac856062a23 else ifeq ($(ARCH),x86_64) PKG_ARCH:=chinadns-ng+wolfssl@x86_64-linux-musl@x86_64@fast+lto - PKG_HASH:=6c89e28872ddfa5fc134e6505795a3a84c7bc2efee078446159318832504402c + PKG_HASH:=8d600757acf4fcb6250aef6ba5bf19d9a2182a188e900d1201381ab0a52a5463 else PKG_HASH:=dummy endif diff --git a/small/luci-app-passwall/root/usr/share/passwall/app.sh b/small/luci-app-passwall/root/usr/share/passwall/app.sh index 3ed0b5d859..03dc8c7b1e 100755 --- a/small/luci-app-passwall/root/usr/share/passwall/app.sh +++ b/small/luci-app-passwall/root/usr/share/passwall/app.sh @@ -616,6 +616,10 @@ run_chinadns_ng() { ([ -z "${_default_tag}" ] || [ "${_default_tag}" = "smart" ] || [ "${_default_tag}" = "none_noip" ]) && _default_tag="none" echo "default-tag ${_default_tag}" >> ${_CONF_FILE} + [ "${_flag}" = "default" ] && [ "${_default_tag}" = "none" ] && { + echo "verdict-cache 4096" >> ${_CONF_FILE} + } + ln_run "$(first_type chinadns-ng)" chinadns-ng "${_LOG_FILE}" -C ${_CONF_FILE} } diff --git a/small/v2ray-geodata/Makefile b/small/v2ray-geodata/Makefile index 361097e1c5..5fc03b9162 100644 --- a/small/v2ray-geodata/Makefile +++ b/small/v2ray-geodata/Makefile @@ -21,13 +21,13 @@ define Download/geoip HASH:=8128db0c1431f4c6854dfb7740b497ee0ac73f0f3a52a1e0040c508f7d79c0a4 endef -GEOSITE_VER:=20240713050854 +GEOSITE_VER:=20240720181558 GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER) define Download/geosite URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/ URL_FILE:=dlc.dat FILE:=$(GEOSITE_FILE) - HASH:=dbaba085b1de1b8b875f3db78fb367aef080f24993af01abe21f4d4ba99048be + HASH:=873ad7f4ad185ba7a70c5addbfd064703f22a7a8e4e21e4114a8ea98da7dd5ad endef GEOSITE_IRAN_VER:=202407201213 diff --git a/v2rayn/v2rayN/v2rayN/App.xaml b/v2rayn/v2rayN/v2rayN/App.xaml index 42e6dffc98..6d9ea12a9e 100644 --- a/v2rayn/v2rayN/v2rayN/App.xaml +++ b/v2rayn/v2rayN/v2rayN/App.xaml @@ -1,9 +1,9 @@  diff --git a/v2rayn/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayn/v2rayN/v2rayN/Handler/ConfigHandler.cs index 5b6268858f..eb18382f8c 100644 --- a/v2rayn/v2rayN/v2rayN/Handler/ConfigHandler.cs +++ b/v2rayn/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -1066,11 +1066,11 @@ namespace v2rayN.Handler return 0; } - public static int AddCustomServer4Multiple(Config config, List selecteds, out string indexId) + public static int AddCustomServer4Multiple(Config config, List selecteds, ECoreType coreType, out string indexId) { indexId = Utils.GetMD5(Global.CoreMultipleLoadConfigFileName); string configPath = Utils.GetConfigPath(Global.CoreMultipleLoadConfigFileName); - if (CoreConfigHandler.GenerateClientMultipleLoadConfig(config, configPath, selecteds, out string msg) != 0) + if (CoreConfigHandler.GenerateClientMultipleLoadConfig(config, configPath, selecteds, coreType, out string msg) != 0) { return -1; } @@ -1083,10 +1083,10 @@ namespace v2rayN.Handler var profileItem = LazyConfig.Instance.GetProfileItem(indexId) ?? new(); profileItem.indexId = indexId; - profileItem.remarks = "Multi-server Config"; + profileItem.remarks = coreType == ECoreType.sing_box ? Resx.ResUI.menuSetDefaultMultipleServer : Resx.ResUI.menuSetDefaultLoadBalanceServer; profileItem.address = Global.CoreMultipleLoadConfigFileName; profileItem.configType = EConfigType.Custom; - profileItem.coreType = ECoreType.sing_box; + profileItem.coreType = coreType; AddServerCommon(config, profileItem, true); diff --git a/v2rayn/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigHandler.cs b/v2rayn/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigHandler.cs index e42f15af31..b1b810ddc7 100644 --- a/v2rayn/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigHandler.cs +++ b/v2rayn/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigHandler.cs @@ -150,13 +150,25 @@ namespace v2rayN.Handler.CoreConfig return 0; } - public static int GenerateClientMultipleLoadConfig(Config config, string fileName, List selecteds, out string msg) + public static int GenerateClientMultipleLoadConfig(Config config, string fileName, List selecteds, ECoreType coreType, out string msg) { - if (new CoreConfigSingbox(config).GenerateClientMultipleLoadConfig(selecteds, out SingboxConfig? singboxConfig, out msg) != 0) + msg = ResUI.CheckServerSettings; + if (coreType == ECoreType.sing_box) { - return -1; + if (new CoreConfigSingbox(config).GenerateClientMultipleLoadConfig(selecteds, out SingboxConfig? singboxConfig, out msg) != 0) + { + return -1; + } + JsonUtils.ToFile(singboxConfig, fileName, false); + } + else if (coreType == ECoreType.Xray) + { + if (new CoreConfigV2ray(config).GenerateClientMultipleLoadConfig(selecteds, out V2rayConfig? v2rayConfig, out msg) != 0) + { + return -1; + } + JsonUtils.ToFile(v2rayConfig, fileName, false); } - JsonUtils.ToFile(singboxConfig, fileName, false); return 0; } diff --git a/v2rayn/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigV2ray.cs b/v2rayn/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigV2ray.cs index 3323e445db..1ab89542ac 100644 --- a/v2rayn/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigV2ray.cs +++ b/v2rayn/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigV2ray.cs @@ -71,6 +71,130 @@ namespace v2rayN.Handler.CoreConfig return 0; } + public int GenerateClientMultipleLoadConfig(List selecteds, out V2rayConfig? v2rayConfig, out string msg) + { + v2rayConfig = null; + try + { + if (_config == null) + { + msg = ResUI.CheckServerSettings; + return -1; + } + + msg = ResUI.InitialConfiguration; + + string result = Utils.GetEmbedText(Global.V2raySampleClient); + string txtOutbound = Utils.GetEmbedText(Global.V2raySampleOutbound); + if (Utils.IsNullOrEmpty(result) || txtOutbound.IsNullOrEmpty()) + { + msg = ResUI.FailedGetDefaultConfiguration; + return -1; + } + + v2rayConfig = JsonUtils.Deserialize(result); + if (v2rayConfig == null) + { + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + + GenLog(v2rayConfig); + GenInbounds(v2rayConfig); + GenRouting(v2rayConfig); + GenDns(null, v2rayConfig); + GenStatistic(v2rayConfig); + v2rayConfig.outbounds.RemoveAt(0); + + var tagProxy = new List(); + foreach (var it in selecteds) + { + if (it.configType == EConfigType.Custom) + { + continue; + } + if (it.configType is EConfigType.Hysteria2 or EConfigType.Tuic or EConfigType.Wireguard) + { + continue; + } + if (it.port <= 0) + { + continue; + } + var item = LazyConfig.Instance.GetProfileItem(it.indexId); + if (item is null) + { + continue; + } + if (it.configType is EConfigType.VMess or EConfigType.VLESS) + { + if (Utils.IsNullOrEmpty(item.id) || !Utils.IsGuidByParse(item.id)) + { + continue; + } + } + if (item.configType == EConfigType.Shadowsocks + && !Global.SsSecuritiesInSingbox.Contains(item.security)) + { + continue; + } + if (item.configType == EConfigType.VLESS && !Global.Flows.Contains(item.flow)) + { + continue; + } + + //outbound + var outbound = JsonUtils.Deserialize(txtOutbound); + GenOutbound(item, outbound); + outbound.tag = $"{Global.ProxyTag}-{tagProxy.Count + 1}"; + v2rayConfig.outbounds.Add(outbound); + tagProxy.Add(outbound.tag); + } + if (tagProxy.Count <= 0) + { + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + + //add balancers + var balancer = new BalancersItem4Ray + { + selector = [Global.ProxyTag], + strategy = new() { type = "roundRobin" }, + tag = $"{Global.ProxyTag}-round", + }; + v2rayConfig.routing.balancers = [balancer]; + + //add rule + var rules = v2rayConfig.routing.rules.Where(t => t.outboundTag == Global.ProxyTag).ToList(); + if (rules?.Count > 0) + { + foreach (var rule in rules) + { + rule.outboundTag = null; + rule.balancerTag = balancer.tag; + } + } + else + { + v2rayConfig.routing.rules.Add(new() + { + network = "tcp,udp", + balancerTag = balancer.tag, + type = "field" + }); + } + + return 0; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + } + public int GenerateClientSpeedtestConfig(List selecteds, out V2rayConfig? v2rayConfig, out string msg) { v2rayConfig = null; @@ -897,7 +1021,7 @@ namespace v2rayN.Handler.CoreConfig return 0; } - private int GenDns(ProfileItem node, V2rayConfig v2rayConfig) + private int GenDns(ProfileItem? node, V2rayConfig v2rayConfig) { try { @@ -960,8 +1084,10 @@ namespace v2rayN.Handler.CoreConfig return 0; } - private int GenDnsDomains(ProfileItem node, JsonNode dns) + private int GenDnsDomains(ProfileItem? node, JsonNode dns) { + if (node == null) + { return 0; } var servers = dns["servers"]; if (servers != null) { diff --git a/v2rayn/v2rayN/v2rayN/Handler/CoreHandler.cs b/v2rayn/v2rayN/v2rayN/Handler/CoreHandler.cs index 45cd76f0f3..f21f9dac86 100644 --- a/v2rayn/v2rayN/v2rayN/Handler/CoreHandler.cs +++ b/v2rayn/v2rayN/v2rayN/Handler/CoreHandler.cs @@ -27,8 +27,8 @@ namespace v2rayN.Handler Environment.SetEnvironmentVariable("xray.location.asset", Utils.GetBinPath(""), EnvironmentVariableTarget.Process); } - public void LoadCore(ProfileItem? node) { - + public void LoadCore(ProfileItem? node) + { if (node == null) { ShowMsg(false, ResUI.CheckServerSettings); diff --git a/v2rayn/v2rayN/v2rayN/Handler/DownloadHandle.cs b/v2rayn/v2rayN/v2rayN/Handler/DownloadHandle.cs index 51dca5eff3..ac224e1884 100644 --- a/v2rayn/v2rayN/v2rayN/Handler/DownloadHandle.cs +++ b/v2rayn/v2rayN/v2rayN/Handler/DownloadHandle.cs @@ -294,12 +294,16 @@ namespace v2rayN.Handler UseProxy = webProxy != null }); - var timer = Stopwatch.StartNew(); - - await client.GetAsync(url, cts.Token); - - timer.Stop(); - responseTime = (int)timer.Elapsed.TotalMilliseconds; + List oneTime = []; + for (int i = 0; i < 2; i++) + { + var timer = Stopwatch.StartNew(); + await client.GetAsync(url, cts.Token); + timer.Stop(); + oneTime.Add((int)timer.Elapsed.TotalMilliseconds); + await Task.Delay(100); + } + responseTime = oneTime.Where(x => x > 0).OrderBy(x => x).FirstOrDefault(); } catch //(Exception ex) { diff --git a/v2rayn/v2rayN/v2rayN/Handler/MainFormHandler.cs b/v2rayn/v2rayN/v2rayN/Handler/MainFormHandler.cs index 6c60534a35..7942ffd1ed 100644 --- a/v2rayn/v2rayN/v2rayN/Handler/MainFormHandler.cs +++ b/v2rayn/v2rayN/v2rayN/Handler/MainFormHandler.cs @@ -240,7 +240,7 @@ namespace v2rayN.Handler { if (wParam == IntPtr.Zero && Marshal.PtrToStringUni(lParam) == "ImmersiveColorSet") { - update(!Utils.IsLightTheme()); + update(!Utils.IsLightTheme()); } } } diff --git a/v2rayn/v2rayN/v2rayN/Models/ProfileItem.cs b/v2rayn/v2rayN/v2rayN/Models/ProfileItem.cs index aea244e84c..8fb05bad6f 100644 --- a/v2rayn/v2rayN/v2rayN/Models/ProfileItem.cs +++ b/v2rayn/v2rayN/v2rayN/Models/ProfileItem.cs @@ -49,7 +49,7 @@ namespace v2rayN.Models switch (configType) { case EConfigType.Custom: - summary += string.Format("{0}", remarks); + summary += string.Format("[{1}]{0}", remarks, coreType.ToString()); break; default: diff --git a/v2rayn/v2rayN/v2rayN/Models/V2rayConfig.cs b/v2rayn/v2rayN/v2rayN/Models/V2rayConfig.cs index 750aea84a1..b86f4720b5 100644 --- a/v2rayn/v2rayN/v2rayN/Models/V2rayConfig.cs +++ b/v2rayn/v2rayN/v2rayN/Models/V2rayConfig.cs @@ -392,6 +392,8 @@ namespace v2rayN.Models /// /// public List rules { get; set; } + + public List? balancers { get; set; } } [Serializable] @@ -406,6 +408,8 @@ namespace v2rayN.Models public string? outboundTag { get; set; } + public string? balancerTag { get; set; } + public List? ip { get; set; } public List? domain { get; set; } @@ -413,6 +417,18 @@ namespace v2rayN.Models public List? protocol { get; set; } } + public class BalancersItem4Ray + { + public List? selector { get; set; } + public BalancersStrategy4Ray? strategy { get; set; } + public string? tag { get; set; } + } + + public class BalancersStrategy4Ray + { + public string? type { get; set; } + } + public class StreamSettings4Ray { /// diff --git a/v2rayn/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayn/v2rayN/v2rayN/Resx/ResUI.Designer.cs index ee5ab7da41..989cb3013b 100644 --- a/v2rayn/v2rayN/v2rayN/Resx/ResUI.Designer.cs +++ b/v2rayn/v2rayN/v2rayN/Resx/ResUI.Designer.cs @@ -1249,7 +1249,16 @@ namespace v2rayN.Resx { } /// - /// 查找类似 Multi-server set to active 的本地化字符串。 + /// 查找类似 Multi-server load balancing 的本地化字符串。 + /// + public static string menuSetDefaultLoadBalanceServer { + get { + return ResourceManager.GetString("menuSetDefaultLoadBalanceServer", resourceCulture); + } + } + + /// + /// 查找类似 Multi-Server Preferred Latency 的本地化字符串。 /// public static string menuSetDefaultMultipleServer { get { diff --git a/v2rayn/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayn/v2rayN/v2rayN/Resx/ResUI.resx index 3808267ed7..fa1a8043a7 100644 --- a/v2rayn/v2rayN/v2rayN/Resx/ResUI.resx +++ b/v2rayn/v2rayN/v2rayN/Resx/ResUI.resx @@ -241,10 +241,10 @@ Is unpacking...... - Update subscription end + Update subscriptions end - Update subscription starts + Update subscriptions start Update Core successfully @@ -452,16 +452,16 @@ Update current subscription with proxy - Subscription group + Subscription Group Subscription group settings - Update subscription without proxy + Update subscriptions without proxy - Update subscription with proxy + Update subscriptions with proxy System proxy @@ -575,7 +575,7 @@ Share - Enabled Update + Enable update Sort @@ -917,7 +917,7 @@ Support DnsObject, Click to view the document - Group please leave blank here + For group please leave blank here Routing setting is changed @@ -1037,13 +1037,13 @@ Restart as Administrator - More urls, separated by commas;Subscription conversion will be invalid + More URLs, separated by commas; Subscription conversion will be invalid {0} : {1}/s↑ | {2}/s↓ - Automatic update interval(minutes) + Automatic update interval (minutes) Enable logging to file @@ -1247,9 +1247,12 @@ Default domain strategy for outbound - Multi-server set to active + Multi-Server Preferred Latency Main layout orientation(Require restart) + + Multi-server load balancing + \ No newline at end of file diff --git a/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx index e0f6e20b97..b07937e57a 100644 --- a/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx +++ b/v2rayn/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx @@ -1244,9 +1244,12 @@ Outbound默认解析策略 - 多服务器设为活动(多选) + 多服务器优选延迟 (多选) 主界面布局方向(需重启) + + 多服务器负载均衡 (多选) + \ No newline at end of file diff --git a/v2rayn/v2rayN/v2rayN/ViewModels/ClashProxiesViewModel.cs b/v2rayn/v2rayN/v2rayN/ViewModels/ClashProxiesViewModel.cs index 22e34cc749..42242333b9 100644 --- a/v2rayn/v2rayN/v2rayN/ViewModels/ClashProxiesViewModel.cs +++ b/v2rayn/v2rayN/v2rayN/ViewModels/ClashProxiesViewModel.cs @@ -187,7 +187,7 @@ namespace v2rayN.ViewModels { ClashApiHandler.Instance.GetClashProxies(_config, (it, it2) => { - UpdateHandler(false, "Refresh Clash Proxies"); + //UpdateHandler(false, "Refresh Clash Proxies"); proxies = it?.proxies; providers = it2?.providers; @@ -413,7 +413,7 @@ namespace v2rayN.ViewModels private void ProxiesDelayTest(bool blAll) { - UpdateHandler(false, "Clash Proxies Latency Test"); + //UpdateHandler(false, "Clash Proxies Latency Test"); ClashApiHandler.Instance.ClashProxiesDelayTest(blAll, _proxyDetails.ToList(), (item, result) => { diff --git a/v2rayn/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs b/v2rayn/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs index e63bf61f3a..c9a5426d4b 100644 --- a/v2rayn/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs +++ b/v2rayn/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs @@ -736,7 +736,7 @@ namespace v2rayN.ViewModels public void TestServerAvailability() { var item = ConfigHandler.GetDefaultServer(_config); - if (item == null || item.configType == EConfigType.Custom) + if (item == null) { return; } @@ -1293,4 +1293,4 @@ namespace v2rayN.ViewModels #endregion UI } -} \ No newline at end of file +} diff --git a/v2rayn/v2rayN/v2rayN/ViewModels/ProfilesViewModel.cs b/v2rayn/v2rayN/v2rayN/ViewModels/ProfilesViewModel.cs index 616f831433..bfd5365c9c 100644 --- a/v2rayn/v2rayN/v2rayN/ViewModels/ProfilesViewModel.cs +++ b/v2rayn/v2rayN/v2rayN/ViewModels/ProfilesViewModel.cs @@ -74,6 +74,7 @@ namespace v2rayN.ViewModels public ReactiveCommand SetDefaultServerCmd { get; } public ReactiveCommand ShareServerCmd { get; } public ReactiveCommand SetDefaultMultipleServerCmd { get; } + public ReactiveCommand SetDefaultLoadBalanceServerCmd { get; } //servers move public ReactiveCommand MoveTopCmd { get; } @@ -170,8 +171,13 @@ namespace v2rayN.ViewModels }, canEditRemove); SetDefaultMultipleServerCmd = ReactiveCommand.Create(() => { - SetDefaultMultipleServer(); + SetDefaultMultipleServer(ECoreType.sing_box); }, canEditRemove); + SetDefaultLoadBalanceServerCmd = ReactiveCommand.Create(() => + { + SetDefaultMultipleServer(ECoreType.Xray); + }, canEditRemove); + //servers move MoveTopCmd = ReactiveCommand.Create(() => { @@ -612,14 +618,14 @@ namespace v2rayN.ViewModels await DialogHost.Show(dialog, "RootDialog"); } - private void SetDefaultMultipleServer() + private void SetDefaultMultipleServer(ECoreType coreType) { if (GetProfileItems(out List lstSelecteds, true) < 0) { return; } - if (ConfigHandler.AddCustomServer4Multiple(_config, lstSelecteds, out string indexId) != 0) + if (ConfigHandler.AddCustomServer4Multiple(_config, lstSelecteds, coreType, out string indexId) != 0) { _noticeHandler?.Enqueue(ResUI.OperationFailed); return; diff --git a/v2rayn/v2rayN/v2rayN/Views/AddServerWindow.xaml.cs b/v2rayn/v2rayN/v2rayN/Views/AddServerWindow.xaml.cs index 745572b5b1..a5503e0270 100644 --- a/v2rayn/v2rayN/v2rayN/Views/AddServerWindow.xaml.cs +++ b/v2rayn/v2rayN/v2rayN/Views/AddServerWindow.xaml.cs @@ -16,8 +16,6 @@ namespace v2rayN.Views { InitializeComponent(); - - this.Owner = Application.Current.MainWindow; this.Loaded += Window_Loaded; cmbNetwork.SelectionChanged += CmbNetwork_SelectionChanged; diff --git a/v2rayn/v2rayN/v2rayN/Views/ClashConnectionsView.xaml b/v2rayn/v2rayN/v2rayN/Views/ClashConnectionsView.xaml index cde13d4eab..11590e8821 100644 --- a/v2rayn/v2rayN/v2rayN/Views/ClashConnectionsView.xaml +++ b/v2rayn/v2rayN/v2rayN/Views/ClashConnectionsView.xaml @@ -1,12 +1,11 @@ @@ -55,7 +54,7 @@ Text="{x:Static resx:ResUI.TbAutoRefresh}" /> diff --git a/v2rayn/v2rayN/v2rayN/Views/ClashProxiesView.xaml b/v2rayn/v2rayN/v2rayN/Views/ClashProxiesView.xaml index efa973d1c0..36c0bc7af7 100644 --- a/v2rayn/v2rayN/v2rayN/Views/ClashProxiesView.xaml +++ b/v2rayn/v2rayN/v2rayN/Views/ClashProxiesView.xaml @@ -1,12 +1,12 @@ @@ -49,7 +49,7 @@ @@ -81,7 +81,7 @@ Text="{x:Static resx:ResUI.TbAutoRefresh}" /> diff --git a/v2rayn/v2rayN/v2rayN/Views/DNSSettingWindow.xaml.cs b/v2rayn/v2rayN/v2rayN/Views/DNSSettingWindow.xaml.cs index b7b2a5c794..62a6cf1936 100644 --- a/v2rayn/v2rayN/v2rayN/Views/DNSSettingWindow.xaml.cs +++ b/v2rayn/v2rayN/v2rayN/Views/DNSSettingWindow.xaml.cs @@ -15,7 +15,6 @@ namespace v2rayN.Views { InitializeComponent(); - this.Owner = Application.Current.MainWindow; _config = LazyConfig.Instance.GetConfig(); diff --git a/v2rayn/v2rayN/v2rayN/Views/GlobalHotkeySettingWindow.xaml.cs b/v2rayn/v2rayN/v2rayN/Views/GlobalHotkeySettingWindow.xaml.cs index 6909090878..8fbe8f2f8e 100644 --- a/v2rayn/v2rayN/v2rayN/Views/GlobalHotkeySettingWindow.xaml.cs +++ b/v2rayn/v2rayN/v2rayN/Views/GlobalHotkeySettingWindow.xaml.cs @@ -18,7 +18,6 @@ namespace v2rayN.Views { InitializeComponent(); - this.Owner = Application.Current.MainWindow; _config = LazyConfig.Instance.GetConfig(); _config.globalHotkeys ??= new List(); diff --git a/v2rayn/v2rayN/v2rayN/Views/ProfilesView.xaml b/v2rayn/v2rayN/v2rayN/Views/ProfilesView.xaml index a1c357af9e..15051537b6 100644 --- a/v2rayn/v2rayN/v2rayN/Views/ProfilesView.xaml +++ b/v2rayn/v2rayN/v2rayN/Views/ProfilesView.xaml @@ -115,10 +115,16 @@ x:Name="menuShareServer" Height="{StaticResource MenuItemHeight}" Header="{x:Static resx:ResUI.menuShareServer}" /> + + + vm.SetDefaultServerCmd, v => v.menuSetDefaultServer).DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.ShareServerCmd, v => v.menuShareServer).DisposeWith(disposables); this.BindCommand(ViewModel, vm => vm.SetDefaultMultipleServerCmd, v => v.menuSetDefaultMultipleServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SetDefaultLoadBalanceServerCmd, v => v.menuSetDefaultLoadBalanceServer).DisposeWith(disposables); //servers move this.OneWayBind(ViewModel, vm => vm.SubItems, v => v.cmbMoveToGroup.ItemsSource).DisposeWith(disposables); diff --git a/v2rayn/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs b/v2rayn/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs index 41b69e692f..afc6a55fe3 100644 --- a/v2rayn/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs +++ b/v2rayn/v2rayN/v2rayN/Views/RoutingRuleDetailsWindow.xaml.cs @@ -12,8 +12,6 @@ namespace v2rayN.Views { InitializeComponent(); - - this.Owner = Application.Current.MainWindow; this.Loaded += Window_Loaded; clbProtocol.SelectionChanged += ClbProtocol_SelectionChanged; diff --git a/v2rayn/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml.cs b/v2rayn/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml.cs index b0e0cbe1c1..a7f55e21cf 100644 --- a/v2rayn/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml.cs +++ b/v2rayn/v2rayN/v2rayN/Views/RoutingRuleSettingWindow.xaml.cs @@ -14,8 +14,6 @@ namespace v2rayN.Views { InitializeComponent(); - - this.Owner = Application.Current.MainWindow; this.Loaded += Window_Loaded; this.PreviewKeyDown += RoutingRuleSettingWindow_PreviewKeyDown; diff --git a/v2rayn/v2rayN/v2rayN/Views/RoutingSettingWindow.xaml.cs b/v2rayn/v2rayN/v2rayN/Views/RoutingSettingWindow.xaml.cs index 5575ddd5f9..829000e9c2 100644 --- a/v2rayn/v2rayN/v2rayN/Views/RoutingSettingWindow.xaml.cs +++ b/v2rayn/v2rayN/v2rayN/Views/RoutingSettingWindow.xaml.cs @@ -13,8 +13,6 @@ namespace v2rayN.Views { InitializeComponent(); - - this.Owner = Application.Current.MainWindow; this.Closing += RoutingSettingWindow_Closing; this.PreviewKeyDown += RoutingSettingWindow_PreviewKeyDown; diff --git a/v2rayn/v2rayN/v2rayN/Views/SubEditWindow.xaml.cs b/v2rayn/v2rayN/v2rayN/Views/SubEditWindow.xaml.cs index 2baecd87ac..16b9baf459 100644 --- a/v2rayn/v2rayN/v2rayN/Views/SubEditWindow.xaml.cs +++ b/v2rayn/v2rayN/v2rayN/Views/SubEditWindow.xaml.cs @@ -12,8 +12,6 @@ namespace v2rayN.Views { InitializeComponent(); - - this.Owner = Application.Current.MainWindow; this.Loaded += Window_Loaded; diff --git a/v2rayn/v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs b/v2rayn/v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs index 5b2d431ea4..ee7137da78 100644 --- a/v2rayn/v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs +++ b/v2rayn/v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs @@ -14,8 +14,6 @@ namespace v2rayN.Views { InitializeComponent(); - - this.Owner = Application.Current.MainWindow; ViewModel = new SubSettingViewModel(this); diff --git a/v2rayn/v2rayN/v2rayN/v2rayN.csproj b/v2rayn/v2rayN/v2rayN/v2rayN.csproj index 675f7c806f..9a0b66b0bc 100644 --- a/v2rayn/v2rayN/v2rayN/v2rayN.csproj +++ b/v2rayn/v2rayN/v2rayN/v2rayN.csproj @@ -10,7 +10,7 @@ enable v2rayN.ico Copyright © 2017-2024 (GPLv3) - 6.51 + 6.52 7.0 diff --git a/v2rayu/Build/V2rayU.developerprofile b/v2rayu/Build/V2rayU.developerprofile deleted file mode 100644 index ad57057804..0000000000 Binary files a/v2rayu/Build/V2rayU.developerprofile and /dev/null differ diff --git a/v2rayu/Build/build.plist b/v2rayu/Build/build.plist deleted file mode 100644 index e49f5ec64b..0000000000 --- a/v2rayu/Build/build.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - method - - development - - - diff --git a/v2rayu/Build/v2ray-core/geoip.dat b/v2rayu/Build/v2ray-core/geoip.dat index d6bc61f201..ced7c1880e 100644 Binary files a/v2rayu/Build/v2ray-core/geoip.dat and b/v2rayu/Build/v2ray-core/geoip.dat differ diff --git a/v2rayu/Build/v2ray-core/geosite.dat b/v2rayu/Build/v2ray-core/geosite.dat index 7144a9d222..2756691732 100644 --- a/v2rayu/Build/v2ray-core/geosite.dat +++ b/v2rayu/Build/v2ray-core/geosite.dat @@ -227,7 +227,7 @@ srtcdn.net  ALI213 ali213.net -B +C ALIBABA alibaba alipay taobao tmall a.alimama.cn @@ -329,7 +329,13 @@ g.tbcdn.cn ads$v6-adashx.ut.taobao.com adsw.m.taobao.com adsyiliao.hupan.com -adsalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.comalibabadns.com +adsalibabacloud.co.in +!cnalibabacloud.com alibabacloud.com.au +!cn alibabacloud.com.hk +!cn alibabacloud.com.my +!cn alibabacloud.com.sg +!cn alibabacloud.com.tw +!cn alicloud.comalibabadns.com alicdn.comalicloudapi.com alidayu.com alidns.com alikunlun.comaliyun-inc.comaliyun-iot-share.com aliyun.com aliyuncdn.com cdngslb.com hichina.comica-alliance.org kunlunaq.com kunlunar.com kunlunca.com kunluncan.com kunlunea.com kunlungem.com kunlungr.com kunlunhuf.com kunlunle.com kunlunli.com kunlunno.com kunlunpi.com kunlunra.com kunlunsa.com kunlunsc.com kunlunsl.com kunlunso.com kunlunta.com kunlunvi.com kunlunwe.com mxhichina.com myalicdn.com,oss-ap-northeast-1.aliyuncs.com @@ -349,14 +355,15 @@ aliyun.com aliyuncdn.com cdngslb.com hichina.comica-allianc !cn'oss-us-west-1.aliyuncs.com !cn ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.to doservice.com ele.me -ele.to eleme.cn eleme.io elemecdn.cn elemecdn.com  elenet.meteambition.comteambition.netteambitionapis.com uc.cn  ucweb.com mobmore.com  umeng.comumengcloud.com  umsns.com umtrack.com +ele.to eleme.cn eleme.io elemecdn.cn elemecdn.com  elenet.meteambition.comteambition.netteambitionapis.com uc.cn  uc123.com  ucweb.com uczzd.cn mobmore.com  umeng.comumengcloud.com  umsns.com umtrack.com uyunad.comwhalecloud.comalog.umeng.com ads alog.umengcloud.com ads w.cnzz.com adsz.gds.cnzz.com ads 25pp.com  56che.com  95095.com 9game.cn -aliapp.orgalibaba-inc.com alibaba.comalibabacapital.comalibabacorp.comalibabadoctor.comalibabafuturehotel.comalibabagroup.comalibabaplanet.comalibabaued.comalibabausercontent.com alifanyi.comalihealth.com.cn alihealth.hk +aliapp.orgalibaba-inc.com alibaba.comalibabacapital.comalibabacorp.comalibabadoctor.comalibabafuturehotel.comalibabagroup.comalibabaplanet.comalibabaued.comalibabausercontent.com alifanyi.comalihealth.com.cn alihealth.hk +!cn aliimg.com alikmd.com alimama.com alimebot.com alimei.com alios.cn  alipay.cn @@ -373,7 +380,8 @@ jhgtgb.com kanbox.com lazada.comliangxinyao.com m-now.cn maitix.com  mdeer.com mei.commiaostreet.com  mshare.cc nic.xinphilanthropy.xin phpwind.com phpwind.netqingtingtrip.com  rexpos.cn saee.org.cn shenjing.com  shuqi.comshuqireader.com sparenode.com  supet.com  ttpod.com wandoujia.com xin.xinxinlingshou.cn yowhale.com yunos-inc.com  yunos.comyushanfang.com -zuodao.comaliexpress.com aliexpress.rualipayplus.com alipay.hk +zuodao.comaliexpress.com aliexpress.ru +!cnalipayplus.com alipay.hk !cn alipaymo.com !cnalicloudccp.com alipan.comaliyundrive.comaliyundrive.net cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com @@ -382,9 +390,11 @@ fund123.cn antfin.com antgroup.comantgroup-inc.cn sm.cn 1688.com etao.com juhuasuan.comlingshoujia.com mashort.cn pailitao.com taobao.com -taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.com tmall.ru tmalltv.com tmjl.ai quark.cn alitrip.com  feizhu.cn +taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.comtmall.ru +!cn tmalltv.com tmjl.ai quark.cn alitrip.com  feizhu.cn feizhu.com -fliggy.com  fliggy.hk +fliggy.com fliggy.hk +!cn iuynfg.com a-map.cn a-map.co a-map.link  a-map.vipacloudrender.com amap.com amapauto.com anav.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net koubei.com zhisheng.com npmmirror.com goofish.com @@ -489,8 +499,14 @@ g.tbcdn.cn adsw.m.taobao.com adsyiliao.hupan.com ads - - ALIBABACLOUDalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.com + + ALIBABACLOUDalibabacloud.co.in +!cnalibabacloud.com alibabacloud.com.au +!cn alibabacloud.com.hk +!cn alibabacloud.com.my +!cn alibabacloud.com.sg +!cn alibabacloud.com.tw +!cn alicloud.com ALIYUNalibabadns.com alicdn.comalicloudapi.com alidayu.com @@ -608,11 +624,12 @@ P ANANDTECH anandtech.com . ANDROID android.comandroidify.com - -ANIME  9anime.cz  9anime.id  9anime.to  9anime.wsanimedao-tv.comcrunchyroll.comfunimation.com gogo-load.com gogoanime.vcgogoanime.wiki gogocdn.net -hidive.com -vrv.co -age.tv  agedm.org + +ANIME  9anime.cz  9anime.id  9anime.to  9anime.ws +age.tv  agedm.org agedm.tv agefans.com +agemys.org  agedm.appanimedao-tv.comcrunchyroll.comfunimation.com +vrv.co gogoanime.vcgogoanime.wiki gogoanime3.co gogotaku.info gogo-load.com gogocdn.net +hidive.com ( ANON-V anon-v.com @@ -1064,9 +1081,9 @@ ARTSTATIONartstation.comartstationmedia.com aiasahi.jp asagaku.com  asahi.com asahicom.jpasakonet.co.jpnikkansports.comasahishimbun.sc.omtrdc.net . ASPROEX asproex.comasproexapi.com -- +X ASUS asus.com asus.com.cn -cn +cn asuscloud.comasuswebstorage.com  ATLASSIAN atlassian.com atlassian.net bitbucket.io bitbucket.org statuspage.io trello.com trellocdn.com @@ -1239,7 +1256,7 @@ b3itech.cn B3LOG  b3log.org  BAHAMUTbahamut.akamaized.netbahamut.com.tw gamer.com.twgamer2-cds.cdn.hinet.netgamer-cds.cdn.hinet.net -( +* BAIDU a.baidu.com ads ad.duapps.com ads ad.player.baidu.com @@ -1385,7 +1402,7 @@ b3itech.cn ads zuoyebang.cc zuoyebang.com zybang.com baidu 91.com -aipage.com apollo.auto baidu.cn  baidu.com baidu.com.cn baidubce.combaiducontent.com baidupcs.combaidustatic.com +aipage.com apollo.auto baidu.cn  baidu.com baidu.com.cn baiduapp.com baidubce.combaiducontent.com baidupcs.combaidustatic.com baifae.com baifubao.com bcebos.combdcloudapi.com  bdimg.com bdstatic.com bdtjrcv.com  bdydns.cn bdydns.com @@ -1396,7 +1413,11 @@ hao123.com hao123img.com hao222.com haokan.com jomocdn.net jomodns.com mipcdn.com  nuomi.com quyaoya.com -shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.com +shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.comduxiaoman-int.com duxiaoman.comduxiaomanfintech.comduxiaomantech.com dxm-cdn.com dxm-int.com +dxmlcf.comdxmlcfintech.com +dxmpay.com dxmstatic.com +dxmyqh.com +paydxm.com " BAIDU-ADS a.baidu.com ads ad.duapps.com @@ -1606,7 +1627,7 @@ gsccdn.com  gslink.usonlinegeeksquad.comrocketfishproducts.com beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.com * BETTEREXPLAINEDbetterexplained.com - + BILIBILIbilibiligame.cn cnbilibiligame.co cnbilibiligame.net @@ -1619,8 +1640,10 @@ anitama.cn anitama.net b23.tv  bigfun.cn bigfunapp.cn  bili22.cn bili2233.cn  bili23.cn  bili33.cn biliapi.com biliapi.net bilibili.cc bilibili.cn bilibili.com bilibili.net bilibili.tv !cnbilibilipay.cnbilibilipay.com bilicdn1.com bilicdn2.com bilicdn3.com bilicdn4.com bilicdn5.com biligo.com biliimg.com biliintl.com -!cn bilivideo.cn bilivideo.com bilivideo.net dreamcast.hk  hdslb.com  hdslb.org im9.com maoercdn.com -mincdn.com yo9.com$ upos-hz-mirrorakam.akamaized.net +!cn bilivideo.cn bilivideo.com bilivideo.net dreamcast.hk +!cn  hdslb.com  hdslb.org im9.com maoercdn.com +mincdn.com yo9.com- upos-hz-mirrorakam.akamaized.net +!cn  BILIBILI-GAMEbilibiligame.cn cnbilibiligame.co @@ -3396,16 +3419,20 @@ psiphon.ca psiphon3.com sagernet.orgshadowsocks.org sspanel uproxy.org vuvuzela.io whonix.org wikileaks.org wireguard.com zeronet.io - + CATEGORY-BANK-CN boc.cnbank-of-china.combankofchina.combocfullertonbank.combocamchina.combocaviation.com  boccfc.cc  boccfc.cn  bocgi.com bocgins.com bochk.com !cn bocichina.cn bocichina.combocichina.com.cn bocifunds.cn bocifunds.combocifunds.com.cn bocigroup.com  bocim.combocservices.com.cnccb-life.com.cn ccb.cn ccb.com ccb.com.cn ccbcos.com -ccbfund.cn ccbfund.comccbfund.com.cn ccbfutures.cnccbfutures.comccbintl.com.hkccbleasing.comccblife-test.com.cn ccbseoul.comccbtrust.com.cn  ccbxt.com 8008205555.cn8008205555.comcignacmb-ipmi.com cignacmb.comcignacmbamc.comcmb-leasing.com cmbchina.biz cmbchina.cn cmbchina.com cmbi.com.hk  cmbimg.cn +ccbfund.cn ccbfund.comccbfund.com.cn ccbfutures.cnccbfutures.comccbintl.com.hk +!cnccbleasing.comccblife-test.com.cn ccbseoul.com +!cnccbtrust.com.cn  ccbxt.com 8008205555.cn8008205555.comcignacmb-ipmi.com cignacmb.comcignacmbamc.comcmb-leasing.com cmbchina.biz cmbchina.cn cmbchina.com cmbi.com.hk +!cn  cmbimg.cn cmbimg.com cmbt.cn -cmbuat.com  cmburl.cncmbwinglungbank.com cmf.biz cmf.ltd cmfchina.com +cmbuat.com  cmburl.cn cmbwinglungbank.com +!cn cmf.biz cmf.ltd cmfchina.com cmfunds.cntest-cignacmb.comicbc  95588.com 95588.com.cn dccnet.com.cn icbc-at.com !cn icbc-cz.com !cn icbc-ltd.com @@ -3495,7 +3522,7 @@ nobitex.ir ok-ex.io ompfinex.com ramzinex.com tabdeal.org chrome chrome.com chromium.orgbasilisk-browser.org  brave.com bromite.orgbrowser.kagi.com cromite.org decentr.net  dothq.org floorp.appiridiumbrowser.dekiwibrowser.comkmeleonbrowser.org librewolf.netminbrowser.orgnetsurf-browser.org  opera.com palemoon.orgpulsebrowser.appqutebrowser.org vivaldi.com waterfox.net -< +> CATEGORY-CAS actalis.com actalis.itamazontrust.com awstrust.com ss2.us)certs-lb.apple.com.akadns.net @@ -3520,10 +3547,16 @@ myatos.netcertificat2.comtrendmicro.com  gandi.net alphassl cnglobalsign.co.ukglobalsign.com cnglobalsign.com.auglobalsign.com.brglobalsign.com.hkglobalsign.com.sg globalsign.es globalsign.eu globalsign.frglobalsign.net globalsign.nlglobalsigncdn.com cn4(cdn.globalsigncdn.com.cdn.cloudflare.net -cn godaddy.comx.co godaddy pki.googclients1.google.compki.google.com crl.pki.goog +cn godaddy.comx.co godaddy pki.goog!pki-goog.l.google.com +cn +c.pki.goog +cn +i.pki.goog +cn +o.pki.goog +cnpublicca.googleapis.com#preprod-publicca.googleapis.comclients1.google.compki.google.com crl.pki.goog cn crls.pki.goog cn ocsp.pki.goog -cn!pki-goog.l.google.com cn eca.hinet.netgtlsca.nat.gov.twhongkongpost.gov.hk ecert.gov.hk identrust.comidentrust.co.uk identrust.net  lencr.orgletsencrypt.comletsencrypt.org msocsp.comcrl.microsoft.commscrl.microsoft.comocsp.microsoft.comoneocsp.microsoft.comwww.microsoft.com cn secom.co.jpsecomtrust.netcybertrust.co.jpcybertrust.ne.jpmanagedpki.ne.jpenterprisessl.comhackerguardian.cominstantssl.com oemssl.cn @@ -3573,7 +3606,7 @@ telesco.pe tg.dev tx.meusercontent.devgraph.whatsapp.com adsgraph.whatsapp.net ads wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com - + CATEGORY-COMPANIESacer-group.com acer.com acer.com.cn cn3dns-1.adobe.com3dns-2.adobe.com3dns-3.adobe.com3dns-4.adobe.com3dns-5.adobe.com3dns.adobe.comactivate-sea.adobe.comactivate-sjc0.adobe.comactivate.adobe.comactivate.wip1.adobe.comactivate.wip2.adobe.comactivate.wip3.adobe.comactivate.wip4.adobe.comadobe-dns-1.adobe.comadobe-dns-2.adobe.comadobe-dns-3.adobe.comadobe-dns-4.adobe.comadobe-dns.adobe.com adobeereg.comcrl.versign.netereg.adobe.comereg.wip.adobe.comereg.wip1.adobe.comereg.wip2.adobe.comereg.wip3.adobe.comereg.wip4.adobe.comhl2rcv.adobe.comhlrcv.stage.adobe.comlm.licenses.adobe.comlmlicenses.wip4.adobe.comna1r.services.adobe.comood.opsource.netpractivate.adobepractivate.adobe.compractivate.adobe.ipppractivate.adobe.newoapractivate.adobe.ntp wip.adobe.comwip1.adobe.comwip2.adobe.comwip3.adobe.comwip4.adobe.comwwis-dubc1-vip100.adobe.comwwis-dubc1-vip101.adobe.comwwis-dubc1-vip102.adobe.comwwis-dubc1-vip103.adobe.comwwis-dubc1-vip104.adobe.comwwis-dubc1-vip105.adobe.comwwis-dubc1-vip106.adobe.comwwis-dubc1-vip107.adobe.comwwis-dubc1-vip108.adobe.comwwis-dubc1-vip109.adobe.comwwis-dubc1-vip110.adobe.comwwis-dubc1-vip111.adobe.comwwis-dubc1-vip112.adobe.comwwis-dubc1-vip113.adobe.comwwis-dubc1-vip114.adobe.comwwis-dubc1-vip115.adobe.comwwis-dubc1-vip116.adobe.comwwis-dubc1-vip117.adobe.comwwis-dubc1-vip118.adobe.comwwis-dubc1-vip119.adobe.comwwis-dubc1-vip120.adobe.comwwis-dubc1-vip121.adobe.comwwis-dubc1-vip122.adobe.comwwis-dubc1-vip123.adobe.comwwis-dubc1-vip124.adobe.comwwis-dubc1-vip125.adobe.comwwis-dubc1-vip30.adobe.comwwis-dubc1-vip31.adobe.comwwis-dubc1-vip32.adobe.comwwis-dubc1-vip33.adobe.comwwis-dubc1-vip34.adobe.comwwis-dubc1-vip35.adobe.comwwis-dubc1-vip36.adobe.comwwis-dubc1-vip37.adobe.comwwis-dubc1-vip38.adobe.comwwis-dubc1-vip39.adobe.comwwis-dubc1-vip40.adobe.comwwis-dubc1-vip41.adobe.comwwis-dubc1-vip42.adobe.comwwis-dubc1-vip43.adobe.comwwis-dubc1-vip44.adobe.comwwis-dubc1-vip45.adobe.comwwis-dubc1-vip46.adobe.comwwis-dubc1-vip47.adobe.comwwis-dubc1-vip48.adobe.comwwis-dubc1-vip49.adobe.comwwis-dubc1-vip50.adobe.comwwis-dubc1-vip51.adobe.comwwis-dubc1-vip52.adobe.comwwis-dubc1-vip53.adobe.comwwis-dubc1-vip54.adobe.comwwis-dubc1-vip55.adobe.comwwis-dubc1-vip56.adobe.comwwis-dubc1-vip57.adobe.comwwis-dubc1-vip58.adobe.comwwis-dubc1-vip59.adobe.comwwis-dubc1-vip60.adobe.comwwis-dubc1-vip61.adobe.comwwis-dubc1-vip62.adobe.comwwis-dubc1-vip63.adobe.comwwis-dubc1-vip64.adobe.comwwis-dubc1-vip65.adobe.comwwis-dubc1-vip66.adobe.comwwis-dubc1-vip67.adobe.comwwis-dubc1-vip68.adobe.comwwis-dubc1-vip69.adobe.comwwis-dubc1-vip70.adobe.comwwis-dubc1-vip71.adobe.comwwis-dubc1-vip72.adobe.comwwis-dubc1-vip73.adobe.comwwis-dubc1-vip74.adobe.comwwis-dubc1-vip75.adobe.comwwis-dubc1-vip76.adobe.comwwis-dubc1-vip77.adobe.comwwis-dubc1-vip78.adobe.comwwis-dubc1-vip79.adobe.comwwis-dubc1-vip80.adobe.comwwis-dubc1-vip81.adobe.comwwis-dubc1-vip82.adobe.comwwis-dubc1-vip83.adobe.comwwis-dubc1-vip84.adobe.comwwis-dubc1-vip85.adobe.comwwis-dubc1-vip86.adobe.comwwis-dubc1-vip87.adobe.comwwis-dubc1-vip88.adobe.comwwis-dubc1-vip89.adobe.comwwis-dubc1-vip90.adobe.comwwis-dubc1-vip91.adobe.comwwis-dubc1-vip92.adobe.comwwis-dubc1-vip93.adobe.comwwis-dubc1-vip94.adobe.comwwis-dubc1-vip95.adobe.comwwis-dubc1-vip96.adobe.comwwis-dubc1-vip97.adobe.comwwis-dubc1-vip98.adobe.comwwis-dubc1-vip99.adobe.com"advertising.adobe.com ads tubemogul.com @@ -3586,7 +3619,13 @@ fotolia.cc fotolia.com fotolia.tv fotolja.com fptolia.com gfotolia.com motolia.com photolia.nettenbyfotolia.com votolia.combluefootcms.com mageconf.commageconf.com.ua magento.com magento.netmagentocommerce.commagentomobile.commarketing-cloud.com marketo.co.uk marketo.com marketo.net marketo.tvmarketodesigner.commarketolive.com mktdns.commkto-c0100.com mktorest.com mktroute.commobilemarketo.com&"revenue-performance-management.com toutapp.comcompresspdf.new pdf.new sign.new -scene7.comalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.com amazon-adsystem.com +scene7.comalibabacloud.co.in +!cnalibabacloud.com alibabacloud.com.au +!cn alibabacloud.com.hk +!cn alibabacloud.com.my +!cn alibabacloud.com.sg +!cn alibabacloud.com.tw +!cn alicloud.com amazon-adsystem.com adsserving-sys.com adsamazontrust.com awstrust.com ss2.us @@ -4018,7 +4057,7 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn www.apple.com cn xp.apple.com cn asus.com asus.com.cn -cn atlassian.com atlassian.net bitbucket.io bitbucket.org statuspage.io +cn asuscloud.comasuswebstorage.com atlassian.com atlassian.net bitbucket.io bitbucket.org statuspage.io trello.com trellocdn.comaccbusiness.com atandt.comatt-bundles.com att-japan.com att-mail.comatt-promotions.com att-rsvp.comatt.cn cn att.com att.jobs att.net @@ -4061,7 +4100,7 @@ mysdn.info  mysdn.net netacad.com netacad.netnetwork-auth.cn versly.comvideochampion.com virtuata.comwballiance.com!whyiwantciscotelepresence.com wifi-mx.comyoutubecisco.comapp-dynamics.comappdynamics.co.ukappdynamics.comappdynamics.deappdynamics.frappdynamics.infoappdynamics.jpappdynamics.org mearki.com meraki-go.com  meraki.hk merakigo.com tail-f.com  tailf.comcisco.evergage.comciscolivehls-i.akamaihd.net clco.cc -cloudc.one cloudcone.com cloudcone.netcollabora.co.uk collabora.com collabora.orgcollaboraoffice.com +cloudc.one cloudcone.com cloudcone.netcollabora.co.uk collabora.com collabora.orgcollaboraoffice.com  corel.com  corel.net coreldraw.app coreldraw.comcorelstore.com cfblob.comcloudchoose.comcloudvolumes.com cmpaas.com cpedge.comcrit-staging.comexperience-vmware.com gemfire.netgeodesummit.com getboxer.com gitstar.com gitstar.net gopivotal.net greenplum.net hwslabs.com immidio.comitfromtheinside.comlatamvmwareforum.compivotalinitiative.comsnapvolumes.com ssdevrd.com vcanedge.com vcloudair.net vfabric.netvidmpreview.com @@ -4131,10 +4170,16 @@ golang.org 2mdn-cn.net urchin.com ads!analytics.google.com ads>1^adservice\.google\.([a-z]{2}|com?)(\.[a-z]{2})?$ -adscharlestonroadregistry.com crr.comregistry.google get.app get.dev get.how get.new get.page get.rsvp hey.boo iam.soy new.dayxn--p8j9a0d9c9a.xn--q9jyb4cscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.sk!scholar.googleusercontent.comscholar.l.google.com pki.googclients1.google.compki.google.com crl.pki.goog +adscharlestonroadregistry.com crr.comregistry.google get.app get.dev get.how get.new get.page get.rsvp hey.boo iam.soy new.dayxn--p8j9a0d9c9a.xn--q9jyb4cscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.sk!scholar.googleusercontent.comscholar.l.google.com pki.goog!pki-goog.l.google.com +cn +c.pki.goog +cn +i.pki.goog +cn +o.pki.goog +cnpublicca.googleapis.com#preprod-publicca.googleapis.comclients1.google.compki.google.com crl.pki.goog cn crls.pki.goog cn ocsp.pki.goog -cn!pki-goog.l.google.com cnalt1-mtalk.google.comalt2-mtalk.google.comalt3-mtalk.google.comalt4-mtalk.google.comalt5-mtalk.google.comalt6-mtalk.google.comalt7-mtalk.google.comalt8-mtalk.google.commtalk.google.com kaggle.com  kaggle.io kaggle.netkaggleusercontent.com deps.dev  deps.infoopensourceinsight.devopensourceinsights.devpolymer-project.orgpolymerproject.org @@ -4232,7 +4277,7 @@ apture.com area120.com asp-cc.com autodraw.com bandpage.combaselinestudy.combaselinestudy.org bazel.build bdn.devbeatthatquote.com  blink.orgbrocaproject.com brotli.org bumpshare.com bumptop.ca bumptop.com bumptop.net bumptop.org bumptunes.comcampuslondon.com certificate-transparency.org -chrome.comchromebook.comchromecast.com chromeos.dev chromium.orgchronicle.securitychroniclesec.comcloudburstresearch.comcloudfunctions.netcloudproxy.appcloudrobotics.comcobrasearch.com codespot.com conscrypt.com conscrypt.orgcookiechoices.org  coova.com  coova.net  coova.orgcrossmediapanel.com  cs4hs.comdartsearch.netdataliberation.org  debug.comdebugproject.com deepmind.comdevsitetest.howdialogflow.comdigitalassetlinks.org episodic.comfeedburner.com +chrome.comchromebook.comchromecast.com chromeos.dev chromium.orgchronicle.securitychroniclesec.comcloudburstresearch.comcloudfunctions.netcloudproxy.appcloudrobotics.comcobrasearch.com codespot.com conscrypt.com conscrypt.orgcookiechoices.org  coova.com  coova.net  coova.orgcrossmediapanel.com  cs4hs.comdartsearch.netdataliberation.org  debug.comdebugproject.com deepmind.comdevsitetest.howdialogflow.comdigitalassetlinks.org docs.new episodic.comfeedburner.com fflick.comfinanceleadsonline.com foofle.com froogle.com fuchsia.dev  g-tun.comg.cn cng.co g.dev @@ -4260,11 +4305,13 @@ picasa.com picasaweb.com picasaweb.net picasaweb.org picnik.com pittpatt.com pixate.com postini.comprivacysandbox.comprojectara.comprojectbaseline.compublishproxy.comquestvisual.comquickoffice.com quiksee.com revolv.comridepenguin.com run.appsavethedate.foo -saynow.com schemer.comscreenwisetrends.comscreenwisetrendspanel.com snapseed.com solveforx.com +saynow.com schemer.comscreenwisetrends.comscreenwisetrendspanel.com +sheets.new +slides.new snapseed.com solveforx.com stadia.devstcroixmosquito.comstcroixmosquitoproject.comstudywatchbyverily.comstudywatchbyverily.orgstxmosquito.comstxmosquitoproject.comstxmosquitoproject.netstxmosquitoproject.org synergyse.comtensorflow.org  tfhub.devthecleversense.comthegooglestore.comthinkquarterly.co.ukthinkquarterly.comthinkwithgoogle.com tiltbrush.com txcloud.net  txvia.comunfiltered.news useplannr.comusvimosquito.comusvimosquitoproject.comvelostrata.com verily.comverilylifesciences.comverilystudyhub.comverilystudywatch.comverilystudywatch.org wallet.com  waymo.com waze.com web.app web.devwebappfieldguide.comwebmproject.orgwebpkgcache.com -webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comwithgoogle.com womenwill.comwomenwill.com.br womenwill.id womenwill.in womenwill.mx  x.company +webrtc.orgweltweitwachsen.dewhatbrowser.org  whats.new widevine.comwithgoogle.com womenwill.comwomenwill.com.br womenwill.id womenwill.in womenwill.mx  x.company x.team xn--9kr7l.comxn--9trs65b.comxn--flw351e.comxn--ggle-55da.comxn--gogl-0nd52e.comxn--gogl-1nd42e.comxn--ngstr-lra8j.com xplr.cozukunftswerkstatt.dewww.recaptcha.net cn265.com cn 2mdn-cn.net @@ -4738,7 +4785,7 @@ geforce.cn cngputechconf.co.krgputechconf.comgputechconf.com.augputechconf.com.twgputechconf.eugputechconf.ingputechconf.jp nvidia.asia  nvidia.at  nvidia.be  nvidia.ch nvidia.cn cn nvidia.co.at nvidia.co.in nvidia.co.jp nvidia.co.kr nvidia.co.uk nvidia.com nvidia.com.au nvidia.com.br nvidia.com.mx nvidia.com.pe nvidia.com.pl nvidia.com.tr nvidia.com.tw nvidia.com.ua nvidia.com.ve  nvidia.cz  nvidia.de  nvidia.dk  nvidia.es  nvidia.eu  nvidia.fi  nvidia.fr  nvidia.in  nvidia.it  nvidia.jp  nvidia.lu  nvidia.mx  nvidia.nl  nvidia.no  nvidia.pl  nvidia.ro  nvidia.ru  nvidia.se  nvidia.twnvidiaforhp.comnvidiagrid.netshotwithgeforce.com tegrazone.cotegrazone.co.kr tegrazone.com tegrazone.jp tegrazone.krnvidia.tt.omtrdc.net chatgpt.com oaistatic.comoaiusercontent.com -openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net@<^chatgpt-async-webps-prod-eastus-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io +openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net=9^chatgpt-async-webps-prod-\s+-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io ads openaicom.imgix.net adsopenweather.co.ukopenweathermap.org oracleateam-oracle.com @@ -4760,7 +4807,7 @@ qprize.comqualcomm-email.com qualcomm.cn cn*qualcomm.cn.cdn.cloudflare.net cnqualcomm.co.idqualcomm.co.inqualcomm.co.jpqualcomm.co.krqualcomm.co.uk qualcomm.comqualcomm.com.brqualcomm.com.tw qualcomm.de qualcomm.frqualcommhalo.comqualcommlabs.comqualcommmea.comqualcommretail.comqualcommventures.cnqualcommventures.com qualphone.com quicinc.com snapdragon.cnsnapdragonbooth.com uplinq.com wipower.comwirelessreach.com xtracloud.cn -cn +cn xtracloud.net brewmp.comqualcomm.sc.omtrdc.net  qwant.com qwant.de qwant.fr qwant.it  razer.com razerapi.com cnrazerofficial.comrazersynapse.com cnrazersupport.com razerzone.com @@ -4769,7 +4816,7 @@ pardot.com quotable.com radian6.com relateiq.comsalesforce. sforce.com site.com social.comsteelbrick.com twinprime.comweinvoiceit.com samsung xn--cg4bkigalaxyappstore.comgalaxymobile.jpgame-platform.net knoxemm.com samsung.comsamsungapps.comsamsungcloud.com samsungdm.comsamsungeshop.com.cn -cnsamsunggalaxyfriends.comsamsungknox.comsamsungqbe.combarkadahansasmartone.comhealthreach.hkhkcircleapp.comhomephoneplus.com ip73.coms-cashonmobile.com s-rewards.hksahabatsetiasmartone.com smartone.comsmartoneholdings.comsmartonerobotics.comsmartonesolutions.com.hksmartonesolutions.hk valuegb.comwise-research.com snapads.com +cnsamsunggalaxyfriends.comsamsungknox.comsamsungqbe.comskyperfectjsat.spacesptvbroadcast.com spcc-sp.comskyperfectv.co.jp hominis.media  jsati.comjsatmobile.combarkadahansasmartone.comhealthreach.hkhkcircleapp.comhomephoneplus.com ip73.coms-cashonmobile.com s-rewards.hksahabatsetiasmartone.com smartone.comsmartoneholdings.comsmartonerobotics.comsmartonesolutions.com.hksmartonesolutions.hk valuegb.comwise-research.com snapads.com ads sc-cdn.net snap-dev.net snap.com snapchat.com snapkit.co,(impala-media-production.s3.amazonaws.com playstationplaystation.complaystation.net sonyentertainmentnetwork.comimageworks.commotionpictureser.com playshow.ioplayshowtv.comsonyclassics.comsonypictures.comsonypicturesanimation.comsonypicturesmuseum.comsonypicturesstudios.comsonypicturestelevision.com#sonypicturestelevisiongames.com wheelpop.com @@ -4850,7 +4897,7 @@ kraken.com opensea.io osl.com paxful.com ripple.comsatoshilabs.com theblock.co  trezor.io  truefi.io  unisat.io uniswap.orgwalletconnect.comwintermute.com  zapper.fi -[ +[ CATEGORY-DEVanaconda.cloud anaconda.com anaconda.org conda.io android.comandroidify.comappleswift.com  swift.org swiftui.cn cnswiftui.com.cn @@ -4924,13 +4971,13 @@ blazor.netbotframework.comcodethemicrobit.comdevopsassessment. cn sankie.netsqlserveronlinux.comtimelinestoryteller.comuwpcommunitytoolkit.comvisualstudio-staging.comvisualstudio.comvisualstudio.covisualstudio.co.ukvisualstudio.euvisualstudio.net vfsforgit.com vfsforgit.org vsassets.io vscode.devvscode-cdn.netvscode-unpkg.net xamarin.comaz764295.vo.msecnd.net)%bingsettingssearch.trafficmanager.netdefault.exp-tas.comdeveloper.microsoft.com'#download.visualstudio.microsoft.comdtlgalleryint.cloudapp.net poshtestgallery.cloudapp.net"psg-int-centralus.cloudapp.netpsg-int-eastus.cloudapp.netrink.hockeyapp.net+'vscode-sync-insiders.trafficmanager.net"vscode-sync.trafficmanager.net vscode.blob.core.windows.netvscode.search.windows.net vsmarketplacebadge.apphb.com mongodb.com mongodb.org  nginx.com  nginx.org  nixos.org chatgpt.com oaistatic.comoaiusercontent.com -openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net@<^chatgpt-async-webps-prod-eastus-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io +openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net=9^chatgpt-async-webps-prod-\s+-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io ads openaicom.imgix.net ads openwrt.orglede-project.org osdn.netperl.apache.org perl.org cpan.org metacpan.org modperl.plpolymer-project.orgpolymerproject.org  pycon.org pypa.io pypi.io pypi.org python.orgpythonhosted.org piwheels.org qt.ioqt-project.orgreadthedocs-hosted.comreadthedocs.comreadthedocs.ioreadthedocs.org redis.io redislabs.com remirepo.net ruby-lang.org rubygems.org rust-lang.org  rustup.rs  crates.io docs.rs redhat.com -redhat.orgscala-lang.org scala-sbt.org sourcehut.org sr.ht askubuntu.comblogoverflow.comcodeforaliving.iomathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.costackoverflow.comstackoverflow.emailstackoverflowbusiness.comstackoverflowcareers.comstacksnippets.net superuser.com tex-talk.netthesffblog.commystrikingly.comstrikingly.comstrikinglycdn.com openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io +redhat.orgscala-lang.org scala-sbt.org sourcehut.org sr.ht askubuntu.comblogoverflow.comcodeforaliving.iomathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.costackoverflow.comstackoverflow.emailstackoverflowbusiness.comstackoverflowcareers.comstacksnippets.net superuser.com tex-talk.netthesffblog.commystrikingly.comstrikingly.comstrikinglycdn.com openmidas.com  qq.designqqgamedesign.comtencent-cloud.cntencent-cloud.comtencent.designtencentcloud.com tjstats.comwegamedeveloper.comweixinbridge.comweui.io cn termux.com termux.dev @@ -5174,11 +5221,12 @@ yeshen.com cn  %CATEGORY-ENTERPRISE-QUERY-PLATFORM-CNaiqicha.baidu.comhongdunwang.com.cn qcc.com qichacha.com qichamao.com  qixin.com qyyjt.cn jindidata.comtianyancha.com x315.com - -CATEGORY-ENTERTAINMENT abema.io abema.tv abema-tv.com  adx.promo ameba.jp amebame.com amebaownd.comamebaowndme.com  ameblo.jp bucketeer.jpdokusho-ojikan.jp hayabusa.dev hayabusa.iohayabusa.media winticket.jpabematv.akamaized.net#ds-linear-abematv.akamaized.net ds-vod-abematv.akamaized.net linear-abematv.akamaized.netvod-abematv.akamaized.net amc.com amcn.comamcnetworks.com amcplus.comrne5a6ae085b6c43020dea230eb0c0ecc33a188227507da97b8ecc05eb8beace6.us-east-1.prod.service.minerva.devices.a2z.com  9anime.cz  9anime.id  9anime.to  9anime.wsanimedao-tv.comcrunchyroll.comfunimation.com gogo-load.com gogoanime.vcgogoanime.wiki gogocdn.net -hidive.com -vrv.co -age.tv  agedm.org ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net + +CATEGORY-ENTERTAINMENT abema.io abema.tv abema-tv.com  adx.promo ameba.jp amebame.com amebaownd.comamebaowndme.com  ameblo.jp bucketeer.jpdokusho-ojikan.jp hayabusa.dev hayabusa.iohayabusa.media winticket.jpabematv.akamaized.net#ds-linear-abematv.akamaized.net ds-vod-abematv.akamaized.net linear-abematv.akamaized.netvod-abematv.akamaized.net amc.com amcn.comamcnetworks.com amcplus.comrne5a6ae085b6c43020dea230eb0c0ecc33a188227507da97b8ecc05eb8beace6.us-east-1.prod.service.minerva.devices.a2z.com  9anime.cz  9anime.id  9anime.to  9anime.ws +age.tv  agedm.org agedm.tv agefans.com +agemys.org  agedm.appanimedao-tv.comcrunchyroll.comfunimation.com +vrv.co gogoanime.vcgogoanime.wiki gogoanime3.co gogotaku.info gogo-load.com gogocdn.net +hidive.com ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net att.tv atttvnow.comattwatchtv.com directv.com  dtvce.comnettyinternet.combahamut.akamaized.netbahamut.com.tw gamer.com.twgamer2-cds.cdn.hinet.netgamer-cds.cdn.hinet.net bandcamp.com bcbits.com boomerang.com wbdnbo.net catchplay.comtra-ww000-cp.akamaized.net @@ -5361,8 +5409,8 @@ xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn cn xboxlive.com xboxone.co xboxone.com xboxone.euxboxplayanywhere.comxboxservices.comxboxstudios.com -xbx.lvynoproject.netdodi-repacks.downloaddodi-repacks.site fanatical.comfitgirl-repacks.sitegame-repack.sitehumblebundle.com loverslab.comminecraft.wiki modrinth.com nexusmods.com -papermc.ioplanetminecraft.com protondb.com speedrun.com steamdb.info  ptzwx.comquanben-xiaoshuo.com +xbx.lvynoproject.netdodi-repacks.downloaddodi-repacks.site fabricmc.net fanatical.comfitgirl-repacks.sitegame-repack.sitehumblebundle.com loverslab.comminecraft.wiki modrinth.com nexusmods.com +papermc.ioplanetminecraft.comprismlauncher.org protondb.com quiltmc.org speedrun.com steamdb.info  ptzwx.comquanben-xiaoshuo.com quanben.iodailymotion.com dm-event.net  dmcdn.net dandanzan.cc  nunuyy.cc dazn-api.com dazn.com dazndn.com indazn.com indaznlab.comdeviantart.comdeviantart.net da-files.com*&content-ause1-ur-discovery1.uplynk.com disco-api.comdiscoveryplus.comabc-studios.com abc.com edgedatg.com bamgrid.comdmed.technology dtci.codtci.technology @@ -5376,7 +5424,7 @@ dssott.comgo-disneyworldgo.com go.com  mickey.tvmoviesanywhere.comnomadlandmovie.chplaymation.comshopdisney.comshops-disney.comsorcerersarena.comspaindisney.comstar-brasil.comstar-latam.com starwars.com#starwarsgalacticstarcruiser.comstarwarskids.comstreamingdisney.netthestationbymaker.comthisispolaris.comwatchdisneyfe.com  chobit.cc ci-en.jp  ci-en.net dlsite.com dlsite.com.tw  dlsite.jpdlsitestudio.com nijiyome.jp triokini.com gimy.cc gimy.co gimy.to gimy.tv goodreads.com gr-assets.comapl-hamivideo.cdn.hinet.nethamivideo.hinet.net&"mobilelive-hamivideo.cdn.hinet.netpvr-hamivideo.cdn.hinet.netscc.ott.hinet.net"static-hamivideo.cdn.hinet.net&"tvcastlive-hamivideo.cdn.hinet.net#weblive-hamivideo.cdn.hinet.net cinemax.comforthethrone.com hbo.com hboasia.com hbogo.co.th  hbogo.com hbogo.eu hbogoasia.com hbogoasia.hk hbogoasia.id hbogoasia.ph hbogoasia.sg hbogoasia.tw hbomax.com hbomaxcdn.com -hbonow.com  maxgo.comhbo.com.c.footprint.nethbo.com.edgesuite.nethbo.map.fastly.net$ hbomax-images.warnermediacdn.comhbomaxdash.s.llnwi.net +hbonow.com max.com  maxgo.comhbo.com.c.footprint.nethbo.com.edgesuite.nethbo.map.fastly.net$ hbomax-images.warnermediacdn.comhbomaxdash.s.llnwi.net 112263.com callhulu.comfindyourlimits.com freehulu.com  hooloo.tv  hoolu.com hoolu.tv hu1u.com huloo.cc huloo.tv hulu.com hulu.jp hulu.tv hulu.ushuluaction.com huluad.com huluapp.com huluasks.com hulucall.com hulufree.com hulugans.comhulugermany.com hulugo.com @@ -5401,6 +5449,7 @@ mihoyo.com cnbhsr.com cnthemisweeps.com cn yuanshen.com +cn juequling.com cn'^.+-mihayo\.akamaized\.net$ cn biggggg.com  mudvod.tv nbys.tv nbys1.tv nbyy.tv newpppp.com nivod.tv  nivodi.tv nivodz.com @@ -5530,14 +5579,23 @@ youtube.vnyoutubeeducation.com($youtubeembeddedplayer.googleapis.com odysee.com omobi.cc oranum.com overcast.fm syosetu.com thetvdb.com weverse.io yande.reamp-api.podcast.apple.combag.itunes.apple.combookeeper.itunes.apple.com - -CATEGORY-FINANCE + + +CATEGORY-FINANCEhsbc hsbc.com hsbc.nethsbcinnovationbanking.com hsbcnet.comhsbcprivatebank.com hsbc.ae hsbc.am hsbc.bm +hsbc.co.id +hsbc.co.in +hsbc.co.kr +hsbc.co.mu +hsbc.co.nz +hsbc.co.th +hsbc.co.uk hsbc.uk hsbc.com.ar hsbc.com.au hsbc.com.bd hsbc.com.bh hsbc.com.br hsbc.com.cn hsbc.com.eg hsbc.com.hk hsbc.com.mo hsbc.com.mt hsbc.com.mx hsbc.com.myhsbcamanah.com.my hsbc.com.ph hsbc.com.sg hsbc.com.tr hsbc.com.tw hsbc.com.uy hsbc.com.vn hsbc.dehsbc-alternatives.dehsbc-transactionservices.dehsbc-zertifikate.de hsbc.lk hsbc.ca +hsbc.co.jp hsbc.frhsbctrinkaus.de fsmone.com fsmone.com.hk fsmone.com.myfundsupermart.comifastcapital.com.my ifastcorp.comifastfinancial.com.hkifastfinancial.co.in ifastgb.com ifastgp.comifastgp.com.hkifastnetwork.comifastps.com.cn cn ifasttv.comlongbridge.cloudlongbridge.global longbridge.hk longbridge.sglongbridgeapp.comlongportapp.com  lbkrs.com  wbrks.comtransferwise.com wise.comfxcorporate.com mql5.comtradingview.com v CATEGORY-FOOD-CN 517lppz.com lppz.com lppzimg.com heytea.com 3songshu.com haidilao.com - + CATEGORY-FORUMS 4cdn.org  4chan.org 4channel.org 2ch.net 5ch.net  6park.com 6parkbbs.com 6parknews.com cool18.com  ck101.com  ckcdn.com ckck.fun dcard.cc dcard.io dcard.link dcard.twbroadbandreports.com dslr.netdslreports.com hkgolden.comhkgolden.media @@ -5547,7 +5605,7 @@ pixnet.pro  pixnet.tw pixplug.in ptt.cc ptt2.cc ptt3.cc poe.com poecdn.net qr.ae  quora.com quoracdn.net redd.itreddit.app.link -reddit.comreddithelp.comredditmail.comredditmedia.comredditstatic.com redd.itreddit.map.fastly.net +reddit.comredditblog.comreddithelp.com redditinc.comredditmail.comredditmedia.comredditspace.comredditstatic.comredditstatus.comreddit.map.fastly.net yamibo.com  18p2p.com avsforum.com disp.cc  doom9.org eyny.com gab.comhydrogenaud.io mewe.com parler.com pincong.rocks safechat.com sis001.com v2ex.com @@ -5558,7 +5616,7 @@ sis001.com v2ex.com leigod.com tmjiasuqi.com uu.163.com xunyou.combohejiasuqi.comjiasu.bohe.com -́ + CATEGORY-GAMES 2k.com2kcoretech.online 2kgames.comtake2games.combilibiligame.cn cnbilibiligame.co @@ -5613,6 +5671,7 @@ mihoyo.com cnbhsr.com cnthemisweeps.com cn yuanshen.com +cn juequling.com cn'^.+-mihayo\.akamaized\.net$ cn nexon.co.jp  nexon.com nexon.ionexoncdn.co.kr nikke-de.com nikke-en.com nikke-fr.com nikke-jp.com nikke-kr.com nikke-sea.com100classicbooks.com amiibo.comayudanintendo.combowsersinsidestory.comexcitebots.comflipnotestudio.comgloryofheracles.comhackyourconsole.comkirbysuperstarultra.comkirbysepicyarn.comlegendofzelda.cn @@ -5756,8 +5815,8 @@ xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn cn xboxlive.com xboxone.co xboxone.com xboxone.euxboxplayanywhere.comxboxservices.comxboxstudios.com -xbx.lvynoproject.netdodi-repacks.downloaddodi-repacks.site fanatical.comfitgirl-repacks.sitegame-repack.sitehumblebundle.com loverslab.comminecraft.wiki modrinth.com nexusmods.com -papermc.ioplanetminecraft.com protondb.com speedrun.com steamdb.info +xbx.lvynoproject.netdodi-repacks.downloaddodi-repacks.site fabricmc.net fanatical.comfitgirl-repacks.sitegame-repack.sitehumblebundle.com loverslab.comminecraft.wiki modrinth.com nexusmods.com +papermc.ioplanetminecraft.comprismlauncher.org protondb.com quiltmc.org speedrun.com steamdb.info  CATEGORY-GOV-IR adliran.ir agrieng.org @@ -6075,12 +6134,14 @@ saat24.com shabestan.ir shana.ir I CATEGORY-NOVEL  ptzwx.comquanben-xiaoshuo.com quanben.io - + CATEGORY-NTP^time(.euro)?.apple.com$!^time([1-5])?\.facebook\.com$^time([1-4])?.google.com$^((((ut1-wwv)|(ntp\-(b|d|wwv))|(time(\-(([a-e]\-(g|b))|([a-e]\-wwv)))?))\.nist\.gov)|((ntp-c|ut1-time)|(utcnist(2|3)?))\.colorado\.edu)$ ^ntp[0-7]\.ntp-servers\.net$ clock.isc.org ntp.fiord.ru ntp.nat.ms ntp.nic.cz ntp.nict.jp ntp.ripe.net ntp.se ntp.ufe.cz pool.ntp.orgtime.cloudflare.com time.nrc.catime.windows.com&^ntp([1-7])?\.aliyun\.com$ +cntime.izatcloud.net +cntime.xtracloud.net cn'^ntp([1-5])?\.tencent\.com$ cncn.pool.ntp.org cnntp.neu.edu.cn @@ -6088,8 +6149,10 @@ ntp.ufe.cz pool.ntp.orgtime.cloudflare.com time.nrc.catime cn ntp.org.cn cn - + CATEGORY-NTP-CN&^ntp([1-7])?\.aliyun\.com$ +cntime.izatcloud.net +cntime.xtracloud.net cn'^ntp([1-5])?\.tencent\.com$ cncn.pool.ntp.org cnntp.neu.edu.cn @@ -6116,7 +6179,7 @@ change.orgglobalsecurity.org iana.org ietf.org itu.int  payping.ir pec.ir  pep.co.ir sadadpsp.ir sep.ir shaparak.irweswap.digital zarinpal.com - + CATEGORY-PORN18comic-god.cc18comic-god.club18comic-god.xyz 18comic.cc18comic.company 18comic.org 18comic.vip jmcomic.ltd jmcomic.me jmcomic.mobi jmcomic.moe jmcomic1.city jmcomic1.me jmcomic1.mobi jmcomic2.moe 54647.global 54647.io 54647.online  54647.org @@ -6321,7 +6384,7 @@ fanfox.net fangsung.comfanhaodian.com fanhowab.buzz fank.ru fans17.com fansnudes.com fansone.co fansteek.comfantasiasguatemala.com fantasti.cc fap-xxx.com  fap18.net fap666.com fapality.com -fapcat.com fapdude.com faperoni.com fapforfun.net faphdporn.com faphouse.com fapmovz.com fapnado.com fapopedia.netfappcelebs.comfappeningbook.comfappeningthots.com fappenist.com fapphub.com +fapcat.com fapdude.com fapello.com faperoni.com fapforfun.net faphdporn.com faphouse.com fapmovz.com fapnado.com fapomania.com fapopedia.netfappcelebs.comfappeningbook.comfappeningthots.com fappenist.com fapphub.com fapporn.mefaproulette.cofaproulette.online fapsafari.com fapster.xxxfapteencam.com fapvid.comfareastpornhub.comfastindianporn.com fatstube.comfavelaporno.comfavepornmovs.comfavepornvids.comfavjapaneseporn.comfbiqiyiav.buzz  fbjav.comfbooktaiwan.com  fc2ppv.tv fcw.xxx  fcww0.com  feet9.com fei.ru feipang.linkfemalestars.com femdomcc.net @@ -6464,7 +6527,7 @@ ksyp10.com ku77.xyzkuaimao-app.com kuanrenxs.com kum.com  la-mama.ru lacomics.org ladies.com ladybaba.netladyboygold.comladyboygold.euladyboypornonly.comlanasbigboobs.com langsuirs.com lanmdh.netlanniser-ylo.shoplaosijifuli9009.top laowang.viplargecamtube.comlargeporntube.comlatinaabuse.comlatintubeporn.com laxd.com lazymike.comlbfmaddiction.com -lbtube.com lcgirls.comleakedmeat.comleaksmodels.com leakxxx.com leliao1.com lemoncams.com lenkino.xxx lenporno.red leporno.orglepornochaud.comlepornofrais.com lesbian8.comlesbianpics.orglesbianpornvideos.comlesbiansubmission.comlesboerotica.net +lbtube.com lcgirls.comleakedmeat.comleakedzone.comleaksmodels.com leakxxx.com leliao1.com lemoncams.com lenkino.xxx lenporno.red leporno.orglepornochaud.comlepornofrais.com lesbian8.comlesbianpics.orglesbianpornvideos.comlesbiansubmission.comlesboerotica.net letfap.com letmejerk.com letmejerk.fun letsdoeit.comletsfuckme.net letsjerk.cclettherebeporn.com levelsex.com lewdthots.comlewdvrgames.com lewdweb.net lezpoo.com lgbtq.gameslianhonghong.com lianjiajr.netliboggirls.netlibraryofthumbs.comlifeselector.comlightxxxtube.com lihksnap.com likeseiyu.comliketruyen.net likuoo.videolilhumpers.com liliav.comlilith-soft.com limer.tw @@ -6529,7 +6592,7 @@ norsk.mobinoveltrove.comnovinhabucetuda.comnovinhagostosa10.co nowjav.com  nozomi.la nrdh99.buzz nrooms-dh.sbs nsfw.xxx nsfw247.to nsfwmemes.com ntten-mg.buzz nu-bay.com nu36.vipnubilefilms.comnubiles-casting.comnubiles-porn.com nubiles.net nubileset.comnubilesunscripted.com nuddess.com nude-pics.orgnude-share.com nude.hunudeandhairy.comnudebeachpussy.com nudecams.camnudecelebforum.comnudedrawer.com nudedxxx.comnudeeroticteens.com nudefiles.netnudegfporn.com nudekenya.com nudelive.comnudematurewomenpics.comnudemilfporn.com -nudes7.com nudespree.com nudeteen.orgnudeteenboys.netnudeteenladies.comnudevietnam.comnudevista.bestnudevista.club nudevista.funnudevista.link nudevista.vipnudewifeporn.comnudewomenpics.net nudify.onlinenudistbeachporn.com nudistic.com nudistlog.comnudistsexvideos.comnudistvoyeurbeach.com nudity911.comnudography.comnuespournous.com  nuita.net nukemanga.comnuki-dokoro.com  nurgay.tonurumassage.net nurxxx.mobi nushemale.com nuuporn.com  nuvid.com  nwxs8.com nyahentai.re  nym97.netobutsumania.com  obutu.com ohentai.orgohgratisporrfilm.comohpornocasero.comohpornovideo.com ohsesso.com ohsexfilm.comohsexotube.comohyeah1080.com +nudes7.com nudespree.com nudeteen.orgnudeteenboys.netnudeteenladies.comnudevietnam.comnudevista.bestnudevista.club nudevista.funnudevista.link nudevista.vipnudewifeporn.comnudewomenpics.net nudify.onlinenudistbeachporn.com nudistic.com nudistlog.comnudistsexvideos.comnudistvoyeurbeach.com nudity911.comnudography.com nudostar.tvnuespournous.com  nuita.net nukemanga.comnuki-dokoro.com  nurgay.tonurumassage.net nurxxx.mobi nushemale.com nuuporn.com  nuvid.com  nwxs8.com nyahentai.re  nym97.netobutsumania.com  obutu.com ohentai.orgohgratisporrfilm.comohpornocasero.comohpornovideo.com ohsesso.com ohsexfilm.comohsexotube.comohyeah1080.com oiobbs.com ok.xxxokazudouga.blog.jpokazudouga.tokyookkisokuho.comolder-women-movies.comolder-women-porn.com older.tube  oldje.comoli-school.com omafotze.com  omg.adult omg.blog omgteens.com omorashi.jp omorashi.orgonahodouga.comonani-daisuki.com @@ -7014,12 +7077,14 @@ cbsiam.com  cbsig.net cbsimg.netcbsinteractive.comcbsistatic.com cbsivideo.com cbsnews.comcbspressexpress.com cbssports.com cbsstatic.com cbssvideo.com viacbs.com viacom.com viacomcbs.comviacomcbspressexpress.com paramount.com amlg.iocbsaavideo.commtvnservices.comparamountplus.compplusstatic.comcbsi.live.ott.irdeto.com%!cbsplaylistserver.aws.syncbak.comcbsservice.aws.syncbak.comlink.theplatform.com - + CCBccb-life.com.cn ccb.cn ccb.com ccb.com.cn ccbcos.com -ccbfund.cn ccbfund.comccbfund.com.cn ccbfutures.cnccbfutures.comccbintl.com.hkccbleasing.comccblife-test.com.cn ccbseoul.comccbtrust.com.cn  ccbxt.com +ccbfund.cn ccbfund.comccbfund.com.cn ccbfutures.cnccbfutures.comccbintl.com.hk +!cnccbleasing.comccblife-test.com.cn ccbseoul.com +!cnccbtrust.com.cn  ccbxt.com  CCTV cctv.cn cctv.com cctvpic.com chinaepg.cn chinalive.com citv.net.cn cnms.net.cn cntv.cn cntv.com.cn cctvlib.cncctvlibrary.cncctvlib.com.cncctvlibrary.com.cn @@ -7070,15 +7135,25 @@ CHINAPOWERchinapower.csis.org & CHINASO chinaso.com pg0.cn - - CHINATELECOM -ctexcel.ca ctexcel.comctexcel.com.hk -ctexcel.fr -ctexcel.us -189.cnchinatelecom-h.comchinatelecom.com.cnchinatelecomglobal.com -chntel.com - - CHINAUNICOM  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com wo.cn  wo.com.cn wo116114.com + + CHINATELECOM +ctexcel.ca +!cn ctexcel.com +!cnctexcel.com.hk +!cn +ctexcel.fr +!cn +ctexcel.us +!cn +189.cnchinatelecom-h.comchinatelecom.com.cn#chinatelecomglobal.com +!cn +chntel.comchinatelecomhk.com +!cn + + CHINAUNICOM  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hk +!cn"chinaunicomglobal.com +!cnmychinaunicom.com wo.cn  wo.com.cn wo116114.com cuniq.com +!cn ( CHINAZ chinaz.com @@ -7187,12 +7262,14 @@ cftest6.cn CLOUDINARYcloudinary.comcloudinary.net K CLUBHOUSE clubhouse.comclubhouseapi.comjoinclubhouse.com - -CMB 8008205555.cn8008205555.comcignacmb-ipmi.com cignacmb.comcignacmbamc.comcmb-leasing.com cmbchina.biz cmbchina.cn cmbchina.com cmbi.com.hk  cmbimg.cn + +CMB 8008205555.cn8008205555.comcignacmb-ipmi.com cignacmb.comcignacmbamc.comcmb-leasing.com cmbchina.biz cmbchina.cn cmbchina.com cmbi.com.hk +!cn  cmbimg.cn cmbimg.com cmbt.cn -cmbuat.com  cmburl.cncmbwinglungbank.com cmf.biz cmf.ltd cmfchina.com +cmbuat.com  cmburl.cn cmbwinglungbank.com +!cn cmf.biz cmf.ltd cmfchina.com cmfunds.cntest-cignacmb.com - + CNcn citic baidu unicomsohu xn--zfr164b xn--fiqs8s @@ -7226,9 +7303,13 @@ flycua.com hbhk.com.cn  jdair.netjuneyaoair.com luckyair.net ccb.cn ccb.com ccb.com.cn ccbcos.com -ccbfund.cn ccbfund.comccbfund.com.cn ccbfutures.cnccbfutures.comccbintl.com.hkccbleasing.comccblife-test.com.cn ccbseoul.comccbtrust.com.cn  ccbxt.com 8008205555.cn8008205555.comcignacmb-ipmi.com cignacmb.comcignacmbamc.comcmb-leasing.com cmbchina.biz cmbchina.cn cmbchina.com cmbi.com.hk  cmbimg.cn +ccbfund.cn ccbfund.comccbfund.com.cn ccbfutures.cnccbfutures.comccbintl.com.hk +!cnccbleasing.comccblife-test.com.cn ccbseoul.com +!cnccbtrust.com.cn  ccbxt.com 8008205555.cn8008205555.comcignacmb-ipmi.com cignacmb.comcignacmbamc.comcmb-leasing.com cmbchina.biz cmbchina.cn cmbchina.com cmbi.com.hk +!cn  cmbimg.cn cmbimg.com cmbt.cn -cmbuat.com  cmburl.cncmbwinglungbank.com cmf.biz cmf.ltd cmfchina.com +cmbuat.com  cmburl.cn cmbwinglungbank.com +!cn cmf.biz cmf.ltd cmfchina.com cmfunds.cntest-cignacmb.comicbc  95588.com 95588.com.cn dccnet.com.cn icbc-at.com !cn icbc-cz.com !cn icbc-ltd.com @@ -7324,10 +7405,12 @@ howbuy.com lufunds.com  zlfund.cn citic chinaamc.comcit !cn csc108.comcsci.hk !cn -ecitic.com1234567.com.cn 18.cn  18.com.cn  dfcfw.com eastmoney.comeastmoneyfutures.com emsec.hk guba.com.cn cebbank.com ceblease.com +ecitic.com1234567.com.cn 18.cn  18.com.cn  dfcfw.com eastmoney.comeastmoneyfutures.comemsec.hk +!cn guba.com.cn cebbank.com ceblease.com eb-ind.com ebasset.com ebchina.comebchinaintl.com ebf.com.cn  ebfcn.com ebfortune.com ebtrust.com ebscn-am.com  ebscn.comeverbright.com  secec.comsunlife-everbright.com -pingan.com pingan.com.cn pingan.com.hk yqb.com taikang.comtaikanglife.comtaikangzhijia.comtkhealthcare.comhuangyuhui.net 517lppz.com lppz.com lppzimg.com +pingan.com pingan.com.cn pingan.com.hk +!cn yqb.com taikang.comtaikanglife.comtaikangzhijia.comtkhealthcare.comhuangyuhui.net 517lppz.com lppz.com lppzimg.com heytea.com 3songshu.com haidilao.com a2z.org.cn cn amazonaws.cn @@ -7404,11 +7487,20 @@ funcdn.com  leigod.cn 58ganji.com58ganji-corp.com  ganji.com 58corp.com  58dns.org 58lovepet.com  58uxd.com 58v5.cn 58xinghuo.cn 58xinghuo.com 58xueche.com anjuke.comanjukestatic.com chinahr.com chrstatic.com daojia.com diandao.org fang.com  sofun.com soufunimg.com  jxedt.com  jxksw.net -roomeet.cn xinchong.com zhuancorp.comzhuanspirit.comzhuanzhuan.com c-ctrip.com colinker.com ctrip.cn ctrip.co.id ctrip.co.kr ctrip.co.th  ctrip.com ctrip.com.hk ctrip.my ctrip.sg ctripbiz.com ctripbuy.hk ctripteam.com doticloud.com easytrip.com hhtravel.comhhtravel.com.tw izuchebao.com  lvtds.com  shuntu.cn +roomeet.cn xinchong.com zhuancorp.comzhuanspirit.comzhuanzhuan.com c-ctrip.com colinker.com ctrip.cn ctrip.co.id +!cn ctrip.co.kr +!cn ctrip.co.th +!cn  ctrip.com ctrip.com.hk +!cnctrip.my +!cnctrip.sg +!cn ctripbiz.com ctripbuy.hk +!cn ctripteam.com doticloud.com easytrip.com hhtravel.comhhtravel.com.tw +!cn izuchebao.com  lvtds.com  shuntu.cn skysea.com  suanya.cn suanya.com tieyou.com -toptown.cn toursbms.com trip.com tripcdn.com +toptown.cn toursbms.comtrip.com +!cn tripcdn.com vipdlt.com dangdang.com ddimg.cn doservice.com ele.me ele.to eleme.cn eleme.io elemecdn.cn elemecdn.com  elenet.me 1huizhan.com3.cn  300hu.com  360buy.cn @@ -7417,8 +7509,12 @@ vipdlt.com dangdang.com ddimg.cn doservice.com 7fresh.com baitiao.comblackdragon.com  caiyu.com chicalot.cnchinabank.com.cncloud-beijing.comcloud-hebi.comcloud-ningbo.comcloud-ordos.comcloud-shenzhen.comcloud-shiyan.comcloud-wuhan.comcloud-xian.com cloud-xm.comcloud-zhaoqing.comcloud-zhongwei.comcloudanqing.comcloudbaoshan.comcloudbeibei.comcloudbinzhou.comcloudchangde.comcloudchangsha.comcloudchangzhou.comcloudchaozhou.comcloudchengde.comcloudchengdu.comcloudchuzhou.com cloudczs.comclouddalian.comclouddatong.comclouddongying.comcloudfoshan.comcloudfuqing.comcloudganzhou.comcloudguangzhou.comcloudhaidong.comcloudhefei.comcloudhengshui.comcloudhuaihua.comcloudhuizhou.comcloudjinan.comcloudjinchang.comcloudjingzhou.comcloudjining.comcloudjiujiang.comcloudkunming.comcloudleshan.comcloudlijiang.comcloudlishui.comcloudluohe.comcloudluoyang.comcloudmeishan.comcloudnanan.comcloudnanjing.comcloudnanning.comcloudnantong.comcloudquanzhou.comcloudsanya.comcloudshanghai.comcloudshaoyang.comcloudshenfuxingqu.comcloudsiping.comcloudsuqian.comcloudtangshan.comcloudtianjin.comcloudtongchuan.comcloudtongliang.comcloudweinan.comcloudxiangtan.comcloudxianyou.comcloudxining.comcloudyanan.comcloudyancheng.comcloudyantai.comcloudyinchuan.comcloudyueyang.comcloudyuncheng.com cloudyuxi.comcloudzhongshan.comcloudzhuhai.com dao123.com duiou.com.cn goselling.com healthjd.com isvjcloud.com  isvjd.comjcloud-cache.comjcloud-cache.netjcloud-cdn.comjcloud-live.comjcloud-oss.com jcloud.comjcloudcache.comjcloudcache.net jcloudcs.com jclouddn.com jclouddns.com jclouddns.net jcloudec.comjcloudedge.comjcloudedge.netjcloudgslb.comjcloudgslb.net jcloudimg.com jcloudimg.net jcloudlb.com jcloudlb.netjcloudlive.com jcloudlv.com jcloudoss.comjcloudresolve.comjcloudresolve.net jcloudss.comjcloudstatic.comjcloudstatic.netjcloudvideo.comjcloudvideo.net  jclps.com -jd-app.com jd-ex.cn  jd-ex.com jd-ex.com.cn  jd-ex.net jd.cn jd.co.th -jd.com  jd.com.cn jd.hk jd.id jd.ru jd.shopjdbusiness.com jdcache.com  jdcdn.comjdcloud-api.comjdcloud-api.netjdcloud-edu.comjdcloud-elite.comjdcloud-elive.comjdcloud-livebuy.comjdcloud-mail.comjdcloud-openapi.comjdcloud-oss.com jdcloud.comjdcloudcache.comjdcloudcache.netjdcloudcdn.comjdcloudcdn.net jdcloudcs.comjdclouddns.comjdclouddns.netjdcloudedge.comjdcloudedge.net jdcloudlb.com jdcloudlb.netjdcloudlive.comjdcloudlive.netjdcloudresolve.comjdcloudresolve.netjdcloudsite.comjdcloudstatic.comjdcloudstatic.netjdcloudstatus.comjdcloudstatus.netjdcloudvideo.comjdcloudvideo.netjdcloudwaf.comjddapeigou.com jddebug.com jddglobal.com jdemall.com  jdfw1.com +jd-app.com jd-ex.cn  jd-ex.com jd-ex.com.cn  jd-ex.net jd.cnjd.co.th +!cn +jd.com  jd.com.cnjd.hk +!cnjd.id +!cnjd.ru +!cn jd.shopjdbusiness.com jdcache.com  jdcdn.comjdcloud-api.comjdcloud-api.netjdcloud-edu.comjdcloud-elite.comjdcloud-elive.comjdcloud-livebuy.comjdcloud-mail.comjdcloud-openapi.comjdcloud-oss.com jdcloud.comjdcloudcache.comjdcloudcache.netjdcloudcdn.comjdcloudcdn.net jdcloudcs.comjdclouddns.comjdclouddns.netjdcloudedge.comjdcloudedge.net jdcloudlb.com jdcloudlb.netjdcloudlive.comjdcloudlive.netjdcloudresolve.comjdcloudresolve.netjdcloudsite.comjdcloudstatic.comjdcloudstatic.netjdcloudstatus.comjdcloudstatus.netjdcloudvideo.comjdcloudvideo.netjdcloudwaf.comjddapeigou.com jddebug.com jddglobal.com jdemall.com  jdfw1.com jdgslb.com jdgslb.net jdh.com jdjinrong.com jdl.cn jdl.com @@ -7468,8 +7564,10 @@ anitama.cn anitama.net b23.tv  bigfun.cn bigfunapp.cn  bili22.cn bili2233.cn  bili23.cn  bili33.cn biliapi.com biliapi.net bilibili.cc bilibili.cn bilibili.com bilibili.net bilibili.tv !cnbilibilipay.cnbilibilipay.com bilicdn1.com bilicdn2.com bilicdn3.com bilicdn4.com bilicdn5.com biligo.com biliimg.com biliintl.com -!cn bilivideo.cn bilivideo.com bilivideo.net dreamcast.hk  hdslb.com  hdslb.org im9.com maoercdn.com -mincdn.com yo9.com$ upos-hz-mirrorakam.akamaized.net ciweimao.com hbooker.comkuangxiangit.com cowlevel.net  cdncl.net biji.com +!cn bilivideo.cn bilivideo.com bilivideo.net dreamcast.hk +!cn  hdslb.com  hdslb.org im9.com maoercdn.com +mincdn.com yo9.com- upos-hz-mirrorakam.akamaized.net +!cn ciweimao.com hbooker.comkuangxiangit.com cowlevel.net  cdncl.net biji.com ddmogo.com igetget.cn igetget.com luojilab.com  mogoo.com sao.cn saolife.com dmzj.com  douyu.com douyu.tv douyucdn.cn douyucdn2.cn douyuscdn.com douyutv.com dtstatic.com duitang.com gamersky.com @@ -7519,6 +7617,7 @@ mihoyo.com cnbhsr.com cnthemisweeps.com cn yuanshen.com +cn juequling.com cn'^.+-mihayo\.akamaized\.net$ cn  muwai.com  pplive.cn pplive.com pptv.com qingting.fm qtfm.cn  sfacg.com @@ -7625,6 +7724,8 @@ afdian.net afdiancdn.com agora.io agoraio.cn agoralab.co antutu.com bitauto.combitautoimg.com cheyisou.com  yiche.com  yccdn.com shimo.im  yuque.com  doc88.com  docin.com douding.cn&^ntp([1-7])?\.aliyun\.com$ +cntime.izatcloud.net +cntime.xtracloud.net cn'^ntp([1-5])?\.tencent\.com$ cncn.pool.ntp.org cnntp.neu.edu.cn @@ -7763,7 +7864,13 @@ g.tbcdn.cn ads$v6-adashx.ut.taobao.com adsw.m.taobao.com adsyiliao.hupan.com -adsalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.comalibabadns.com +adsalibabacloud.co.in +!cnalibabacloud.com alibabacloud.com.au +!cn alibabacloud.com.hk +!cn alibabacloud.com.my +!cn alibabacloud.com.sg +!cn alibabacloud.com.tw +!cn alicloud.comalibabadns.com alicdn.comalicloudapi.com alidayu.com alidns.com alikunlun.comaliyun-inc.comaliyun-iot-share.com aliyun.com aliyuncdn.com cdngslb.com hichina.comica-alliance.org kunlunaq.com kunlunar.com kunlunca.com kunluncan.com kunlunea.com kunlungem.com kunlungr.com kunlunhuf.com kunlunle.com kunlunli.com kunlunno.com kunlunpi.com kunlunra.com kunlunsa.com kunlunsc.com kunlunsl.com kunlunso.com kunlunta.com kunlunvi.com kunlunwe.com mxhichina.com myalicdn.com,oss-ap-northeast-1.aliyuncs.com @@ -7781,8 +7888,9 @@ aliyun.com aliyuncdn.com cdngslb.com hichina.comica-allianc !cn'oss-me-east-1.aliyuncs.com !cn'oss-us-east-1.aliyuncs.com !cn'oss-us-west-1.aliyuncs.com -!cn ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.toteambition.comteambition.netteambitionapis.com uc.cn  ucweb.com 25pp.com  56che.com  95095.com 9game.cn -aliapp.orgalibaba-inc.com alibaba.comalibabacapital.comalibabacorp.comalibabadoctor.comalibabafuturehotel.comalibabagroup.comalibabaplanet.comalibabaued.comalibabausercontent.com alifanyi.comalihealth.com.cn alihealth.hk +!cn ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.toteambition.comteambition.netteambitionapis.com uc.cn  uc123.com  ucweb.com uczzd.cn 25pp.com  56che.com  95095.com 9game.cn +aliapp.orgalibaba-inc.com alibaba.comalibabacapital.comalibabacorp.comalibabadoctor.comalibabafuturehotel.comalibabagroup.comalibabaplanet.comalibabaued.comalibabausercontent.com alifanyi.comalihealth.com.cn alihealth.hk +!cn aliimg.com alikmd.com alimama.com alimebot.com alimei.com alios.cn  alipay.cn @@ -7799,7 +7907,8 @@ jhgtgb.com kanbox.com lazada.comliangxinyao.com m-now.cn maitix.com  mdeer.com mei.commiaostreet.com  mshare.cc nic.xinphilanthropy.xin phpwind.com phpwind.netqingtingtrip.com  rexpos.cn saee.org.cn shenjing.com  shuqi.comshuqireader.com sparenode.com  supet.com  ttpod.com wandoujia.com xin.xinxinlingshou.cn yowhale.com yunos-inc.com  yunos.comyushanfang.com -zuodao.comaliexpress.com aliexpress.rualipayplus.com alipay.hk +zuodao.comaliexpress.com aliexpress.ru +!cnalipayplus.com alipay.hk !cn alipaymo.com !cnalicloudccp.com alipan.comaliyundrive.comaliyundrive.net cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com @@ -7808,9 +7917,11 @@ fund123.cn antfin.com antgroup.comantgroup-inc.cn sm.cn 1688.com etao.com juhuasuan.comlingshoujia.com mashort.cn pailitao.com taobao.com -taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.com tmall.ru tmalltv.com tmjl.ai quark.cn alitrip.com  feizhu.cn +taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.comtmall.ru +!cn tmalltv.com tmjl.ai quark.cn alitrip.com  feizhu.cn feizhu.com -fliggy.com  fliggy.hk +fliggy.com fliggy.hk +!cn iuynfg.com a-map.cn a-map.co a-map.link  a-map.vipacloudrender.com amap.com amapauto.com anav.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net koubei.com zhisheng.com npmmirror.com goofish.com  b3log.org a.baidu.com @@ -7958,7 +8069,7 @@ koubei.com zhisheng.com npmmirror.com goofish.com  b3log.org ads zuoyebang.cc zuoyebang.com zybang.com baidu 91.com -aipage.com apollo.auto baidu.cn  baidu.com baidu.com.cn baidubce.combaiducontent.com baidupcs.combaidustatic.com +aipage.com apollo.auto baidu.cn  baidu.com baidu.com.cn baiduapp.com baidubce.combaiducontent.com baidupcs.combaidustatic.com baifae.com baifubao.com bcebos.combdcloudapi.com  bdimg.com bdstatic.com bdtjrcv.com  bdydns.cn bdydns.com @@ -7969,7 +8080,11 @@ hao123.com hao123img.com hao222.com haokan.com jomocdn.net jomodns.com mipcdn.com  nuomi.com quyaoya.com -shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.com sl916.com +shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.comduxiaoman-int.com duxiaoman.comduxiaomanfintech.comduxiaomantech.com dxm-cdn.com dxm-int.com +dxmlcf.comdxmlcfintech.com +dxmpay.com dxmstatic.com +dxmyqh.com +paydxm.com sl916.com cn bluepoch.com cnactivity-zhendingtech.comchangdunovel.comfanqienovel.comfanqieopen.comfanqieopenpic.comfanqieopenstatic.comfanqieopenvod.com fanqiesdk.comfanqiesdkpic.comfanqiesdkstatic.comfanqiesdkvod.com fqnovel.com fqnovelim.comfqnovel-op.com fqnovelop.comfqnovelpic.comfqnovelstatic.comfqnovelvod.comihaohaoxuexi.com muyewx.com novelfm.comnovelfmpic.comnovelfmstatic.comnovelfmvod.com qznovel.comqznovelpic.comqznovelstatic.comqznovelvod.comp3-novel.byteimg.comp6-novel.byteimg.com(ads3-normal-hl.zijieapi.com @@ -8080,7 +8195,11 @@ ixigua.comixiguavideo.com ixgvideo.combdxiguaimg.combdxig feishu.net feishucdn.com feishupkg.com wukong.comwukongwenda.cnwukongwenda.com dcarapi.com dcarimg.com dcarlive.comdcarstatic.com dcarvod.com dcdapp.com dongchedi.comdongchediapp.com  365yg.comgogokid.com.cn gogokid.com  pipix.com  faceu.com ulikecam.com -rsproxy.cn didi-food.com didi.cn didialift.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comdiditaxi.com.cn +rsproxy.cn didi-food.com +!cn didi.cn didialift.comdidiaustralia.blog +!cndidichuxing.comdidiglobal.com +!cndidimobility.co.jp +!cndidistatic.comdiditaxi.com.cn udache.comxiaojukeji.com dji.com dji.net djicdn.com djiops.comdjiservice.org skypixel.com @@ -8145,8 +8264,10 @@ erp321.net  jsterp.cn jugongdan.com jushuitan.cn jushuitan.co scm121.com shopss.com shuiyaohuo.cnshuiyaohuo.com  surerp.cn surerp.com -sursung.cn sursung.com cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com testplus.cn -wps.cn wps.com  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn kimg.cn kingsoft.com ksmobile.com +sursung.cn sursung.com cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com xoyocdn.com cbjq.com testplus.cn +wps.cn wps.com  wpscdn.cn +wpscdn.com +kscord.com  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn kimg.cn kingsoft.com ksmobile.com ks-cdn.com ks-cdn1.com  ksyun.com ksyuncdn.com ksyungslb.com lenovo.net baiying.cnbaiying.com.cncftsupport.comcon-c-hybris.lenovo.comileapcloud.comlenovocloudos.com  lenovo.cn @@ -8169,7 +8290,7 @@ youdao.com zhuanzfx.comanalytics.163.com ads crash.163.com ads crashlytics.163.com ads g.163.com -ads coloros.com finzfin.com +adsallawntech.com coloros.com finzfin.com heytap.com heytapcs.comheytapdownload.comheytapimage.comheytapmobi.com myoppo.com nearme.com.cn oppo.cn oppo.com  oppo.mobioppodigital.com  oppoer.meoppomobile.com oppopay.com opposhop.cn realme.com realmebbs.comrealmemobile.com oneplus.com @@ -8358,7 +8479,7 @@ yufuid.net yunjitele.com.+\.dnse[0-5]\.(cn|com)$'#.+\.tdnsv([1-9] ads push.qq.com ads pgdt.gtimg.cn ads ugdtimg.com -ads openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io +ads openmidas.com  qq.designqqgamedesign.comtencent-cloud.cntencent-cloud.comtencent.designtencentcloud.com tjstats.comwegamedeveloper.comweixinbridge.comweui.io cnbattlecare.net cn gameitop.com cn gameloop.com @@ -8457,17 +8578,18 @@ scescdn.cn yuewen.com hongxiu.com lrts.me qdmm.com qidian.com readnovel.com tingbook.com webnovel.com xs8.cn xxsy.net qq.xn--fiqs8sxn--r70as2s.xn--fiqs8s -apcdns.net foxmail.comfoxmail.com.cn gtimg.cn  gtimg.com gtimg.com.cn idqqimg.com imqq.com  myapp.com qlogo.cn qpic.cn  qq.cn.com +apcdns.net  cdn-go.cn foxmail.comfoxmail.com.cn gtimg.cn  gtimg.com gtimg.com.cn idqqimg.com imqq.com  myapp.com qlogo.cn qpic.cn  qq.cn.com qq.com  qq.com.cn qq.wang qqmail.com  qzone.com rtx.com.cnservicewechat.com tencent.cn tencent.co.id -!cn tencent.comtencent.com.cntencent.com.hk tencent.nettencent.net.cntencentmusic.com -tenpay.com  tfogc.com +!cn tencent.comtencent.com.cntencent.com.hk +!cn tencent.nettencent.net.cntencentmusic.com +tenpay.com  tfogc.com tlivepush.com txlivecdn.com wechat.com wechatpay.cn weiyun.comwetv.vip !cn wetvinfo.com -!cn wetv.qq.com +!cn wxlivecdn.com wetv.qq.com !cn alloyteam.com imweb.io ivweb.io  fyeds.com fyeds0.com fyeds1.com @@ -8495,10 +8617,11 @@ fyeds9.com fymall0.com fymall1.com fymall4.com fymall7.com adstracking.miui.com ads mi-img.com -mi.com  mifile.cn miui.com +mi.com  mifile.cn +mijia.tech miui.com miwifi.com  xiaomi.cn xiaomi.com -xiaomi.net xiaomiev.comxiaomimobile.comxiaomiyoupin.com +xiaomi.net xiaomiev.comxiaomimobile.comxiaomixiaoai.comxiaomiyoupin.com saxyit.com sandai.netthunderurl.com xunlei.com  00cdn.com  88cdn.com  p2cdn.comthundercdn.com xycloud.com  xycdn.com nubia.cn  nubia.com redmagic.com @@ -8506,12 +8629,22 @@ zte.com.cn ztemall.com  ztems.combbs.ztedevices.comwww.zted !cn  ezpro.pro 10099.com.cn chn.cn  ahitv.com  cqccn.com gcable.com.cn sc96655.com  isxtv.com sdgdwljt.com 10086.cn 139.comchinamobile.comchinamobileltd.com migucloud.com migu.cn cmvideo.cn miguvideo.com andfx.cn  andfx.net -cmicrwx.cncmpassport.comfetion-portal.com fetionpic.com mmarket.com mmarket6.com -ctexcel.ca ctexcel.comctexcel.com.hk -ctexcel.fr -ctexcel.us -189.cnchinatelecom-h.comchinatelecom.com.cnchinatelecomglobal.com -chntel.com  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com wo.cn  wo.com.cn wo116114.com jikipedia.com qiuwen.wikishidianbaike.com  51nod.com +cmicrwx.cncmpassport.comfetion-portal.com fetionpic.com mmarket.com mmarket6.com +ctexcel.ca +!cn ctexcel.com +!cnctexcel.com.hk +!cn +ctexcel.fr +!cn +ctexcel.us +!cn +189.cnchinatelecom-h.comchinatelecom.com.cn#chinatelecomglobal.com +!cn +chntel.comchinatelecomhk.com +!cn  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hk +!cn"chinaunicomglobal.com +!cnmychinaunicom.com wo.cn  wo.com.cn wo116114.com cuniq.com +!cn jikipedia.com qiuwen.wikishidianbaike.com  51nod.com acwing.com hihocoder.com jisuanke.com luogu.com.cn oi-wiki.com openjudge.cn uoj.ac  vijos.org leetcode.cnleetcode-cn.com lingkou.xyz lingkou.com lingkou.cn @@ -8664,7 +8797,7 @@ pubyun.com  qc188.com qcds.com qd8.com qd-metro.com qh24 qschou.com qtmojo.com qudong.com -qugame.com  qunar.com qunarzz.comqunjielong.com qyer.com rfchost.comrockyenglish.com rong360.com rtbasia.com  ruan8.com +qugame.com  qunar.com qunarzz.comqunjielong.com qyer.comrockyenglish.com rong360.com rtbasia.com  ruan8.com runoob.com rzrc114.com  saibo.com sanguosha.com sanwen.net  scdng.com scoregg.com sczsxx.com sdo.com sec-wiki.com @@ -8767,6 +8900,8 @@ comodo.net comodoca.com comodoca2.com comodoca3.com comodoca CONTENTFULcontentful.com ctfassets.net H COOLAPK coolapk.comcoolapkmarket.comcoolapkmarket.net +_ +COREL  corel.com  corel.net coreldraw.app coreldraw.comcorelstore.com O COSTCOcostco-static.com costco.comcostcobusinessdelivery.com @@ -8791,17 +8926,31 @@ gitbook.cn gitchat.cn gitcode.com gitcode.net  iteye.com kaifayun.comprogrammer.com.cnprogrammer.net.cn 4 CSIS csis.orgcsis-prod.s3.amazonaws.com -^ -CTEXCEL -ctexcel.ca ctexcel.comctexcel.com.hk -ctexcel.fr -ctexcel.us - -CTRIP c-ctrip.com colinker.com ctrip.cn ctrip.co.id ctrip.co.kr ctrip.co.th  ctrip.com ctrip.com.hk ctrip.my ctrip.sg ctripbiz.com ctripbuy.hk ctripteam.com doticloud.com easytrip.com hhtravel.comhhtravel.com.tw izuchebao.com  lvtds.com  shuntu.cn + +CTEXCEL +ctexcel.ca +!cn ctexcel.com +!cnctexcel.com.hk +!cn +ctexcel.fr +!cn +ctexcel.us +!cn + +CTRIP c-ctrip.com colinker.com ctrip.cn ctrip.co.id +!cn ctrip.co.kr +!cn ctrip.co.th +!cn  ctrip.com ctrip.com.hk +!cnctrip.my +!cnctrip.sg +!cn ctripbiz.com ctripbuy.hk +!cn ctripteam.com doticloud.com easytrip.com hhtravel.comhhtravel.com.tw +!cn izuchebao.com  lvtds.com  shuntu.cn skysea.com  suanya.cn suanya.com tieyou.com -toptown.cn toursbms.com trip.com tripcdn.com +toptown.cn toursbms.comtrip.com +!cn tripcdn.com vipdlt.com  @@ -8888,8 +9037,12 @@ DEVIANTARTdeviantart.comdeviantart.net da-files.com DGTLE  dgtle.com  DIDA365 dida365.com - -DIDI didi-food.com didi.cn didialift.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comdiditaxi.com.cn + +DIDI didi-food.com +!cn didi.cn didialift.comdidiaustralia.blog +!cndidichuxing.comdidiglobal.com +!cndidimobility.co.jp +!cndidistatic.comdiditaxi.com.cn udache.comxiaojukeji.com  DIGICERT dcocsp.cn @@ -9063,8 +9216,9 @@ pvzgw2.com pvzheroes.comseaofsolitude.comsimcity-buildit.com skate2.com spearhead.krstarwarsfallenorder.comstarwarsjedifallenorder.comstarwarstheoldrepublic.comswjedifallenorder.com  swjfo.com  swtor.com  swtor.net mysims.com thesims.com thesims3.com thesims4.comthesimssocial.com titanfall.commythicentertainment.commythicentertainment.netmythicgames.comultimaonline.com uo.com uoherald.com xdsummit.comea.tt.omtrdc.neteaassets-a.akamaihd.net - - EASTMONEY1234567.com.cn 18.cn  18.com.cn  dfcfw.com eastmoney.comeastmoneyfutures.com emsec.hk guba.com.cn + + EASTMONEY1234567.com.cn 18.cn  18.com.cn  dfcfw.com eastmoney.comeastmoneyfutures.comemsec.hk +!cn guba.com.cn ) EASYLIST easylist.to lanik.us : @@ -9407,7 +9561,7 @@ gcores.com GEETEST geetest.com#geetest.datasink.sensorsdata.cn ` GEMFURY  fury.blog fury.co fury.dev  fury.help fury.io gemfury.com - + GEOLOCATION-!CNcolorfulstage.com crypton.co.jp lapriere.jpmagicalmirai.com mikuexpo.com piapro.net snowmiku.com bowlroll.net pubmatic.compubmatic.co.jpads.pubmatic.com ads taboola.com censorship.no citizenlab.cacitizenlab.orgepicbrowser.comapplecensorship.comfreebrowser.orgfreewechat.com freeweibo.com freezhihu.org greatfire.org pao-pao.netwikiunblocked.orghaveibeenpwned.compwnedpasswords.comgetlantern.org @@ -9710,10 +9864,16 @@ myatos.netcertificat2.comtrendmicro.com  gandi.net alphassl cnglobalsign.co.ukglobalsign.com cnglobalsign.com.auglobalsign.com.brglobalsign.com.hkglobalsign.com.sg globalsign.es globalsign.eu globalsign.frglobalsign.net globalsign.nlglobalsigncdn.com cn4(cdn.globalsigncdn.com.cdn.cloudflare.net -cn godaddy.comx.co godaddy pki.googclients1.google.compki.google.com crl.pki.goog +cn godaddy.comx.co godaddy pki.goog!pki-goog.l.google.com +cn +c.pki.goog +cn +i.pki.goog +cn +o.pki.goog +cnpublicca.googleapis.com#preprod-publicca.googleapis.comclients1.google.compki.google.com crl.pki.goog cn crls.pki.goog cn ocsp.pki.goog -cn!pki-goog.l.google.com cn eca.hinet.netgtlsca.nat.gov.twhongkongpost.gov.hk ecert.gov.hk identrust.comidentrust.co.uk identrust.net  lencr.orgletsencrypt.comletsencrypt.org msocsp.comcrl.microsoft.commscrl.microsoft.comocsp.microsoft.comoneocsp.microsoft.comwww.microsoft.com cn secom.co.jpsecomtrust.netcybertrust.co.jpcybertrust.ne.jpmanagedpki.ne.jpenterprisessl.comhackerguardian.cominstantssl.com oemssl.cn @@ -9975,7 +10135,7 @@ egghead.io  ebi.ac.ukembl-hamburg.de embl.de embl.fr em kaggle.com  kaggle.io kaggle.netkaggleusercontent.comkhanacademy.org kastatic.org knovel.com laracasts.com libgen.life -libgen.fungen.lib.rus.ec  libgen.is  libgen.me  libgen.rs  libgen.st lifewire.commasterclass.com mzed.com oreil.ly oreilly.comoreilly.com.cn +libgen.fun library.lolgen.lib.rus.ec  libgen.is  libgen.me  libgen.rs  libgen.st lifewire.commasterclass.com mzed.com oreil.ly oreilly.comoreilly.com.cn cnoreilly.revieworeillystatic.com orl.lyactivelearnprimary.co.ukactivelearnprimary.com.auactiveteachonline.comaddison-wesley.ch adobepress.ch btec.co.uk ciscopress.chconnectionsacademy.comconnectionseducation.comconnectionslearning.comdombosco.com.br ecpa.frescapestudios.co.uk ilongman.com integral7.com'#internationalconnectionsacademy.com @@ -9987,10 +10147,11 @@ pearson.cl pearson.co.in pearson.co.jp pearson.compearson.c pearson.es pearson.fr pearson.plpearsonactivelearn.compearsonassessment.bepearsonassessment.depearsonassessment.dkpearsonassessment.frpearsonassessment.nlpearsonassessment.nopearsonassessment.sepearsonassessments.compearsoncanada.capearsonclinical.bepearsonclinical.capearsonclinical.co.ukpearsonclinical.com.aupearsonclinical.com.brpearsonclinical.depearsonclinical.dkpearsonclinical.espearsonclinical.eupearsonclinical.frpearsonclinical.inpearsonclinical.nlpearsonclinical.nopearsonclinical.sepearsoncmg.compearsoncred.compearsoned.co.nz pearsoned.compearsoneducacion.netpearsoneducationbooks.com pearsonelt.chpearsonelt.compearsonenespanol.compearsonhighered.compearsoninstitute.ac.zapearsonlongman.chpearsononlineacademy.compearsonperu.pepearsonplaces.com.au%!pearsonschoolsandfecolleges.co.ukpearsonvue.compearsonvue.netpobl-content.com  pvue1.com  pvue2.comquatrum.com.brstark-verlag.chtalentlens.comthemathsfactor.comxn--pearsonenespaol-brb.com sitepoint.comskillshare.comspiceworks.comspiceworksstatic.com techtimes.com ted.com -tedcdn.com udacity.com  udemy.com udemycdn.com w3schools.comchemequations.com abema.io abema.tv abema-tv.com  adx.promo ameba.jp amebame.com amebaownd.comamebaowndme.com  ameblo.jp bucketeer.jpdokusho-ojikan.jp hayabusa.dev hayabusa.iohayabusa.media winticket.jpabematv.akamaized.net#ds-linear-abematv.akamaized.net ds-vod-abematv.akamaized.net linear-abematv.akamaized.netvod-abematv.akamaized.net amc.com amcn.comamcnetworks.com amcplus.comrne5a6ae085b6c43020dea230eb0c0ecc33a188227507da97b8ecc05eb8beace6.us-east-1.prod.service.minerva.devices.a2z.com  9anime.cz  9anime.id  9anime.to  9anime.wsanimedao-tv.comcrunchyroll.comfunimation.com gogo-load.com gogoanime.vcgogoanime.wiki gogocdn.net -hidive.com -vrv.co -age.tv  agedm.org ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net +tedcdn.com udacity.com  udemy.com udemycdn.com w3schools.comchemequations.com abema.io abema.tv abema-tv.com  adx.promo ameba.jp amebame.com amebaownd.comamebaowndme.com  ameblo.jp bucketeer.jpdokusho-ojikan.jp hayabusa.dev hayabusa.iohayabusa.media winticket.jpabematv.akamaized.net#ds-linear-abematv.akamaized.net ds-vod-abematv.akamaized.net linear-abematv.akamaized.netvod-abematv.akamaized.net amc.com amcn.comamcnetworks.com amcplus.comrne5a6ae085b6c43020dea230eb0c0ecc33a188227507da97b8ecc05eb8beace6.us-east-1.prod.service.minerva.devices.a2z.com  9anime.cz  9anime.id  9anime.to  9anime.ws +age.tv  agedm.org agedm.tv agefans.com +agemys.org  agedm.appanimedao-tv.comcrunchyroll.comfunimation.com +vrv.co gogoanime.vcgogoanime.wiki gogoanime3.co gogotaku.info gogo-load.com gogocdn.net +hidive.com ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net att.tv atttvnow.comattwatchtv.com directv.com  dtvce.comnettyinternet.combahamut.akamaized.netbahamut.com.tw gamer.com.twgamer2-cds.cdn.hinet.netgamer-cds.cdn.hinet.net bandcamp.com bcbits.com boomerang.com wbdnbo.net catchplay.comtra-ww000-cp.akamaized.net @@ -10173,8 +10334,8 @@ xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn cn xboxlive.com xboxone.co xboxone.com xboxone.euxboxplayanywhere.comxboxservices.comxboxstudios.com -xbx.lvynoproject.netdodi-repacks.downloaddodi-repacks.site fanatical.comfitgirl-repacks.sitegame-repack.sitehumblebundle.com loverslab.comminecraft.wiki modrinth.com nexusmods.com -papermc.ioplanetminecraft.com protondb.com speedrun.com steamdb.info  ptzwx.comquanben-xiaoshuo.com +xbx.lvynoproject.netdodi-repacks.downloaddodi-repacks.site fabricmc.net fanatical.comfitgirl-repacks.sitegame-repack.sitehumblebundle.com loverslab.comminecraft.wiki modrinth.com nexusmods.com +papermc.ioplanetminecraft.comprismlauncher.org protondb.com quiltmc.org speedrun.com steamdb.info  ptzwx.comquanben-xiaoshuo.com quanben.iodailymotion.com dm-event.net  dmcdn.net dandanzan.cc  nunuyy.cc dazn-api.com dazn.com dazndn.com indazn.com indaznlab.comdeviantart.comdeviantart.net da-files.com*&content-ause1-ur-discovery1.uplynk.com disco-api.comdiscoveryplus.comabc-studios.com abc.com edgedatg.com bamgrid.comdmed.technology dtci.codtci.technology @@ -10187,7 +10348,7 @@ dilcdn.comdisney-asia.comdisney-discount.comdisney-plus.net! dssott.comgo-disneyworldgo.com go.com  mickey.tvmoviesanywhere.comnomadlandmovie.chplaymation.comshopdisney.comshops-disney.comsorcerersarena.comspaindisney.comstar-brasil.comstar-latam.com starwars.com#starwarsgalacticstarcruiser.comstarwarskids.comstreamingdisney.netthestationbymaker.comthisispolaris.comwatchdisneyfe.com gimy.cc gimy.co gimy.to gimy.tv goodreads.com gr-assets.comapl-hamivideo.cdn.hinet.nethamivideo.hinet.net&"mobilelive-hamivideo.cdn.hinet.netpvr-hamivideo.cdn.hinet.netscc.ott.hinet.net"static-hamivideo.cdn.hinet.net&"tvcastlive-hamivideo.cdn.hinet.net#weblive-hamivideo.cdn.hinet.net cinemax.comforthethrone.com hbo.com hboasia.com hbogo.co.th  hbogo.com hbogo.eu hbogoasia.com hbogoasia.hk hbogoasia.id hbogoasia.ph hbogoasia.sg hbogoasia.tw hbomax.com hbomaxcdn.com -hbonow.com  maxgo.comhbo.com.c.footprint.nethbo.com.edgesuite.nethbo.map.fastly.net$ hbomax-images.warnermediacdn.comhbomaxdash.s.llnwi.net +hbonow.com max.com  maxgo.comhbo.com.c.footprint.nethbo.com.edgesuite.nethbo.map.fastly.net$ hbomax-images.warnermediacdn.comhbomaxdash.s.llnwi.net 112263.com callhulu.comfindyourlimits.com freehulu.com  hooloo.tv  hoolu.com hoolu.tv hu1u.com huloo.cc huloo.tv hulu.com hulu.jp hulu.tv hulu.ushuluaction.com huluad.com huluapp.com huluasks.com hulucall.com hulufree.com hulugans.comhulugermany.com hulugo.com @@ -10212,6 +10373,7 @@ mihoyo.com cnbhsr.com cnthemisweeps.com cn yuanshen.com +cn juequling.com cn'^.+-mihayo\.akamaized\.net$ cn biggggg.com  mudvod.tv nbys.tv nbys1.tv nbyy.tv newpppp.com nivod.tv  nivodi.tv nivodz.com @@ -10358,7 +10520,7 @@ pixnet.pro  pixnet.tw pixplug.in ptt.cc ptt2.cc ptt3.cc poe.com poecdn.net qr.ae  quora.com quoracdn.net redd.itreddit.app.link -reddit.comreddithelp.comredditmail.comredditmedia.comredditstatic.com redd.itreddit.map.fastly.net +reddit.comredditblog.comreddithelp.com redditinc.comredditmail.comredditmedia.comredditspace.comredditstatic.comredditstatus.comreddit.map.fastly.net yamibo.com  18p2p.com avsforum.com disp.cc  doom9.org eyny.com gab.comhydrogenaud.io mewe.com parler.com pincong.rocks safechat.com sis001.com v2ex.com bsky.app bsky.network bsky.socialaboutfacebook.com accessfacebookfromschool.com acebooik.com acebook.comadvancediddetection.comaskfacebook.netaskfacebook.org @@ -10710,7 +10872,7 @@ fanfox.net fangsung.comfanhaodian.com fanhowab.buzz fank.ru fans17.com fansnudes.com fansone.co fansteek.comfantasiasguatemala.com fantasti.cc fap-xxx.com  fap18.net fap666.com fapality.com -fapcat.com fapdude.com faperoni.com fapforfun.net faphdporn.com faphouse.com fapmovz.com fapnado.com fapopedia.netfappcelebs.comfappeningbook.comfappeningthots.com fappenist.com fapphub.com +fapcat.com fapdude.com fapello.com faperoni.com fapforfun.net faphdporn.com faphouse.com fapmovz.com fapnado.com fapomania.com fapopedia.netfappcelebs.comfappeningbook.comfappeningthots.com fappenist.com fapphub.com fapporn.mefaproulette.cofaproulette.online fapsafari.com fapster.xxxfapteencam.com fapvid.comfareastpornhub.comfastindianporn.com fatstube.comfavelaporno.comfavepornmovs.comfavepornvids.comfavjapaneseporn.comfbiqiyiav.buzz  fbjav.comfbooktaiwan.com  fc2ppv.tv fcw.xxx  fcww0.com  feet9.com fei.ru feipang.linkfemalestars.com femdomcc.net @@ -10853,7 +11015,7 @@ ksyp10.com ku77.xyzkuaimao-app.com kuanrenxs.com kum.com  la-mama.ru lacomics.org ladies.com ladybaba.netladyboygold.comladyboygold.euladyboypornonly.comlanasbigboobs.com langsuirs.com lanmdh.netlanniser-ylo.shoplaosijifuli9009.top laowang.viplargecamtube.comlargeporntube.comlatinaabuse.comlatintubeporn.com laxd.com lazymike.comlbfmaddiction.com -lbtube.com lcgirls.comleakedmeat.comleaksmodels.com leakxxx.com leliao1.com lemoncams.com lenkino.xxx lenporno.red leporno.orglepornochaud.comlepornofrais.com lesbian8.comlesbianpics.orglesbianpornvideos.comlesbiansubmission.comlesboerotica.net +lbtube.com lcgirls.comleakedmeat.comleakedzone.comleaksmodels.com leakxxx.com leliao1.com lemoncams.com lenkino.xxx lenporno.red leporno.orglepornochaud.comlepornofrais.com lesbian8.comlesbianpics.orglesbianpornvideos.comlesbiansubmission.comlesboerotica.net letfap.com letmejerk.com letmejerk.fun letsdoeit.comletsfuckme.net letsjerk.cclettherebeporn.com levelsex.com lewdthots.comlewdvrgames.com lewdweb.net lezpoo.com lgbtq.gameslianhonghong.com lianjiajr.netliboggirls.netlibraryofthumbs.comlifeselector.comlightxxxtube.com lihksnap.com likeseiyu.comliketruyen.net likuoo.videolilhumpers.com liliav.comlilith-soft.com limer.tw @@ -10918,7 +11080,7 @@ norsk.mobinoveltrove.comnovinhabucetuda.comnovinhagostosa10.co nowjav.com  nozomi.la nrdh99.buzz nrooms-dh.sbs nsfw.xxx nsfw247.to nsfwmemes.com ntten-mg.buzz nu-bay.com nu36.vipnubilefilms.comnubiles-casting.comnubiles-porn.com nubiles.net nubileset.comnubilesunscripted.com nuddess.com nude-pics.orgnude-share.com nude.hunudeandhairy.comnudebeachpussy.com nudecams.camnudecelebforum.comnudedrawer.com nudedxxx.comnudeeroticteens.com nudefiles.netnudegfporn.com nudekenya.com nudelive.comnudematurewomenpics.comnudemilfporn.com -nudes7.com nudespree.com nudeteen.orgnudeteenboys.netnudeteenladies.comnudevietnam.comnudevista.bestnudevista.club nudevista.funnudevista.link nudevista.vipnudewifeporn.comnudewomenpics.net nudify.onlinenudistbeachporn.com nudistic.com nudistlog.comnudistsexvideos.comnudistvoyeurbeach.com nudity911.comnudography.comnuespournous.com  nuita.net nukemanga.comnuki-dokoro.com  nurgay.tonurumassage.net nurxxx.mobi nushemale.com nuuporn.com  nuvid.com  nwxs8.com nyahentai.re  nym97.netobutsumania.com  obutu.com ohentai.orgohgratisporrfilm.comohpornocasero.comohpornovideo.com ohsesso.com ohsexfilm.comohsexotube.comohyeah1080.com +nudes7.com nudespree.com nudeteen.orgnudeteenboys.netnudeteenladies.comnudevietnam.comnudevista.bestnudevista.club nudevista.funnudevista.link nudevista.vipnudewifeporn.comnudewomenpics.net nudify.onlinenudistbeachporn.com nudistic.com nudistlog.comnudistsexvideos.comnudistvoyeurbeach.com nudity911.comnudography.com nudostar.tvnuespournous.com  nuita.net nukemanga.comnuki-dokoro.com  nurgay.tonurumassage.net nurxxx.mobi nushemale.com nuuporn.com  nuvid.com  nwxs8.com nyahentai.re  nym97.netobutsumania.com  obutu.com ohentai.orgohgratisporrfilm.comohpornocasero.comohpornovideo.com ohsesso.com ohsexfilm.comohsexotube.comohyeah1080.com oiobbs.com ok.xxxokazudouga.blog.jpokazudouga.tokyookkisokuho.comolder-women-movies.comolder-women-porn.com older.tube  oldje.comoli-school.com omafotze.com  omg.adult omg.blog omgteens.com omorashi.jp omorashi.orgonahodouga.comonani-daisuki.com @@ -11173,6 +11335,8 @@ ntp.nat.ms ntp.nic.cz ntp.nict.jp ntp.ripe.net ntp.se ntp.ufe.cz pool.ntp.orgtime.cloudflare.com time.nrc.catime.windows.com&^ntp([1-7])?\.aliyun\.com$ +cntime.izatcloud.net +cntime.xtracloud.net cn'^ntp([1-5])?\.tencent\.com$ cncn.pool.ntp.org cnntp.neu.edu.cn @@ -11303,13 +11467,13 @@ blazor.netbotframework.comcodethemicrobit.comdevopsassessment. cn sankie.netsqlserveronlinux.comtimelinestoryteller.comuwpcommunitytoolkit.comvisualstudio-staging.comvisualstudio.comvisualstudio.covisualstudio.co.ukvisualstudio.euvisualstudio.net vfsforgit.com vfsforgit.org vsassets.io vscode.devvscode-cdn.netvscode-unpkg.net xamarin.comaz764295.vo.msecnd.net)%bingsettingssearch.trafficmanager.netdefault.exp-tas.comdeveloper.microsoft.com'#download.visualstudio.microsoft.comdtlgalleryint.cloudapp.net poshtestgallery.cloudapp.net"psg-int-centralus.cloudapp.netpsg-int-eastus.cloudapp.netrink.hockeyapp.net+'vscode-sync-insiders.trafficmanager.net"vscode-sync.trafficmanager.net vscode.blob.core.windows.netvscode.search.windows.net vsmarketplacebadge.apphb.com mongodb.com mongodb.org  nginx.com  nginx.org  nixos.org chatgpt.com oaistatic.comoaiusercontent.com -openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net@<^chatgpt-async-webps-prod-eastus-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io +openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net=9^chatgpt-async-webps-prod-\s+-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io ads openaicom.imgix.net ads openwrt.orglede-project.org osdn.netperl.apache.org perl.org cpan.org metacpan.org modperl.plpolymer-project.orgpolymerproject.org  pycon.org pypa.io pypi.io pypi.org python.orgpythonhosted.org piwheels.org qt.ioqt-project.orgreadthedocs-hosted.comreadthedocs.comreadthedocs.ioreadthedocs.org redis.io redislabs.com remirepo.net ruby-lang.org rubygems.org rust-lang.org  rustup.rs  crates.io docs.rs redhat.com -redhat.orgscala-lang.org scala-sbt.org sourcehut.org sr.ht askubuntu.comblogoverflow.comcodeforaliving.iomathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.costackoverflow.comstackoverflow.emailstackoverflowbusiness.comstackoverflowcareers.comstacksnippets.net superuser.com tex-talk.netthesffblog.commystrikingly.comstrikingly.comstrikinglycdn.com openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io +redhat.orgscala-lang.org scala-sbt.org sourcehut.org sr.ht askubuntu.comblogoverflow.comcodeforaliving.iomathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.costackoverflow.comstackoverflow.emailstackoverflowbusiness.comstackoverflowcareers.comstacksnippets.net superuser.com tex-talk.netthesffblog.commystrikingly.comstrikingly.comstrikinglycdn.com openmidas.com  qq.designqqgamedesign.comtencent-cloud.cntencent-cloud.comtencent.designtencentcloud.com tjstats.comwegamedeveloper.comweixinbridge.comweui.io cn termux.com termux.dev @@ -11354,7 +11518,13 @@ fotolia.cc fotolia.com fotolia.tv fotolja.com fptolia.com gfotolia.com motolia.com photolia.nettenbyfotolia.com votolia.combluefootcms.com mageconf.commageconf.com.ua magento.com magento.netmagentocommerce.commagentomobile.commarketing-cloud.com marketo.co.uk marketo.com marketo.net marketo.tvmarketodesigner.commarketolive.com mktdns.commkto-c0100.com mktorest.com mktroute.commobilemarketo.com&"revenue-performance-management.com toutapp.comcompresspdf.new pdf.new sign.new -scene7.comalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.com amazon-adsystem.com +scene7.comalibabacloud.co.in +!cnalibabacloud.com alibabacloud.com.au +!cn alibabacloud.com.hk +!cn alibabacloud.com.my +!cn alibabacloud.com.sg +!cn alibabacloud.com.tw +!cn alicloud.com amazon-adsystem.com adsserving-sys.com ads a2z.org.cn @@ -11769,7 +11939,7 @@ touchid.tv touchid.wangtracking-location.comtruedepth3d.com cn www.apple.com cn xp.apple.com cn asus.com asus.com.cn -cn atlassian.com atlassian.net bitbucket.io bitbucket.org statuspage.ioaccbusiness.com +cn asuscloud.comasuswebstorage.com atlassian.com atlassian.net bitbucket.io bitbucket.org statuspage.ioaccbusiness.com atandt.comatt-bundles.com att-japan.com att-mail.comatt-promotions.com att-rsvp.comatt.cn cn att.com att.jobs att.net att.tvattalascom.comattbelieves.comattbusiness.net attcenter.comattcollaborate.com @@ -11811,7 +11981,7 @@ mysdn.info  mysdn.net netacad.com netacad.netnetwork-auth.cn versly.comvideochampion.com virtuata.comwballiance.com!whyiwantciscotelepresence.com wifi-mx.comyoutubecisco.comapp-dynamics.comappdynamics.co.ukappdynamics.comappdynamics.deappdynamics.frappdynamics.infoappdynamics.jpappdynamics.org mearki.com meraki-go.com  meraki.hk merakigo.com tail-f.com  tailf.comcisco.evergage.comciscolivehls-i.akamaihd.net clco.cc -cloudc.one cloudcone.com cloudcone.netcollabora.co.uk collabora.com collabora.orgcollaboraoffice.com +cloudc.one cloudcone.com cloudcone.netcollabora.co.uk collabora.com collabora.orgcollaboraoffice.com  corel.com  corel.net coreldraw.app coreldraw.comcorelstore.com cfblob.comcloudchoose.comcloudvolumes.com cmpaas.com cpedge.comcrit-staging.comexperience-vmware.com gemfire.netgeodesummit.com getboxer.com gitstar.com gitstar.net gopivotal.net greenplum.net hwslabs.com immidio.comitfromtheinside.comlatamvmwareforum.compivotalinitiative.comsnapvolumes.com ssdevrd.com vcanedge.com vcloudair.net vfabric.netvidmpreview.com @@ -11890,7 +12060,7 @@ apture.com area120.com asp-cc.com autodraw.com bandpage.combaselinestudy.combaselinestudy.org bazel.build bdn.devbeatthatquote.com  blink.orgbrocaproject.com brotli.org bumpshare.com bumptop.ca bumptop.com bumptop.net bumptop.org bumptunes.comcampuslondon.com certificate-transparency.org -chrome.comchromebook.comchromecast.com chromeos.dev chromium.orgchronicle.securitychroniclesec.comcloudburstresearch.comcloudfunctions.netcloudproxy.appcloudrobotics.comcobrasearch.com codespot.com conscrypt.com conscrypt.orgcookiechoices.org  coova.com  coova.net  coova.orgcrossmediapanel.com  cs4hs.comdartsearch.netdataliberation.org  debug.comdebugproject.com deepmind.comdevsitetest.howdialogflow.comdigitalassetlinks.org episodic.comfeedburner.com +chrome.comchromebook.comchromecast.com chromeos.dev chromium.orgchronicle.securitychroniclesec.comcloudburstresearch.comcloudfunctions.netcloudproxy.appcloudrobotics.comcobrasearch.com codespot.com conscrypt.com conscrypt.orgcookiechoices.org  coova.com  coova.net  coova.orgcrossmediapanel.com  cs4hs.comdartsearch.netdataliberation.org  debug.comdebugproject.com deepmind.comdevsitetest.howdialogflow.comdigitalassetlinks.org docs.new episodic.comfeedburner.com fflick.comfinanceleadsonline.com foofle.com froogle.com fuchsia.dev  g-tun.comg.cn cng.co g.dev @@ -11918,11 +12088,13 @@ picasa.com picasaweb.com picasaweb.net picasaweb.org picnik.com pittpatt.com pixate.com postini.comprivacysandbox.comprojectara.comprojectbaseline.compublishproxy.comquestvisual.comquickoffice.com quiksee.com revolv.comridepenguin.com run.appsavethedate.foo -saynow.com schemer.comscreenwisetrends.comscreenwisetrendspanel.com snapseed.com solveforx.com +saynow.com schemer.comscreenwisetrends.comscreenwisetrendspanel.com +sheets.new +slides.new snapseed.com solveforx.com stadia.devstcroixmosquito.comstcroixmosquitoproject.comstudywatchbyverily.comstudywatchbyverily.orgstxmosquito.comstxmosquitoproject.comstxmosquitoproject.netstxmosquitoproject.org synergyse.comtensorflow.org  tfhub.devthecleversense.comthegooglestore.comthinkquarterly.co.ukthinkquarterly.comthinkwithgoogle.com tiltbrush.com txcloud.net  txvia.comunfiltered.news useplannr.comusvimosquito.comusvimosquitoproject.comvelostrata.com verily.comverilylifesciences.comverilystudyhub.comverilystudywatch.comverilystudywatch.org wallet.com  waymo.com waze.com web.app web.devwebappfieldguide.comwebmproject.orgwebpkgcache.com -webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comwithgoogle.com womenwill.comwomenwill.com.br womenwill.id womenwill.in womenwill.mx  x.company +webrtc.orgweltweitwachsen.dewhatbrowser.org  whats.new widevine.comwithgoogle.com womenwill.comwomenwill.com.br womenwill.id womenwill.in womenwill.mx  x.company x.team xn--9kr7l.comxn--9trs65b.comxn--flw351e.comxn--ggle-55da.comxn--gogl-0nd52e.comxn--gogl-1nd42e.comxn--ngstr-lra8j.com xplr.cozukunftswerkstatt.dewww.recaptcha.net cn265.com cn 2mdn-cn.net @@ -12354,7 +12526,7 @@ qprize.comqualcomm-email.com qualcomm.cn cn*qualcomm.cn.cdn.cloudflare.net cnqualcomm.co.idqualcomm.co.inqualcomm.co.jpqualcomm.co.krqualcomm.co.uk qualcomm.comqualcomm.com.brqualcomm.com.tw qualcomm.de qualcomm.frqualcommhalo.comqualcommlabs.comqualcommmea.comqualcommretail.comqualcommventures.cnqualcommventures.com qualphone.com quicinc.com snapdragon.cnsnapdragonbooth.com uplinq.com wipower.comwirelessreach.com xtracloud.cn -cn +cn xtracloud.net brewmp.comqualcomm.sc.omtrdc.net  qwant.com qwant.de qwant.fr qwant.it  razer.com razerapi.com cnrazerofficial.comrazersynapse.com cnrazersupport.com razerzone.com @@ -12363,7 +12535,7 @@ pardot.com quotable.com radian6.com relateiq.comsalesforce. sforce.com site.com social.comsteelbrick.com twinprime.comweinvoiceit.com samsung xn--cg4bkigalaxyappstore.comgalaxymobile.jpgame-platform.net knoxemm.com samsung.comsamsungapps.comsamsungcloud.com samsungdm.comsamsungeshop.com.cn -cnsamsunggalaxyfriends.comsamsungknox.comsamsungqbe.combarkadahansasmartone.comhealthreach.hkhkcircleapp.comhomephoneplus.com ip73.coms-cashonmobile.com s-rewards.hksahabatsetiasmartone.com smartone.comsmartoneholdings.comsmartonerobotics.comsmartonesolutions.com.hksmartonesolutions.hk valuegb.comwise-research.com snapads.com +cnsamsunggalaxyfriends.comsamsungknox.comsamsungqbe.comskyperfectjsat.spacesptvbroadcast.com spcc-sp.comskyperfectv.co.jp hominis.media  jsati.comjsatmobile.combarkadahansasmartone.comhealthreach.hkhkcircleapp.comhomephoneplus.com ip73.coms-cashonmobile.com s-rewards.hksahabatsetiasmartone.com smartone.comsmartoneholdings.comsmartonerobotics.comsmartonesolutions.com.hksmartonesolutions.hk valuegb.comwise-research.com snapads.com ads sc-cdn.net snap-dev.net snap.com snapchat.com snapkit.co,(impala-media-production.s3.amazonaws.comsonyginzasonypark.jpsony-africa.com sony-asia.comsony-europe.comsony-hes.co.jpsony-latin.com sony-mea.comsony-olympus-medical.comsony-promotion.eusony-semicon.co.jp sony.at sony.ba sony.be sony.bg sony.ca sony.ch sony.cl @@ -12520,7 +12692,7 @@ rea.global rea.io rea.techrealcommercial.com.aurealestate.com.au realtor.com reastatic.net rumah123.comsmartexpos.comsmartline.com.auspacely.com.ausquarefoot.com.hkthinkofliving.comscenesource.me  scnsrc.me sbux.com.my sbuxcard.comstarbucks-stars.com starbucks.ad starbucks.at starbucks.be starbucks.bg starbucks.ca starbucks.chstarbucks.co.idstarbucks.co.jpstarbucks.co.nzstarbucks.co.thstarbucks.co.ukstarbucks.co.za starbucks.comstarbucks.com.arstarbucks.com.bnstarbucks.com.cn cnstarbucks.com.costarbucks.com.cystarbucks.com.grstarbucks.com.hkstarbucks.com.khstarbucks.com.kzstarbucks.com.mxstarbucks.com.mystarbucks.com.pestarbucks.com.sgstarbucks.com.trstarbucks.com.uy starbucks.de starbucks.dk starbucks.es starbucks.fr starbucks.hu starbucks.ie starbucks.in starbucks.it starbucks.nl starbucks.no starbucks.ph starbucks.pl starbucks.pt starbucks.rs starbucks.ru starbucks.se starbucks.tt starbucks.vnstarbucksathome.comstarbucksavie.castarbuckscard.phstarbuckscardb2b.comstarbuckscoffee.czstarbuckscoffeegear.com starbuckscoffeegearstore.comstarbucksforlife.castarbucksforlife.comstarbuckspoq.comstarbucksreserve.comstarbucksrewardsstarland.ca starbucksrewardsstarland.comstarbucksromania.rostarbucksrtd.comstarbucksslovakia.skstarbuckssummergame.castarbuckssummergame.com tsquare.tv  windy.com xdty.org  xingrz.me - + GEOLOCATION-CN 42r.cn 5566ua.com aurorapush.cn @@ -12542,9 +12714,13 @@ flycua.com hbhk.com.cn  jdair.netjuneyaoair.com luckyair.net ccb.cn ccb.com ccb.com.cn ccbcos.com -ccbfund.cn ccbfund.comccbfund.com.cn ccbfutures.cnccbfutures.comccbintl.com.hkccbleasing.comccblife-test.com.cn ccbseoul.comccbtrust.com.cn  ccbxt.com 8008205555.cn8008205555.comcignacmb-ipmi.com cignacmb.comcignacmbamc.comcmb-leasing.com cmbchina.biz cmbchina.cn cmbchina.com cmbi.com.hk  cmbimg.cn +ccbfund.cn ccbfund.comccbfund.com.cn ccbfutures.cnccbfutures.comccbintl.com.hk +!cnccbleasing.comccblife-test.com.cn ccbseoul.com +!cnccbtrust.com.cn  ccbxt.com 8008205555.cn8008205555.comcignacmb-ipmi.com cignacmb.comcignacmbamc.comcmb-leasing.com cmbchina.biz cmbchina.cn cmbchina.com cmbi.com.hk +!cn  cmbimg.cn cmbimg.com cmbt.cn -cmbuat.com  cmburl.cncmbwinglungbank.com cmf.biz cmf.ltd cmfchina.com +cmbuat.com  cmburl.cn cmbwinglungbank.com +!cn cmf.biz cmf.ltd cmfchina.com cmfunds.cntest-cignacmb.comicbc  95588.com 95588.com.cn dccnet.com.cn icbc-at.com !cn icbc-cz.com !cn icbc-ltd.com @@ -12640,10 +12816,12 @@ howbuy.com lufunds.com  zlfund.cn citic chinaamc.comcit !cn csc108.comcsci.hk !cn -ecitic.com1234567.com.cn 18.cn  18.com.cn  dfcfw.com eastmoney.comeastmoneyfutures.com emsec.hk guba.com.cn cebbank.com ceblease.com +ecitic.com1234567.com.cn 18.cn  18.com.cn  dfcfw.com eastmoney.comeastmoneyfutures.comemsec.hk +!cn guba.com.cn cebbank.com ceblease.com eb-ind.com ebasset.com ebchina.comebchinaintl.com ebf.com.cn  ebfcn.com ebfortune.com ebtrust.com ebscn-am.com  ebscn.comeverbright.com  secec.comsunlife-everbright.com -pingan.com pingan.com.cn pingan.com.hk yqb.com taikang.comtaikanglife.comtaikangzhijia.comtkhealthcare.comhuangyuhui.net 517lppz.com lppz.com lppzimg.com +pingan.com pingan.com.cn pingan.com.hk +!cn yqb.com taikang.comtaikanglife.comtaikangzhijia.comtkhealthcare.comhuangyuhui.net 517lppz.com lppz.com lppzimg.com heytea.com 3songshu.com haidilao.com a2z.org.cn cn amazonaws.cn @@ -12720,11 +12898,20 @@ funcdn.com  leigod.cn 58ganji.com58ganji-corp.com  ganji.com 58corp.com  58dns.org 58lovepet.com  58uxd.com 58v5.cn 58xinghuo.cn 58xinghuo.com 58xueche.com anjuke.comanjukestatic.com chinahr.com chrstatic.com daojia.com diandao.org fang.com  sofun.com soufunimg.com  jxedt.com  jxksw.net -roomeet.cn xinchong.com zhuancorp.comzhuanspirit.comzhuanzhuan.com c-ctrip.com colinker.com ctrip.cn ctrip.co.id ctrip.co.kr ctrip.co.th  ctrip.com ctrip.com.hk ctrip.my ctrip.sg ctripbiz.com ctripbuy.hk ctripteam.com doticloud.com easytrip.com hhtravel.comhhtravel.com.tw izuchebao.com  lvtds.com  shuntu.cn +roomeet.cn xinchong.com zhuancorp.comzhuanspirit.comzhuanzhuan.com c-ctrip.com colinker.com ctrip.cn ctrip.co.id +!cn ctrip.co.kr +!cn ctrip.co.th +!cn  ctrip.com ctrip.com.hk +!cnctrip.my +!cnctrip.sg +!cn ctripbiz.com ctripbuy.hk +!cn ctripteam.com doticloud.com easytrip.com hhtravel.comhhtravel.com.tw +!cn izuchebao.com  lvtds.com  shuntu.cn skysea.com  suanya.cn suanya.com tieyou.com -toptown.cn toursbms.com trip.com tripcdn.com +toptown.cn toursbms.comtrip.com +!cn tripcdn.com vipdlt.com dangdang.com ddimg.cn doservice.com ele.me ele.to eleme.cn eleme.io elemecdn.cn elemecdn.com  elenet.me 1huizhan.com3.cn  300hu.com  360buy.cn @@ -12733,8 +12920,12 @@ vipdlt.com dangdang.com ddimg.cn doservice.com 7fresh.com baitiao.comblackdragon.com  caiyu.com chicalot.cnchinabank.com.cncloud-beijing.comcloud-hebi.comcloud-ningbo.comcloud-ordos.comcloud-shenzhen.comcloud-shiyan.comcloud-wuhan.comcloud-xian.com cloud-xm.comcloud-zhaoqing.comcloud-zhongwei.comcloudanqing.comcloudbaoshan.comcloudbeibei.comcloudbinzhou.comcloudchangde.comcloudchangsha.comcloudchangzhou.comcloudchaozhou.comcloudchengde.comcloudchengdu.comcloudchuzhou.com cloudczs.comclouddalian.comclouddatong.comclouddongying.comcloudfoshan.comcloudfuqing.comcloudganzhou.comcloudguangzhou.comcloudhaidong.comcloudhefei.comcloudhengshui.comcloudhuaihua.comcloudhuizhou.comcloudjinan.comcloudjinchang.comcloudjingzhou.comcloudjining.comcloudjiujiang.comcloudkunming.comcloudleshan.comcloudlijiang.comcloudlishui.comcloudluohe.comcloudluoyang.comcloudmeishan.comcloudnanan.comcloudnanjing.comcloudnanning.comcloudnantong.comcloudquanzhou.comcloudsanya.comcloudshanghai.comcloudshaoyang.comcloudshenfuxingqu.comcloudsiping.comcloudsuqian.comcloudtangshan.comcloudtianjin.comcloudtongchuan.comcloudtongliang.comcloudweinan.comcloudxiangtan.comcloudxianyou.comcloudxining.comcloudyanan.comcloudyancheng.comcloudyantai.comcloudyinchuan.comcloudyueyang.comcloudyuncheng.com cloudyuxi.comcloudzhongshan.comcloudzhuhai.com dao123.com duiou.com.cn goselling.com healthjd.com isvjcloud.com  isvjd.comjcloud-cache.comjcloud-cache.netjcloud-cdn.comjcloud-live.comjcloud-oss.com jcloud.comjcloudcache.comjcloudcache.net jcloudcs.com jclouddn.com jclouddns.com jclouddns.net jcloudec.comjcloudedge.comjcloudedge.netjcloudgslb.comjcloudgslb.net jcloudimg.com jcloudimg.net jcloudlb.com jcloudlb.netjcloudlive.com jcloudlv.com jcloudoss.comjcloudresolve.comjcloudresolve.net jcloudss.comjcloudstatic.comjcloudstatic.netjcloudvideo.comjcloudvideo.net  jclps.com -jd-app.com jd-ex.cn  jd-ex.com jd-ex.com.cn  jd-ex.net jd.cn jd.co.th -jd.com  jd.com.cn jd.hk jd.id jd.ru jd.shopjdbusiness.com jdcache.com  jdcdn.comjdcloud-api.comjdcloud-api.netjdcloud-edu.comjdcloud-elite.comjdcloud-elive.comjdcloud-livebuy.comjdcloud-mail.comjdcloud-openapi.comjdcloud-oss.com jdcloud.comjdcloudcache.comjdcloudcache.netjdcloudcdn.comjdcloudcdn.net jdcloudcs.comjdclouddns.comjdclouddns.netjdcloudedge.comjdcloudedge.net jdcloudlb.com jdcloudlb.netjdcloudlive.comjdcloudlive.netjdcloudresolve.comjdcloudresolve.netjdcloudsite.comjdcloudstatic.comjdcloudstatic.netjdcloudstatus.comjdcloudstatus.netjdcloudvideo.comjdcloudvideo.netjdcloudwaf.comjddapeigou.com jddebug.com jddglobal.com jdemall.com  jdfw1.com +jd-app.com jd-ex.cn  jd-ex.com jd-ex.com.cn  jd-ex.net jd.cnjd.co.th +!cn +jd.com  jd.com.cnjd.hk +!cnjd.id +!cnjd.ru +!cn jd.shopjdbusiness.com jdcache.com  jdcdn.comjdcloud-api.comjdcloud-api.netjdcloud-edu.comjdcloud-elite.comjdcloud-elive.comjdcloud-livebuy.comjdcloud-mail.comjdcloud-openapi.comjdcloud-oss.com jdcloud.comjdcloudcache.comjdcloudcache.netjdcloudcdn.comjdcloudcdn.net jdcloudcs.comjdclouddns.comjdclouddns.netjdcloudedge.comjdcloudedge.net jdcloudlb.com jdcloudlb.netjdcloudlive.comjdcloudlive.netjdcloudresolve.comjdcloudresolve.netjdcloudsite.comjdcloudstatic.comjdcloudstatic.netjdcloudstatus.comjdcloudstatus.netjdcloudvideo.comjdcloudvideo.netjdcloudwaf.comjddapeigou.com jddebug.com jddglobal.com jdemall.com  jdfw1.com jdgslb.com jdgslb.net jdh.com jdjinrong.com jdl.cn jdl.com @@ -12784,8 +12975,10 @@ anitama.cn anitama.net b23.tv  bigfun.cn bigfunapp.cn  bili22.cn bili2233.cn  bili23.cn  bili33.cn biliapi.com biliapi.net bilibili.cc bilibili.cn bilibili.com bilibili.net bilibili.tv !cnbilibilipay.cnbilibilipay.com bilicdn1.com bilicdn2.com bilicdn3.com bilicdn4.com bilicdn5.com biligo.com biliimg.com biliintl.com -!cn bilivideo.cn bilivideo.com bilivideo.net dreamcast.hk  hdslb.com  hdslb.org im9.com maoercdn.com -mincdn.com yo9.com$ upos-hz-mirrorakam.akamaized.net ciweimao.com hbooker.comkuangxiangit.com cowlevel.net  cdncl.net biji.com +!cn bilivideo.cn bilivideo.com bilivideo.net dreamcast.hk +!cn  hdslb.com  hdslb.org im9.com maoercdn.com +mincdn.com yo9.com- upos-hz-mirrorakam.akamaized.net +!cn ciweimao.com hbooker.comkuangxiangit.com cowlevel.net  cdncl.net biji.com ddmogo.com igetget.cn igetget.com luojilab.com  mogoo.com sao.cn saolife.com dmzj.com  douyu.com douyu.tv douyucdn.cn douyucdn2.cn douyuscdn.com douyutv.com dtstatic.com duitang.com gamersky.com @@ -12835,6 +13028,7 @@ mihoyo.com cnbhsr.com cnthemisweeps.com cn yuanshen.com +cn juequling.com cn'^.+-mihayo\.akamaized\.net$ cn  muwai.com  pplive.cn pplive.com pptv.com qingting.fm qtfm.cn  sfacg.com @@ -12941,6 +13135,8 @@ afdian.net afdiancdn.com agora.io agoraio.cn agoralab.co antutu.com bitauto.combitautoimg.com cheyisou.com  yiche.com  yccdn.com shimo.im  yuque.com  doc88.com  docin.com douding.cn&^ntp([1-7])?\.aliyun\.com$ +cntime.izatcloud.net +cntime.xtracloud.net cn'^ntp([1-5])?\.tencent\.com$ cncn.pool.ntp.org cnntp.neu.edu.cn @@ -13079,7 +13275,13 @@ g.tbcdn.cn ads$v6-adashx.ut.taobao.com adsw.m.taobao.com adsyiliao.hupan.com -adsalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.comalibabadns.com +adsalibabacloud.co.in +!cnalibabacloud.com alibabacloud.com.au +!cn alibabacloud.com.hk +!cn alibabacloud.com.my +!cn alibabacloud.com.sg +!cn alibabacloud.com.tw +!cn alicloud.comalibabadns.com alicdn.comalicloudapi.com alidayu.com alidns.com alikunlun.comaliyun-inc.comaliyun-iot-share.com aliyun.com aliyuncdn.com cdngslb.com hichina.comica-alliance.org kunlunaq.com kunlunar.com kunlunca.com kunluncan.com kunlunea.com kunlungem.com kunlungr.com kunlunhuf.com kunlunle.com kunlunli.com kunlunno.com kunlunpi.com kunlunra.com kunlunsa.com kunlunsc.com kunlunsl.com kunlunso.com kunlunta.com kunlunvi.com kunlunwe.com mxhichina.com myalicdn.com,oss-ap-northeast-1.aliyuncs.com @@ -13097,8 +13299,9 @@ aliyun.com aliyuncdn.com cdngslb.com hichina.comica-allianc !cn'oss-me-east-1.aliyuncs.com !cn'oss-us-east-1.aliyuncs.com !cn'oss-us-west-1.aliyuncs.com -!cn ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.toteambition.comteambition.netteambitionapis.com uc.cn  ucweb.com 25pp.com  56che.com  95095.com 9game.cn -aliapp.orgalibaba-inc.com alibaba.comalibabacapital.comalibabacorp.comalibabadoctor.comalibabafuturehotel.comalibabagroup.comalibabaplanet.comalibabaued.comalibabausercontent.com alifanyi.comalihealth.com.cn alihealth.hk +!cn ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.toteambition.comteambition.netteambitionapis.com uc.cn  uc123.com  ucweb.com uczzd.cn 25pp.com  56che.com  95095.com 9game.cn +aliapp.orgalibaba-inc.com alibaba.comalibabacapital.comalibabacorp.comalibabadoctor.comalibabafuturehotel.comalibabagroup.comalibabaplanet.comalibabaued.comalibabausercontent.com alifanyi.comalihealth.com.cn alihealth.hk +!cn aliimg.com alikmd.com alimama.com alimebot.com alimei.com alios.cn  alipay.cn @@ -13115,7 +13318,8 @@ jhgtgb.com kanbox.com lazada.comliangxinyao.com m-now.cn maitix.com  mdeer.com mei.commiaostreet.com  mshare.cc nic.xinphilanthropy.xin phpwind.com phpwind.netqingtingtrip.com  rexpos.cn saee.org.cn shenjing.com  shuqi.comshuqireader.com sparenode.com  supet.com  ttpod.com wandoujia.com xin.xinxinlingshou.cn yowhale.com yunos-inc.com  yunos.comyushanfang.com -zuodao.comaliexpress.com aliexpress.rualipayplus.com alipay.hk +zuodao.comaliexpress.com aliexpress.ru +!cnalipayplus.com alipay.hk !cn alipaymo.com !cnalicloudccp.com alipan.comaliyundrive.comaliyundrive.net cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com @@ -13124,9 +13328,11 @@ fund123.cn antfin.com antgroup.comantgroup-inc.cn sm.cn 1688.com etao.com juhuasuan.comlingshoujia.com mashort.cn pailitao.com taobao.com -taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.com tmall.ru tmalltv.com tmjl.ai quark.cn alitrip.com  feizhu.cn +taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.comtmall.ru +!cn tmalltv.com tmjl.ai quark.cn alitrip.com  feizhu.cn feizhu.com -fliggy.com  fliggy.hk +fliggy.com fliggy.hk +!cn iuynfg.com a-map.cn a-map.co a-map.link  a-map.vipacloudrender.com amap.com amapauto.com anav.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net koubei.com zhisheng.com npmmirror.com goofish.com  b3log.org a.baidu.com @@ -13274,7 +13480,7 @@ koubei.com zhisheng.com npmmirror.com goofish.com  b3log.org ads zuoyebang.cc zuoyebang.com zybang.com baidu 91.com -aipage.com apollo.auto baidu.cn  baidu.com baidu.com.cn baidubce.combaiducontent.com baidupcs.combaidustatic.com +aipage.com apollo.auto baidu.cn  baidu.com baidu.com.cn baiduapp.com baidubce.combaiducontent.com baidupcs.combaidustatic.com baifae.com baifubao.com bcebos.combdcloudapi.com  bdimg.com bdstatic.com bdtjrcv.com  bdydns.cn bdydns.com @@ -13285,7 +13491,11 @@ hao123.com hao123img.com hao222.com haokan.com jomocdn.net jomodns.com mipcdn.com  nuomi.com quyaoya.com -shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.com sl916.com +shifen.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.comduxiaoman-int.com duxiaoman.comduxiaomanfintech.comduxiaomantech.com dxm-cdn.com dxm-int.com +dxmlcf.comdxmlcfintech.com +dxmpay.com dxmstatic.com +dxmyqh.com +paydxm.com sl916.com cn bluepoch.com cnactivity-zhendingtech.comchangdunovel.comfanqienovel.comfanqieopen.comfanqieopenpic.comfanqieopenstatic.comfanqieopenvod.com fanqiesdk.comfanqiesdkpic.comfanqiesdkstatic.comfanqiesdkvod.com fqnovel.com fqnovelim.comfqnovel-op.com fqnovelop.comfqnovelpic.comfqnovelstatic.comfqnovelvod.comihaohaoxuexi.com muyewx.com novelfm.comnovelfmpic.comnovelfmstatic.comnovelfmvod.com qznovel.comqznovelpic.comqznovelstatic.comqznovelvod.comp3-novel.byteimg.comp6-novel.byteimg.com(ads3-normal-hl.zijieapi.com @@ -13396,7 +13606,11 @@ ixigua.comixiguavideo.com ixgvideo.combdxiguaimg.combdxig feishu.net feishucdn.com feishupkg.com wukong.comwukongwenda.cnwukongwenda.com dcarapi.com dcarimg.com dcarlive.comdcarstatic.com dcarvod.com dcdapp.com dongchedi.comdongchediapp.com  365yg.comgogokid.com.cn gogokid.com  pipix.com  faceu.com ulikecam.com -rsproxy.cn didi-food.com didi.cn didialift.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comdiditaxi.com.cn +rsproxy.cn didi-food.com +!cn didi.cn didialift.comdidiaustralia.blog +!cndidichuxing.comdidiglobal.com +!cndidimobility.co.jp +!cndidistatic.comdiditaxi.com.cn udache.comxiaojukeji.com dji.com dji.net djicdn.com djiops.comdjiservice.org skypixel.com @@ -13461,8 +13675,10 @@ erp321.net  jsterp.cn jugongdan.com jushuitan.cn jushuitan.co scm121.com shopss.com shuiyaohuo.cnshuiyaohuo.com  surerp.cn surerp.com -sursung.cn sursung.com cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com testplus.cn -wps.cn wps.com  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn kimg.cn kingsoft.com ksmobile.com +sursung.cn sursung.com cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com xoyocdn.com cbjq.com testplus.cn +wps.cn wps.com  wpscdn.cn +wpscdn.com +kscord.com  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn kimg.cn kingsoft.com ksmobile.com ks-cdn.com ks-cdn1.com  ksyun.com ksyuncdn.com ksyungslb.com lenovo.net baiying.cnbaiying.com.cncftsupport.comcon-c-hybris.lenovo.comileapcloud.comlenovocloudos.com  lenovo.cn @@ -13485,7 +13701,7 @@ youdao.com zhuanzfx.comanalytics.163.com ads crash.163.com ads crashlytics.163.com ads g.163.com -ads coloros.com finzfin.com +adsallawntech.com coloros.com finzfin.com heytap.com heytapcs.comheytapdownload.comheytapimage.comheytapmobi.com myoppo.com nearme.com.cn oppo.cn oppo.com  oppo.mobioppodigital.com  oppoer.meoppomobile.com oppopay.com opposhop.cn realme.com realmebbs.comrealmemobile.com oneplus.com @@ -13674,7 +13890,7 @@ yufuid.net yunjitele.com.+\.dnse[0-5]\.(cn|com)$'#.+\.tdnsv([1-9] ads push.qq.com ads pgdt.gtimg.cn ads ugdtimg.com -ads openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io +ads openmidas.com  qq.designqqgamedesign.comtencent-cloud.cntencent-cloud.comtencent.designtencentcloud.com tjstats.comwegamedeveloper.comweixinbridge.comweui.io cnbattlecare.net cn gameitop.com cn gameloop.com @@ -13773,17 +13989,18 @@ scescdn.cn yuewen.com hongxiu.com lrts.me qdmm.com qidian.com readnovel.com tingbook.com webnovel.com xs8.cn xxsy.net qq.xn--fiqs8sxn--r70as2s.xn--fiqs8s -apcdns.net foxmail.comfoxmail.com.cn gtimg.cn  gtimg.com gtimg.com.cn idqqimg.com imqq.com  myapp.com qlogo.cn qpic.cn  qq.cn.com +apcdns.net  cdn-go.cn foxmail.comfoxmail.com.cn gtimg.cn  gtimg.com gtimg.com.cn idqqimg.com imqq.com  myapp.com qlogo.cn qpic.cn  qq.cn.com qq.com  qq.com.cn qq.wang qqmail.com  qzone.com rtx.com.cnservicewechat.com tencent.cn tencent.co.id -!cn tencent.comtencent.com.cntencent.com.hk tencent.nettencent.net.cntencentmusic.com -tenpay.com  tfogc.com +!cn tencent.comtencent.com.cntencent.com.hk +!cn tencent.nettencent.net.cntencentmusic.com +tenpay.com  tfogc.com tlivepush.com txlivecdn.com wechat.com wechatpay.cn weiyun.comwetv.vip !cn wetvinfo.com -!cn wetv.qq.com +!cn wxlivecdn.com wetv.qq.com !cn alloyteam.com imweb.io ivweb.io  fyeds.com fyeds0.com fyeds1.com @@ -13811,10 +14028,11 @@ fyeds9.com fymall0.com fymall1.com fymall4.com fymall7.com adstracking.miui.com ads mi-img.com -mi.com  mifile.cn miui.com +mi.com  mifile.cn +mijia.tech miui.com miwifi.com  xiaomi.cn xiaomi.com -xiaomi.net xiaomiev.comxiaomimobile.comxiaomiyoupin.com +xiaomi.net xiaomiev.comxiaomimobile.comxiaomixiaoai.comxiaomiyoupin.com saxyit.com sandai.netthunderurl.com xunlei.com  00cdn.com  88cdn.com  p2cdn.comthundercdn.com xycloud.com  xycdn.com nubia.cn  nubia.com redmagic.com @@ -13822,12 +14040,22 @@ zte.com.cn ztemall.com  ztems.combbs.ztedevices.comwww.zted !cn  ezpro.pro 10099.com.cn chn.cn  ahitv.com  cqccn.com gcable.com.cn sc96655.com  isxtv.com sdgdwljt.com 10086.cn 139.comchinamobile.comchinamobileltd.com migucloud.com migu.cn cmvideo.cn miguvideo.com andfx.cn  andfx.net -cmicrwx.cncmpassport.comfetion-portal.com fetionpic.com mmarket.com mmarket6.com -ctexcel.ca ctexcel.comctexcel.com.hk -ctexcel.fr -ctexcel.us -189.cnchinatelecom-h.comchinatelecom.com.cnchinatelecomglobal.com -chntel.com  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com wo.cn  wo.com.cn wo116114.com jikipedia.com qiuwen.wikishidianbaike.com  51nod.com +cmicrwx.cncmpassport.comfetion-portal.com fetionpic.com mmarket.com mmarket6.com +ctexcel.ca +!cn ctexcel.com +!cnctexcel.com.hk +!cn +ctexcel.fr +!cn +ctexcel.us +!cn +189.cnchinatelecom-h.comchinatelecom.com.cn#chinatelecomglobal.com +!cn +chntel.comchinatelecomhk.com +!cn  10010.com 10010.com.cn 114menhu.comchinaunicom.comchinaunicom.com.cnchinaunicom.com.hk +!cn"chinaunicomglobal.com +!cnmychinaunicom.com wo.cn  wo.com.cn wo116114.com cuniq.com +!cn jikipedia.com qiuwen.wikishidianbaike.com  51nod.com acwing.com hihocoder.com jisuanke.com luogu.com.cn oi-wiki.com openjudge.cn uoj.ac  vijos.org leetcode.cnleetcode-cn.com lingkou.xyz lingkou.com lingkou.cn @@ -13980,7 +14208,7 @@ pubyun.com  qc188.com qcds.com qd8.com qd-metro.com qh24 qschou.com qtmojo.com qudong.com -qugame.com  qunar.com qunarzz.comqunjielong.com qyer.com rfchost.comrockyenglish.com rong360.com rtbasia.com  ruan8.com +qugame.com  qunar.com qunarzz.comqunjielong.com qyer.comrockyenglish.com rong360.com rtbasia.com  ruan8.com runoob.com rzrc114.com  saibo.com sanguosha.com sanwen.net  scdng.com scoregg.com sczsxx.com sdo.com sec-wiki.com @@ -14105,7 +14333,7 @@ golang.net golang.org 1 GOODREADS goodreads.com gr-assets.com - + GOOGLE android.comandroidify.com blogger.com blogblog.com blogspot.ae blogspot.al blogspot.am blogspot.ba blogspot.be blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.clblogspot.co.atblogspot.co.idblogspot.co.ilblogspot.co.keblogspot.co.nzblogspot.co.ukblogspot.co.za blogspot.comblogspot.com.arblogspot.com.aublogspot.com.brblogspot.com.byblogspot.com.coblogspot.com.cyblogspot.com.eeblogspot.com.egblogspot.com.esblogspot.com.mtblogspot.com.ngblogspot.com.trblogspot.com.uy blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hr blogspot.hu blogspot.ie blogspot.in blogspot.is blogspot.it blogspot.jp blogspot.kr blogspot.li blogspot.lt blogspot.lu blogspot.md blogspot.mk blogspot.mx blogspot.my blogspot.nl blogspot.no blogspot.pe blogspot.pt blogspot.qa blogspot.re blogspot.ro blogspot.rs blogspot.ru blogspot.se blogspot.sg blogspot.si blogspot.sk blogspot.sn blogspot.td blogspot.tw blogspot.ug blogspot.vn dart.dev dartlang.org dartpad.dev fastlane.cifastlane.tools firebase.com firebase.iofirebaseapp.comfirebaseio.com-!firebase-settings.crashlytics.com cnfirebase.google.comfirebase.googleapis.com#firebaseappcheck.googleapis.com,(firebasedynamiclinks-ipv4.googleapis.com,(firebasedynamiclinks-ipv6.googleapis.com'#firebasedynamiclinks.googleapis.com)%firebaseinappmessaging.googleapis.com($firebaseinstallations.googleapis.com%!firebaselogging-pa.googleapis.com"firebaselogging.googleapis.com+'firebaseperusertopics-pa.googleapis.com'#firebaseremoteconfig.googleapis.com flutter.devflutterapp.com pub.dev go-lang.com go-lang.net go-lang.org go.dev  godoc.org @@ -14156,10 +14384,16 @@ golang.org 2mdn-cn.net urchin.com ads!analytics.google.com ads>1^adservice\.google\.([a-z]{2}|com?)(\.[a-z]{2})?$ -adscharlestonroadregistry.com crr.comregistry.google get.app get.dev get.how get.new get.page get.rsvp hey.boo iam.soy new.dayxn--p8j9a0d9c9a.xn--q9jyb4cscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.sk!scholar.googleusercontent.comscholar.l.google.com pki.googclients1.google.compki.google.com crl.pki.goog +adscharlestonroadregistry.com crr.comregistry.google get.app get.dev get.how get.new get.page get.rsvp hey.boo iam.soy new.dayxn--p8j9a0d9c9a.xn--q9jyb4cscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.sk!scholar.googleusercontent.comscholar.l.google.com pki.goog!pki-goog.l.google.com +cn +c.pki.goog +cn +i.pki.goog +cn +o.pki.goog +cnpublicca.googleapis.com#preprod-publicca.googleapis.comclients1.google.compki.google.com crl.pki.goog cn crls.pki.goog cn ocsp.pki.goog -cn!pki-goog.l.google.com cnalt1-mtalk.google.comalt2-mtalk.google.comalt3-mtalk.google.comalt4-mtalk.google.comalt5-mtalk.google.comalt6-mtalk.google.comalt7-mtalk.google.comalt8-mtalk.google.commtalk.google.com kaggle.com  kaggle.io kaggle.netkaggleusercontent.com deps.dev  deps.infoopensourceinsight.devopensourceinsights.devpolymer-project.orgpolymerproject.org @@ -14257,7 +14491,7 @@ apture.com area120.com asp-cc.com autodraw.com bandpage.combaselinestudy.combaselinestudy.org bazel.build bdn.devbeatthatquote.com  blink.orgbrocaproject.com brotli.org bumpshare.com bumptop.ca bumptop.com bumptop.net bumptop.org bumptunes.comcampuslondon.com certificate-transparency.org -chrome.comchromebook.comchromecast.com chromeos.dev chromium.orgchronicle.securitychroniclesec.comcloudburstresearch.comcloudfunctions.netcloudproxy.appcloudrobotics.comcobrasearch.com codespot.com conscrypt.com conscrypt.orgcookiechoices.org  coova.com  coova.net  coova.orgcrossmediapanel.com  cs4hs.comdartsearch.netdataliberation.org  debug.comdebugproject.com deepmind.comdevsitetest.howdialogflow.comdigitalassetlinks.org episodic.comfeedburner.com +chrome.comchromebook.comchromecast.com chromeos.dev chromium.orgchronicle.securitychroniclesec.comcloudburstresearch.comcloudfunctions.netcloudproxy.appcloudrobotics.comcobrasearch.com codespot.com conscrypt.com conscrypt.orgcookiechoices.org  coova.com  coova.net  coova.orgcrossmediapanel.com  cs4hs.comdartsearch.netdataliberation.org  debug.comdebugproject.com deepmind.comdevsitetest.howdialogflow.comdigitalassetlinks.org docs.new episodic.comfeedburner.com fflick.comfinanceleadsonline.com foofle.com froogle.com fuchsia.dev  g-tun.comg.cn cng.co g.dev @@ -14285,11 +14519,13 @@ picasa.com picasaweb.com picasaweb.net picasaweb.org picnik.com pittpatt.com pixate.com postini.comprivacysandbox.comprojectara.comprojectbaseline.compublishproxy.comquestvisual.comquickoffice.com quiksee.com revolv.comridepenguin.com run.appsavethedate.foo -saynow.com schemer.comscreenwisetrends.comscreenwisetrendspanel.com snapseed.com solveforx.com +saynow.com schemer.comscreenwisetrends.comscreenwisetrendspanel.com +sheets.new +slides.new snapseed.com solveforx.com stadia.devstcroixmosquito.comstcroixmosquitoproject.comstudywatchbyverily.comstudywatchbyverily.orgstxmosquito.comstxmosquitoproject.comstxmosquitoproject.netstxmosquitoproject.org synergyse.comtensorflow.org  tfhub.devthecleversense.comthegooglestore.comthinkquarterly.co.ukthinkquarterly.comthinkwithgoogle.com tiltbrush.com txcloud.net  txvia.comunfiltered.news useplannr.comusvimosquito.comusvimosquitoproject.comvelostrata.com verily.comverilylifesciences.comverilystudyhub.comverilystudywatch.comverilystudywatch.org wallet.com  waymo.com waze.com web.app web.devwebappfieldguide.comwebmproject.orgwebpkgcache.com -webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comwithgoogle.com womenwill.comwomenwill.com.br womenwill.id womenwill.in womenwill.mx  x.company +webrtc.orgweltweitwachsen.dewhatbrowser.org  whats.new widevine.comwithgoogle.com womenwill.comwomenwill.com.br womenwill.id womenwill.in womenwill.mx  x.company x.team xn--9kr7l.comxn--9trs65b.comxn--flw351e.comxn--ggle-55da.comxn--gogl-0nd52e.comxn--gogl-1nd42e.comxn--ngstr-lra8j.com xplr.cozukunftswerkstatt.dewww.recaptcha.net cn265.com cn 2mdn-cn.net @@ -14536,11 +14772,17 @@ urchin.com GOOGLE-REGISTRY-TLDmemeingfoozipmov nexusdadphdprofesqrsvpboodaynewdevpageapphowsoy xn--q9jyb4c  GOOGLE-SCHOLARscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.sk!scholar.googleusercontent.comscholar.l.google.com - -GOOGLE-TRUST-SERVICES pki.googclients1.google.compki.google.com crl.pki.goog + +GOOGLE-TRUST-SERVICES pki.goog!pki-goog.l.google.com +cn +c.pki.goog +cn +i.pki.goog +cn +o.pki.goog +cnpublicca.googleapis.com#preprod-publicca.googleapis.comclients1.google.compki.google.com crl.pki.goog cn crls.pki.goog cn ocsp.pki.goog -cn!pki-goog.l.google.com cn  GOOGLEFCMalt1-mtalk.google.comalt2-mtalk.google.comalt3-mtalk.google.comalt4-mtalk.google.comalt5-mtalk.google.comalt6-mtalk.google.comalt7-mtalk.google.comalt8-mtalk.google.commtalk.google.com @@ -14585,10 +14827,10 @@ B HASKELL haskell.orghaskellstack.org stackage.org @ HAVEIBEENPWNEDhaveibeenpwned.compwnedpasswords.com - + HBO cinemax.comforthethrone.com hbo.com hboasia.com hbogo.co.th  hbogo.com hbogo.eu hbogoasia.com hbogoasia.hk hbogoasia.id hbogoasia.ph hbogoasia.sg hbogoasia.tw hbomax.com hbomaxcdn.com -hbonow.com  maxgo.comhbo.com.c.footprint.nethbo.com.edgesuite.nethbo.map.fastly.net$ hbomax-images.warnermediacdn.comhbomaxdash.s.llnwi.net +hbonow.com max.com  maxgo.comhbo.com.c.footprint.nethbo.com.edgesuite.nethbo.map.fastly.net$ hbomax-images.warnermediacdn.comhbomaxdash.s.llnwi.net E HCAPTCHA botstop.com hcaptcha.comhcaptchastatus.com  @@ -14674,6 +14916,16 @@ hpshop.com hpshoping.com hpshopping.hk hpsignage.com hpsmart hpstore.cn cn hpstore.comhpstorethailand.com hpsupport.comhpsuresupply.comhptechventures.com hpto.net hptouch.comhptouchpointmanager.comhptrainingcenter.com  hpuae.comhpuniversity.infohpusertraining.com hpveer.comhpvirtualthin.com hpwallart.comhpwellnesscentral.com  hpwsn.com i-123-hp.com inkchoice.cominstantink.comleavinghpinc.comlife-global.orgmyhpsupport.com printeron.comprintersetupsupport.comprintspots.comprintspots.netserviceshp.comthecompaqstore.comtouchsmartpc.comtouchsmartpc.nettouchsmartpc.orgworkstations.tv www8-hp.comxn--6eup7j.comxn--6eup7j.nethpstore.corpmerchandise.com + +HSBChsbc hsbc.com hsbc.nethsbcinnovationbanking.com hsbcnet.comhsbcprivatebank.com hsbc.ae hsbc.am hsbc.bm +hsbc.co.id +hsbc.co.in +hsbc.co.kr +hsbc.co.mu +hsbc.co.nz +hsbc.co.th +hsbc.co.uk hsbc.uk hsbc.com.ar hsbc.com.au hsbc.com.bd hsbc.com.bh hsbc.com.br hsbc.com.cn hsbc.com.eg hsbc.com.hk hsbc.com.mo hsbc.com.mt hsbc.com.mx hsbc.com.myhsbcamanah.com.my hsbc.com.ph hsbc.com.sg hsbc.com.tr hsbc.com.tw hsbc.com.uy hsbc.com.vn hsbc.dehsbc-alternatives.dehsbc-transactionservices.dehsbc-zertifikate.de hsbc.lk hsbc.ca +hsbc.co.jp hsbc.frhsbctrinkaus.de $ HUANGHUAGANGhuanghuagang.org 0 @@ -15104,15 +15356,19 @@ $ * JAVWIDE javwide.com javwide.tv -$ +$ JD 1huizhan.com3.cn  300hu.com  360buy.cn 360buy.com 360buy.com.cn 360buyimg.com360buyinternational.com 360top.com 7fresh.com baitiao.comblackdragon.com  caiyu.com chicalot.cnchinabank.com.cncloud-beijing.comcloud-hebi.comcloud-ningbo.comcloud-ordos.comcloud-shenzhen.comcloud-shiyan.comcloud-wuhan.comcloud-xian.com cloud-xm.comcloud-zhaoqing.comcloud-zhongwei.comcloudanqing.comcloudbaoshan.comcloudbeibei.comcloudbinzhou.comcloudchangde.comcloudchangsha.comcloudchangzhou.comcloudchaozhou.comcloudchengde.comcloudchengdu.comcloudchuzhou.com cloudczs.comclouddalian.comclouddatong.comclouddongying.comcloudfoshan.comcloudfuqing.comcloudganzhou.comcloudguangzhou.comcloudhaidong.comcloudhefei.comcloudhengshui.comcloudhuaihua.comcloudhuizhou.comcloudjinan.comcloudjinchang.comcloudjingzhou.comcloudjining.comcloudjiujiang.comcloudkunming.comcloudleshan.comcloudlijiang.comcloudlishui.comcloudluohe.comcloudluoyang.comcloudmeishan.comcloudnanan.comcloudnanjing.comcloudnanning.comcloudnantong.comcloudquanzhou.comcloudsanya.comcloudshanghai.comcloudshaoyang.comcloudshenfuxingqu.comcloudsiping.comcloudsuqian.comcloudtangshan.comcloudtianjin.comcloudtongchuan.comcloudtongliang.comcloudweinan.comcloudxiangtan.comcloudxianyou.comcloudxining.comcloudyanan.comcloudyancheng.comcloudyantai.comcloudyinchuan.comcloudyueyang.comcloudyuncheng.com cloudyuxi.comcloudzhongshan.comcloudzhuhai.com dao123.com duiou.com.cn goselling.com healthjd.com isvjcloud.com  isvjd.comjcloud-cache.comjcloud-cache.netjcloud-cdn.comjcloud-live.comjcloud-oss.com jcloud.comjcloudcache.comjcloudcache.net jcloudcs.com jclouddn.com jclouddns.com jclouddns.net jcloudec.comjcloudedge.comjcloudedge.netjcloudgslb.comjcloudgslb.net jcloudimg.com jcloudimg.net jcloudlb.com jcloudlb.netjcloudlive.com jcloudlv.com jcloudoss.comjcloudresolve.comjcloudresolve.net jcloudss.comjcloudstatic.comjcloudstatic.netjcloudvideo.comjcloudvideo.net  jclps.com -jd-app.com jd-ex.cn  jd-ex.com jd-ex.com.cn  jd-ex.net jd.cn jd.co.th -jd.com  jd.com.cn jd.hk jd.id jd.ru jd.shopjdbusiness.com jdcache.com  jdcdn.comjdcloud-api.comjdcloud-api.netjdcloud-edu.comjdcloud-elite.comjdcloud-elive.comjdcloud-livebuy.comjdcloud-mail.comjdcloud-openapi.comjdcloud-oss.com jdcloud.comjdcloudcache.comjdcloudcache.netjdcloudcdn.comjdcloudcdn.net jdcloudcs.comjdclouddns.comjdclouddns.netjdcloudedge.comjdcloudedge.net jdcloudlb.com jdcloudlb.netjdcloudlive.comjdcloudlive.netjdcloudresolve.comjdcloudresolve.netjdcloudsite.comjdcloudstatic.comjdcloudstatic.netjdcloudstatus.comjdcloudstatus.netjdcloudvideo.comjdcloudvideo.netjdcloudwaf.comjddapeigou.com jddebug.com jddglobal.com jdemall.com  jdfw1.com +jd-app.com jd-ex.cn  jd-ex.com jd-ex.com.cn  jd-ex.net jd.cnjd.co.th +!cn +jd.com  jd.com.cnjd.hk +!cnjd.id +!cnjd.ru +!cn jd.shopjdbusiness.com jdcache.com  jdcdn.comjdcloud-api.comjdcloud-api.netjdcloud-edu.comjdcloud-elite.comjdcloud-elive.comjdcloud-livebuy.comjdcloud-mail.comjdcloud-openapi.comjdcloud-oss.com jdcloud.comjdcloudcache.comjdcloudcache.netjdcloudcdn.comjdcloudcdn.net jdcloudcs.comjdclouddns.comjdclouddns.netjdcloudedge.comjdcloudedge.net jdcloudlb.com jdcloudlb.netjdcloudlive.comjdcloudlive.netjdcloudresolve.comjdcloudresolve.netjdcloudsite.comjdcloudstatic.comjdcloudstatic.netjdcloudstatus.comjdcloudstatus.netjdcloudvideo.comjdcloudvideo.netjdcloudwaf.comjddapeigou.com jddebug.com jddglobal.com jdemall.com  jdfw1.com jdgslb.com jdgslb.net jdh.com jdjinrong.com jdl.cn jdl.com @@ -15248,9 +15504,11 @@ kindle.com  kindle.de  kindle.es  kindle.fr  kindle.in  kind KINDLE4RSSkindle4rss.com 8 KINGKONGLIVEkingkong.com.twkingkongapp.com - -KINGSOFT cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com testplus.cn -wps.cn wps.com  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn kimg.cn kingsoft.com ksmobile.com + +KINGSOFT cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com xoyocdn.com cbjq.com testplus.cn +wps.cn wps.com  wpscdn.cn +wpscdn.com +kscord.com  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn kimg.cn kingsoft.com ksmobile.com ks-cdn.com ks-cdn1.com  ksyun.com ksyuncdn.com ksyungslb.com p KKBOX @@ -15392,9 +15650,9 @@ lghvac.comlghvacstory.comlgrecyclingprogram.comlgsalesportal.c LIANJIA lianjia.com  ljcdn.com 1 LIBERAPAY liberapay.com liberapay.org -y + LIBGEN libgen.life -libgen.fungen.lib.rus.ec  libgen.is  libgen.me  libgen.rs  libgen.st +libgen.fun library.lolgen.lib.rus.ec  libgen.is  libgen.me  libgen.rs  libgen.st ? LIEPIN liepin.com @@ -15785,7 +16043,7 @@ vscode.devvscode-cdn.netvscode-unpkg.net xamarin.comaz764 MICROSOFT-PKI msocsp.comcrl.microsoft.commscrl.microsoft.comocsp.microsoft.comoneocsp.microsoft.comwww.microsoft.com cn - + MIHOYOgenshinimpact.comhonkaiimpact3.comhonkaistarrail.com  hoyo.link hoyolab.com hoyoverse.comn0vadesktop.com mhystatic.com cn mhyurl.cn cn @@ -15802,9 +16060,10 @@ mihoyo.com cnbhsr.com cnthemisweeps.com cn yuanshen.com +cn juequling.com cn'^.+-mihayo\.akamaized\.net$ cn - + MIHOYO-CN mhystatic.com cn mhyurl.cn cn @@ -15821,6 +16080,7 @@ mihoyo.com cnbhsr.com cnthemisweeps.com cn yuanshen.com +cn juequling.com cn'^.+-mihayo\.akamaized\.net$ cn O @@ -16196,9 +16456,9 @@ f ads . OP op.ggopgg-static.akamaized.net - + OPENAI chatgpt.com oaistatic.comoaiusercontent.com -openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net@<^chatgpt-async-webps-prod-eastus-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io +openai.com!openai.com.cdn.cloudflare.net openaiapi-site.azureedge.net2.openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net1-openaicomproductionae4b.blob.core.windows.net.*production-openaicom-storage.azureedge.net=9^chatgpt-async-webps-prod-\s+-\d+\.webpubsub\.azure\.com$$o33249.ingest.sentry.io ads openaicom.imgix.net ads ( @@ -16223,8 +16483,8 @@ h ads openxenterprise.com adsopenxmarket.asia ads - -OPPO coloros.com finzfin.com + +OPPOallawntech.com coloros.com finzfin.com heytap.com heytapcs.comheytapdownload.comheytapimage.comheytapmobi.com myoppo.com nearme.com.cn oppo.cn oppo.com  oppo.mobioppodigital.com  oppoer.meoppomobile.com oppopay.com opposhop.cn realme.com realmebbs.comrealmemobile.com @@ -16345,9 +16605,10 @@ picsee.pro pise.pw pros.ee T PINDUODUO pddpic.com pinduoduo.com pinduoduo.net yangkeduo.com -K +T PINGAN -pingan.com pingan.com.cn pingan.com.hk yqb.com +pingan.com pingan.com.cn pingan.com.hk +!cn yqb.com v PINGCAP asktug.com @@ -16415,8 +16676,8 @@ pplive.com pptv.com PRIMEVIDEO aiv-cdn.netamazonprimevideo.cn cn#amazonprimevideo.com.cn cnamazonprimevideos.comamazonvideo.ccamazonvideo.comprime-video.com primevideo.ccprimevideo.comprimevideo.infoprimevideo.org primevideo.tv - -PRIVATElan localdomain example invalid  localhosttest local  home.arpa10.in-addr.arpa16.172.in-addr.arpa17.172.in-addr.arpa18.172.in-addr.arpa19.172.in-addr.arpa20.172.in-addr.arpa21.172.in-addr.arpa22.172.in-addr.arpa23.172.in-addr.arpa24.172.in-addr.arpa25.172.in-addr.arpa26.172.in-addr.arpa27.172.in-addr.arpa28.172.in-addr.arpa29.172.in-addr.arpa30.172.in-addr.arpa31.172.in-addr.arpa168.192.in-addr.arpa0.in-addr.arpa127.in-addr.arpa254.169.in-addr.arpa2.0.192.in-addr.arpa100.51.198.in-addr.arpa113.0.203.in-addr.arpa 255.255.255.255.in-addr.arpaLH0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpaLH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa d.f.ip6.arpa8.e.f.ip6.arpa9.e.f.ip6.arpaa.e.f.ip6.arpab.e.f.ip6.arpa8.b.d.0.1.0.0.2.ip6.arpa64.100.in-addr.arpa65.100.in-addr.arpa66.100.in-addr.arpa67.100.in-addr.arpa68.100.in-addr.arpa69.100.in-addr.arpa70.100.in-addr.arpa71.100.in-addr.arpa72.100.in-addr.arpa73.100.in-addr.arpa74.100.in-addr.arpa75.100.in-addr.arpa76.100.in-addr.arpa77.100.in-addr.arpa78.100.in-addr.arpa79.100.in-addr.arpa80.100.in-addr.arpa81.100.in-addr.arpa82.100.in-addr.arpa83.100.in-addr.arpa84.100.in-addr.arpa85.100.in-addr.arpa86.100.in-addr.arpa87.100.in-addr.arpa88.100.in-addr.arpa89.100.in-addr.arpa90.100.in-addr.arpa91.100.in-addr.arpa92.100.in-addr.arpa93.100.in-addr.arpa94.100.in-addr.arpa95.100.in-addr.arpa96.100.in-addr.arpa97.100.in-addr.arpa98.100.in-addr.arpa99.100.in-addr.arpa100.100.in-addr.arpa101.100.in-addr.arpa102.100.in-addr.arpa103.100.in-addr.arpa104.100.in-addr.arpa105.100.in-addr.arpa106.100.in-addr.arpa107.100.in-addr.arpa108.100.in-addr.arpa109.100.in-addr.arpa110.100.in-addr.arpa111.100.in-addr.arpa112.100.in-addr.arpa113.100.in-addr.arpa114.100.in-addr.arpa115.100.in-addr.arpa116.100.in-addr.arpa117.100.in-addr.arpa118.100.in-addr.arpa119.100.in-addr.arpa120.100.in-addr.arpa121.100.in-addr.arpa122.100.in-addr.arpa123.100.in-addr.arpa124.100.in-addr.arpa125.100.in-addr.arpa126.100.in-addr.arpa127.100.in-addr.arpa%!^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$instant.arubanetworks.comsetmeup.arubanetworks.comcaptive.apple.com!connectivitycheck.gstatic.comasusrouter.comrouter.asus.comwww.asusrouter.comcp.cloudflare.comdetectportal.firefox.comnetworkcheck.kde.org!location.services.mozilla.comrouterlogin.comwww.routerlogin.com + +PRIVATElan localdomain example invalid  localhosttest local  home.arpa0.in-addr.arpa2.0.192.in-addr.arpa10.in-addr.arpa16.172.in-addr.arpa17.172.in-addr.arpa18.172.in-addr.arpa19.172.in-addr.arpa20.172.in-addr.arpa21.172.in-addr.arpa22.172.in-addr.arpa23.172.in-addr.arpa24.172.in-addr.arpa25.172.in-addr.arpa26.172.in-addr.arpa27.172.in-addr.arpa28.172.in-addr.arpa29.172.in-addr.arpa30.172.in-addr.arpa31.172.in-addr.arpa100.51.198.in-addr.arpa113.0.203.in-addr.arpa127.in-addr.arpa168.192.in-addr.arpa254.169.in-addr.arpa 255.255.255.255.in-addr.arpaLH0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpaLH1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa8.b.d.0.1.0.0.2.ip6.arpa8.e.f.ip6.arpa9.e.f.ip6.arpaa.e.f.ip6.arpab.e.f.ip6.arpa d.f.ip6.arpa64.100.in-addr.arpa65.100.in-addr.arpa66.100.in-addr.arpa67.100.in-addr.arpa68.100.in-addr.arpa69.100.in-addr.arpa70.100.in-addr.arpa71.100.in-addr.arpa72.100.in-addr.arpa73.100.in-addr.arpa74.100.in-addr.arpa75.100.in-addr.arpa76.100.in-addr.arpa77.100.in-addr.arpa78.100.in-addr.arpa79.100.in-addr.arpa80.100.in-addr.arpa81.100.in-addr.arpa82.100.in-addr.arpa83.100.in-addr.arpa84.100.in-addr.arpa85.100.in-addr.arpa86.100.in-addr.arpa87.100.in-addr.arpa88.100.in-addr.arpa89.100.in-addr.arpa90.100.in-addr.arpa91.100.in-addr.arpa92.100.in-addr.arpa93.100.in-addr.arpa94.100.in-addr.arpa95.100.in-addr.arpa96.100.in-addr.arpa97.100.in-addr.arpa98.100.in-addr.arpa99.100.in-addr.arpa100.100.in-addr.arpa101.100.in-addr.arpa102.100.in-addr.arpa103.100.in-addr.arpa104.100.in-addr.arpa105.100.in-addr.arpa106.100.in-addr.arpa107.100.in-addr.arpa108.100.in-addr.arpa109.100.in-addr.arpa110.100.in-addr.arpa111.100.in-addr.arpa112.100.in-addr.arpa113.100.in-addr.arpa114.100.in-addr.arpa115.100.in-addr.arpa116.100.in-addr.arpa117.100.in-addr.arpa118.100.in-addr.arpa119.100.in-addr.arpa120.100.in-addr.arpa121.100.in-addr.arpa122.100.in-addr.arpa123.100.in-addr.arpa124.100.in-addr.arpa125.100.in-addr.arpa126.100.in-addr.arpa127.100.in-addr.arpa%!^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$ping.archlinux.orginstant.arubanetworks.comsetmeup.arubanetworks.comcaptive.apple.com!connectivitycheck.gstatic.comasusrouter.comrouter.asus.comwww.asusrouter.comcp.cloudflare.comdetectportal.firefox.comoasisauth.h3c.comnetworkcheck.kde.orgconnect.rom.miui.com!location.services.mozilla.compush.services.mozilla.comrouterlogin.comwww.routerlogin.com hiwifi.com leike.cc  my.router peiluyou.com phicomm.me router.ctc plex.directlocalhost.sec.qq.comlocalhost.ptlogin2.qq.comtest.steampowered.com tendawifi.comtplinkwifi.net @@ -16561,7 +16822,7 @@ qlinkto.cn cn # QT qt.ioqt-project.org - + QUALCOMMairgonetworks.comberkanawireless.com cdmatech.comdragoniscoming.comgobianywhere.comgpsonextra.net cnhellosmartbook.com imod.comipleadership.org iskoot.com izatcloud.net @@ -16571,7 +16832,7 @@ qprize.comqualcomm-email.com qualcomm.cn cn*qualcomm.cn.cdn.cloudflare.net cnqualcomm.co.idqualcomm.co.inqualcomm.co.jpqualcomm.co.krqualcomm.co.uk qualcomm.comqualcomm.com.brqualcomm.com.tw qualcomm.de qualcomm.frqualcommhalo.comqualcommlabs.comqualcommmea.comqualcommretail.comqualcommventures.cnqualcommventures.com qualphone.com quicinc.com snapdragon.cnsnapdragonbooth.com uplinq.com wipower.comwirelessreach.com xtracloud.cn -cn +cn xtracloud.net brewmp.comqualcomm.sc.omtrdc.net  QUANTIL quantil.com @@ -16717,9 +16978,9 @@ rea.global REALTYPErealtype.co.jp realtype.jp ) REBRANDLY rb.gy rebrandly.com - + REDDIT redd.itreddit.app.link -reddit.comreddithelp.comredditmail.comredditmedia.comredditstatic.com redd.itreddit.map.fastly.net +reddit.comredditblog.comreddithelp.com redditinc.comredditmail.comredditmedia.comredditspace.comredditstatic.comredditstatus.comreddit.map.fastly.net ( REDHAT redhat.com @@ -16816,8 +17077,8 @@ $ i-scmp.com 7 SCP scp-wiki.net  scpdb.org scpwiki.com -N -SEASUNseasungames.com xishanju.com xoyo.com testplus.cn +m +SEASUNseasungames.com xishanju.com xoyo.com xoyocdn.com cbjq.com testplus.cn n SECOM secom.co.jpsecomtrust.netcybertrust.co.jpcybertrust.ne.jpmanagedpki.ne.jp  @@ -17033,6 +17294,9 @@ s SKILLSHAREskillshare.com  SKYsky sky.com skyassets.comskyoceanrescue.comskyoceanrescue.deskyoceanrescue.it skysports.com skysports.fr skysports.ieskysportsonline.comskysportsracing.com + + +SKYPERFECTskyperfectjsat.spacesptvbroadcast.com spcc-sp.comskyperfectv.co.jp hominis.media  jsati.comjsatmobile.com  SLACKslack-core.comslack-edge.comslack-files.comslack-imgs.comslack-msgs.comslack-redir.net  slack.com slackb.comslackcertified.com slackdemo.com slackhq.com @@ -17330,7 +17594,7 @@ telesec.de ads kuyun.com ads!testads.api.my7v.com ads -X +Y TENCENT comsenz.com discuz.net discuz.org dns.pub  dnsapi.cn  dnspod.cn @@ -17427,7 +17691,7 @@ yufuid.net yunjitele.com.+\.dnse[0-5]\.(cn|com)$'#.+\.tdnsv([1-9] ads push.qq.com ads pgdt.gtimg.cn ads ugdtimg.com -ads openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io +ads openmidas.com  qq.designqqgamedesign.comtencent-cloud.cntencent-cloud.comtencent.designtencentcloud.com tjstats.comwegamedeveloper.comweixinbridge.comweui.io cnbattlecare.net cn gameitop.com cn gameloop.com @@ -17526,17 +17790,18 @@ scescdn.cn yuewen.com hongxiu.com lrts.me qdmm.com qidian.com readnovel.com tingbook.com webnovel.com xs8.cn xxsy.net qq.xn--fiqs8sxn--r70as2s.xn--fiqs8s -apcdns.net foxmail.comfoxmail.com.cn gtimg.cn  gtimg.com gtimg.com.cn idqqimg.com imqq.com  myapp.com qlogo.cn qpic.cn  qq.cn.com +apcdns.net  cdn-go.cn foxmail.comfoxmail.com.cn gtimg.cn  gtimg.com gtimg.com.cn idqqimg.com imqq.com  myapp.com qlogo.cn qpic.cn  qq.cn.com qq.com  qq.com.cn qq.wang qqmail.com  qzone.com rtx.com.cnservicewechat.com tencent.cn tencent.co.id -!cn tencent.comtencent.com.cntencent.com.hk tencent.nettencent.net.cntencentmusic.com -tenpay.com  tfogc.com +!cn tencent.comtencent.com.cntencent.com.hk +!cn tencent.nettencent.net.cntencentmusic.com +tenpay.com  tfogc.com tlivepush.com txlivecdn.com wechat.com wechatpay.cn weiyun.comwetv.vip !cn wetvinfo.com -!cn wetv.qq.com +!cn wxlivecdn.com wetv.qq.com !cn alloyteam.com imweb.io ivweb.io  fyeds.com fyeds0.com fyeds1.com @@ -17574,8 +17839,8 @@ fyeds9.com fymall0.com fymall1.com fymall4.com fymall7.com ads pgdt.gtimg.cn ads ugdtimg.com ads - - TENCENT-DEV openmidas.com  qq.designqqgamedesign.comtencent.design tjstats.comwegamedeveloper.comweixinbridge.comweui.io + + TENCENT-DEV openmidas.com  qq.designqqgamedesign.comtencent-cloud.cntencent-cloud.comtencent.designtencentcloud.com tjstats.comwegamedeveloper.comweixinbridge.comweui.io cn  TENCENT-GAMESbattlecare.net @@ -17965,8 +18230,8 @@ ubuntu.com ubuntu.netubuntuforums.orgubuntu-touch.io 5 UBUNTUKYLIN openkylin.topubuntukylin.com - -UC uc.cn  ucweb.com +; +UC uc.cn  uc123.com  ucweb.com uczzd.cn  UCLOUD apimkt.net  cdndo.com clk1.cn clk1.topecloud-gdu.com  fshark.cn globalrdp.cn globalssh.cn  iprdp.net  ipssh.net me1.ltd slk1.net  u-cdn.net  ucgslb.cn @@ -18280,9 +18545,11 @@ woolite.uswoolitecarpet.com  WORDPRESSvideopress.com w.org wordpress.com wordpress.org wordpress.tv wp-themes.com wp.com  wpvip.com -z + WPS -wps.cn wps.com  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn +wps.cn wps.com  wpscdn.cn +wpscdn.com +kscord.com  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn  WSJcareerjournal.comcollegejournal.comopinionjournal.comrealestatejournal.comstartupjournal.com wsj.com wsj.jobs wsj.netwsjmediakit.com wsjplus.com wsjshop.com wsjwine.com ' @@ -18331,7 +18598,7 @@ B XIAOHONGSHU xhscdn.com xhscdn.netxiaohongshu.com - + XIAOMI a.market.xiaomi.com adsad.intl.xiaomi.com ads ad.mi.com @@ -18349,10 +18616,11 @@ xhscdn.netxiaohongshu.com adstracking.miui.com ads mi-img.com -mi.com  mifile.cn miui.com +mi.com  mifile.cn +mijia.tech miui.com miwifi.com  xiaomi.cn xiaomi.com -xiaomi.net xiaomiev.comxiaomimobile.comxiaomiyoupin.com +xiaomi.net xiaomiev.comxiaomimobile.comxiaomixiaoai.comxiaomiyoupin.com saxyit.com  diff --git a/v2rayu/Build/v2ray-core/v2ray b/v2rayu/Build/v2ray-core/v2ray index 964226e823..3045a0624f 100755 Binary files a/v2rayu/Build/v2ray-core/v2ray and b/v2rayu/Build/v2ray-core/v2ray differ diff --git a/v2rayu/Build/v2ray-core/v2ray-arm64 b/v2rayu/Build/v2ray-core/v2ray-arm64 index a24f131907..a01c7b36fe 100755 Binary files a/v2rayu/Build/v2ray-core/v2ray-arm64 and b/v2rayu/Build/v2ray-core/v2ray-arm64 differ diff --git a/v2rayu/V2rayU.xcodeproj/project.pbxproj b/v2rayu/V2rayU.xcodeproj/project.pbxproj index d9d017d652..914c39dce0 100644 --- a/v2rayu/V2rayU.xcodeproj/project.pbxproj +++ b/v2rayu/V2rayU.xcodeproj/project.pbxproj @@ -142,7 +142,6 @@ 669468492C076C2800146109 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 66973EB621797719001FEA1E /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; }; 66A358672C39517F00914A25 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 66A358682C3959AE00914A25 /* build.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = build.plist; sourceTree = ""; }; 66A5CE4521706B5A009B08B2 /* Pods_V2rayU.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Pods_V2rayU.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 66A77BE2268225790097A126 /* v2ray-core */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "v2ray-core"; path = "Build/v2ray-core"; sourceTree = ""; }; 66ACB19F21757D5B005B5881 /* MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenu.swift; sourceTree = ""; }; @@ -297,7 +296,6 @@ 66FEAD44217D75D7009DECF9 /* Build */ = { isa = PBXGroup; children = ( - 66A358682C3959AE00914A25 /* build.plist */, 6625848E2AB746D500DFDC1E /* appdmg.sh */, 66FEAD45217D75FC009DECF9 /* release.sh */, 6D6DFD93CE866018306A090E /* pac */, @@ -432,7 +430,7 @@ }; buildConfigurationList = 664EB36C216C9A5E00B6AE0D /* Build configuration list for PBXProject "V2rayU" */; compatibilityVersion = "Xcode 9.3"; - developmentRegion = "zh-Hans"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -836,7 +834,7 @@ CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 4.2.2; + CURRENT_PROJECT_VERSION = 4.2.3; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=macosx*]" = ""; @@ -848,7 +846,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 4.2.2; + MARKETING_VERSION = 4.2.3; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = net.yanue.V2rayU; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -874,7 +872,7 @@ CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 4.2.2; + CURRENT_PROJECT_VERSION = 4.2.3; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=macosx*]" = ""; @@ -886,7 +884,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 4.2.2; + MARKETING_VERSION = 4.2.3; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = net.yanue.V2rayU; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/v2rayu/V2rayU/Base.lproj/PreferenceRouting.xib b/v2rayu/V2rayU/Base.lproj/PreferenceRouting.xib index ac68e19e77..89c5a56f0f 100755 --- a/v2rayu/V2rayU/Base.lproj/PreferenceRouting.xib +++ b/v2rayu/V2rayU/Base.lproj/PreferenceRouting.xib @@ -300,45 +300,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -374,6 +335,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v2rayu/V2rayU/ConfigWindow.swift b/v2rayu/V2rayU/ConfigWindow.swift index 109eec1af3..a87b2ead52 100644 --- a/v2rayu/V2rayU/ConfigWindow.swift +++ b/v2rayu/V2rayU/ConfigWindow.swift @@ -528,7 +528,7 @@ class ConfigWindowController: NSWindowController, NSWindowDelegate, NSTabViewDel // grpc self.grpcServiceName.stringValue = v2rayConfig.streamGrpc.serviceName - self.grpcUseragent.stringValue = v2rayConfig.streamGrpc.user_agent + self.grpcUseragent.stringValue = v2rayConfig.streamGrpc.user_agent ?? "" self.grpcMulti.intValue = v2rayConfig.streamGrpc.multiMode ? 1 : 0 // ========================== stream end ======================= diff --git a/v2rayu/V2rayU/Import.swift b/v2rayu/V2rayU/Import.swift index 5dc311a5ed..89b4e2cf35 100644 --- a/v2rayu/V2rayU/Import.swift +++ b/v2rayu/V2rayU/Import.swift @@ -204,6 +204,16 @@ class ImportUri { } func importVmess(vmess: VmessUri) { + if vmess.fp.isEmpty { + vmess.fp = "chrome" + } + if vmess.security.isEmpty { + vmess.security = "none" + } + if vmess.sni.count == 0 { + vmess.sni = vmess.address + } + let v2ray = V2rayConfig() var vmessItem = V2rayOutboundVMessItem() @@ -232,12 +242,10 @@ class ImportUri { v2ray.streamKcp.header.type = vmess.type v2ray.streamKcp.uplinkCapacity = vmess.uplinkCapacity v2ray.streamKcp.downlinkCapacity = vmess.downlinkCapacity + v2ray.streamKcp.seed = vmess.kcpSeed // h2 - if v2ray.streamH2.host.count == 0 { - v2ray.streamH2.host = [""] - } - v2ray.streamH2.host[0] = vmess.netHost + v2ray.streamH2.host = [vmess.netHost] v2ray.streamH2.path = vmess.netPath // ws @@ -250,7 +258,13 @@ class ImportUri { // tcp v2ray.streamTcp.header.type = vmess.type - + if v2ray.streamNetwork == "tcp" && v2ray.streamTcp.header.type == "http" { + var tcpReq = TcpSettingHeaderRequest() + tcpReq.path = [vmess.netPath] + tcpReq.headers.host = [vmess.netHost] + v2ray.streamTcp.header.request = tcpReq + } + // quic v2ray.streamQuic.header.type = vmess.type @@ -296,6 +310,19 @@ class ImportUri { } func importVless(vmess: VlessUri) { + if vmess.fp.isEmpty { + vmess.fp = "chrome" + } + if vmess.security.isEmpty { + vmess.security = "none" + } + if vmess.flow.isEmpty { + vmess.flow = "xtls-rprx-vision" + } + if vmess.sni.count == 0 { + vmess.sni = vmess.address + } + let v2ray = V2rayConfig() v2ray.serverProtocol = V2rayProtocolOutbound.vless.rawValue @@ -310,10 +337,6 @@ class ImportUri { vmessItem.users = [user] v2ray.serverVless = vmessItem - if vmess.sni.count == 0 { - vmess.sni = vmess.address - } - // stream v2ray.streamNetwork = vmess.type v2ray.streamSecurity = vmess.security @@ -329,12 +352,10 @@ class ImportUri { // kcp v2ray.streamKcp.header.type = vmess.type + v2ray.streamKcp.seed = vmess.kcpSeed // h2 - if v2ray.streamH2.host.count == 0 { - v2ray.streamH2.host = [""] - } - v2ray.streamH2.host[0] = vmess.host + v2ray.streamH2.host = [vmess.host] v2ray.streamH2.path = vmess.path // ws @@ -343,11 +364,17 @@ class ImportUri { // grpc v2ray.streamGrpc.serviceName = vmess.path - v2ray.streamGrpc.multiMode = vmess.type == "multi" // v2rayN + v2ray.streamGrpc.multiMode = vmess.grpcMode == "multi" // v2rayN // tcp v2ray.streamTcp.header.type = vmess.type - + if v2ray.streamNetwork == "tcp" && v2ray.streamTcp.header.type == "http" { + var tcpReq = TcpSettingHeaderRequest() + tcpReq.path = [vmess.path] + tcpReq.headers.host = [vmess.host] + v2ray.streamTcp.header.request = tcpReq + } + // quic v2ray.streamQuic.header.type = vmess.type @@ -398,7 +425,6 @@ class ImportUri { svr.address = trojan.host svr.port = trojan.port svr.password = trojan.password - svr.flow = trojan.flow v2ray.serverTrojan = svr v2ray.enableMux = false @@ -492,7 +518,7 @@ func importByClash(clash: clashProxy) -> ImportUri? { item.address = clash.server item.port = clash.port item.id = clash.uuid ?? "" - item.security = clash.cipher ?? "auto" + item.security = clash.cipher ?? "none" // vless encryption item.type = clash.network ?? "tcp" item.sni = clash.sni ?? clash.server if clash.security == "reality" { diff --git a/v2rayu/V2rayU/Ping.swift b/v2rayu/V2rayU/Ping.swift index aa55c293d2..77c13935c9 100644 --- a/v2rayu/V2rayU/Ping.swift +++ b/v2rayu/V2rayU/Ping.swift @@ -149,7 +149,7 @@ class PingServer: NSObject, URLSessionDataDelegate { vCfg.httpHost = "127.0.0.1" vCfg.socksHost = "127.0.0.1" vCfg.httpPort = String(bindPort) - vCfg.socksPort = String(bindPort + 1) + vCfg.socksPort = String(bindPort - 1) jsonText = vCfg.combineManual() do { diff --git a/v2rayu/V2rayU/Preference/PreferencePac.swift b/v2rayu/V2rayU/Preference/PreferencePac.swift index e5d4817c49..6abc55bbc5 100644 --- a/v2rayu/V2rayU/Preference/PreferencePac.swift +++ b/v2rayu/V2rayU/Preference/PreferencePac.swift @@ -109,14 +109,17 @@ final class PreferencePacViewController: NSViewController, PreferencePane { let session = URLSession(configuration: getProxyUrlSessionConfigure()) let task = session.dataTask(with: URLRequest(url: reqUrl)){(data: Data?, response: URLResponse?, error: Error?) in if error != nil { - self.tips.stringValue = "Failed to download latest GFW List: \(String(describing: error))" + DispatchQueue.main.async { + self.tips.stringValue = "Failed to download latest GFW List: \(String(describing: error))" + } } else { if data != nil { if let outputStr = String(data: data!, encoding: String.Encoding.utf8) { do { try outputStr.write(toFile: GFWListFilePath, atomically: true, encoding: String.Encoding.utf8) - - self.tips.stringValue = "gfwList has been updated" + DispatchQueue.main.async { + self.tips.stringValue = "gfwList has been updated" + } NSLog("\(self.tips.stringValue)") // save to UserDefaults @@ -124,20 +127,28 @@ final class PreferencePacViewController: NSViewController, PreferencePane { if GeneratePACFile(rewrite: true) { // Popup a user notification - self.tips.stringValue = "PAC has been updated by latest GFW List." + DispatchQueue.main.async { + self.tips.stringValue = "PAC has been updated by latest GFW List." + } NSLog("\(self.tips.stringValue)") } } catch { // Popup a user notification - self.tips.stringValue = "Failed to Write latest GFW List." + DispatchQueue.main.async { + self.tips.stringValue = "Failed to Write latest GFW List." + } NSLog("\(self.tips.stringValue)") } } else { - self.tips.stringValue = "Failed to download latest GFW List." + DispatchQueue.main.async { + self.tips.stringValue = "Failed to download latest GFW List." + } } } else { // Popup a user notification - self.tips.stringValue = "Failed to download latest GFW List." + DispatchQueue.main.async { + self.tips.stringValue = "Failed to download latest GFW List." + } self.tryDownloadByShell(gfwPacListUrl: gfwPacListUrl) } } @@ -153,7 +164,9 @@ final class PreferencePacViewController: NSViewController, PreferencePane { NSLog("curl result: \(msg)") if GeneratePACFile(rewrite: true) { // Popup a user notification - self.tips.stringValue = "PAC has been updated by latest GFW List." + DispatchQueue.main.async { + self.tips.stringValue = "PAC has been updated by latest GFW List." + } } } } @@ -256,6 +269,7 @@ func getPacUserRules() -> String { ||github.com ||chat.openai.com ||openai.com + ||chatgpt.com """ do { let url = URL(fileURLWithPath: PACUserRuleFilePath) diff --git a/v2rayu/V2rayU/Preference/PreferenceRouting.swift b/v2rayu/V2rayU/Preference/PreferenceRouting.swift index 21286bc852..6433b325ba 100644 --- a/v2rayu/V2rayU/Preference/PreferenceRouting.swift +++ b/v2rayu/V2rayU/Preference/PreferenceRouting.swift @@ -149,14 +149,14 @@ final class PreferenceRoutingViewController: NSViewController, PreferencePane, N @IBAction func goHelp(_ sender: Any) { - guard let url = URL(string: "https://toutyrater.github.io/basic/routing/") else { + guard let url = URL(string: "https://xtls.github.io/config/routing.html#routingobject") else { return } NSWorkspace.shared.open(url) } @IBAction func goHelp2(_ sender: Any) { - guard let url = URL(string: "https://github.com/v2ray/domain-list-community") else { + guard let url = URL(string: "https://xtls.github.io/config/routing.html#routingobject") else { return } NSWorkspace.shared.open(url) diff --git a/v2rayu/V2rayU/Uri.swift b/v2rayu/V2rayU/Uri.swift index 34c9600823..1a0a25ee6d 100644 --- a/v2rayu/V2rayU/Uri.swift +++ b/v2rayu/V2rayU/Uri.swift @@ -28,6 +28,8 @@ class VmessUri { var alpn: String = "" var sni: String = "" var fp: String = "" + var grpcMode:String = "" + var kcpSeed:String = "" /** vmess://base64(security:uuid@host:port)?[urlencode(parameters)] @@ -145,6 +147,13 @@ class VmessUri { case "remark": self.remark = param[1].urlDecoded() break + case "serviceName": + self.netPath = param[1] + break + case "mode": + self.grpcMode = param[1] + case "seed": + self.kcpSeed = param[1] default: break } @@ -219,6 +228,8 @@ class VmessUri { self.fp = json["fp"].stringValue // type:伪装类型(none\http\srtp\utp\wechat-video) self.type = json["type"].stringValue + self.kcpSeed = json["seed"].stringValue + self.grpcMode = json["mode"].stringValue } } @@ -519,6 +530,8 @@ class VlessUri { var fp: String = "" // fingerprint var pbk: String = "" // reality public key var sid: String = "" // reality shortId + var grpcMode:String = "" + var kcpSeed:String = "" // vless://f2a5064a-fabb-43ed-a2b6-8ffeb970df7f@00.com:443?flow=xtls-rprx-splite&encryption=none&security=xtls&sni=aaaaa&type=http&host=00.com&path=%2fvl#vless1 func encode() -> String { @@ -538,6 +551,9 @@ class VlessUri { URLQueryItem(name: "fp", value: self.fp), URLQueryItem(name: "pbk", value: self.pbk), URLQueryItem(name: "sid", value: self.sid), + URLQueryItem(name: "serviceName", value: self.path), + URLQueryItem(name: "mode", value: self.grpcMode), + URLQueryItem(name: "seed", value: self.kcpSeed) ] return (uri.url?.absoluteString ?? "") + "#" + self.remark @@ -567,6 +583,9 @@ class VlessUri { break case "flow": self.flow = item.value as! String + if self.flow.isEmpty { + self.flow = "xtls-rprx-vision" + } break case "encryption": self.encryption = item.value as! String @@ -598,6 +617,18 @@ class VlessUri { case "sid": self.sid = item.value as! String break + case "headerType": + self.type = item.value as! String + break + case "seed": + self.kcpSeed = item.value as! String + break + case "serviceName": + self.path = item.value as! String + break + case "mode": + self.grpcMode = item.value as! String + break default: break } diff --git a/v2rayu/V2rayU/V2rayRouting.swift b/v2rayu/V2rayU/V2rayRouting.swift index 39e6f2418b..d5ef0bd335 100644 --- a/v2rayu/V2rayU/V2rayRouting.swift +++ b/v2rayu/V2rayU/V2rayRouting.swift @@ -298,14 +298,14 @@ class RoutingItem: NSObject, NSCoding { // parse default settings func parseDefaultSettings() -> V2rayRouting { - var rules: [V2rayRoutingSettingRule] = [] + var rules: [V2rayRoutingRule] = [] let (blockDomains, blockIps) = parseDomainOrIp(domainIpStr: self.block) let (proxyDomains, proxyIps) = parseDomainOrIp(domainIpStr: self.proxy) let (directDomains, directIps) = parseDomainOrIp(domainIpStr: self.direct) // // rules - var ruleProxyDomain, ruleProxyIp, ruleDirectDomain, ruleDirectIp, ruleBlockDomain, ruleBlockIp, ruleDirectIpDefault, ruleDirectDomainDefault: V2rayRoutingSettingRule? + var ruleProxyDomain, ruleProxyIp, ruleDirectDomain, ruleDirectIp, ruleBlockDomain, ruleBlockIp, ruleDirectIpDefault, ruleDirectDomainDefault: V2rayRoutingRule? // proxy if proxyDomains.count > 0 { ruleProxyDomain = getRoutingRule(outTag: "proxy", domain: proxyDomains, ip: nil, port: nil) @@ -400,8 +400,8 @@ class RoutingItem: NSObject, NSCoding { return settings } - func getRoutingRule(outTag: String, domain:[String]?, ip: [String]?, port:String?) -> V2rayRoutingSettingRule { - var rule = V2rayRoutingSettingRule() + func getRoutingRule(outTag: String, domain:[String]?, ip: [String]?, port:String?) -> V2rayRoutingRule { + var rule = V2rayRoutingRule() rule.outboundTag = outTag rule.type = "field" rule.domain = domain diff --git a/v2rayu/V2rayU/v2ray/V2rayConfig.swift b/v2rayu/V2rayU/v2ray/V2rayConfig.swift index 55c4692a32..ce0993929f 100644 --- a/v2rayu/V2rayU/v2ray/V2rayConfig.swift +++ b/v2rayu/V2rayU/v2ray/V2rayConfig.swift @@ -770,6 +770,12 @@ class V2rayConfig: NSObject { user.id = val["id"].stringValue user.flow = val["flow"].stringValue user.encryption = val["encryption"].stringValue + if user.flow.isEmpty { + user.flow = "xtls-rprx-vision" + } + if user.encryption.isEmpty { + user.encryption = "none" + } user.level = val["level"].intValue users.append(user) } diff --git a/v2rayu/V2rayU/v2ray/v2rayStream.swift b/v2rayu/V2rayU/v2ray/v2rayStream.swift index a8054975dc..58edbfbbac 100644 --- a/v2rayu/V2rayU/v2ray/v2rayStream.swift +++ b/v2rayu/V2rayU/v2ray/v2rayStream.swift @@ -100,18 +100,18 @@ struct TcpSettingHeader: Codable { } struct TcpSettingHeaderRequest: Codable { - var version: String = "" - var method: String = "" + var version: String = "1.1" + var method: String = "GET" var path: [String] = [] var headers: TcpSettingHeaderRequestHeaders = TcpSettingHeaderRequestHeaders() } struct TcpSettingHeaderRequestHeaders: Codable { var host: [String] = [] - var userAgent: [String] = [] - var acceptEncoding: [String] = [] - var connection: [String] = [] - var pragma: String = "" + var userAgent: [String] = ["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"] + var acceptEncoding: [String] = ["gzip", "deflate"] + var connection: [String] = ["keep-alive"] + var pragma: String? = "no-cache" enum CodingKeys: String, CodingKey { case host = "Host" @@ -147,6 +147,7 @@ struct KcpSettings: Codable { var congestion: Bool = false var readBufferSize: Int = 1 var writeBufferSize: Int = 1 + var seed:String = "" var header: KcpSettingsHeader = KcpSettingsHeader() } @@ -205,9 +206,10 @@ struct QuicSettingHeader: Codable { } struct GrpcSettings: Codable { + var authority: String? var serviceName: String = "" var multiMode: Bool = false - var user_agent: String = "" + var user_agent: String? var idle_timeout: Int = 60 var health_check_timeout: Int = 60 var permit_without_stream: Bool = false diff --git a/v2rayu/V2rayU/v2ray/v2rayStruct.swift b/v2rayu/V2rayU/v2ray/v2rayStruct.swift index 2875399045..f379c52c27 100644 --- a/v2rayu/V2rayU/v2ray/v2rayStruct.swift +++ b/v2rayu/V2rayU/v2ray/v2rayStruct.swift @@ -65,22 +65,42 @@ struct V2rayRouting: Codable { case IPIfNonMatch case IPOnDemand } - + enum domainMatcher: String, Codable { + case hybrid + case linear + } + var domainStrategy: domainStrategy = .AsIs - var rules: [V2rayRoutingSettingRule] = [] + var domainMatcher: domainMatcher? + var rules: [V2rayRoutingRule] = [] + var balancers: [V2rayRoutingBalancer]? = [] } -struct V2rayRoutingSettingRule: Codable { +struct V2rayRoutingRule: Codable { + var domainMatcher: String? var type: String = "field" var domain: [String]? = [] var ip: [String]? = [] var port: String? + var sourcePort: String? var network: String? var source: [String]? var user: [String]? var inboundTag: [String]? var `protocol`: [String]? // ["http", "tls", "bittorrent"] var outboundTag: String? = "direct" + var balancerTag: String? +} + +struct V2rayRoutingBalancer: Codable { + var selector: [String]? + var strategy: V2rayRoutingBalancerStrategy? + var tag: String? + var fallbackTag: String? +} + +struct V2rayRoutingBalancerStrategy: Codable { + var type: String? // type : "random" | "roundRobin" | "leastPing" | "leastLoad" } struct V2rayPolicy: Codable { diff --git a/xray-core/transport/internet/splithttp/dialer.go b/xray-core/transport/internet/splithttp/dialer.go index 3df653818e..99558975ae 100644 --- a/xray-core/transport/internet/splithttp/dialer.go +++ b/xray-core/transport/internet/splithttp/dialer.go @@ -41,6 +41,10 @@ func getHTTPClient(ctx context.Context, dest net.Destination, streamSettings *in return &BrowserDialerClient{} } + tlsConfig := tls.ConfigFromStreamSettings(streamSettings) + isH2 := tlsConfig != nil && !(len(tlsConfig.NextProtocol) == 1 && tlsConfig.NextProtocol[0] == "http/1.1") + isH3 := tlsConfig != nil && (len(tlsConfig.NextProtocol) == 1 && tlsConfig.NextProtocol[0] == "h3") + globalDialerAccess.Lock() defer globalDialerAccess.Unlock() @@ -48,14 +52,13 @@ func getHTTPClient(ctx context.Context, dest net.Destination, streamSettings *in globalDialerMap = make(map[dialerConf]DialerClient) } + if isH3 { + dest.Network = net.Network_UDP + } if client, found := globalDialerMap[dialerConf{dest, streamSettings}]; found { return client } - tlsConfig := tls.ConfigFromStreamSettings(streamSettings) - isH2 := tlsConfig != nil && !(len(tlsConfig.NextProtocol) == 1 && tlsConfig.NextProtocol[0] == "http/1.1") - isH3 := tlsConfig != nil && (len(tlsConfig.NextProtocol) == 1 && tlsConfig.NextProtocol[0] == "h3") - var gotlsConfig *gotls.Config if tlsConfig != nil { @@ -86,7 +89,6 @@ func getHTTPClient(ctx context.Context, dest net.Destination, streamSettings *in var uploadTransport http.RoundTripper if isH3 { - dest.Network = net.Network_UDP roundTripper := &http3.RoundTripper{ TLSClientConfig: gotlsConfig, Dial: func(ctx context.Context, addr string, tlsCfg *gotls.Config, cfg *quic.Config) (quic.EarlyConnection, error) { diff --git a/xray-core/transport/internet/splithttp/hub.go b/xray-core/transport/internet/splithttp/hub.go index 1ce8da6b09..d4579bc72d 100644 --- a/xray-core/transport/internet/splithttp/hub.go +++ b/xray-core/transport/internet/splithttp/hub.go @@ -269,7 +269,6 @@ func ListenSH(ctx context.Context, address net.Address, port net.Port, streamSet tlsConfig := getTLSConfig(streamSettings) l.isH3 = len(tlsConfig.NextProtos) == 1 && tlsConfig.NextProtos[0] == "h3" - if port == net.Port(0) { // unix listener, err = internet.ListenSystem(ctx, &net.UnixAddr{ Name: address.Domain(), @@ -285,9 +284,9 @@ func ListenSH(ctx context.Context, address net.Address, port net.Port, streamSet Port: int(port), }, streamSettings.SocketSettings) if err != nil { - return nil, errors.New("failed to listen UDP(for SH3) on ", address, ":", port).Base(err) + return nil, errors.New("failed to listen UDP(for SH3) on ", address, ":", port).Base(err) } - h3listener, err := quic.ListenEarly(Conn,tlsConfig, nil) + h3listener, err := quic.ListenEarly(Conn, tlsConfig, nil) if err != nil { return nil, errors.New("failed to listen QUIC(for SH3) on ", address, ":", port).Base(err) } @@ -314,7 +313,6 @@ func ListenSH(ctx context.Context, address net.Address, port net.Port, streamSet if err != nil { return nil, errors.New("failed to listen TCP(for SH) on ", address, ":", port).Base(err) } - l.listener = listener errors.LogInfo(ctx, "listening TCP(for SH) on ", address, ":", port) // h2cHandler can handle both plaintext HTTP/1.1 and h2c @@ -324,18 +322,24 @@ func ListenSH(ctx context.Context, address net.Address, port net.Port, streamSet ReadHeaderTimeout: time.Second * 4, MaxHeaderBytes: 8192, } + } + + // tcp/unix (h1/h2) + if listener != nil { + if config := v2tls.ConfigFromStreamSettings(streamSettings); config != nil { + if tlsConfig := config.GetTLSConfig(); tlsConfig != nil { + listener = tls.NewListener(listener, tlsConfig) + } + } + + l.listener = listener + go func() { if err := l.server.Serve(l.listener); err != nil { errors.LogWarningInner(ctx, err, "failed to serve http for splithttp") } }() } - l.listener = listener - if config := v2tls.ConfigFromStreamSettings(streamSettings); config != nil { - if tlsConfig := config.GetTLSConfig(); tlsConfig != nil { - listener = tls.NewListener(listener, tlsConfig) - } - } return l, err } diff --git a/xray-core/transport/internet/splithttp/splithttp_test.go b/xray-core/transport/internet/splithttp/splithttp_test.go index 5f59a738ca..a3b609ab48 100644 --- a/xray-core/transport/internet/splithttp/splithttp_test.go +++ b/xray-core/transport/internet/splithttp/splithttp_test.go @@ -2,6 +2,7 @@ package splithttp_test import ( "context" + "crypto/rand" gotls "crypto/tls" "fmt" gonet "net" @@ -10,7 +11,9 @@ import ( "testing" "time" + "github.com/google/go-cmp/cmp" "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/common/protocol/tls/cert" "github.com/xtls/xray-core/testing/servers/tcp" @@ -143,7 +146,16 @@ func Test_listenSHAndDial_TLS(t *testing.T) { } listen, err := ListenSH(context.Background(), net.LocalHostIP, listenPort, streamSettings, func(conn stat.Connection) { go func() { - _ = conn.Close() + defer conn.Close() + + var b [1024]byte + conn.SetReadDeadline(time.Now().Add(2 * time.Second)) + _, err := conn.Read(b[:]) + if err != nil { + return + } + + common.Must2(conn.Write([]byte("Response"))) }() }) common.Must(err) @@ -151,7 +163,15 @@ func Test_listenSHAndDial_TLS(t *testing.T) { conn, err := Dial(context.Background(), net.TCPDestination(net.DomainAddress("localhost"), listenPort), streamSettings) common.Must(err) - _ = conn.Close() + + _, err = conn.Write([]byte("Test connection 1")) + common.Must(err) + + var b [1024]byte + n, _ := conn.Read(b[:]) + if string(b[:n]) != "Response" { + t.Error("response: ", string(b[:n])) + } end := time.Now() if !end.Before(start.Add(time.Second * 5)) { @@ -229,18 +249,52 @@ func Test_listenSHAndDial_QUIC(t *testing.T) { } listen, err := ListenSH(context.Background(), net.LocalHostIP, listenPort, streamSettings, func(conn stat.Connection) { go func() { - _ = conn.Close() + defer conn.Close() + + b := buf.New() + defer b.Release() + + for { + b.Clear() + if _, err := b.ReadFrom(conn); err != nil { + return + } + common.Must2(conn.Write(b.Bytes())) + } }() }) common.Must(err) defer listen.Close() + time.Sleep(time.Second) + conn, err := Dial(context.Background(), net.UDPDestination(net.DomainAddress("localhost"), listenPort), streamSettings) common.Must(err) - _ = conn.Close() + defer conn.Close() + + const N = 1024 + b1 := make([]byte, N) + common.Must2(rand.Read(b1)) + b2 := buf.New() + + common.Must2(conn.Write(b1)) + + b2.Clear() + common.Must2(b2.ReadFullFrom(conn, N)) + if r := cmp.Diff(b2.Bytes(), b1); r != "" { + t.Error(r) + } + + common.Must2(conn.Write(b1)) + + b2.Clear() + common.Must2(b2.ReadFullFrom(conn, N)) + if r := cmp.Diff(b2.Bytes(), b1); r != "" { + t.Error(r) + } end := time.Now() if !end.Before(start.Add(time.Second * 5)) { t.Error("end: ", end, " start: ", start) } -} \ No newline at end of file +} diff --git a/yass/third_party/abseil-cpp/CMake/AbseilDll.cmake b/yass/third_party/abseil-cpp/CMake/AbseilDll.cmake index c31f2493af..a81cbaf3b8 100644 --- a/yass/third_party/abseil-cpp/CMake/AbseilDll.cmake +++ b/yass/third_party/abseil-cpp/CMake/AbseilDll.cmake @@ -28,6 +28,8 @@ set(ABSL_INTERNAL_DLL_FILES "base/internal/low_level_scheduling.h" "base/internal/nullability_impl.h" "base/internal/per_thread_tls.h" + "base/internal/poison.cc" + "base/internal/poison.h" "base/prefetch.h" "base/internal/pretty_function.h" "base/internal/raw_logging.cc" diff --git a/yass/third_party/abseil-cpp/CMake/Googletest/CMakeLists.txt.in b/yass/third_party/abseil-cpp/CMake/Googletest/CMakeLists.txt.in index 75691b1117..3db48341a2 100644 --- a/yass/third_party/abseil-cpp/CMake/Googletest/CMakeLists.txt.in +++ b/yass/third_party/abseil-cpp/CMake/Googletest/CMakeLists.txt.in @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.16) project(googletest-external NONE) diff --git a/yass/third_party/abseil-cpp/CMake/README.md b/yass/third_party/abseil-cpp/CMake/README.md index c7ddee6440..808edfe855 100644 --- a/yass/third_party/abseil-cpp/CMake/README.md +++ b/yass/third_party/abseil-cpp/CMake/README.md @@ -39,7 +39,7 @@ section of your executable or of your library.
Here is a short CMakeLists.txt example of an application project using Abseil. ```cmake -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.16) project(my_app_project) # Pick the C++ standard to compile with. @@ -62,7 +62,7 @@ will control Abseil library targets) is set to at least that minimum. For example: ```cmake -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.16) project(my_lib_project) # Leave C++ standard up to the root application, so set it only if this is the diff --git a/yass/third_party/abseil-cpp/CMake/install_test_project/CMakeLists.txt b/yass/third_party/abseil-cpp/CMake/install_test_project/CMakeLists.txt index 30c23b2c6b..3229887c8d 100644 --- a/yass/third_party/abseil-cpp/CMake/install_test_project/CMakeLists.txt +++ b/yass/third_party/abseil-cpp/CMake/install_test_project/CMakeLists.txt @@ -15,7 +15,7 @@ # A simple CMakeLists.txt for testing cmake installation -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.16) project(absl_cmake_testing CXX) add_executable(simple simple.cc) diff --git a/yass/third_party/abseil-cpp/CMakeLists.txt b/yass/third_party/abseil-cpp/CMakeLists.txt index d88283b234..9d3e4f337b 100644 --- a/yass/third_party/abseil-cpp/CMakeLists.txt +++ b/yass/third_party/abseil-cpp/CMakeLists.txt @@ -15,43 +15,8 @@ # # https://github.com/google/oss-policies-info/blob/main/foundational-cxx-support-matrix.md -# As of 2022-09-06, CMake 3.10 is the minimum supported version. -cmake_minimum_required(VERSION 3.10) - -# Compiler id for Apple Clang is now AppleClang. -if (POLICY CMP0025) - cmake_policy(SET CMP0025 NEW) -endif (POLICY CMP0025) - -# if command can use IN_LIST -if (POLICY CMP0057) - cmake_policy(SET CMP0057 NEW) -endif (POLICY CMP0057) - -# Project version variables are the empty string if version is unspecified -if (POLICY CMP0048) - cmake_policy(SET CMP0048 NEW) -endif (POLICY CMP0048) - -# Honor the GTest_ROOT variable if specified -if (POLICY CMP0074) - cmake_policy(SET CMP0074 NEW) -endif (POLICY CMP0074) - -# option() honor variables -if (POLICY CMP0077) - cmake_policy(SET CMP0077 NEW) -endif (POLICY CMP0077) - -# Allow the user to specify the MSVC runtime -if (POLICY CMP0091) - cmake_policy(SET CMP0091 NEW) -endif (POLICY CMP0091) - -# try_compile() honors the CMAKE_CXX_STANDARD value -if (POLICY CMP0067) - cmake_policy(SET CMP0067 NEW) -endif (POLICY CMP0067) +# As of 2024-07-01, CMake 3.16 is the minimum supported version. +cmake_minimum_required(VERSION 3.16) # Allow the user to specify the CMAKE_MSVC_DEBUG_INFORMATION_FORMAT if (POLICY CMP0141) @@ -76,6 +41,10 @@ else() option(ABSL_ENABLE_INSTALL "Enable install rule" ON) endif() +set(CMAKE_INSTALL_RPATH "$ORIGIN") +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON) +set(CMAKE_BUILD_RPATH_USE_ORIGIN ON) + option(ABSL_PROPAGATE_CXX_STD "Use CMake C++ standard meta features (e.g. cxx_std_14) that propagate to targets that link to Abseil" OFF) # TODO: Default to ON for CMake 3.8 and greater. @@ -92,6 +61,15 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/absl/copts ) +option(ABSL_MSVC_STATIC_RUNTIME + "Link static runtime libraries" + OFF) +if(ABSL_MSVC_STATIC_RUNTIME) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") +else() + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") +endif() + include(CMakePackageConfigHelpers) include(GNUInstallDirs) include(AbseilDll) @@ -280,7 +258,7 @@ if(ABSL_ENABLE_INSTALL) ABSL_INTERNAL_OPTIONS_H_PINNED "${ABSL_INTERNAL_OPTIONS_H_CONTENTS}") - file(WRITE "${CMAKE_BINARY_DIR}/options-pinned.h" "${ABSL_INTERNAL_OPTIONS_H_PINNED}") + file(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/options-pinned.h" CONTENT "${ABSL_INTERNAL_OPTIONS_H_PINNED}") install(FILES "${CMAKE_BINARY_DIR}/options-pinned.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/absl/base diff --git a/yass/third_party/abseil-cpp/absl/base/BUILD.bazel b/yass/third_party/abseil-cpp/absl/base/BUILD.bazel index bc949452e1..96503c903d 100644 --- a/yass/third_party/abseil-cpp/absl/base/BUILD.bazel +++ b/yass/third_party/abseil-cpp/absl/base/BUILD.bazel @@ -866,6 +866,41 @@ cc_test( ], ) +cc_library( + name = "poison", + srcs = [ + "internal/poison.cc", + ], + hdrs = ["internal/poison.h"], + copts = ABSL_DEFAULT_COPTS, + linkopts = ABSL_DEFAULT_LINKOPTS, + visibility = [ + "//absl:__subpackages__", + ], + deps = [ + ":config", + ":core_headers", + ":malloc_internal", + ], +) + +cc_test( + name = "poison_test", + size = "small", + timeout = "short", + srcs = [ + "internal/poison_test.cc", + ], + copts = ABSL_TEST_COPTS, + linkopts = ABSL_DEFAULT_LINKOPTS, + deps = [ + ":config", + ":poison", + "@com_google_googletest//:gtest", + "@com_google_googletest//:gtest_main", + ], +) + cc_test( name = "unique_small_name_test", size = "small", diff --git a/yass/third_party/abseil-cpp/absl/base/CMakeLists.txt b/yass/third_party/abseil-cpp/absl/base/CMakeLists.txt index e010efec3f..97994fc6f1 100644 --- a/yass/third_party/abseil-cpp/absl/base/CMakeLists.txt +++ b/yass/third_party/abseil-cpp/absl/base/CMakeLists.txt @@ -739,3 +739,33 @@ absl_cc_test( absl::optional GTest::gtest_main ) + +absl_cc_library( + NAME + poison + SRCS + "internal/poison.cc" + HDRS + "internal/poison.h" + COPTS + ${ABSL_DEFAULT_COPTS} + LINKOPTS + ${ABSL_DEFAULT_LINKOPTS} + DEPS + absl::config + absl::core_headers + absl::malloc_internal +) + +absl_cc_test( + NAME + poison_test + SRCS + "internal/poison_test.cc" + COPTS + ${ABSL_TEST_COPTS} + DEPS + absl::config + absl::poison + GTest::gtest_main +) diff --git a/yass/third_party/abseil-cpp/absl/base/internal/poison.cc b/yass/third_party/abseil-cpp/absl/base/internal/poison.cc new file mode 100644 index 0000000000..9afa0687ef --- /dev/null +++ b/yass/third_party/abseil-cpp/absl/base/internal/poison.cc @@ -0,0 +1,82 @@ +// Copyright 2024 The Abseil Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "absl/base/internal/poison.h" + +#include + +#include "absl/base/config.h" +#include "absl/base/internal/direct_mmap.h" + +#ifndef _WIN32 +#include +#endif + +#if defined(ABSL_HAVE_ADDRESS_SANITIZER) +#include +#elif defined(ABSL_HAVE_MEMORY_SANITIZER) +#include +#elif defined(ABSL_HAVE_MMAP) +#include +#elif defined(_WIN32) +#include +#endif + +namespace absl { +ABSL_NAMESPACE_BEGIN +namespace base_internal { + +namespace { + +size_t GetPageSize() { +#ifdef _WIN32 + SYSTEM_INFO system_info; + GetSystemInfo(&system_info); + return system_info.dwPageSize; +#elif defined(__wasm__) || defined(__asmjs__) || defined(__hexagon__) + return getpagesize(); +#else + return static_cast(sysconf(_SC_PAGESIZE)); +#endif +} + +} // namespace + +void* InitializePoisonedPointerInternal() { + const size_t block_size = GetPageSize(); +#if defined(ABSL_HAVE_ADDRESS_SANITIZER) + void* data = malloc(block_size); + ASAN_POISON_MEMORY_REGION(data, block_size); +#elif defined(ABSL_HAVE_MEMORY_SANITIZER) + void* data = malloc(block_size); + __msan_poison(data, block_size); +#elif defined(ABSL_HAVE_MMAP) + void* data = DirectMmap(nullptr, block_size, PROT_NONE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (data == MAP_FAILED) return GetBadPointerInternal(); +#elif defined(_WIN32) + void* data = VirtualAlloc(nullptr, block_size, MEM_RESERVE | MEM_COMMIT, + PAGE_NOACCESS); + if (data == nullptr) return GetBadPointerInternal(); +#else + return GetBadPointerInternal(); +#endif + // Return the middle of the block so that dereferences before and after the + // pointer will both crash. + return static_cast(data) + block_size / 2; +} + +} // namespace base_internal +ABSL_NAMESPACE_END +} // namespace absl diff --git a/yass/third_party/abseil-cpp/absl/base/internal/poison.h b/yass/third_party/abseil-cpp/absl/base/internal/poison.h new file mode 100644 index 0000000000..28113bdd71 --- /dev/null +++ b/yass/third_party/abseil-cpp/absl/base/internal/poison.h @@ -0,0 +1,59 @@ +// Copyright 2024 The Abseil Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef ABSL_BASE_INTERNAL_POISON_H_ +#define ABSL_BASE_INTERNAL_POISON_H_ + +#include + +#include "absl/base/config.h" + +namespace absl { +ABSL_NAMESPACE_BEGIN +namespace base_internal { + +inline void* GetBadPointerInternal() { + // A likely bad pointer. Pointers are required to have high bits that are all + // zero or all one for certain 64-bit CPUs. This pointer value will hopefully + // cause a crash on dereference and also be clearly recognizable as invalid. + constexpr uint64_t kBadPtr = 0xBAD0BAD0BAD0BAD0; + auto ret = reinterpret_cast(static_cast(kBadPtr)); +#ifndef _MSC_VER // MSVC doesn't support inline asm with `volatile`. + // Try to prevent the compiler from optimizing out the undefined behavior. + asm volatile("" : : "r"(ret) :); // NOLINT +#endif + return ret; +} + +void* InitializePoisonedPointerInternal(); + +inline void* get_poisoned_pointer() { +#if defined(NDEBUG) && !defined(ABSL_HAVE_ADDRESS_SANITIZER) && \ + !defined(ABSL_HAVE_MEMORY_SANITIZER) + // In optimized non-sanitized builds, avoid the function-local static because + // of the codegen and runtime cost. + return GetBadPointerInternal(); +#else + // Non-optimized builds may use more robust implementation. Note that we can't + // use a static global because Chromium doesn't allow non-constinit globals. + static void* ptr = InitializePoisonedPointerInternal(); + return ptr; +#endif +} + +} // namespace base_internal +ABSL_NAMESPACE_END +} // namespace absl + +#endif // ABSL_BASE_INTERNAL_POISON_H_ diff --git a/yass/third_party/abseil-cpp/absl/base/internal/poison_test.cc b/yass/third_party/abseil-cpp/absl/base/internal/poison_test.cc new file mode 100644 index 0000000000..6596b45434 --- /dev/null +++ b/yass/third_party/abseil-cpp/absl/base/internal/poison_test.cc @@ -0,0 +1,41 @@ +// Copyright 2024 The Abseil Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "absl/base/internal/poison.h" + +#include + +#include "gtest/gtest.h" +#include "absl/base/config.h" + +namespace absl { +ABSL_NAMESPACE_BEGIN +namespace base_internal { +namespace { + +TEST(PoisonTest, CrashesOnDereference) { +#ifdef __ANDROID__ + GTEST_SKIP() << "On Android, poisoned pointer dereference times out instead " + "of crashing."; +#endif + int* poisoned_ptr = static_cast(get_poisoned_pointer()); + EXPECT_DEATH_IF_SUPPORTED(std::cout << *poisoned_ptr, ""); + EXPECT_DEATH_IF_SUPPORTED(std::cout << *(poisoned_ptr - 10), ""); + EXPECT_DEATH_IF_SUPPORTED(std::cout << *(poisoned_ptr + 10), ""); +} + +} // namespace +} // namespace base_internal +ABSL_NAMESPACE_END +} // namespace absl diff --git a/yass/third_party/abseil-cpp/absl/base/nullability.h b/yass/third_party/abseil-cpp/absl/base/nullability.h index 39e9b1ccbf..34dc083a4e 100644 --- a/yass/third_party/abseil-cpp/absl/base/nullability.h +++ b/yass/third_party/abseil-cpp/absl/base/nullability.h @@ -167,7 +167,7 @@ ABSL_NAMESPACE_BEGIN // absl::Nonnull // // The indicated pointer is never null. It is the responsibility of the provider -// of this pointer across an API boundary to ensure that the pointer is never be +// of this pointer across an API boundary to ensure that the pointer is never // set to null. Consumers of this pointer across an API boundary may safely // dereference the pointer. // diff --git a/yass/third_party/abseil-cpp/absl/log/internal/log_impl.h b/yass/third_party/abseil-cpp/absl/log/internal/log_impl.h index b44ed06819..a67f2f31b4 100644 --- a/yass/third_party/abseil-cpp/absl/log/internal/log_impl.h +++ b/yass/third_party/abseil-cpp/absl/log/internal/log_impl.h @@ -42,7 +42,7 @@ ABSL_LOGGING_INTERNAL_DLOG##severity.InternalStream() #endif -// The `switch` ensures that this expansion is the begnning of a statement (as +// The `switch` ensures that this expansion is the beginning of a statement (as // opposed to an expression). The use of both `case 0` and `default` is to // suppress a compiler warning. #define ABSL_LOG_INTERNAL_VLOG_IMPL(verbose_level) \ diff --git a/yass/third_party/abseil-cpp/absl/random/CMakeLists.txt b/yass/third_party/abseil-cpp/absl/random/CMakeLists.txt index af91d1a48e..ad5477e3e0 100644 --- a/yass/third_party/abseil-cpp/absl/random/CMakeLists.txt +++ b/yass/third_party/abseil-cpp/absl/random/CMakeLists.txt @@ -112,12 +112,12 @@ absl_cc_library( DEPS absl::config absl::core_headers + absl::fast_type_id absl::flat_hash_map absl::raw_logging_internal absl::random_internal_mock_helpers - absl::random_internal_mock_overload_set - absl::random_internal_mock_validators absl::random_random + absl::type_traits absl::utility GTest::gmock GTest::gtest diff --git a/yass/third_party/abseil-cpp/absl/status/internal/status_matchers.h b/yass/third_party/abseil-cpp/absl/status/internal/status_matchers.h index d11742b729..0750622e3f 100644 --- a/yass/third_party/abseil-cpp/absl/status/internal/status_matchers.h +++ b/yass/third_party/abseil-cpp/absl/status/internal/status_matchers.h @@ -69,8 +69,8 @@ class IsOkAndHoldsMatcherImpl bool MatchAndExplain( StatusOrType actual_value, ::testing::MatchResultListener* result_listener) const override { - if (!actual_value.ok()) { - *result_listener << "which has status " << actual_value.status(); + if (!GetStatus(actual_value).ok()) { + *result_listener << "which has status " << GetStatus(actual_value); return false; } diff --git a/yass/third_party/abseil-cpp/absl/time/CMakeLists.txt b/yass/third_party/abseil-cpp/absl/time/CMakeLists.txt index e1ade7a31a..fe625f28e2 100644 --- a/yass/third_party/abseil-cpp/absl/time/CMakeLists.txt +++ b/yass/third_party/abseil-cpp/absl/time/CMakeLists.txt @@ -83,7 +83,7 @@ absl_cc_library( Threads::Threads # TODO(#1495): Use $ once our # minimum CMake version >= 3.24 - $<$:-Wl,-framework,CoreFoundation> + $<$:-Wl,-framework,CoreFoundation> ) # Internal-only target, do not depend on directly.