diff --git a/luci-app-homeproxy/.gitignore b/luci-app-homeproxy/.gitignore new file mode 100644 index 000000000..135b33915 --- /dev/null +++ b/luci-app-homeproxy/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +/homeproxy diff --git a/luci-app-homeproxy/Makefile b/luci-app-homeproxy/Makefile index 4549d164d..0917cd5d5 100644 --- a/luci-app-homeproxy/Makefile +++ b/luci-app-homeproxy/Makefile @@ -1,31 +1,29 @@ # SPDX-License-Identifier: GPL-2.0-only # # Copyright (C) 2022-2023 ImmortalWrt.org +# include $(TOPDIR)/rules.mk -PKG_NAME:=luci-app-homeproxy -PKG_VERSION:=2.0.0 -PKG_RELEASE:=13 - -LUCI_TITLE:=Sing-box proxy management platform for OpenWrt +LUCI_TITLE:=The modern ImmortalWrt proxy platform for ARM64/AMD64 (sing-box 1.14) +# Pure ucode/JS payload with no compiled code, so the package itself is arch +# independent. The real arch constraint comes from the +sing-box dependency, +# which the feed builds for every architecture Go supports (aarch64, arm, +# mipsel, riscv64, x86_64, ...); where no sing-box package exists, dependency +# resolution refuses the install. Checked against the ImmortalWrt 25.12.1 +# package index (sing-box 1.14.0-r1 published for all of the above). LUCI_PKGARCH:=all LUCI_DEPENDS:= \ +sing-box \ +firewall4 \ - +dnsmasq-full \ - +ip-full \ - +kmod-tun \ +kmod-nft-tproxy \ - +ca-bundle \ - +curl \ - +jsonfilter \ - +unzip \ - +ucode-mod-digest \ - +ucode-mod-fs \ - +ucode-mod-math \ - +ucode-mod-ubus \ - +ucode-mod-uci + +ip-full \ + +kmod-tun \ + +ucode-mod-digest + +PKG_NAME:=luci-app-homeproxy +PKG_VERSION:=27.911.1.14 +PKG_RELEASE:=14 define Package/luci-app-homeproxy/conffiles /etc/config/homeproxy diff --git a/luci-app-homeproxy/README.md b/luci-app-homeproxy/README.md index e1b1f3adf..0a9613559 100644 --- a/luci-app-homeproxy/README.md +++ b/luci-app-homeproxy/README.md @@ -1,68 +1,102 @@ -适用于 OpenWrt 24.10 的 HomeProxy LuCI 管理界面,按 `官方内核sing-box 1.13.13` 进行二次定制适配,在官方内核基础上增加功能: -1、远程规则集本地持久化 -2、Clash API 代理供应商 -3、Clash API 中文名称 +
Sec-WebSocket-Protocol.')) : undefined);
+ o.value('Sec-WebSocket-Protocol');
+ o.depends('transport', 'ws');
+ o.modalonly = true;
+
+ if (side !== 'server') {
+ o = section.option(form.ListValue, 'packet_encoding', _('Packet encoding'));
+ o.value('', _('none'));
+ o.value('packetaddr', _('packet addr (v2ray-core v5+)'));
+ o.value('xudp', _('Xudp (Xray-core)'));
+ o.depends('type', 'vless');
+ o.depends('type', 'vmess');
+ o.modalonly = true;
+ }
+
+ return o;
+ },
+
+ /* Build the TLS option group shared by the node (client) and server forms.
+ `options.type_depends` lists the node types the TLS flag applies to,
+ `options.tls_forced_types` the types that force TLS on, and
+ `options.oninsecurechange` the client-side confirm handler. */
+ renderTlsOptions(section, options) {
+ const side = options.side || 'client';
+ let o;
+
+ o = section.option(form.Flag, 'tls', _('TLS'));
+ for (let t of (options.type_depends || []))
+ o.depends('type', t);
+ if (side === 'server')
+ o.rmempty = false;
+ o.validate = function(section_id, _value) {
+ if (section_id) {
+ let type = this.map.lookupOption('type', section_id)[0].formvalue(section_id);
+ let tls = this.map.findElement('id', 'cbid.homeproxy.%s.tls'.format(section_id)).firstElementChild;
+
+ if ((options.tls_forced_types || []).includes(type)) {
+ tls.checked = true;
+ tls.disabled = true;
+ } else {
+ tls.disabled = null;
+ }
+ }
+
+ return true;
+ }
+ o.modalonly = true;
+
+ o = section.option(form.Value, 'tls_sni', _('TLS SNI'),
+ _('Used to verify the hostname on the returned certificates unless insecure is given.'));
+ o.depends('tls', '1');
+ o.modalonly = true;
+
+ o = section.option(form.DynamicList, 'tls_alpn', _('TLS ALPN'),
+ _('List of supported application level protocols, in order of preference.'));
+ o.depends('tls', '1');
+ o.modalonly = true;
+
+ if (side !== 'server') {
+ o = section.option(form.Flag, 'tls_insecure', _('Allow insecure'),
+ _('Allow insecure connection at TLS client.') +
+ '(domain || domain_suffix || domain_keyword || domain_regex || ip_cidr || ip_is_private) &&(port || port_range) &&(source_ip_cidr || source_ip_is_private) &&(source_port || source_port_range) &&other fields./32 or /128 will be appended automatically.'));
so.datatype = 'or(cidr, ipaddr)';
+ so = ss.option(form.Flag, 'optimistic_cache', _('Optimistic DNS cache'),
+ _('Return expired cache immediately and refresh in background (sing-box 1.14).'));
+ so.depends('disable_cache', '0');
+ so.depends('disable_cache_expire', '0');
+ so.rmempty = false;
+
+ so = ss.option(form.Value, 'optimistic_timeout', _('Optimistic cache timeout'),
+ _('Max time an expired entry may be served. Examples: 3d, 1h.'));
+
+ so = ss.option(form.Value, 'dns_timeout', _('DNS query timeout'),
+ _('Default timeout per DNS query in seconds (sing-box default: 10).'));
+ so.datatype = 'uinteger';
+
+ so = ss.option(form.Flag, 'cache_file_store_dns', _('Store DNS cache'),
+ _('Persist DNS cache across restarts (sing-box 1.14, replaces Store RDRC).'));
+ so.depends('disable_cache', '0');
+ so.rmempty = false;
/* DNS settings end */
/* DNS servers start */
@@ -1493,72 +1047,21 @@ return view.extend({
so.rmempty = false;
so = ss.option(form.Value, 'server', _('Address'),
- _('Full URL, e.g. https://dns.alidns.com/dns-query'));
- so.placeholder = '';
- so.validate = function(section_id, value) {
- let type = this.section.formvalue(section_id, 'type') ||
- uci.get(data[0], section_id, 'type') ||
- 'udp';
-
- if (!validateDnsServerAddress(type, value))
- return _('Expecting: %s').format(_('valid DNS server address'));
-
- return true;
- }
- so.renderWidget = function(section_id, option_index, cfgvalue) {
- let node = form.Value.prototype.renderWidget.apply(this, arguments),
- input = node.querySelector('input'),
- update = () => {
- let type = this.section.formvalue(section_id, 'type') ||
- uci.get(data[0], section_id, 'type') ||
- 'udp';
- if (input)
- input.placeholder = getDnsServerAddressPlaceholder(type);
- };
-
- update();
- requestAnimationFrame(() => {
- let type_input = document.getElementById(this.cbid(section_id).replace(/\.server$/, '.type'));
- if (type_input) {
- type_input.addEventListener('change', update);
- update();
- }
- });
-
- return node;
- }
+ _('The address of the dns server.'));
+ so.datatype = 'or(hostname, ipaddr)';
so.rmempty = false;
so = ss.option(form.Value, 'server_port', _('Port'),
- _('Leave empty to use the default port.'));
- so.placeholder = '53';
+ _('The port of the DNS server.'));
+ so.placeholder = 'auto';
so.datatype = 'port';
- so.renderWidget = function(section_id, option_index, cfgvalue) {
- let node = form.Value.prototype.renderWidget.apply(this, arguments),
- input = node.querySelector('input'),
- update = () => {
- let type = this.section.formvalue(section_id, 'type') ||
- uci.get(data[0], section_id, 'type') ||
- 'udp';
- if (input)
- input.placeholder = getDnsServerDefaultPort(type);
- };
- update();
- requestAnimationFrame(() => {
- let type_input = document.getElementById(this.cbid(section_id).replace(/\.server_port$/, '.type'));
- if (type_input) {
- type_input.addEventListener('change', update);
- update();
- }
- });
-
- return node;
- }
- so.depends('type', 'udp');
- so.depends('type', 'tcp');
- so.depends('type', 'tls');
- so.depends('type', 'quic');
+ so = ss.option(form.Value, 'path', _('Path'),
+ _('The path of the DNS server.'));
+ so.placeholder = '/dns-query';
+ so.depends('type', 'https');
+ so.depends('type', 'h3');
+ so.modalonly = true;
so = ss.option(form.DynamicList, 'headers', _('Headers'),
_('Additional headers to be sent to the DNS server.'));
@@ -1575,7 +1078,7 @@ return view.extend({
so.modalonly = true;
so = ss.option(form.ListValue, 'address_resolver', _('Address resolver'),
- _('Used to resolve DNS server addresses in domain form. IP addresses do not require it.'));
+ _('Tag of a another server to resolve the domain name in the address. Required if address contains domain.'));
so.load = function(section_id) {
delete this.keylist;
delete this.vallist;
@@ -1662,7 +1165,13 @@ return view.extend({
so.editable = true;
so = ss.taboption('field_other', form.ListValue, 'mode', _('Mode'),
- _('In default mode, rule fields are matched by category. Any condition in the same category can match, while different categories must match at the same time. Rule sets are merged into the rule for matching and are not treated as separate sub-rules.'));
+ _('The default rule uses the following matching logic:(domain || domain_suffix || domain_keyword || domain_regex) &&(port || port_range) &&(source_ip_cidr || source_ip_is_private) &&(source_port || source_port_range) &&other fields.604800 (7d) is used by default.'));
- so.datatype = 'uinteger';
- so.depends({'enabled': '1', 'store_rdrc': '1'});
- /* Cache settings end */
-
- /* ACL settings start */
o = s.taboption('control', form.SectionValue, '_control', form.NamedSection, 'control', 'homeproxy');
ss = o.subsection;
@@ -2264,100 +1729,26 @@ return view.extend({
/* Direct domain list end */
/* ACL settings end */
- /* Panel settings start */
- s.tab('panel', _('Panel Settings'));
- o = s.taboption('panel', form.SectionValue, '_clash_api', form.NamedSection, 'clash_api', 'homeproxy');
- o.depends('routing_mode', 'custom');
+ /* DNS cache / timeout for preset routing modes (rightmost tab, stored in the dns section) */
+ s.tab('dns_cache', _('DNS Cache (1.14)'));
+ o = s.taboption('dns_cache', form.SectionValue, '_dns_cache', form.NamedSection, 'dns', 'homeproxy');
+ o.depends({'routing_mode': 'custom', '!reverse': true});
ss = o.subsection;
- so = ss.option(form.Value, 'external_ui', _('UI path'));
- so.placeholder = '/etc/homeproxy/run/ui';
- so.default = '/etc/homeproxy/run/ui';
-
- const panelPresetUrls = {
- 'https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip': 'Zashboard CDN Fonts (gh-proxy)',
- 'https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip': 'Zashboard CDN Fonts',
- 'https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip': 'Zashboard 完整版 (gh-proxy)',
- 'https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip': 'Zashboard 完整版',
- 'https://gh-proxy.com/https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip': 'MetaCubeXD (gh-proxy)',
- 'https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip': 'MetaCubeXD',
- 'https://gh-proxy.com/https://github.com/MetaCubeX/Yacd-meta/archive/refs/heads/gh-pages.zip': 'YACD (gh-proxy)',
- 'https://github.com/MetaCubeX/Yacd-meta/archive/refs/heads/gh-pages.zip': 'YACD',
- 'https://gh-proxy.com/https://github.com/MetaCubeX/Razord-meta/archive/refs/heads/gh-pages.zip': 'Razord (gh-proxy)',
- 'https://github.com/MetaCubeX/Razord-meta/archive/refs/heads/gh-pages.zip': 'Razord'
- };
-
- so = ss.option(form.ListValue, 'external_ui_download_url', _('UI download URL'));
- so.value('https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip', 'Zashboard CDN Fonts (gh-proxy)');
- so.value('https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip', 'Zashboard CDN Fonts');
- so.value('https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip', 'Zashboard 完整版 (gh-proxy)');
- so.value('https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip', 'Zashboard 完整版');
- so.value('https://gh-proxy.com/https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip', 'MetaCubeXD (gh-proxy)');
- so.value('https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip', 'MetaCubeXD');
- so.value('https://gh-proxy.com/https://github.com/MetaCubeX/Yacd-meta/archive/refs/heads/gh-pages.zip', 'YACD (gh-proxy)');
- so.value('https://github.com/MetaCubeX/Yacd-meta/archive/refs/heads/gh-pages.zip', 'YACD');
- so.value('https://gh-proxy.com/https://github.com/MetaCubeX/Razord-meta/archive/refs/heads/gh-pages.zip', 'Razord (gh-proxy)');
- so.value('https://github.com/MetaCubeX/Razord-meta/archive/refs/heads/gh-pages.zip', 'Razord');
- so.value('https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip', 'MetaCubeXD');
- so.value('https://gh-proxy.com/https://github.com/MetaCubeX/Yacd-meta/archive/refs/heads/gh-pages.zip', 'YACD (gh-proxy)');
- so.value('https://github.com/MetaCubeX/Yacd-meta/archive/refs/heads/gh-pages.zip', 'YACD');
- so.value('https://gh-proxy.com/https://github.com/MetaCubeX/Razord-meta/archive/refs/heads/gh-pages.zip', 'Razord (gh-proxy)');
- so.value('https://github.com/MetaCubeX/Razord-meta/archive/refs/heads/gh-pages.zip', 'Razord');
- so.value('__custom__', _('Custom'));
- so.default = 'https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip';
- so.load = function(section_id) {
- const value = uci.get(data[0], section_id, 'external_ui_download_url') ?? this.default;
- return (value in panelPresetUrls) ? value : '__custom__';
- };
- so.write = function(section_id, value) {
- if (value === '__custom__') {
- const customValue = (this.section?.formvalue(section_id, 'external_ui_download_url_custom') || '').trim();
- uci.set(data[0], section_id, 'external_ui_download_url', customValue);
- } else {
- uci.set(data[0], section_id, 'external_ui_download_url', value);
- }
- };
-
- so = ss.option(form.Value, 'external_ui_download_url_custom', _('Custom URL'));
- so.placeholder = 'https://example.com/dist.zip';
- so.depends('external_ui_download_url', '__custom__');
- so.load = function(section_id) {
- const value = (uci.get(data[0], section_id, 'external_ui_download_url') || '').trim();
- return (value in panelPresetUrls) ? '' : value;
- };
- so.write = function(section_id, value) {
- uci.set(data[0], section_id, 'external_ui_download_url_custom', (value || '').trim());
- };
- so.remove = function(section_id) {
- uci.unset(data[0], section_id, 'external_ui_download_url_custom');
- };
-
- so = ss.option(form.ListValue, 'external_ui_download_detour', _('UI download detour'));
- so.value('', _('Default'));
- so.value('direct-out', _('Direct'));
- uci.sections(data[0], 'routing_node', (res) => {
- if (res.enabled === '1')
- so.value(res['.name'], res.label);
- });
- so.default = 'direct-out';
-
- so = ss.option(form.Value, 'external_controller', _('API listen'),
- _('Use 0.0.0.0:port to open the panel from your browser.'));
- so.placeholder = '0.0.0.0:9095';
- so.default = '0.0.0.0:9095';
- so.datatype = 'ipaddrport(1)';
+ so = ss.option(form.Flag, 'optimistic_cache', _('Optimistic DNS cache'),
+ _('Return expired cache immediately and refresh in background (sing-box 1.14).'));
so.rmempty = false;
- so = ss.option(form.Value, 'secret', _('API password'));
- so.password = true;
+ so = ss.option(form.Value, 'optimistic_timeout', _('Optimistic cache timeout'),
+ _('Max time an expired entry may be served. Examples: 3d, 1h.'));
- so = ss.option(form.ListValue, 'default_mode', _('Default mode'));
- so.value('rule', _('Rule'));
- so.value('global', _('Global'));
- so.value('direct', _('Direct'));
- so.default = 'rule';
+ so = ss.option(form.Value, 'dns_timeout', _('DNS query timeout'),
+ _('Default timeout per DNS query in seconds (sing-box default: 10).'));
+ so.datatype = 'uinteger';
+
+ so = ss.option(form.Flag, 'cache_file_store_dns', _('Store DNS cache'),
+ _('Persist DNS cache across restarts (replaces Store RDRC).'));
so.rmempty = false;
- /* Panel settings end */
return m.render();
}
diff --git a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js
index 5b5b19238..2443767f7 100644
--- a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js
+++ b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js
@@ -7,7 +7,6 @@
'use strict';
'require form';
'require fs';
-'require rpc';
'require uci';
'require ui';
'require view';
@@ -15,207 +14,11 @@
'require homeproxy as hp';
'require tools.widgets as widgets';
-const callNodeLatencyTest = rpc.declare({
- object: 'luci.homeproxy',
- method: 'node_latency_test',
- params: ['node', 'mode'],
- expect: { '': {} }
-});
-
-const callRCInit = rpc.declare({
- object: 'rc',
- method: 'init',
- params: ['name', 'action'],
- expect: { '': {} }
-});
-
-function normalizeList(value) {
- return Array.isArray(value) ? value : (value ? [value] : []);
-}
-
-function getSubscriptionInfo(config) {
- const urls = normalizeList(uci.get(config, 'subscription', 'subscription_url')),
- names = normalizeList(uci.get(config, 'subscription', 'subscription_name')),
- info = [];
-
- for (let i = 0; i < urls.length; i++) {
- const url = urls[i],
- cleanUrl = String(url || '').replace(/#.*$/, ''),
- title = String(names[i] || '').trim();
-
- if (!url)
- continue;
-
- info.push({
- hash: hp.calcStringMD5(cleanUrl),
- title,
- url
- });
- }
-
- return info;
-}
-
-const SubscriptionList = form.Value.extend({
- __name__: 'CBI.HomeProxySubscriptionList',
-
- cfgvalue(section_id) {
- return {
- urls: normalizeList(uci.get('homeproxy', section_id, 'subscription_url')),
- names: normalizeList(uci.get('homeproxy', section_id, 'subscription_name'))
- };
- },
-
- renderWidget(section_id, _option_index, cfgvalue) {
- const value = cfgvalue || { urls: [], names: [] },
- rows = E('div', {
- id: this.cbid(section_id),
- 'class': 'homeproxy-subscription-list',
- 'style': 'display: flex; flex-direction: column; gap: .45em; width: min(100%, 42em);'
- });
-
- rows.appendChild(E('div', {
- 'class': 'homeproxy-subscription-header',
- 'style': 'display: grid; grid-template-columns: minmax(8em, 13em) minmax(16em, 1fr) auto; gap: .35em; color: var(--text-muted, #6b7280); font-size: 90%;'
- }, [
- E('span', {}, [ _('\u8ba2\u9605\u540d\u79f0') ]),
- E('span', {}, [ _('\u8ba2\u9605\u5730\u5740') ]),
- E('span')
- ]));
-
- const addRow = (name, url) => {
- const row = E('div', {
- 'class': 'homeproxy-subscription-row',
- 'style': 'display: grid; grid-template-columns: minmax(8em, 13em) minmax(16em, 1fr) auto; gap: .35em; align-items: stretch;'
- }, [
- E('input', {
- 'type': 'text',
- 'class': 'cbi-input-text subscription-name',
- 'placeholder': _('\u8ba2\u9605\u540d\u79f0'),
- 'value': name || '',
- 'style': 'width: 100%; box-sizing: border-box;'
- }),
- E('input', {
- 'type': 'text',
- 'class': 'cbi-input-text subscription-url',
- 'placeholder': _('\u8ba2\u9605\u5730\u5740'),
- 'value': url || '',
- 'style': 'width: 100%; box-sizing: border-box;'
- }),
- E('button', {
- 'type': 'button',
- 'class': 'cbi-button cbi-button-remove',
- 'click': () => {
- row.remove();
- if (!rows.querySelector('.homeproxy-subscription-row'))
- addRow('', '');
- }
- }, [ '-' ])
- ]);
-
- if (rows._addButton)
- rows.insertBefore(row, rows._addButton);
- else
- rows.appendChild(row);
- };
-
- for (let i = 0; i < Math.max(value.urls.length, 1); i++)
- addRow(value.names[i], value.urls[i]);
-
- rows._addButton = E('button', {
- 'type': 'button',
- 'class': 'cbi-button cbi-button-add',
- 'style': 'width: 3em;',
- 'click': () => addRow('', '')
- }, [ '+' ]);
- rows.appendChild(rows._addButton);
-
- return rows;
- },
-
- formvalue(section_id) {
- const node = document.getElementById(this.cbid(section_id)),
- names = [],
- urls = [];
-
- node?.querySelectorAll('.homeproxy-subscription-row').forEach((row) => {
- const name = row.querySelector('.subscription-name')?.value.trim() || '',
- url = row.querySelector('.subscription-url')?.value.trim() || '';
-
- if (!name && !url)
- return;
-
- names.push(name);
- urls.push(url);
- });
-
- return { names, urls };
- },
-
- validate(_section_id, value) {
- const names = value?.names || [],
- urls = value?.urls || [],
- usedNames = {},
- usedUrls = {};
-
- if (!names.length || !urls.length)
- return _('\u8ba2\u9605\u540d\u79f0\u548c\u8ba2\u9605\u5730\u5740\u4e3a\u5fc5\u586b\u9879');
-
- for (let i = 0; i < Math.max(names.length, urls.length); i++) {
- const name = String(names[i] || '').trim(),
- url = String(urls[i] || '').trim(),
- normalizedUrl = url.replace(/#.*$/, '');
-
- if (!name || !url)
- return _('\u8ba2\u9605\u540d\u79f0\u548c\u8ba2\u9605\u5730\u5740\u5fc5\u987b\u6210\u5bf9\u586b\u5199');
-
- if (usedNames[name])
- return _('\u8ba2\u9605\u540d\u79f0\u4e0d\u80fd\u91cd\u590d');
- usedNames[name] = true;
-
- if (usedUrls[normalizedUrl])
- return _('\u8ba2\u9605\u5730\u5740\u4e0d\u80fd\u91cd\u590d');
- usedUrls[normalizedUrl] = true;
-
- try {
- let parsed = new URL(url);
- if (!parsed.hostname)
- return _('Expecting: %s').format(_('valid URL'));
- } catch(e) {
- return _('Expecting: %s').format(_('valid URL'));
- }
- }
-
- return true;
- },
-
- write(section_id, value) {
- if (value?.urls?.length) {
- uci.set('homeproxy', section_id, 'subscription_url', value.urls);
- uci.set('homeproxy', section_id, 'subscription_name', value.names);
- } else {
- uci.unset('homeproxy', section_id, 'subscription_url');
- uci.unset('homeproxy', section_id, 'subscription_name');
- }
- }
-});
-
function allowInsecureConfirm(ev, _section_id, value) {
if (value === '1' && !confirm(_('Are you sure to allow insecure?')))
ev.target.firstElementChild.checked = null;
}
-function normalizeHysteriaHoppingPort(mport) {
- if (!mport)
- return null;
-
- const ports = mport.split(',')
- .map((p) => p.trim())
- .filter((p) => p.length)
- .map((p) => (/^\d+$/.test(p) ? `${p}:${p}` : p.replace('-', ':')));
- return ports.length ? ports : null;
-}
-
function parseShareLink(uri, features) {
let config, url, params;
@@ -226,11 +29,6 @@ function parseShareLink(uri, features) {
/* https://github.com/anytls/anytls-go/blob/v0.0.8/docs/uri_scheme.md */
url = new URL('http://' + uri[1]);
params = url.searchParams;
- let anytls_fp = params.get('fp');
- if (['none', 'disable', 'disabled'].includes(anytls_fp))
- anytls_fp = null;
- else if (!anytls_fp)
- anytls_fp = 'chrome';
/* Check if password exists */
if (!url.username)
@@ -244,8 +42,7 @@ function parseShareLink(uri, features) {
password: url.username ? decodeURIComponent(url.username) : null,
tls: '1',
tls_sni: params.get('sni'),
- tls_insecure: (params.get('insecure') === '1' || params.get('allowInsecure') === '1') ? '1' : '0',
- tls_utls: features.with_utls ? anytls_fp : null
+ tls_insecure: (params.get('insecure') === '1') ? '1' : '0'
};
break;
@@ -278,7 +75,6 @@ function parseShareLink(uri, features) {
type: 'hysteria',
address: url.hostname,
port: url.port || '80',
- hysteria_hopping_port: normalizeHysteriaHoppingPort(params.get('mport')),
hysteria_protocol: params.get('protocol') || 'udp',
hysteria_auth_type: params.get('auth') ? 'string' : null,
hysteria_auth_payload: params.get('auth'),
@@ -286,9 +82,9 @@ function parseShareLink(uri, features) {
hysteria_down_mbps: params.get('downmbps'),
hysteria_up_mbps: params.get('upmbps'),
tls: '1',
- tls_insecure: (params.get('insecure') === '1' || params.get('allowInsecure') === '1') ? '1' : '0',
tls_sni: params.get('peer'),
- tls_alpn: params.get('alpn')
+ tls_alpn: params.get('alpn'),
+ tls_insecure: (params.get('insecure') === '1') ? '1' : '0'
};
break;
@@ -309,19 +105,38 @@ function parseShareLink(uri, features) {
password: url.username ? (
decodeURIComponent(url.username + (url.password ? (':' + url.password) : ''))
) : null,
- hysteria_hopping_port: normalizeHysteriaHoppingPort(params.get('mport')),
hysteria_obfs_type: params.get('obfs'),
hysteria_obfs_password: params.get('obfs-password'),
tls: '1',
- tls_insecure: (params.get('insecure') === '1' || params.get('allowInsecure') === '1') ? '1' : '0',
- tls_sni: params.get('sni')
+ tls_sni: params.get('sni'),
+ tls_insecure: params.get('insecure') ? '1' : '0'
+ };
+
+ break;
+ case 'snell':
+ /* Surge Snell share link: snell://host:port?psk=..&obfs=http&obfs-host=..#name */
+ url = new URL('http://' + uri[1]);
+ params = url.searchParams;
+
+ config = {
+ label: url.hash ? decodeURIComponent(url.hash.slice(1)) : null,
+ type: 'snell',
+ address: url.hostname,
+ port: url.port || '80',
+ password: url.username ? decodeURIComponent(url.username)
+ : (params.get('psk') ? decodeURIComponent(params.get('psk')) : null),
+ snell_version: params.get('version') || '4',
+ snell_userkey: params.get('userkey'),
+ snell_obfs_mode: (params.get('obfs') === 'http') ? 'http' : null,
+ snell_obfs_host: params.get('obfs-host'),
+ snell_reuse: (params.get('reuse') === '1') ? '1' : '0'
};
break;
case 'socks':
case 'socks4':
case 'socks4a':
- case 'socsk5':
+ case 'socks5':
case 'socks5h':
url = new URL('http://' + uri[1]);
@@ -417,7 +232,6 @@ function parseShareLink(uri, features) {
password: decodeURIComponent(url.username),
transport: params.get('type') !== 'tcp' ? params.get('type') : null,
tls: '1',
- tls_insecure: (params.get('insecure') === '1' || params.get('allowInsecure') === '1') ? '1' : '0',
tls_sni: params.get('sni')
};
switch (params.get('type')) {
@@ -455,7 +269,6 @@ function parseShareLink(uri, features) {
tuic_congestion_control: params.get('congestion_control'),
tuic_udp_relay_mode: params.get('udp_relay_mode'),
tls: '1',
- tls_insecure: (params.get('insecure') === '1' || params.get('allowInsecure') === '1') ? '1' : '0',
tls_sni: params.get('sni'),
tls_alpn: params.get('alpn') ? decodeURIComponent(params.get('alpn')).split(',') : null
};
@@ -483,7 +296,6 @@ function parseShareLink(uri, features) {
uuid: url.username,
transport: params.get('type') !== 'tcp' ? params.get('type') : null,
tls: ['tls', 'xtls', 'reality'].includes(params.get('security')) ? '1' : '0',
- tls_insecure: (params.get('insecure') === '1' || params.get('allowInsecure') === '1') ? '1' : '0',
tls_sni: params.get('sni'),
tls_alpn: params.get('alpn') ? decodeURIComponent(params.get('alpn')).split(',') : null,
tls_reality: (params.get('security') === 'reality') ? '1' : '0',
@@ -596,378 +408,13 @@ function parseShareLink(uri, features) {
return config;
}
-const NODE_LATENCY_ROW_STATES = Object.freeze({
- UNTESTED: 'untested',
- TESTING: 'testing',
- SUCCESS: 'success',
- TIMEOUT: 'timeout',
- ERROR: 'error'
-});
-
-const NODE_LATENCY_ROW_STATE_VALUES = Object.freeze(Object.values(NODE_LATENCY_ROW_STATES));
-const NODE_LATENCY_TEST_MODES = Object.freeze([ 'icmp', 'rp' ]);
-
-function remapLegacyNodeLatencyTestMode(mode) {
- return mode === 'tcp' ? 'icmp' : mode;
-}
-
-function normalizeNodeLatencyTestMode(mode) {
- mode = remapLegacyNodeLatencyTestMode(mode);
- return NODE_LATENCY_TEST_MODES.includes(mode) ? mode : 'icmp';
-}
-
-function resolveNodeLatencyResultByMode(result, mode) {
- let active_mode = normalizeNodeLatencyTestMode(mode || result?.mode);
- let active_latency_ms = (result && result.latency_ms != null) ? result.latency_ms : null;
- let active_error = (result && result.error) ? result.error : null;
- let active_state = result?.state;
-
- if (active_mode === 'icmp') {
- if (result && result.icmp_latency_ms != null)
- active_latency_ms = result.icmp_latency_ms;
- if (result && result.icmp_error)
- active_error = result.icmp_error;
- }
-
- if (active_error?.code?.endsWith('_timeout'))
- active_state = NODE_LATENCY_ROW_STATES.TIMEOUT;
- else if (active_error)
- active_state = NODE_LATENCY_ROW_STATES.ERROR;
- else if (active_latency_ms != null)
- active_state = NODE_LATENCY_ROW_STATES.SUCCESS;
-
- return {
- mode: active_mode,
- state: active_state,
- latency_ms: active_latency_ms,
- error: active_error
- };
-}
-
-function getNodeLatencyErrorText(error_code) {
- switch (error_code) {
- case 'backend_execution failed':
- return _('Backend execution failed');
- case 'icmp_failed':
- return _('ICMP Failed');
- case 'icmp_probe_unavailable':
- return _('ICMP Probe unavailable');
- case 'icmp_timeout':
- return _('ICMP Timeout');
- case 'invalid_node':
- return _('Invalid node');
- case 'invalid_response':
- return _('Invalid response');
- case 'probe_failed':
- return _('Probe failed');
- case 'rpc_failed':
- return _('RPC failed');
- default:
- return _('Error');
- }
-}
-
-function getNodeLatencyStatusText(row_state) {
- if (!row_state)
- return _('Not Tested');
-
- switch (row_state.state) {
- case NODE_LATENCY_ROW_STATES.TESTING:
- return _('Testing');
- case NODE_LATENCY_ROW_STATES.SUCCESS:
- return (row_state.latency_ms != null) ? _('%s ms').format(row_state.latency_ms) : _('Success');
- case NODE_LATENCY_ROW_STATES.TIMEOUT:
- return _('Timeout');
- case NODE_LATENCY_ROW_STATES.ERROR:
- return getNodeLatencyErrorText(row_state.error?.code);
- case NODE_LATENCY_ROW_STATES.UNTESTED:
- default:
- return _('Not Tested');
- }
-}
-
-function getNodeLatencyStatusStyle(row_state) {
- if (!row_state)
- return 'color:gray';
-
- switch (row_state.state) {
- case NODE_LATENCY_ROW_STATES.TESTING:
- return 'color:#0a84ff';
- case NODE_LATENCY_ROW_STATES.SUCCESS:
- return 'color:green';
- case NODE_LATENCY_ROW_STATES.TIMEOUT:
- return 'color:#ff8c00';
- case NODE_LATENCY_ROW_STATES.ERROR:
- return 'color:red';
- case NODE_LATENCY_ROW_STATES.UNTESTED:
- default:
- return 'color:gray';
- }
-}
-
-function renderNodeLatencyStatus(row_state) {
- return '%s'.format(getNodeLatencyStatusStyle(row_state), getNodeLatencyStatusText(row_state));
-}
-
-function renderNodeLatencyStatusNode(row_state, attrs) {
- return E('strong', Object.assign({
- 'style': getNodeLatencyStatusStyle(row_state)
- }, attrs || {}), [ getNodeLatencyStatusText(row_state) ]);
-}
-
-function getNodeLatencyActionTitle(row_state) {
- return (row_state?.state === NODE_LATENCY_ROW_STATES.TESTING) ? _('Testing') : _('Test');
-}
-
-function parseNodeLatencySectionId(widget_id) {
- let matched = String(widget_id || '').match(/^cbi-homeproxy-(.*)-_test_latency$/);
- return matched ? matched[1] : null;
-}
-
-function parseActiveSubscriptionTabId(value) {
- let matched = String(value || '').match(/(?:^|[^\w])(sub_[0-9a-f]+)(?:$|[^\w])/i);
- return matched ? matched[1] : null;
-}
-
-function parseActiveNodeListTabId(value) {
- let matched = String(value || '').match(/(?:^|[^\w])(node|subscription|sub_[0-9a-f]+)(?:$|[^\w])/i);
- return matched ? matched[1].toLowerCase() : null;
-}
-
-function getActiveNodeListTabId(root_el) {
- let active_tab = null;
- let active_tab_nodes = root_el.querySelectorAll('.cbi-tabmenu li.cbi-tab-active, .cbi-tabmenu li.active, .cbi-tabmenu [aria-selected="true"]');
-
- for (let node of active_tab_nodes) {
- let tab_id = parseActiveNodeListTabId(node?.getAttribute('data-tab'))
- || parseActiveNodeListTabId(node?.dataset?.tab)
- || parseActiveNodeListTabId(node?.getAttribute('id'));
- if (!tab_id && node?.querySelector)
- tab_id = parseActiveNodeListTabId(node.querySelector('a')?.getAttribute('href'))
- || parseActiveNodeListTabId(node.querySelector('a')?.getAttribute('data-tab'));
-
- if (tab_id) {
- active_tab = tab_id;
- break;
- }
- }
-
- if (!active_tab) {
- let fallback_tab_nodes = root_el.querySelectorAll('.cbi-tabmenu li.cbi-tab[data-tab], .cbi-tabmenu li[data-tab]:not(.cbi-tab-disabled)');
-
- for (let node of fallback_tab_nodes) {
- let tab_id = parseActiveNodeListTabId(node?.getAttribute('data-tab')) || parseActiveNodeListTabId(node?.dataset?.tab);
- if (tab_id) {
- active_tab = tab_id;
- break;
- }
- }
- }
-
- return active_tab;
-}
-
-function shouldShowBulkLatencyButton(root_el) {
- let active_tab = getActiveNodeListTabId(root_el);
-
- if (!active_tab)
- return false;
-
- return !!parseActiveSubscriptionTabId(active_tab);
-}
-
-function getActiveSubscriptionTabId(root_el) {
- let active_tab = getActiveNodeListTabId(root_el);
- return parseActiveSubscriptionTabId(active_tab);
-}
-
-function getActiveSubscriptionTabContainer(root_el, active_tab) {
- if (!active_tab)
- return null;
-
- let candidates = [];
- for (let selector of [
- '.cbi-tabcontainer[data-tab="%s"]'.format(active_tab),
- '[data-tab="%s"]'.format(active_tab),
- '[id="tab.%s"]'.format(active_tab),
- '[id="tab-%s"]'.format(active_tab),
- '[id="%s"]'.format(active_tab)
- ]) {
- candidates = candidates.concat(Array.from(root_el.querySelectorAll(selector)));
- }
-
- return candidates.find((node) => !node.closest('.cbi-tabmenu') && node.querySelector('div[id$="-_test_latency"]')) || null;
-}
-
-function getActiveSubscriptionLatencySectionIds(root_el) {
- let active_tab = getActiveSubscriptionTabId(root_el);
- let active_container = getActiveSubscriptionTabContainer(root_el, active_tab);
- if (!active_container)
- return [];
-
- let widgets = Array.from(active_container.querySelectorAll('div[id$="-_test_latency"]'));
- return widgets.map((node) => parseNodeLatencySectionId(node.id)).filter((sid) => !!sid);
-}
-
-function createNodeLatencyRowStateModel() {
- let rows = Object.create(null);
-
- const buildRowState = (state, result, mode) => {
- let resolved_result = resolveNodeLatencyResultByMode(result, mode);
-
- return {
- state: state,
- mode: resolved_result.mode,
- latency_ms: resolved_result.latency_ms,
- icmp_latency_ms: (result && result.icmp_latency_ms != null) ? result.icmp_latency_ms : null,
- measured_at: (result && result.measured_at) ? result.measured_at : null,
- error: resolved_result.error,
- icmp_error: (result && result.icmp_error) ? result.icmp_error : null
- };
- };
-
- const normalizeState = (state) => {
- if (NODE_LATENCY_ROW_STATE_VALUES.includes(state))
- return state;
-
- return NODE_LATENCY_ROW_STATES.ERROR;
- };
-
- const ensure = (section_id) => {
- if (!section_id)
- return buildRowState(NODE_LATENCY_ROW_STATES.UNTESTED, null, 'icmp');
-
- if (!rows[section_id])
- rows[section_id] = buildRowState(NODE_LATENCY_ROW_STATES.UNTESTED, null, 'icmp');
-
- return rows[section_id];
- };
-
- return {
- states: NODE_LATENCY_ROW_STATES,
-
- get: (section_id) => ensure(section_id),
-
- set: (section_id, state, result, mode) => {
- if (!section_id)
- return null;
-
- rows[section_id] = buildRowState(normalizeState(state), result, mode);
- return rows[section_id];
- },
-
- setFromProbeResult: (section_id, result, mode) => {
- if (!section_id)
- return null;
-
- let resolved_result = resolveNodeLatencyResultByMode(result, mode);
- let state = resolved_result.state ? normalizeState(resolved_result.state) : NODE_LATENCY_ROW_STATES.ERROR;
- rows[section_id] = buildRowState(state, result, mode);
- return rows[section_id];
- },
-
- clear: (section_id) => {
- if (!section_id)
- return;
-
- delete rows[section_id];
- },
-
- reset: () => {
- rows = Object.create(null);
- },
-
- snapshot: () => rows
- };
-}
-
-function renderNodeSettings(section, data, features, main_node, routing_mode, node_latency_row_state) {
+function renderNodeSettings(section, data, features, main_node, routing_mode) {
let s = section, o;
- if (typeof globalThis !== 'undefined') {
- globalThis.__hpNodeLatencySections = globalThis.__hpNodeLatencySections || {};
- globalThis.__hpNodeLatencyTrigger = function(section_id) {
- let target = globalThis.__hpNodeLatencySections?.[section_id];
- return target ? target.handleNodeLatencyTest(section_id) : false;
- };
- }
s.rowcolors = true;
s.sortable = true;
s.nodescriptions = true;
- s.max_cols = 7;
s.modaltitle = L.bind(hp.loadModalTitle, this, _('Node'), _('Add a node'), data[0]);
s.sectiontitle = L.bind(hp.loadDefaultLabel, this, data[0]);
- s.node_latency_row_state = node_latency_row_state;
- s.getNodeLatencyRowState = function(section_id) {
- return node_latency_row_state.get(section_id);
- }
- s.getNodeLatencyTestMode = function() {
- let mode_option = this.map.lookupOption('latency_test_mode', 'subscription')?.[0];
- let mode_value = mode_option ? mode_option.formvalue('subscription') : uci.get(data[0], 'subscription', 'latency_test_mode');
-
- return normalizeNodeLatencyTestMode(mode_value);
- }
- s.syncNodeLatencyTestMode = function(mode) {
- let normalized_mode = normalizeNodeLatencyTestMode(mode);
- let saved_mode_value = uci.get(data[0], 'subscription', 'latency_test_mode');
- let saved_mode = normalizeNodeLatencyTestMode(saved_mode_value);
-
- if (saved_mode === normalized_mode && saved_mode_value !== 'tcp')
- return Promise.resolve(normalized_mode);
-
- uci.set(data[0], 'subscription', 'latency_test_mode', normalized_mode);
- return uci.save().then(() => normalized_mode);
- }
- s.setNodeLatencyRowState = function(section_id, state, result, mode) {
- return node_latency_row_state.set(section_id, state, result, mode);
- }
- s.setNodeLatencyRowStateFromProbeResult = function(section_id, result, mode) {
- return node_latency_row_state.setFromProbeResult(section_id, result, mode);
- }
- s.refreshNodeLatencyRow = function(section_id) {
- let row_state = this.getNodeLatencyRowState(section_id);
- let latency_id = 'cbi-%s-%s-_latency'.format(data[0], section_id);
- let test_id = 'cbi-%s-%s-_test_latency'.format(data[0], section_id);
-
- let status_widget = this.map.findElement('id', latency_id);
- if (status_widget)
- status_widget.innerHTML = renderNodeLatencyStatus(row_state);
-
- let test_widget = this.map.findElement('id', test_id);
- let test_button = test_widget ? test_widget.querySelector('button') : null;
- if (test_button) {
- test_button.textContent = getNodeLatencyActionTitle(row_state);
- test_button.disabled = (row_state.state === NODE_LATENCY_ROW_STATES.TESTING) ? true : null;
- }
- }
-
- s.handleNodeLatencyTest = function(section_id) {
- let mode = this.getNodeLatencyTestMode();
- this.setNodeLatencyRowState(section_id, NODE_LATENCY_ROW_STATES.TESTING, null, mode);
- this.refreshNodeLatencyRow(section_id);
-
- return this.syncNodeLatencyTestMode(mode).then((mode) => L.resolveDefault(callNodeLatencyTest(section_id, mode), null).then((result) => {
- if (result?.node === section_id)
- this.setNodeLatencyRowStateFromProbeResult(section_id, result, mode);
- else
- this.setNodeLatencyRowState(section_id, NODE_LATENCY_ROW_STATES.ERROR, {
- mode: mode,
- error: {
- code: 'invalid_response',
- message: 'unexpected node latency response'
- }
- }, mode);
- })).catch((err) => {
- this.setNodeLatencyRowState(section_id, NODE_LATENCY_ROW_STATES.ERROR, {
- mode: mode,
- error: {
- code: 'rpc_failed',
- message: String(err)
- }
- }, mode);
- }).then(() => {
- this.refreshNodeLatencyRow(section_id);
- });
- }
if (routing_mode !== 'custom') {
o = s.option(form.Button, '_apply', _('Apply'));
@@ -992,41 +439,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no
}
}
- o = s.option(form.DummyValue, '_latency', _('Latency'));
- o.rawhtml = true;
- o.modalonly = false;
- o.textvalue = function(section_id) {
- return E('span', { 'id': 'cbi-%s-%s-_latency'.format(data[0], section_id) }, [
- renderNodeLatencyStatusNode(this.section.getNodeLatencyRowState(section_id))
- ]);
- }
-
- o = s.option(form.Button, '_test_latency', _('Test'));
- o.editable = true;
- o.modalonly = false;
- o.inputstyle = 'action';
- o.inputtitle = function(section_id) {
- return getNodeLatencyActionTitle(this.section.getNodeLatencyRowState(section_id));
- }
- o.renderWidget = function(section_id, _option_index, cfgvalue) {
- let hiddenEl = new ui.Hiddenfield((cfgvalue != null) ? cfgvalue : '', {
- id: this.cbid(section_id)
- });
- let outputEl = E('output', { 'for': this.cbid(section_id) });
- let row_state = s.getNodeLatencyRowState(section_id);
-
- if (typeof globalThis !== 'undefined' && globalThis.__hpNodeLatencySections)
- globalThis.__hpNodeLatencySections[section_id] = s;
-
- outputEl.appendChild(E('button', {
- 'class': 'cbi-button cbi-button-action',
- 'onclick': 'return globalThis.__hpNodeLatencyTrigger(%s);'.format(JSON.stringify(section_id)),
- 'disabled': (row_state.state === NODE_LATENCY_ROW_STATES.TESTING) ? true : null
- }, [ getNodeLatencyActionTitle(row_state) ]));
-
- return E([ outputEl, hiddenEl.render() ]);
- }
-
o = s.option(form.Value, 'label', _('Label'));
o.load = L.bind(hp.loadDefaultLabel, this, data[0]);
o.validate = L.bind(hp.validateUniqueValue, this, data[0], 'node', 'label');
@@ -1051,7 +463,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no
o.value('wireguard', _('WireGuard'));
o.value('vless', _('VLESS'));
o.value('vmess', _('VMess'));
- o.default = 'direct';
o.rmempty = false;
o = s.option(form.Value, 'address', _('Address'));
@@ -1076,6 +487,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no
o.depends('type', 'http');
o.depends('type', 'hysteria2');
o.depends('type', 'shadowsocks');
+ o.depends('type', 'snell');
o.depends('type', 'ssh');
o.depends('type', 'trojan');
o.depends('type', 'tuic');
@@ -1085,7 +497,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no
o.validate = function(section_id, value) {
if (section_id) {
let type = this.section.formvalue(section_id, 'type');
- let required_type = [ 'anytls', 'shadowsocks', 'shadowtls', 'trojan' ];
+ let required_type = [ 'anytls', 'shadowsocks', 'shadowtls', 'snell', 'trojan' ];
if (required_type.includes(type)) {
if (type === 'shadowsocks') {
@@ -1102,6 +514,15 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no
}
o.modalonly = true;
+ /* Direct config */
+ o = s.option(form.ListValue, 'proxy_protocol', _('Proxy protocol'),
+ _('Write proxy protocol in the connection header.'));
+ o.value('', _('Disable'));
+ o.value('1', _('v1'));
+ o.value('2', _('v2'));
+ o.depends('type', 'direct');
+ o.modalonly = true;
+
/* AnyTLS config start */
o = s.option(form.Value, 'anytls_idle_session_check_interval', _('Idle session check interval'),
_('Interval checking for idle sessions, in seconds.'));
@@ -1140,6 +561,13 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no
o.depends({'type': 'hysteria2', 'hysteria_hopping_port': /[\s\S]/});
o.modalonly = true;
+ o = s.option(form.Value, 'hysteria_hop_interval_max', _('Max hop interval (1.14)'),
+ _('Maximum port hopping interval in seconds; the actual interval is randomized between the two values. Hysteria2 only.'));
+ o.datatype = 'uinteger';
+ o.placeholder = '300';
+ o.depends({'type': 'hysteria2', 'hysteria_hopping_port': /[\s\S]/});
+ o.modalonly = true;
+
o = s.option(form.ListValue, 'hysteria_protocol', _('Protocol'));
o.value('udp');
/* WeChat-Video / FakeTCP are unsupported by sing-box currently
@@ -1167,6 +595,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no
o = s.option(form.ListValue, 'hysteria_obfs_type', _('Obfuscate type'));
o.value('', _('Disable'));
o.value('salamander', _('Salamander'));
+ o.value('gecko', _('Gecko (1.14)'));
o.depends('type', 'hysteria2');
o.modalonly = true;
@@ -1176,6 +605,20 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no
o.depends({'type': 'hysteria2', 'hysteria_obfs_type': /[\s\S]/});
o.modalonly = true;
+ o = s.option(form.Value, 'hysteria_obfs_min_packet_size', _('Min obfs packet size (1.14)'),
+ _('Minimum on-wire packet size in bytes. Gecko only.'));
+ o.datatype = 'uinteger';
+ o.placeholder = '512';
+ o.depends({'type': 'hysteria2', 'hysteria_obfs_type': 'gecko'});
+ o.modalonly = true;
+
+ o = s.option(form.Value, 'hysteria_obfs_max_packet_size', _('Max obfs packet size (1.14)'),
+ _('Maximum on-wire packet size in bytes. Gecko only.'));
+ o.datatype = 'uinteger';
+ o.placeholder = '1200';
+ o.depends({'type': 'hysteria2', 'hysteria_obfs_type': 'gecko'});
+ o.modalonly = true;
+
o = s.option(form.Value, 'hysteria_down_mbps', _('Max download speed'),
_('Max download speed in Mbps.'));
o.datatype = 'uinteger';
@@ -1190,21 +633,17 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no
o.depends('type', 'hysteria2');
o.modalonly = true;
- o = s.option(form.Value, 'hysteria_recv_window_conn', _('QUIC stream receive window'),
- _('The QUIC stream-level flow control window for receiving data.'));
- o.datatype = 'uinteger';
- o.depends('type', 'hysteria');
+ o = s.option(form.ListValue, 'hysteria_bbr_profile', _('BBR profile (1.14)'),
+ _('BBR congestion control algorithm profile. Hysteria2 only.'));
+ o.value('', _('Standard (default)'));
+ o.value('conservative', _('Conservative'));
+ o.value('aggressive', _('Aggressive'));
+ o.depends('type', 'hysteria2');
o.modalonly = true;
- o = s.option(form.Value, 'hysteria_revc_window', _('QUIC connection receive window'),
- _('The QUIC connection-level flow control window for receiving data.'));
- o.datatype = 'uinteger';
- o.depends('type', 'hysteria');
- o.modalonly = true;
-
- o = s.option(form.Flag, 'hysteria_disable_mtu_discovery', _('Disable Path MTU discovery'),
- _('Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 (IPv4) / 1232 (IPv6) bytes in size.'));
- o.depends('type', 'hysteria');
+ o = s.option(form.Flag, 'hysteria_disable_chrome_parrot', _('Disable Chrome QUIC fingerprint (1.14)'),
+ _('Disable Chrome QUIC handshake parroting, which is enabled by default since sing-box 1.14. Turn this on only when the server uses an Ed25519 certificate or the handshake otherwise fails.'));
+ o.depends('type', 'hysteria2');
o.modalonly = true;
/* Hysteria (2) config end */
@@ -1346,7 +785,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no
o.modalonly = true;
o = s.option(form.ListValue, 'vmess_encrypt', _('Encrypt method'));
- o.value('auto', _('Default'));
+ o.value('auto');
o.value('none');
o.value('zero');
o.value('aes-128-gcm');
@@ -1370,126 +809,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode, no
/* VMess config end */
/* Transport config start */
- o = s.option(form.ListValue, 'transport', _('Transport'),
- _('No TCP transport, plain HTTP is merged into the HTTP transport.'));
- o.value('', _('None'));
- o.value('grpc', _('gRPC'));
- o.value('http', _('HTTP'));
- o.value('httpupgrade', _('HTTPUpgrade'));
- o.value('quic', _('QUIC'));
- o.value('ws', _('WebSocket'));
- o.depends('type', 'trojan');
- o.depends('type', 'vless');
- o.depends('type', 'vmess');
- o.onchange = function(ev, section_id, value) {
- let desc = this.map.findElement('id', 'cbid.homeproxy.%s.transport'.format(section_id)).nextElementSibling;
- if (value === 'http')
- desc.innerHTML = _('TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used.');
- else if (value === 'quic')
- desc.innerHTML = _('No additional encryption support: It\'s basically duplicate encryption.');
- else
- desc.innerHTML = _('No TCP transport, plain HTTP is merged into the HTTP transport.');
-
- let tls = this.map.findElement('id', 'cbid.homeproxy.%s.tls'.format(section_id)).firstElementChild;
- if ((value === 'http' && tls.checked) || (value === 'grpc' && !features.with_grpc)) {
- this.map.findElement('id', 'cbid.homeproxy.%s.http_idle_timeout'.format(section_id)).nextElementSibling.innerHTML =
- _('Specifies the period of time (in seconds) after which a health check will be performed using a ping frame if no frames have been received on the connection.Sec-WebSocket-Protocol.'));
- o.value('Sec-WebSocket-Protocol');
- o.depends('transport', 'ws');
- o.modalonly = true;
- /* WebSocket config end */
-
+ hp.renderTransportOptions(s, { features: features, side: 'server' });
/* Transport config end */
/* Mux config start */
@@ -532,67 +448,11 @@ return view.extend({
/* Mux config end */
/* TLS config start */
- o = s.option(form.Flag, 'tls', _('TLS'));
- o.depends('type', 'anytls');
- o.depends('type', 'http');
- o.depends('type', 'hysteria');
- o.depends('type', 'hysteria2');
- o.depends('type', 'naive');
- o.depends('type', 'trojan');
- o.depends('type', 'tuic');
- o.depends('type', 'vless');
- o.depends('type', 'vmess');
- o.rmempty = false;
- o.validate = function(section_id, value) {
- if (section_id) {
- let type = this.map.lookupOption('type', section_id)[0].formvalue(section_id);
- let tls = this.map.findElement('id', 'cbid.homeproxy.%s.tls'.format(section_id)).firstElementChild;
-
- if (['hysteria', 'hysteria2', 'tuic'].includes(type)) {
- tls.checked = true;
- tls.disabled = true;
- } else {
- tls.disabled = null;
- }
- }
-
- return true;
- }
- o.modalonly = true;
-
- o = s.option(form.Value, 'tls_sni', _('TLS SNI'),
- _('Used to verify the hostname on the returned certificates unless insecure is given.'));
- o.depends('tls', '1');
- o.modalonly = true;
-
- o = s.option(form.DynamicList, 'tls_alpn', _('TLS ALPN'),
- _('List of supported application level protocols, in order of preference.'));
- o.depends('tls', '1');
- o.modalonly = true;
-
- o = s.option(form.ListValue, 'tls_min_version', _('Minimum TLS version'),
- _('The minimum TLS version that is acceptable.'));
- o.value('', _('default'));
- for (let i of hp.tls_versions)
- o.value(i);
- o.depends('tls', '1');
- o.modalonly = true;
-
- o = s.option(form.ListValue, 'tls_max_version', _('Maximum TLS version'),
- _('The maximum TLS version that is acceptable.'));
- o.value('', _('default'));
- for (let i of hp.tls_versions)
- o.value(i);
- o.depends('tls', '1');
- o.modalonly = true;
-
- o = s.option(hp.CBIStaticList, 'tls_cipher_suites', _('Cipher suites'),
- _('The elliptic curves that will be used in an ECDHE handshake, in preference order. If empty, the default will be used.'));
- for (let i of hp.tls_cipher_suites)
- o.value(i);
- o.depends('tls', '1');
- o.optional = true;
- o.modalonly = true;
+ hp.renderTlsOptions(s, {
+ side: 'server',
+ type_depends: [ 'anytls', 'http', 'hysteria', 'hysteria2', 'naive', 'trojan', 'tuic', 'vless', 'vmess' ],
+ tls_forced_types: [ 'hysteria', 'hysteria2', 'tuic' ]
+ });
if (features.with_acme) {
o = s.option(form.Flag, 'tls_acme', _('Enable ACME'),
@@ -627,6 +487,29 @@ return view.extend({
}
o.modalonly = true;
+ o = s.option(form.Value, 'tls_acme_key_type', _('ACME key type'),
+ _('Private key type for new certificates (1.14). Empty uses the default.'));
+ o.value('ed25519');
+ o.value('p256');
+ o.value('p384');
+ o.value('rsa2048');
+ o.value('rsa4096');
+ o.depends('tls_acme', '1');
+ o.modalonly = true;
+
+ o = s.option(form.Value, 'tls_acme_profile', _('ACME profile'),
+ _('ACME profile for certificate issuance (1.14). Example: shortlived.'));
+ o.placeholder = 'shortlived';
+ o.depends('tls_acme', '1');
+ o.modalonly = true;
+
+ o = s.option(form.TextValue, 'tls_acme_account_key', _('ACME account key'),
+ _('PEM-encoded private key of an existing ACME account (1.14).'));
+ o.monospace = true;
+ o.rows = 3;
+ o.depends('tls_acme', '1');
+ o.modalonly = true;
+
o = s.option(form.Value, 'tls_acme_provider', _('CA provider'),
_('The ACME CA provider to use.'));
o.value('letsencrypt', _('Let\'s Encrypt'));
@@ -640,10 +523,10 @@ return view.extend({
o.modalonly = true;
o = s.option(form.ListValue, 'tls_dns01_provider', _('DNS provider'));
- o.value('alidns', _('AliYun'));
- o.value('cfdns', _('CloudFlare'));
+ o.value('alidns', _('Alibaba Cloud DNS'));
+ o.value('cloudflare', _('Cloudflare'));
o.depends('tls_dns01_challenge', '1');
- o.default = 'cfdns';
+ o.default = 'cloudflare';
o.rmempty = false;
o.modalonly = true;
@@ -666,7 +549,7 @@ return view.extend({
o = s.option(form.Value, 'tls_dns01_cf_api_token', _('API token'));
o.password = true;
- o.depends('tls_dns01_provider', 'cfdns');
+ o.depends('tls_dns01_provider', 'cloudflare');
o.rmempty = false;
o.modalonly = true;
diff --git a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js
index 3f2e801ca..f8a617000 100644
--- a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js
+++ b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js
@@ -14,8 +14,6 @@
'require ui';
'require view';
-'require homeproxy as hp';
-
/* Thanks to luci-app-aria2 */
const css = ' \
#log_textarea { \
@@ -29,53 +27,6 @@ const css = ' \
} \
.description { \
background-color: #33ccff; \
-} \
-.homeproxy-connect-grid { \
- display: grid; \
- grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));\
- gap: 12px; \
-} \
-.homeproxy-connect-card { \
- display: grid; \
- grid-template-columns: 44px 1fr; \
- gap: 10px; \
- align-items: center; \
- min-height: 64px; \
- padding: 8px 10px; \
- border-radius: 6px; \
- background: #fff; \
- box-shadow: 0 1px 4px rgba(0, 0, 0, .08);\
-} \
-.homeproxy-connect-icon { \
- display: flex; \
- align-items: center; \
- justify-content: center; \
- width: 38px; \
- height: 38px; \
- border-radius: 50%; \
- color: #fff; \
- font-weight: 700; \
- font-size: 15px; \
-} \
-.homeproxy-connect-info { \
- min-height: 42px; \
- padding: 7px 12px; \
- border-radius: 8px; \
- background: #e9edf2; \
-} \
-.homeproxy-connect-title { \
- color: #7d8aa0; \
- font-weight: 700; \
- font-size: 13px; \
- line-height: 1.2; \
-} \
-.homeproxy-connect-result { \
- margin-top: 2px; \
- color: #ff4d35; \
- font-weight: 700; \
- font-size: 13px; \
- cursor: pointer; \
- line-height: 1.2; \
}';
const hp_dir = '/var/run/homeproxy';
@@ -93,13 +44,13 @@ function getConnStat(o, site) {
'class': 'btn cbi-button cbi-button-action',
'click': ui.createHandlerFn(this, () => {
return L.resolveDefault(callConnStat(site), {}).then((ret) => {
- let ele = o.default.firstElementChild.nextElementSibling;
+ let ele = o.default.firstElementChild.nextElementSibling;
if (ret.result) {
ele.style.setProperty('color', 'green');
- ele.innerHTML = _('passed');
+ ele.innerHTML = _('passed');
} else {
ele.style.setProperty('color', 'red');
- ele.innerHTML = _('failed');
+ ele.innerHTML = _('failed');
}
});
})
@@ -109,53 +60,6 @@ function getConnStat(o, site) {
]);
}
-function renderConnCards() {
- const callConnStat = rpc.declare({
- object: 'luci.homeproxy',
- method: 'connection_check',
- params: ['site'],
- expect: { '': {} }
- });
-
- const items = [
- { site: 'baidu', title: _('Baidu Connection'), icon: 'B', color: '#ff7a00' },
- { site: 'google', title: _('Google Connection'), icon: 'G', color: '#4285f4' },
- { site: 'github', title: _('GitHub Connection'), icon: 'GH', color: '#7b3bb3' },
- { site: 'youtube', title: _('YouTube Connection'), icon: 'YT', color: '#ff0033' }
- ];
-
- return E('div', { 'class': 'homeproxy-connect-grid' }, items.map((item) => {
- let result = E('div', {
- 'class': 'homeproxy-connect-result',
- 'click': ui.createHandlerFn(this, () => {
- result.textContent = _('Checking...');
- result.style.setProperty('color', '#f0ad4e');
-
- return L.resolveDefault(callConnStat(item.site), {}).then((ret) => {
- if (ret.result && ret.latency != null) {
- result.style.setProperty('color', 'green');
- result.textContent = _('%s ms').format(ret.latency);
- } else {
- result.style.setProperty('color', '#ff4d35');
- result.textContent = _('failed');
- }
- });
- })
- }, [ _('Click to check') ]);
-
- return E('div', { 'class': 'homeproxy-connect-card' }, [
- E('div', {
- 'class': 'homeproxy-connect-icon',
- 'style': 'background:%s'.format(item.color)
- }, [ item.icon ]),
- E('div', { 'class': 'homeproxy-connect-info' }, [
- E('div', { 'class': 'homeproxy-connect-title' }, [ item.title ]),
- result
- ])
- ]);
- }));
-}
-
function getResVersion(o, type) {
const callResVersion = rpc.declare({
object: 'luci.homeproxy',
@@ -323,16 +227,16 @@ return view.extend({
render() {
let m, s, o;
- hp.installCloseButtonText();
-
m = new form.Map('homeproxy');
s = m.section(form.NamedSection, 'config', 'homeproxy', _('Connection check'));
s.anonymous = true;
- o = s.option(form.DummyValue, '_connection_check');
- o.rawhtml = true;
- o.render = renderConnCards;
+ o = s.option(form.DummyValue, '_check_baidu', _('BaiDu'));
+ o.cfgvalue = L.bind(getConnStat, this, o, 'baidu');
+
+ o = s.option(form.DummyValue, '_check_google', _('Google'));
+ o.cfgvalue = L.bind(getConnStat, this, o, 'google');
s = m.section(form.NamedSection, 'config', 'homeproxy', _('Resources management'));
s.anonymous = true;
diff --git a/luci-app-homeproxy/po/templates/homeproxy.pot b/luci-app-homeproxy/po/templates/homeproxy.pot
index daea34056..984d0b4fd 100644
--- a/luci-app-homeproxy/po/templates/homeproxy.pot
+++ b/luci-app-homeproxy/po/templates/homeproxy.pot
@@ -1,19 +1,11 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
-#: htdocs/luci-static/resources/homeproxy.js:321
-msgid "Close"
-msgstr ""
-
#: htdocs/luci-static/resources/view/homeproxy/status.js:206
msgid "%s log"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:500
-msgid "%s ms"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1896
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1542
msgid "%s nodes removed"
msgstr ""
@@ -21,78 +13,92 @@ msgstr ""
msgid "/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/..."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:632
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1287
+msgid ""
+"1 matches the latest untagged evaluate result; other values match an "
+"evaluate tag (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:657
msgid "4 or 6. Not limited if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:798
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1233
+#: htdocs/luci-static/resources/view/homeproxy/client.js:842
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1354
msgid ""
"%s will be temporarily overwritten to %s after 50 "
"triggers in 30s if not enabled."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1516
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1535
-#: htdocs/luci-static/resources/view/homeproxy/server.js:768
-#: htdocs/luci-static/resources/view/homeproxy/server.js:787
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1172
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1191
+#: htdocs/luci-static/resources/view/homeproxy/server.js:807
+#: htdocs/luci-static/resources/view/homeproxy/server.js:826
msgid "Save your configuration before uploading files!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:664
-msgid "API token"
+#: htdocs/luci-static/resources/view/homeproxy/server.js:659
+msgid "ACME account key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1100
-msgid "Accept any if empty."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1161
-msgid "Accept empty query response"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1422
-msgid "Access Control"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:647
-msgid "Access key ID"
+#: htdocs/luci-static/resources/view/homeproxy/server.js:643
+msgid "ACME key type"
msgstr ""
#: htdocs/luci-static/resources/view/homeproxy/server.js:653
+msgid "ACME profile"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:654
+msgid "ACME profile for certificate issuance (1.14). Example: shortlived."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:703
+msgid "API token"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:709
+msgid "Accept any if empty."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1586
+msgid "Access Control"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:686
+msgid "Access key ID"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:692
msgid "Access key secret"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:692
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1169
+#: htdocs/luci-static/resources/view/homeproxy/client.js:717
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1235
msgid "Action"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:210
-msgid "AdGuard Public DNS (DoH)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1079
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1149
msgid "Add a DNS rule"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:956
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1026
msgid "Add a DNS server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:719
+#: htdocs/luci-static/resources/view/homeproxy/node.js:416
msgid "Add a node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:453
msgid "Add a routing node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:599
+#: htdocs/luci-static/resources/view/homeproxy/client.js:624
msgid "Add a routing rule"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1343
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1482
msgid "Add a rule set"
msgstr ""
@@ -100,32 +106,47 @@ msgstr ""
msgid "Add a server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:998
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1068
msgid "Additional headers to be sent to the DNS server."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:980
-#: htdocs/luci-static/resources/view/homeproxy/node.js:878
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1050
+#: htdocs/luci-static/resources/view/homeproxy/node.js:468
msgid "Address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1011
+#: htdocs/luci-static/resources/view/homeproxy/client.js:325
+#: htdocs/luci-static/resources/view/homeproxy/client.js:336
+msgid "Address and port dependent"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:324
+#: htdocs/luci-static/resources/view/homeproxy/client.js:335
+msgid "Address dependent"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1081
msgid "Address resolver"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1043
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1113
msgid "Address strategy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:640
-msgid "AliYun"
+#: htdocs/luci-static/resources/view/homeproxy/node.js:640
+msgid "Aggressive"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:246
-msgid "AliYun Public DNS (DoH)"
+#: htdocs/luci-static/resources/view/homeproxy/server.js:679
+msgid "Alibaba Cloud DNS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:289
+#: htdocs/luci-static/resources/view/homeproxy/client.js:186
+#: htdocs/luci-static/resources/view/homeproxy/client.js:220
+msgid "Aliyun Public DNS (223.5.5.5)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:266
msgid "All ports"
msgstr ""
@@ -133,21 +154,21 @@ msgstr ""
msgid "Allow access from the Internet."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1470
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1822
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1119
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1468
msgid "Allow insecure"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1471
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1120
msgid "Allow insecure connection at TLS client."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1823
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1469
msgid "Allow insecure connection by default when add nodes from subscriptions."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1304
-#: htdocs/luci-static/resources/view/homeproxy/server.js:482
+#: htdocs/luci-static/resources/view/homeproxy/node.js:913
+#: htdocs/luci-static/resources/view/homeproxy/server.js:498
msgid "Allowed payload size is in the request."
msgstr ""
@@ -159,175 +180,183 @@ msgstr ""
msgid "Already in updating."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1172
-#: htdocs/luci-static/resources/view/homeproxy/server.js:391
+#: htdocs/luci-static/resources/view/homeproxy/node.js:781
+#: htdocs/luci-static/resources/view/homeproxy/server.js:407
msgid "Alter ID"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:678
+#: htdocs/luci-static/resources/view/homeproxy/server.js:717
msgid "Alternative HTTP port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:684
+#: htdocs/luci-static/resources/view/homeproxy/server.js:723
msgid "Alternative TLS port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1859
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1505
msgid "An error occurred during updating subscriptions: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1250
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1371
msgid "Answer"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:859
+#: htdocs/luci-static/resources/view/homeproxy/node.js:449
#: htdocs/luci-static/resources/view/homeproxy/server.js:176
msgid "AnyTLS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:245
+#: htdocs/luci-static/resources/view/homeproxy/server.js:247
msgid "AnyTLS padding scheme in array."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:822
-#: htdocs/luci-static/resources/view/homeproxy/client.js:932
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1218
+#: htdocs/luci-static/resources/view/homeproxy/client.js:866
+#: htdocs/luci-static/resources/view/homeproxy/client.js:992
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1279
msgid ""
"Append a edns0-subnet OPT extra record with the specified IP "
"prefix to every query by default./32 or /128 will be appended automatically."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1502
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1158
msgid "Append self-signed certificate"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:802
+#: htdocs/luci-static/resources/view/homeproxy/node.js:427
msgid "Applied"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:795
-#: htdocs/luci-static/resources/view/homeproxy/node.js:805
+#: htdocs/luci-static/resources/view/homeproxy/node.js:420
+#: htdocs/luci-static/resources/view/homeproxy/node.js:430
msgid "Apply"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:26
+#: htdocs/luci-static/resources/view/homeproxy/node.js:18
msgid "Are you sure to allow insecure?"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:363
+#: htdocs/luci-static/resources/view/homeproxy/server.js:379
msgid "Auth timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1196
+#: htdocs/luci-static/resources/view/homeproxy/node.js:805
msgid "Authenticated length"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:991
-#: htdocs/luci-static/resources/view/homeproxy/server.js:282
+#: htdocs/luci-static/resources/view/homeproxy/node.js:589
+#: htdocs/luci-static/resources/view/homeproxy/server.js:284
msgid "Authentication payload"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:984
-#: htdocs/luci-static/resources/view/homeproxy/server.js:275
+#: htdocs/luci-static/resources/view/homeproxy/node.js:582
+#: htdocs/luci-static/resources/view/homeproxy/server.js:277
msgid "Authentication type"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:703
-msgid "Auto select"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1768
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1421
msgid "Auto update"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1769
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1422
msgid "Auto update subscriptions and geodata."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1132
+#: htdocs/luci-static/resources/view/homeproxy/node.js:741
msgid "BBR"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:472
-msgid "Backend execution failed"
+#: htdocs/luci-static/resources/view/homeproxy/node.js:637
+msgid "BBR congestion control algorithm profile. Hysteria2 only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:636
+msgid "BBR profile (1.14)"
msgstr ""
#: htdocs/luci-static/resources/view/homeproxy/status.js:235
msgid "BaiDu"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:986
-#: htdocs/luci-static/resources/view/homeproxy/server.js:277
+#: htdocs/luci-static/resources/view/homeproxy/node.js:584
+#: htdocs/luci-static/resources/view/homeproxy/server.js:279
msgid "Base64"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:346
+#: htdocs/luci-static/resources/view/homeproxy/client.js:372
msgid "Based on google/gvisor."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1364
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1503
msgid "Binary file"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:476
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1435
-#: htdocs/luci-static/resources/view/homeproxy/server.js:874
+#: htdocs/luci-static/resources/view/homeproxy/client.js:501
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1599
+#: htdocs/luci-static/resources/view/homeproxy/server.js:913
msgid "Bind interface"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1436
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1600
msgid ""
"Bind outbound traffic to specific interface. Leave empty to auto detect."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:640
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1129
+#: htdocs/luci-static/resources/view/homeproxy/client.js:665
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1199
msgid "BitTorrent"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1809
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1455
msgid "Blacklist mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:388
+#: htdocs/luci-static/resources/view/homeproxy/client.js:413
msgid "Block"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:635
-#: htdocs/luci-static/resources/view/homeproxy/client.js:663
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1115
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1125
-#: htdocs/luci-static/resources/view/homeproxy/server.js:869
+#: htdocs/luci-static/resources/view/homeproxy/client.js:660
+#: htdocs/luci-static/resources/view/homeproxy/client.js:688
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1185
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1195
+#: htdocs/luci-static/resources/view/homeproxy/server.js:908
msgid "Both"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:366
+#: htdocs/luci-static/resources/view/homeproxy/client.js:392
msgid "Bypass CN traffic"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:276
+#: htdocs/luci-static/resources/view/homeproxy/client.js:253
msgid "Bypass mainland China"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:367
+#: htdocs/luci-static/resources/view/homeproxy/client.js:393
msgid "Bypass mainland China traffic via firewall rules by default."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:627
+#: htdocs/luci-static/resources/view/homeproxy/server.js:666
msgid "CA provider"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1130
+#: htdocs/luci-static/resources/view/homeproxy/client.js:301
+msgid "CN-IP DNS fallback (sing-box 1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:221
+msgid "CNNIC Public DNS (210.2.4.8)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:739
msgid "CUBIC"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1672
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1325
msgid "Cancel"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1507
-#: htdocs/luci-static/resources/view/homeproxy/server.js:756
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1163
+#: htdocs/luci-static/resources/view/homeproxy/server.js:795
msgid "Certificate path"
msgstr ""
@@ -339,7 +368,7 @@ msgstr ""
msgid "Check update"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:241
+#: htdocs/luci-static/resources/view/homeproxy/client.js:217
msgid "China DNS server"
msgstr ""
@@ -355,28 +384,24 @@ msgstr ""
msgid "China list version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1783
-msgid "Choose which method node latency tests use."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:652
+#: htdocs/luci-static/resources/view/homeproxy/client.js:677
msgid "Chromium / Cronet"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1494
-#: htdocs/luci-static/resources/view/homeproxy/server.js:586
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1143
+#: htdocs/luci-static/resources/view/homeproxy/server.js:602
msgid "Cipher suites"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:212
-msgid "Cisco Public DNS (DoH)"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:183
+msgid "Cisco Public DNS (208.67.222.222)"
msgstr ""
#: htdocs/luci-static/resources/view/homeproxy/status.js:214
msgid "Clean log"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:650
+#: htdocs/luci-static/resources/view/homeproxy/client.js:675
msgid "Client"
msgstr ""
@@ -384,30 +409,30 @@ msgstr ""
msgid "Client Settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1094
+#: htdocs/luci-static/resources/view/homeproxy/node.js:703
msgid "Client version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:641
-msgid "CloudFlare"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:182
+msgid "CloudFlare Public DNS (1.1.1.1)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:207
-msgid "CloudFlare Public DNS (DoH)"
+#: htdocs/luci-static/resources/view/homeproxy/server.js:680
+msgid "Cloudflare"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:139
+#: htdocs/luci-static/resources/view/homeproxy/client.js:114
#: htdocs/luci-static/resources/view/homeproxy/server.js:142
#: htdocs/luci-static/resources/view/homeproxy/status.js:176
msgid "Collecting data..."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:290
+#: htdocs/luci-static/resources/view/homeproxy/client.js:267
msgid "Common ports only (bypass P2P traffic)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1128
-#: htdocs/luci-static/resources/view/homeproxy/server.js:354
+#: htdocs/luci-static/resources/view/homeproxy/node.js:737
+#: htdocs/luci-static/resources/view/homeproxy/server.js:370
msgid "Congestion control algorithm"
msgstr ""
@@ -415,54 +440,63 @@ msgstr ""
msgid "Connection check"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1772
-msgid "Cron expression"
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1055
+msgid "Connection reuse"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:278
+#: htdocs/luci-static/resources/view/homeproxy/node.js:639
+msgid "Conservative"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:255
msgid "Custom routing"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:641
+#: htdocs/luci-static/resources/view/homeproxy/client.js:666
msgid "DNS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1070
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1734
+msgid "DNS Cache (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1140
msgid "DNS Rules"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:947
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1017
msgid "DNS Servers"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:895
+#: htdocs/luci-static/resources/view/homeproxy/client.js:959
msgid "DNS Settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:639
+#: htdocs/luci-static/resources/view/homeproxy/server.js:678
msgid "DNS provider"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1079
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1006
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1747
+msgid "DNS query timeout"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1149
msgid "DNS rule"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:204
-#: htdocs/luci-static/resources/view/homeproxy/client.js:772
-#: htdocs/luci-static/resources/view/homeproxy/client.js:956
+#: htdocs/luci-static/resources/view/homeproxy/client.js:179
+#: htdocs/luci-static/resources/view/homeproxy/client.js:816
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1026
msgid "DNS server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:211
-msgid "DNS.SB Public DNS (DoH)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:635
+#: htdocs/luci-static/resources/view/homeproxy/server.js:674
msgid "DNS01 challenge"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:642
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1130
+#: htdocs/luci-static/resources/view/homeproxy/client.js:667
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1200
msgid "DTLS"
msgstr ""
@@ -471,248 +505,243 @@ msgid "Debug"
msgstr ""
#: htdocs/luci-static/resources/homeproxy.js:17
-#: htdocs/luci-static/resources/view/homeproxy/client.js:456
-#: htdocs/luci-static/resources/view/homeproxy/client.js:626
-#: htdocs/luci-static/resources/view/homeproxy/client.js:778
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1106
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1404
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1140
+#: htdocs/luci-static/resources/view/homeproxy/client.js:481
+#: htdocs/luci-static/resources/view/homeproxy/client.js:651
+#: htdocs/luci-static/resources/view/homeproxy/client.js:822
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1176
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1546
+#: htdocs/luci-static/resources/view/homeproxy/node.js:749
msgid "Default"
msgstr ""
-msgid "Default node"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:405
-#: htdocs/luci-static/resources/view/homeproxy/client.js:457
-#: htdocs/luci-static/resources/view/homeproxy/client.js:779
-#: htdocs/luci-static/resources/view/homeproxy/client.js:910
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1018
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1184
+#: htdocs/luci-static/resources/view/homeproxy/client.js:430
+#: htdocs/luci-static/resources/view/homeproxy/client.js:482
+#: htdocs/luci-static/resources/view/homeproxy/client.js:823
+#: htdocs/luci-static/resources/view/homeproxy/client.js:974
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1088
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1251
msgid "Default DNS (issued by WAN)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:905
+#: htdocs/luci-static/resources/view/homeproxy/client.js:969
msgid "Default DNS server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1332
-msgid "Daily domain name resolution for clients. Choose an overseas DNS if DNS leak protection is required."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:400
+#: htdocs/luci-static/resources/view/homeproxy/client.js:425
msgid "Default DNS server for resolving domain name in the server address."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:900
+#: htdocs/luci-static/resources/view/homeproxy/client.js:964
msgid "Default DNS strategy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:380
-msgid "Default outbound (fallback)"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:405
+msgid "Default outbound"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:399
+#: htdocs/luci-static/resources/view/homeproxy/client.js:424
msgid "Default outbound DNS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:381
+#: htdocs/luci-static/resources/view/homeproxy/client.js:406
msgid "Default outbound for connections not matched by any routing rules."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1829
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1475
msgid "Default packet encoding"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:606
+#: htdocs/luci-static/resources/view/homeproxy/server.js:622
msgid "Default server name"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:387
-#: htdocs/luci-static/resources/view/homeproxy/client.js:489
-#: htdocs/luci-static/resources/view/homeproxy/client.js:707
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1056
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1405
-#: htdocs/luci-static/resources/view/homeproxy/node.js:858
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1007
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1748
+msgid "Default timeout per DNS query in seconds (sing-box default: 10)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:412
+#: htdocs/luci-static/resources/view/homeproxy/client.js:514
+#: htdocs/luci-static/resources/view/homeproxy/client.js:732
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1126
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1547
+#: htdocs/luci-static/resources/view/homeproxy/node.js:448
msgid "Direct"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1537
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1701
msgid "Direct Domain List"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1451
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1496
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1615
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1660
msgid "Direct IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1454
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1499
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1618
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1663
msgid "Direct IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1457
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1621
msgid "Direct MAC-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:148
-#: htdocs/luci-static/resources/view/homeproxy/client.js:176
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1445
-#: htdocs/luci-static/resources/view/homeproxy/node.js:929
-#: htdocs/luci-static/resources/view/homeproxy/node.js:985
-#: htdocs/luci-static/resources/view/homeproxy/node.js:998
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1545
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1808
-#: htdocs/luci-static/resources/view/homeproxy/server.js:276
-#: htdocs/luci-static/resources/view/homeproxy/server.js:289
+#: htdocs/luci-static/resources/view/homeproxy/client.js:123
+#: htdocs/luci-static/resources/view/homeproxy/client.js:151
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1609
+#: htdocs/luci-static/resources/view/homeproxy/node.js:520
+#: htdocs/luci-static/resources/view/homeproxy/node.js:583
+#: htdocs/luci-static/resources/view/homeproxy/node.js:596
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1201
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1454
+#: htdocs/luci-static/resources/view/homeproxy/server.js:278
+#: htdocs/luci-static/resources/view/homeproxy/server.js:291
msgid "Disable"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:386
+#: htdocs/luci-static/resources/view/homeproxy/client.js:411
msgid "Disable (the service)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:810
-#: htdocs/luci-static/resources/view/homeproxy/client.js:922
+#: htdocs/luci-static/resources/view/homeproxy/node.js:644
+msgid "Disable Chrome QUIC fingerprint (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:645
+msgid ""
+"Disable Chrome QUIC handshake parroting, which is enabled by default since "
+"sing-box 1.14. Turn this on only when the server uses an Ed25519 certificate "
+"or the handshake otherwise fails."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:854
+#: htdocs/luci-static/resources/view/homeproxy/client.js:986
msgid "Disable DNS cache"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:811
+#: htdocs/luci-static/resources/view/homeproxy/client.js:855
msgid "Disable DNS cache in this query."
msgstr ""
-msgid "Disable DNS memory cache"
-msgstr ""
-
-msgid "Disable DNS memory cache in this query."
-msgstr ""
-
-msgid "Disable DNS memory cache expiration"
-msgstr ""
-
-msgid "Independent DNS memory cache per server"
-msgstr ""
-
-msgid "Make each DNS server's memory cache independent for special purposes. If enabled, will slightly degrade performance."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:670
+#: htdocs/luci-static/resources/view/homeproxy/server.js:709
msgid "Disable HTTP challenge"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1035
-#: htdocs/luci-static/resources/view/homeproxy/server.js:321
-msgid "Disable Path MTU discovery"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:674
+#: htdocs/luci-static/resources/view/homeproxy/server.js:713
msgid "Disable TLS ALPN challenge"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:733
+#: htdocs/luci-static/resources/view/homeproxy/client.js:758
msgid "Disable UDP domain unmapping"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1205
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1266
msgid "Disable cache and save cache in this query."
msgstr ""
-msgid "Disable DNS memory cache and persistent cache in this query."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:924
+#: htdocs/luci-static/resources/view/homeproxy/client.js:988
msgid "Disable cache expire"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1204
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1265
msgid "Disable dns cache"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1036
-#: htdocs/luci-static/resources/view/homeproxy/server.js:322
-msgid ""
-"Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 "
-"(IPv4) / 1232 (IPv6) bytes in size."
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1308
+msgid "Disable optimistic DNS caching for this query."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:837
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1274
+#: htdocs/luci-static/resources/view/homeproxy/client.js:873
+msgid "Disable optimistic DNS caching in this lookup (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:872
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1307
+msgid "Disable optimistic cache"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:309
+msgid "Disabled"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:892
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1395
msgid "Domain keyword"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:828
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1265
+#: htdocs/luci-static/resources/view/homeproxy/client.js:883
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1386
msgid "Domain name"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:841
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1278
+#: htdocs/luci-static/resources/view/homeproxy/client.js:896
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1399
msgid "Domain regex"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:450
+#: htdocs/luci-static/resources/view/homeproxy/client.js:475
msgid "Domain resolver"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:370
-#: htdocs/luci-static/resources/view/homeproxy/client.js:469
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1197
+#: htdocs/luci-static/resources/view/homeproxy/client.js:400
+#: htdocs/luci-static/resources/view/homeproxy/client.js:494
msgid "Domain strategy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:804
+#: htdocs/luci-static/resources/view/homeproxy/client.js:848
msgid "Domain strategy for resolving the domain names."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:833
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1270
+#: htdocs/luci-static/resources/view/homeproxy/client.js:888
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1391
msgid "Domain suffix"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:600
+#: htdocs/luci-static/resources/view/homeproxy/server.js:616
msgid "Domains"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:797
+#: htdocs/luci-static/resources/view/homeproxy/client.js:841
msgid "Don't drop packets"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1232
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1353
msgid "Don't drop requests"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1419
-#: htdocs/luci-static/resources/view/homeproxy/server.js:517
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1028
+#: htdocs/luci-static/resources/view/homeproxy/server.js:533
msgid "Download bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1420
-#: htdocs/luci-static/resources/view/homeproxy/server.js:518
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1029
+#: htdocs/luci-static/resources/view/homeproxy/server.js:534
msgid "Download bandwidth in Mbps."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:793
-#: htdocs/luci-static/resources/view/homeproxy/client.js:799
+#: htdocs/luci-static/resources/view/homeproxy/client.js:837
+#: htdocs/luci-static/resources/view/homeproxy/client.js:843
msgid "Drop packets"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1227
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1234
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1348
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1355
msgid "Drop requests"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1815
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1461
msgid ""
"Drop/keep nodes that contain the specific keywords. Regex is supported."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1807
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1453
msgid "Drop/keep specific nodes from subscriptions."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:691
+#: htdocs/luci-static/resources/view/homeproxy/server.js:730
msgid ""
"EAB (External Account Binding) contains information necessary to bind or map "
"an ACME account to some other account known by the CA.%s first."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:765
+#: htdocs/luci-static/resources/view/homeproxy/client.js:790
msgid "Fragment fallback delay"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1272
+#: htdocs/luci-static/resources/view/homeproxy/node.js:881
msgid "GET"
msgstr ""
@@ -988,25 +1020,30 @@ msgstr ""
msgid "GFW list version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:275
+#: htdocs/luci-static/resources/view/homeproxy/client.js:252
msgid "GFWList"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1469
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1633
msgid "Gaming mode IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1471
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1635
msgid "Gaming mode IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1474
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1638
msgid "Gaming mode MAC-s"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/node.js:598
+#: htdocs/luci-static/resources/view/homeproxy/server.js:293
+msgid "Gecko (1.14)"
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/server.js:36
#: htdocs/luci-static/resources/view/homeproxy/server.js:38
-#: htdocs/luci-static/resources/view/homeproxy/server.js:827
+#: htdocs/luci-static/resources/view/homeproxy/server.js:866
msgid "Generate"
msgstr ""
@@ -1014,23 +1051,23 @@ msgstr ""
msgid "GitHub token"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:279
+#: htdocs/luci-static/resources/view/homeproxy/client.js:256
msgid "Global"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1189
+#: htdocs/luci-static/resources/view/homeproxy/node.js:798
msgid "Global padding"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1476
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1640
msgid "Global proxy IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1479
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1643
msgid "Global proxy IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1482
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1646
msgid "Global proxy MAC-s"
msgstr ""
@@ -1042,62 +1079,84 @@ msgstr ""
msgid "Google"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:208
-msgid "Google Public DNS (DoH)"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:184
+msgid "Google Public DNS (8.8.8.8)"
msgstr ""
#: root/usr/share/rpcd/acl.d/luci-app-homeproxy.json:3
msgid "Grant access to homeproxy configuration"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:643
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1131
-#: htdocs/luci-static/resources/view/homeproxy/node.js:860
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1207
+#: htdocs/luci-static/resources/view/homeproxy/client.js:668
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1201
+#: htdocs/luci-static/resources/view/homeproxy/node.js:450
+#: htdocs/luci-static/resources/view/homeproxy/node.js:816
#: htdocs/luci-static/resources/view/homeproxy/server.js:177
-#: htdocs/luci-static/resources/view/homeproxy/server.js:403
+#: htdocs/luci-static/resources/view/homeproxy/server.js:419
msgid "HTTP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:975
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1068
+msgid ""
+"HTTP Host header sent when obfuscation mode is http. bing.com is used by "
+"default."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1061
+msgid "HTTP obfuscation. v4 only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:338
+msgid "HTTP obfuscation. v5 only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1045
msgid "HTTP/3"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:332
+#: htdocs/luci-static/resources/view/homeproxy/server.js:323
msgid ""
"HTTP3 server behavior when authentication fails.n idle sessions are kept open."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:944
+#: htdocs/luci-static/resources/view/homeproxy/node.js:535
msgid ""
"In the check, close sessions that have been idle for longer than this, in "
"seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:927
-msgid "Independent cache per server"
-msgstr ""
-
#: htdocs/luci-static/resources/view/homeproxy/status.js:137
msgid "Info"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1557
+msgid "Initial path"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:798
+msgid ""
+"Inject a forged TLS ClientHello carrying this SNI before the real one to "
+"fool SNI-filtering middleboxes. Requires elevated privileges."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1592
msgid "Interface Control"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:583
+#: htdocs/luci-static/resources/view/homeproxy/client.js:608
msgid "Interrupt existing connections"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:584
+#: htdocs/luci-static/resources/view/homeproxy/client.js:609
msgid "Interrupt existing connections when the selected outbound has changed."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:937
+#: htdocs/luci-static/resources/view/homeproxy/node.js:528
msgid "Interval checking for idle sessions, in seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1158
-#: htdocs/luci-static/resources/view/homeproxy/server.js:377
+#: htdocs/luci-static/resources/view/homeproxy/node.js:767
+#: htdocs/luci-static/resources/view/homeproxy/server.js:393
msgid ""
"Interval for sending heartbeat packets for keeping the connection alive (in "
"seconds)."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:128
-#: htdocs/luci-static/resources/view/homeproxy/node.js:480
-msgid "Invalid node"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:482
-msgid "Invalid response"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:688
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1165
+#: htdocs/luci-static/resources/view/homeproxy/client.js:713
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1231
msgid "Invert"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:689
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1166
+#: htdocs/luci-static/resources/view/homeproxy/client.js:714
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1232
msgid "Invert match result."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:775
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1297
+msgid ""
+"Judge this response-dependent rule in parallel; first match wins (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:814
msgid "Key path"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1442
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1606
msgid "LAN IP Policy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:432
-#: htdocs/luci-static/resources/view/homeproxy/client.js:608
-#: htdocs/luci-static/resources/view/homeproxy/client.js:960
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1088
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1347
-#: htdocs/luci-static/resources/view/homeproxy/node.js:852
+#: htdocs/luci-static/resources/view/homeproxy/client.js:457
+#: htdocs/luci-static/resources/view/homeproxy/client.js:633
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1030
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1158
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1486
+#: htdocs/luci-static/resources/view/homeproxy/node.js:442
#: htdocs/luci-static/resources/view/homeproxy/server.js:160
msgid "Label"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:817
-msgid "Latency"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1782
-msgid "Latency test mode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1173
-#: htdocs/luci-static/resources/view/homeproxy/server.js:392
+#: htdocs/luci-static/resources/view/homeproxy/node.js:782
+#: htdocs/luci-static/resources/view/homeproxy/server.js:408
msgid ""
"Legacy protocol support (VMess MD5 Authentication) is provided for "
"compatibility purposes only, use of alterId > 1 is not recommended."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:348
+#: htdocs/luci-static/resources/view/homeproxy/client.js:374
msgid "Less compatibility and sometimes better performance."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:629
+#: htdocs/luci-static/resources/view/homeproxy/server.js:668
msgid "Let's Encrypt"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1327
+#: htdocs/luci-static/resources/view/homeproxy/node.js:936
msgid ""
"List of IP (v4 or v6) addresses prefixes to be assigned to the interface."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:157
-#: htdocs/luci-static/resources/view/homeproxy/client.js:186
-#: htdocs/luci-static/resources/view/homeproxy/client.js:520
+#: htdocs/luci-static/resources/view/homeproxy/client.js:132
+#: htdocs/luci-static/resources/view/homeproxy/client.js:161
+#: htdocs/luci-static/resources/view/homeproxy/client.js:545
msgid "List of nodes to test."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1466
-#: htdocs/luci-static/resources/view/homeproxy/server.js:566
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1115
+#: htdocs/luci-static/resources/view/homeproxy/server.js:582
msgid "List of supported application level protocols, in order of preference."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1251
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1372
msgid "List of text DNS record to respond as answers."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1261
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1382
msgid "List of text DNS record to respond as extra records."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1256
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1377
msgid "List of text DNS record to respond as name servers."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:193
+#: htdocs/luci-static/resources/view/homeproxy/server.js:194
msgid "Listen address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1430
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1594
msgid "Listen interfaces"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:198
+#: htdocs/luci-static/resources/view/homeproxy/server.js:199
msgid "Listen port"
msgstr ""
@@ -1422,14 +1463,20 @@ msgstr ""
msgid "Loading"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1358
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1497
msgid "Local"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1326
+#: htdocs/luci-static/resources/view/homeproxy/node.js:935
msgid "Local address"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1558
+msgid ""
+"Local file with initial rule-set content; avoids blocking startup on first "
+"download (1.14)."
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/status.js:191
msgid "Log file does not exist."
msgstr ""
@@ -1438,255 +1485,317 @@ msgstr ""
msgid "Log is empty."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1360
+#: htdocs/luci-static/resources/view/homeproxy/node.js:969
msgid "MTU"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:175
+#: htdocs/luci-static/resources/view/homeproxy/client.js:150
msgid "Main UDP node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:147
+#: htdocs/luci-static/resources/view/homeproxy/client.js:122
msgid "Main node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:685
+#: htdocs/luci-static/resources/view/homeproxy/client.js:710
msgid "Make IP CIDR in rule set used to match the source IP."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1158
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1228
msgid "Make IP CIDR in rule sets match the source IP."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1162
-msgid "Make IP CIDR in rule-sets accept empty query response."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:928
-msgid ""
-"Make each DNS server's cache independent for special purposes. If enabled, "
-"will slightly degrade performance."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:331
+#: htdocs/luci-static/resources/view/homeproxy/server.js:322
msgid "Masquerade"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1291
-msgid ""
-"Match IP CIDR with query response. Current rule will be skipped if not match."
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1434
+msgid "Match DNSSEC OK"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:854
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1412
+msgid ""
+"Match IP CIDR with the evaluated response (needs match_response; old rules "
+"are auto-wrapped in 1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:909
msgid "Match IP CIDR."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:834
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1271
+#: htdocs/luci-static/resources/view/homeproxy/client.js:917
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1421
+msgid "Match LAN device by MAC address."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:922
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1426
+msgid ""
+"Match LAN device hostname via neighbor resolution; enable find_neighbor."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:889
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1392
msgid "Match domain suffix."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:838
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1275
+#: htdocs/luci-static/resources/view/homeproxy/client.js:893
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1396
msgid "Match domain using keyword."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:842
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1279
+#: htdocs/luci-static/resources/view/homeproxy/client.js:897
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1400
msgid "Match domain using regular expression."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:829
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1266
+#: htdocs/luci-static/resources/view/homeproxy/client.js:884
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1387
msgid "Match full domain."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:877
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1315
+#: htdocs/luci-static/resources/view/homeproxy/client.js:941
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1454
msgid "Match port range. Format as START:/:END/START:END."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:872
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1310
+#: htdocs/luci-static/resources/view/homeproxy/client.js:936
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1449
msgid "Match port."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:858
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1295
+#: htdocs/luci-static/resources/view/homeproxy/client.js:913
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1416
msgid "Match private IP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1296
-msgid "Match private IP with query response."
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1417
+msgid "Match private IP with the evaluated response (needs match_response)."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:850
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1287
+#: htdocs/luci-static/resources/view/homeproxy/client.js:905
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1408
msgid "Match private source IP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:882
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1320
+#: htdocs/luci-static/resources/view/homeproxy/client.js:946
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1459
msgid "Match process name."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:890
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1328
+#: htdocs/luci-static/resources/view/homeproxy/client.js:954
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1467
msgid "Match process path using regular expression."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:886
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1324
+#: htdocs/luci-static/resources/view/homeproxy/client.js:950
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1463
msgid "Match process path."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1119
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1435
+msgid "Match queries with the DNSSEC OK bit set (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1189
msgid "Match query type."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:670
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1143
-msgid "Match rule set."
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1286
+msgid "Match response"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:846
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1283
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1213
+msgid ""
+"Match rule set. DNS: rules referencing rule-sets that contain query_type are "
+"incompatible with legacy address filters (ip_cidr / ip_is_private) — use "
+"match_response instead (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:695
+msgid ""
+"Match rule set. Since 1.14: a rule-set holding a single default rule is "
+"merged into this rule; any other rule-set matches as an OR collection."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:901
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1404
msgid "Match source IP CIDR."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:867
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1305
+#: htdocs/luci-static/resources/view/homeproxy/client.js:931
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1444
msgid "Match source port range. Format as START:/:END/START:END."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:862
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1300
+#: htdocs/luci-static/resources/view/homeproxy/client.js:926
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1439
msgid "Match source port."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:666
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1139
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1430
+msgid "Match the EDNS Client Subnet in the query (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1327
+msgid "Match the evaluated response code (requires match_response)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:691
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1209
msgid "Match user name."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1009
-#: htdocs/luci-static/resources/view/homeproxy/server.js:261
+#: htdocs/luci-static/resources/view/homeproxy/node.js:622
+#: htdocs/luci-static/resources/view/homeproxy/server.js:263
msgid "Max download speed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1010
-#: htdocs/luci-static/resources/view/homeproxy/server.js:262
+#: htdocs/luci-static/resources/view/homeproxy/node.js:623
+#: htdocs/luci-static/resources/view/homeproxy/server.js:264
msgid "Max download speed in Mbps."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:739
+#: htdocs/luci-static/resources/view/homeproxy/node.js:564
+msgid "Max hop interval (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:615
+#: htdocs/luci-static/resources/view/homeproxy/server.js:310
+msgid "Max obfs packet size (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1003
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1744
+msgid "Max time an expired entry may be served. Examples: 3d, 1h."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:778
msgid "Max time difference"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1016
-#: htdocs/luci-static/resources/view/homeproxy/server.js:268
+#: htdocs/luci-static/resources/view/homeproxy/node.js:629
+#: htdocs/luci-static/resources/view/homeproxy/server.js:270
msgid "Max upload speed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1017
-#: htdocs/luci-static/resources/view/homeproxy/server.js:269
+#: htdocs/luci-static/resources/view/homeproxy/node.js:630
+#: htdocs/luci-static/resources/view/homeproxy/server.js:271
msgid "Max upload speed in Mbps."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1486
-#: htdocs/luci-static/resources/view/homeproxy/server.js:578
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1135
+#: htdocs/luci-static/resources/view/homeproxy/server.js:594
msgid "Maximum TLS version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1391
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1405
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1000
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1014
msgid "Maximum connections"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1403
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1012
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"%s and %s."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1402
+#: htdocs/luci-static/resources/view/homeproxy/node.js:616
+#: htdocs/luci-static/resources/view/homeproxy/server.js:311
+msgid "Maximum on-wire packet size in bytes. Gecko only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:565
+msgid ""
+"Maximum port hopping interval in seconds; the actual interval is randomized "
+"between the two values. Hysteria2 only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1011
msgid "Maximum streams"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:791
-#: htdocs/luci-static/resources/view/homeproxy/client.js:799
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1225
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1234
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1271
-#: htdocs/luci-static/resources/view/homeproxy/server.js:452
+#: htdocs/luci-static/resources/view/homeproxy/client.js:835
+#: htdocs/luci-static/resources/view/homeproxy/client.js:843
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1346
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1355
+#: htdocs/luci-static/resources/view/homeproxy/node.js:880
+#: htdocs/luci-static/resources/view/homeproxy/server.js:468
msgid "Method"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1478
-#: htdocs/luci-static/resources/view/homeproxy/server.js:570
+#: htdocs/luci-static/resources/view/homeproxy/node.js:608
+#: htdocs/luci-static/resources/view/homeproxy/server.js:303
+msgid "Min obfs packet size (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1127
+#: htdocs/luci-static/resources/view/homeproxy/server.js:586
msgid "Minimum TLS version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:950
+#: htdocs/luci-static/resources/view/homeproxy/node.js:541
msgid "Minimum idle sessions"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1397
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1006
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1396
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1405
+#: htdocs/luci-static/resources/view/homeproxy/node.js:609
+#: htdocs/luci-static/resources/view/homeproxy/server.js:304
+msgid "Minimum on-wire packet size in bytes. Gecko only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1005
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1014
msgid "Minimum streams"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1773
-msgid "Minutes(0-59) Hours(0-23) Dates(1-31) Months(1-12) Weeks(0-6)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:333
+#: htdocs/luci-static/resources/view/homeproxy/client.js:359
#: htdocs/luci-static/resources/view/homeproxy/server.js:183
msgid "Mixed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:344
+#: htdocs/luci-static/resources/view/homeproxy/client.js:370
msgid "Mixed system TCP stack and gVisor UDP stack."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:618
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1098
+#: htdocs/luci-static/resources/view/homeproxy/client.js:643
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1168
msgid "Mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1594
-#: htdocs/luci-static/resources/view/homeproxy/server.js:850
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1250
+#: htdocs/luci-static/resources/view/homeproxy/server.js:889
msgid "MultiPath TCP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1374
-#: htdocs/luci-static/resources/view/homeproxy/server.js:500
+#: htdocs/luci-static/resources/view/homeproxy/node.js:983
+#: htdocs/luci-static/resources/view/homeproxy/server.js:516
msgid "Multiplex"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1382
+#: htdocs/luci-static/resources/view/homeproxy/node.js:991
msgid "Multiplex protocol."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:65
+#: htdocs/luci-static/resources/view/homeproxy/client.js:57
#: htdocs/luci-static/resources/view/homeproxy/server.js:60
msgid "NOT RUNNING"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1835
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1481
msgid "NOTE: Save current settings before updating subscriptions."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1255
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1376
msgid "NS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1141
+#: htdocs/luci-static/resources/view/homeproxy/client.js:310
+#: htdocs/luci-static/resources/view/homeproxy/node.js:750
msgid "Native"
msgstr ""
@@ -1694,42 +1803,42 @@ msgstr ""
msgid "NaïveProxy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:660
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1122
-#: htdocs/luci-static/resources/view/homeproxy/server.js:866
+#: htdocs/luci-static/resources/view/homeproxy/client.js:685
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1192
+#: htdocs/luci-static/resources/view/homeproxy/server.js:905
msgid "Network"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1131
+#: htdocs/luci-static/resources/view/homeproxy/node.js:740
msgid "New Reno"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1204
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1221
-#: htdocs/luci-static/resources/view/homeproxy/server.js:400
-#: htdocs/luci-static/resources/view/homeproxy/server.js:417
+#: htdocs/luci-static/resources/view/homeproxy/node.js:813
+#: htdocs/luci-static/resources/view/homeproxy/node.js:830
+#: htdocs/luci-static/resources/view/homeproxy/server.js:416
+#: htdocs/luci-static/resources/view/homeproxy/server.js:433
msgid "No TCP transport, plain HTTP is merged into the HTTP transport."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1219
-#: htdocs/luci-static/resources/view/homeproxy/server.js:415
+#: htdocs/luci-static/resources/view/homeproxy/node.js:828
+#: htdocs/luci-static/resources/view/homeproxy/server.js:431
msgid "No additional encryption support: It's basically duplicate encryption."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1852
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1498
msgid "No subscription available"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1877
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1523
msgid "No subscription node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1704
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1357
msgid "No valid share link found."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:442
-#: htdocs/luci-static/resources/view/homeproxy/node.js:719
+#: htdocs/luci-static/resources/view/homeproxy/client.js:467
+#: htdocs/luci-static/resources/view/homeproxy/node.js:416
msgid "Node"
msgstr ""
@@ -1737,90 +1846,121 @@ msgstr ""
msgid "Node Settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1650
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1303
msgid "Nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1017
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1167
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1205
-#: htdocs/luci-static/resources/view/homeproxy/server.js:386
-#: htdocs/luci-static/resources/view/homeproxy/server.js:401
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1087
+#: htdocs/luci-static/resources/view/homeproxy/node.js:776
+#: htdocs/luci-static/resources/view/homeproxy/node.js:814
+#: htdocs/luci-static/resources/view/homeproxy/server.js:402
+#: htdocs/luci-static/resources/view/homeproxy/server.js:417
msgid "None"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:494
-#: htdocs/luci-static/resources/view/homeproxy/node.js:507
-msgid "Not Tested"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1003
-#: htdocs/luci-static/resources/view/homeproxy/server.js:294
+#: htdocs/luci-static/resources/view/homeproxy/node.js:602
+#: htdocs/luci-static/resources/view/homeproxy/server.js:297
msgid "Obfuscate password"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:997
-#: htdocs/luci-static/resources/view/homeproxy/server.js:288
+#: htdocs/luci-static/resources/view/homeproxy/node.js:595
+#: htdocs/luci-static/resources/view/homeproxy/server.js:290
msgid "Obfuscate type"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1431
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1067
+msgid "Obfuscation host"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1060
+#: htdocs/luci-static/resources/view/homeproxy/server.js:337
+msgid "Obfuscation mode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1595
msgid "Only process traffic from specific interfaces. Leave empty for all."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:277
+#: htdocs/luci-static/resources/view/homeproxy/client.js:254
msgid "Only proxy mainland China"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:603
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1083
+#: htdocs/luci-static/resources/view/homeproxy/client.js:996
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1739
+msgid "Optimistic DNS cache"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1002
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1743
+msgid "Optimistic cache timeout"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1292
+msgid "Optional tag for this evaluate result."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1051
+msgid "Optional; only required when connecting to a multi-user Snell server."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:628
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1153
msgid "Other fields"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:483
-#: htdocs/luci-static/resources/view/homeproxy/client.js:701
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1050
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1398
+#: htdocs/luci-static/resources/view/homeproxy/client.js:508
+#: htdocs/luci-static/resources/view/homeproxy/client.js:726
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1120
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1540
msgid "Outbound"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:443
+#: htdocs/luci-static/resources/view/homeproxy/client.js:468
msgid "Outbound node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:719
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1541
+msgid ""
+"Outbound used to download this rule-set (via sing-box 1.14 http_clients)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:744
msgid "Override address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:375
-msgid "Override destination"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:878
+msgid "Override dns.timeout for this lookup, in seconds (1.14)."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:726
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1314
+msgid "Override dns.timeout for this query, in seconds."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:751
msgid "Override port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:376
-msgid "Override the connection destination address with the sniffed domain."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:720
+#: htdocs/luci-static/resources/view/homeproxy/client.js:745
msgid "Override the connection destination address."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:727
+#: htdocs/luci-static/resources/view/homeproxy/client.js:752
msgid "Override the connection destination port."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1273
+#: htdocs/luci-static/resources/view/homeproxy/server.js:660
+msgid "PEM-encoded private key of an existing ACME account (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:882
msgid "PUT"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1316
+#: htdocs/luci-static/resources/view/homeproxy/node.js:925
msgid "Packet encoding"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:244
+#: htdocs/luci-static/resources/view/homeproxy/server.js:246
msgid "Padding scheme"
msgstr ""
@@ -1828,77 +1968,85 @@ msgstr ""
msgid "Panic"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:894
-#: htdocs/luci-static/resources/view/homeproxy/server.js:210
+#: htdocs/luci-static/resources/view/homeproxy/node.js:484
+#: htdocs/luci-static/resources/view/homeproxy/server.js:211
msgid "Password"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:990
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1369
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1266
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1299
-#: htdocs/luci-static/resources/view/homeproxy/server.js:447
-#: htdocs/luci-static/resources/view/homeproxy/server.js:477
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1060
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1508
+#: htdocs/luci-static/resources/view/homeproxy/node.js:875
+#: htdocs/luci-static/resources/view/homeproxy/node.js:908
+#: htdocs/luci-static/resources/view/homeproxy/server.js:463
+#: htdocs/luci-static/resources/view/homeproxy/server.js:493
msgid "Path"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1341
+#: htdocs/luci-static/resources/view/homeproxy/node.js:950
msgid "Peer pubkic key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:352
+#: htdocs/luci-static/resources/view/homeproxy/client.js:378
msgid ""
"Performance may degrade slightly, so it is not recommended to enable on when "
"it is not needed."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1366
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1752
+msgid "Persist DNS cache across restarts (replaces Store RDRC)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1011
+msgid "Persist DNS cache across restarts (sing-box 1.14, replaces Store RDRC)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:975
msgid "Persistent keepalive interval"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1285
-#: htdocs/luci-static/resources/view/homeproxy/server.js:464
+#: htdocs/luci-static/resources/view/homeproxy/node.js:894
+#: htdocs/luci-static/resources/view/homeproxy/server.js:480
msgid "Ping timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1060
+#: htdocs/luci-static/resources/view/homeproxy/node.js:669
msgid "Plugin"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1067
+#: htdocs/luci-static/resources/view/homeproxy/node.js:676
msgid "Plugin opts"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:871
-#: htdocs/luci-static/resources/view/homeproxy/client.js:985
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1309
-#: htdocs/luci-static/resources/view/homeproxy/node.js:883
+#: htdocs/luci-static/resources/view/homeproxy/client.js:935
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1055
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1448
+#: htdocs/luci-static/resources/view/homeproxy/node.js:473
msgid "Port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:299
+#: htdocs/luci-static/resources/view/homeproxy/client.js:276
msgid "Port %s alrealy exists!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:605
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1085
+#: htdocs/luci-static/resources/view/homeproxy/client.js:630
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1155
msgid "Port fields"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:966
+#: htdocs/luci-static/resources/view/homeproxy/node.js:557
msgid "Port hopping interval in seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:876
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1314
+#: htdocs/luci-static/resources/view/homeproxy/client.js:940
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1453
msgid "Port range"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1348
+#: htdocs/luci-static/resources/view/homeproxy/node.js:957
msgid "Pre-shared key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1173
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1239
msgid "Predefined"
msgstr ""
@@ -1910,197 +2058,180 @@ msgstr ""
msgid "Prefer IPv6"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1108
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1333
+#: htdocs/luci-static/resources/view/homeproxy/node.js:717
+#: htdocs/luci-static/resources/view/homeproxy/node.js:942
msgid "Private key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1113
+#: htdocs/luci-static/resources/view/homeproxy/node.js:722
msgid "Private key passphrase"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:484
-msgid "Probe failed"
+#: htdocs/luci-static/resources/view/homeproxy/server.js:644
+msgid "Private key type for new certificates (1.14). Empty uses the default."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:606
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1086
+#: htdocs/luci-static/resources/view/homeproxy/client.js:631
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1156
msgid "Process fields"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:881
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1319
+#: htdocs/luci-static/resources/view/homeproxy/client.js:945
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1458
msgid "Process name"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:885
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1323
+#: htdocs/luci-static/resources/view/homeproxy/client.js:949
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1462
msgid "Process path"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:889
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1327
+#: htdocs/luci-static/resources/view/homeproxy/client.js:953
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1466
msgid "Process path (regex)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:638
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1127
-#: htdocs/luci-static/resources/view/homeproxy/node.js:973
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1381
-#: htdocs/luci-static/resources/view/homeproxy/server.js:250
+#: htdocs/luci-static/resources/view/homeproxy/client.js:663
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1197
+#: htdocs/luci-static/resources/view/homeproxy/node.js:571
+#: htdocs/luci-static/resources/view/homeproxy/node.js:990
+#: htdocs/luci-static/resources/view/homeproxy/server.js:252
msgid "Protocol"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1197
+#: htdocs/luci-static/resources/view/homeproxy/node.js:806
msgid "Protocol parameter. Enable length block encryption."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1190
+#: htdocs/luci-static/resources/view/homeproxy/node.js:799
msgid ""
"Protocol parameter. Will waste traffic randomly if enabled (enabled by "
"default in v2ray and cannot be disabled)."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1505
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1669
msgid "Proxy Domain List"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1460
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1489
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1624
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1653
msgid "Proxy IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1463
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1492
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1627
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1656
msgid "Proxy IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1466
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1630
msgid "Proxy MAC-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1447
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1611
msgid "Proxy all except listed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1608
msgid "Proxy filter mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1446
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1610
msgid "Proxy listed only"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:307
+#: htdocs/luci-static/resources/view/homeproxy/client.js:284
msgid "Proxy mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:927
+#: htdocs/luci-static/resources/view/homeproxy/node.js:518
msgid "Proxy protocol"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:644
-#: htdocs/luci-static/resources/view/homeproxy/client.js:976
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1132
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1142
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1209
-#: htdocs/luci-static/resources/view/homeproxy/server.js:405
+#: htdocs/luci-static/resources/view/homeproxy/client.js:669
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1046
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1202
+#: htdocs/luci-static/resources/view/homeproxy/node.js:751
+#: htdocs/luci-static/resources/view/homeproxy/node.js:818
+#: htdocs/luci-static/resources/view/homeproxy/server.js:421
msgid "QUIC"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1129
-#: htdocs/luci-static/resources/view/homeproxy/server.js:355
+#: htdocs/luci-static/resources/view/homeproxy/node.js:738
+#: htdocs/luci-static/resources/view/homeproxy/server.js:371
msgid "QUIC congestion control algorithm."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1029
-#: htdocs/luci-static/resources/view/homeproxy/server.js:307
-msgid "QUIC connection receive window"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1429
+msgid "Query EDNS client subnet"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:314
-msgid "QUIC maximum concurrent bidirectional streams"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:877
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1313
+msgid "Query timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1023
-#: htdocs/luci-static/resources/view/homeproxy/server.js:300
-msgid "QUIC stream receive window"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:209
-msgid "Quad9 Public DNS (DoH)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1118
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1188
msgid "Query type"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1238
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1359
msgid "RCode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:645
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1133
+#: htdocs/luci-static/resources/view/homeproxy/client.js:670
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1203
msgid "RDP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:940
-msgid "RDRC timeout"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1572
-#: htdocs/luci-static/resources/view/homeproxy/server.js:709
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1228
+#: htdocs/luci-static/resources/view/homeproxy/server.js:748
msgid "REALITY"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:714
+#: htdocs/luci-static/resources/view/homeproxy/server.js:753
msgid "REALITY private key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1577
-#: htdocs/luci-static/resources/view/homeproxy/server.js:730
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1233
+#: htdocs/luci-static/resources/view/homeproxy/server.js:769
msgid "REALITY public key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1583
-#: htdocs/luci-static/resources/view/homeproxy/server.js:734
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1239
+#: htdocs/luci-static/resources/view/homeproxy/server.js:773
msgid "REALITY short ID"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1785
-msgid "RP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:486
-msgid "RPC failed"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:63
+#: htdocs/luci-static/resources/view/homeproxy/client.js:55
#: htdocs/luci-static/resources/view/homeproxy/server.js:58
msgid "RUNNING"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1095
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1296
+msgid "Race"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:704
msgid "Random version will be used if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:511
+#: htdocs/luci-static/resources/view/homeproxy/client.js:536
msgid "Recursive outbound detected!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1036
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1106
msgid "Recursive resolver detected!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:308
+#: htdocs/luci-static/resources/view/homeproxy/client.js:285
msgid "Redirect TCP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:310
+#: htdocs/luci-static/resources/view/homeproxy/client.js:287
msgid "Redirect TCP + TProxy UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:312
+#: htdocs/luci-static/resources/view/homeproxy/client.js:289
msgid "Redirect TCP + Tun UDP"
msgstr ""
@@ -2108,44 +2239,52 @@ msgstr ""
msgid "Refresh every %s seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:659
+#: htdocs/luci-static/resources/view/homeproxy/server.js:698
msgid "Region ID"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:695
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1172
+#: htdocs/luci-static/resources/view/homeproxy/client.js:720
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1238
msgid "Reject"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1359
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1498
msgid "Remote"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1874
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1520
msgid "Remove %s nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1864
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1320
+msgid "Remove EDNS client subnet"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1510
msgid "Remove all nodes from subscriptions"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1226
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1321
+msgid "Remove the edns0-subnet record from the query (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1347
msgid "Reply with REFUSED"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:792
+#: htdocs/luci-static/resources/view/homeproxy/client.js:836
msgid "Reply with TCP RST / ICMP port unreachable"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1355
+#: htdocs/luci-static/resources/view/homeproxy/node.js:964
msgid "Reserved field bytes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:696
+#: htdocs/luci-static/resources/view/homeproxy/client.js:721
msgid "Resolve"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:803
+#: htdocs/luci-static/resources/view/homeproxy/client.js:847
msgid "Resolve strategy"
msgstr ""
@@ -2153,145 +2292,128 @@ msgstr ""
msgid "Resources management"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:880
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1338
+msgid "Response NS"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1326
+msgid "Response RCode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1333
+msgid "Response answer"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1342
+msgid "Response extra"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:997
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1740
+msgid ""
+"Return expired cache immediately and refresh in background (sing-box 1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:919
msgid "Reuse address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:881
+#: htdocs/luci-static/resources/view/homeproxy/server.js:920
msgid "Reuse listener address."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:815
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1210
+#: htdocs/luci-static/resources/view/homeproxy/client.js:859
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1271
msgid "Rewrite TTL"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:816
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1211
+#: htdocs/luci-static/resources/view/homeproxy/client.js:860
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1272
msgid "Rewrite TTL in DNS responses."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:693
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1170
+#: htdocs/luci-static/resources/view/homeproxy/client.js:718
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1236
msgid "Route"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:694
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1171
+#: htdocs/luci-static/resources/view/homeproxy/client.js:719
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1237
msgid "Route options"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:419
+#: htdocs/luci-static/resources/view/homeproxy/client.js:444
msgid "Routing Nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:590
+#: htdocs/luci-static/resources/view/homeproxy/client.js:615
msgid "Routing Rules"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:145
+#: htdocs/luci-static/resources/view/homeproxy/client.js:120
msgid "Routing Settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:274
+#: htdocs/luci-static/resources/view/homeproxy/client.js:251
msgid "Routing mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:453
msgid "Routing node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:287
+#: htdocs/luci-static/resources/view/homeproxy/client.js:264
msgid "Routing ports"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:599
+#: htdocs/luci-static/resources/view/homeproxy/client.js:624
msgid "Routing rule"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1334
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1473
msgid "Rule Set"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:669
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1142
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1343
+#: htdocs/luci-static/resources/view/homeproxy/client.js:694
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1212
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1482
msgid "Rule set"
msgstr ""
-msgid "Tag"
-msgstr ""
-
-msgid "Used by sing-box rule sets. Please fill it in yourself."
-msgstr ""
-
-msgid "valid tag"
-msgstr ""
-
-msgid "valid duration"
-msgstr ""
-
-msgid "valid cron expression"
-msgstr ""
-
-msgid "Manual select"
-msgstr ""
-
-msgid "Custom nodes"
-msgstr ""
-
-msgid "Custom"
-msgstr ""
-
-msgid "Custom URL"
-msgstr ""
-
-msgid "Policy nodes"
-msgstr ""
-
-msgid "List of policy groups."
-msgstr ""
-
-msgid "Subscription nodes"
-msgstr ""
-
-msgid "List of nodes from subscriptions."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:684
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1157
+#: htdocs/luci-static/resources/view/homeproxy/client.js:709
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1227
msgid "Rule set IP CIDR as source IP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1376
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1515
msgid "Rule set URL"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:646
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1134
-#: htdocs/luci-static/resources/view/homeproxy/node.js:868
+#: htdocs/luci-static/resources/view/homeproxy/client.js:671
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1204
+#: htdocs/luci-static/resources/view/homeproxy/node.js:458
msgid "SSH"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:647
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1135
+#: htdocs/luci-static/resources/view/homeproxy/client.js:672
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1205
msgid "STUN"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1607
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1263
msgid "SUoT version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:655
+#: htdocs/luci-static/resources/view/homeproxy/client.js:680
msgid "Safari / Apple Network API"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:999
-#: htdocs/luci-static/resources/view/homeproxy/server.js:290
+#: htdocs/luci-static/resources/view/homeproxy/node.js:597
+#: htdocs/luci-static/resources/view/homeproxy/server.js:292
msgid "Salamander"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:177
+#: htdocs/luci-static/resources/view/homeproxy/client.js:152
msgid "Same as main node"
msgstr ""
@@ -2300,15 +2422,19 @@ msgstr ""
msgid "Save"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1837
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1483
msgid "Save current settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1834
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1480
msgid "Save subscriptions settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1178
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1302
+msgid "Send the query before pending race rules are judged (1.14)."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1245
#: htdocs/luci-static/resources/view/homeproxy/server.js:156
msgid "Server"
msgstr ""
@@ -2317,7 +2443,7 @@ msgstr ""
msgid "Server Settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:607
+#: htdocs/luci-static/resources/view/homeproxy/server.js:623
msgid ""
"Server name to use when choosing a certificate if the ClientHello's "
"ServerName field is empty."
@@ -2331,81 +2457,104 @@ msgstr ""
msgid "Service Status"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1198
-msgid "Set domain strategy for this query."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:866
+#: htdocs/luci-static/resources/view/homeproxy/node.js:456
msgid "ShadowTLS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1074
+#: htdocs/luci-static/resources/view/homeproxy/node.js:683
msgid "ShadowTLS version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:865
+#: htdocs/luci-static/resources/view/homeproxy/node.js:455
#: htdocs/luci-static/resources/view/homeproxy/server.js:184
msgid "Shadowsocks"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:651
+#: htdocs/luci-static/resources/view/homeproxy/client.js:307
+msgid ""
+"Since sing-box 1.14 the default (Unset) behaves as hijack: sing-box sets the "
+"platform interface DNS and hijacks port 53. On OpenWrt this overlaps with "
+"the own dnsmasq/nftables DNS hijack of this plugin, so keep Disabled on a "
+"gateway unless you need sing-box to own TUN DNS."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:185
+msgid "Snell (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1042
+#: htdocs/luci-static/resources/view/homeproxy/server.js:329
+msgid "Snell version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:676
msgid "Sniffed client type (QUIC client type or SSH client name)."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:639
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1128
+#: htdocs/luci-static/resources/view/homeproxy/client.js:664
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1198
msgid ""
-"Sniffed protocol, see Sniff for details."
+"Sniffed protocol, see Sniff for details."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:867
-#: htdocs/luci-static/resources/view/homeproxy/server.js:185
+#: htdocs/luci-static/resources/view/homeproxy/node.js:457
+#: htdocs/luci-static/resources/view/homeproxy/server.js:186
msgid "Socks"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1084
+#: htdocs/luci-static/resources/view/homeproxy/node.js:693
msgid "Socks version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1085
+#: htdocs/luci-static/resources/view/homeproxy/node.js:694
msgid "Socks4"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1086
+#: htdocs/luci-static/resources/view/homeproxy/node.js:695
msgid "Socks4A"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1087
+#: htdocs/luci-static/resources/view/homeproxy/node.js:696
msgid "Socks5"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:845
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1282
+#: htdocs/luci-static/resources/view/homeproxy/client.js:900
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1403
msgid "Source IP CIDR"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1365
+#: htdocs/luci-static/resources/view/homeproxy/client.js:916
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1420
+msgid "Source MAC address"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1504
msgid "Source file"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:861
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1299
+#: htdocs/luci-static/resources/view/homeproxy/client.js:921
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1425
+msgid "Source hostname"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:925
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1438
msgid "Source port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:866
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1304
+#: htdocs/luci-static/resources/view/homeproxy/client.js:930
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1443
msgid "Source port range"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:773
+#: htdocs/luci-static/resources/view/homeproxy/client.js:817
msgid ""
"Specifies DNS server tag to use instead of selecting through DNS routing."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1226
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1278
+#: htdocs/luci-static/resources/view/homeproxy/node.js:835
+#: htdocs/luci-static/resources/view/homeproxy/node.js:887
msgid ""
"Specifies the period of time (in seconds) after which a health check will be "
"performed using a ping frame if no frames have been received on the "
@@ -2414,15 +2563,15 @@ msgid ""
"will be executed every interval."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:422
-#: htdocs/luci-static/resources/view/homeproxy/server.js:457
+#: htdocs/luci-static/resources/view/homeproxy/server.js:438
+#: htdocs/luci-static/resources/view/homeproxy/server.js:473
msgid ""
"Specifies the time (in seconds) until idle clients should be closed with a "
"GOAWAY frame. PING frames are not considered as activity."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1230
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1286
+#: htdocs/luci-static/resources/view/homeproxy/node.js:839
+#: htdocs/luci-static/resources/view/homeproxy/node.js:895
msgid ""
"Specifies the timeout duration (in seconds) after sending a PING frame, "
"within which a response must be received.(domain || "
+"domain_suffix || domain_keyword || domain_regex || ip_cidr || "
+"ip_is_private) &&(port || port_range) &&(source_ip_cidr || source_ip_is_private) &&(source_port || source_port_range) &&other fields"
+"code>.
Additionally, included rule sets can be considered merged rather "
+"than as a single rule sub-item."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:242
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1169
+msgid ""
+"The default rule uses the following matching logic:
(domain || "
+"domain_suffix || domain_keyword || domain_regex) &&
(port "
+"|| port_range) &&
(source_ip_cidr || source_ip_is_private)"
+"code> &&
(source_port || source_port_range) &&
other fields.
Additionally, included rule sets can be "
+"considered merged rather than as a single rule sub-item."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:218
msgid ""
"The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:470
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1044
+#: htdocs/luci-static/resources/view/homeproxy/client.js:495
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1114
msgid "The domain strategy for resolving the domain name in the address."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1495
-#: htdocs/luci-static/resources/view/homeproxy/server.js:587
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1144
+#: htdocs/luci-static/resources/view/homeproxy/server.js:603
msgid ""
"The elliptic curves that will be used in an ECDHE handshake, in preference "
"order. If empty, the default will be used."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:613
+#: htdocs/luci-static/resources/view/homeproxy/server.js:629
msgid ""
"The email address to use when creating or selecting an existing ACME server "
"account."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:766
+#: htdocs/luci-static/resources/view/homeproxy/client.js:791
msgid ""
"The fallback value in milliseconds used when TLS segmentation cannot "
"automatically determine the wait time."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:577
+#: htdocs/luci-static/resources/view/homeproxy/client.js:602
msgid "The idle timeout in seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1487
-#: htdocs/luci-static/resources/view/homeproxy/server.js:579
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1136
+#: htdocs/luci-static/resources/view/homeproxy/server.js:595
msgid "The maximum TLS version that is acceptable."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:315
-msgid ""
-"The maximum number of QUIC concurrent bidirectional streams that a peer is "
-"allowed to open."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:740
+#: htdocs/luci-static/resources/view/homeproxy/server.js:779
msgid "The maximum time difference between the server and the client."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1479
-#: htdocs/luci-static/resources/view/homeproxy/server.js:571
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1128
+#: htdocs/luci-static/resources/view/homeproxy/server.js:587
msgid "The minimum TLS version that is acceptable."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:113
+#: htdocs/luci-static/resources/view/homeproxy/client.js:102
#: htdocs/luci-static/resources/view/homeproxy/server.js:130
-msgid "OpenWrt-designed Sing-box proxy management platform. It is recommended to disable Dnsmasq DNS redirection."
+msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:477
-#: htdocs/luci-static/resources/view/homeproxy/server.js:875
+#: htdocs/luci-static/resources/view/homeproxy/client.js:502
+#: htdocs/luci-static/resources/view/homeproxy/server.js:914
msgid "The network interface to bind to."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1529
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1061
+msgid "The path of the DNS server."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1185
msgid ""
"The path to the ECH config, in PEM format. If empty, load from DNS will be "
"attempted."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1508
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1164
msgid "The path to the server certificate, in PEM format."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:199
+#: htdocs/luci-static/resources/view/homeproxy/server.js:200
msgid "The port must be unique."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:986
-msgid "Leave empty to use the default port."
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1056
+msgid "The port of the DNS server."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1239
+#: htdocs/luci-static/resources/view/homeproxy/server.js:330
+msgid "The pre-shared key (password) above must be 12-255 bytes for v6."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1360
msgid "The response code."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:776
+#: htdocs/luci-static/resources/view/homeproxy/server.js:815
msgid "The server private key, in PEM format."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:757
+#: htdocs/luci-static/resources/view/homeproxy/server.js:796
msgid "The server public key, in PEM format."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:484
+#: htdocs/luci-static/resources/view/homeproxy/client.js:509
msgid ""
"The tag of the upstream outbound.
Other dial fields will be ignored when "
"enabled."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:164
-#: htdocs/luci-static/resources/view/homeproxy/client.js:193
-#: htdocs/luci-static/resources/view/homeproxy/client.js:554
+#: htdocs/luci-static/resources/view/homeproxy/client.js:139
+#: htdocs/luci-static/resources/view/homeproxy/client.js:168
+#: htdocs/luci-static/resources/view/homeproxy/client.js:579
msgid "The test interval in seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:170
-#: htdocs/luci-static/resources/view/homeproxy/client.js:199
-#: htdocs/luci-static/resources/view/homeproxy/client.js:570
+#: htdocs/luci-static/resources/view/homeproxy/client.js:145
+#: htdocs/luci-static/resources/view/homeproxy/client.js:174
+#: htdocs/luci-static/resources/view/homeproxy/client.js:595
msgid "The test tolerance in milliseconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1237
-#: htdocs/luci-static/resources/view/homeproxy/server.js:465
+#: htdocs/luci-static/resources/view/homeproxy/node.js:846
+#: htdocs/luci-static/resources/view/homeproxy/server.js:481
msgid ""
"The timeout (in seconds) that after performing a keepalive check, the client "
"will wait for activity. If no activity is detected, the connection will be "
"closed."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1473
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1825
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1122
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1471
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1147
+#: htdocs/luci-static/resources/view/homeproxy/node.js:756
msgid ""
"This is the TUIC port of the UDP over TCP protocol, designed to provide a "
"QUIC stream based UDP relay mode that TUIC does not provide."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:244
-msgid "ThreatBook Public DNS (DoH)"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:188
+#: htdocs/luci-static/resources/view/homeproxy/client.js:223
+msgid "ThreatBook Public DNS (117.50.10.10)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:502
-msgid "Timeout"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:746
+#: htdocs/luci-static/resources/view/homeproxy/client.js:771
msgid ""
"Timeout for UDP connections.
Setting a larger value than the UDP timeout "
"in inbounds will have no effect."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:941
-msgid ""
-"Timeout of rejected DNS response cache in seconds. 604800 (7d) "
-"is used by default."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:491
+#: htdocs/luci-static/resources/view/homeproxy/server.js:507
msgid ""
"To be compatible with Xray-core, set this to Sec-WebSocket-Protocol"
"code>."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:315
+#: htdocs/luci-static/resources/view/homeproxy/client.js:292
msgid ""
"To enable Tun support, you need to install ip-full and "
"kmod-tun"
@@ -2821,99 +2983,100 @@ msgstr ""
msgid "Trace"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1203
-#: htdocs/luci-static/resources/view/homeproxy/server.js:399
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1072
+#: htdocs/luci-static/resources/view/homeproxy/server.js:344
+msgid "Traffic shaping mode"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:812
+#: htdocs/luci-static/resources/view/homeproxy/server.js:415
msgid "Transport"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:869
-#: htdocs/luci-static/resources/view/homeproxy/server.js:186
+#: htdocs/luci-static/resources/view/homeproxy/node.js:459
+#: htdocs/luci-static/resources/view/homeproxy/server.js:187
msgid "Trojan"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:871
-#: htdocs/luci-static/resources/view/homeproxy/server.js:188
+#: htdocs/luci-static/resources/view/homeproxy/node.js:461
+#: htdocs/luci-static/resources/view/homeproxy/server.js:189
msgid "Tuic"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:313
+#: htdocs/luci-static/resources/view/homeproxy/client.js:290
msgid "Tun TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:970
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1357
-#: htdocs/luci-static/resources/view/homeproxy/node.js:857
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1040
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1496
+#: htdocs/luci-static/resources/view/homeproxy/node.js:447
#: htdocs/luci-static/resources/view/homeproxy/server.js:175
msgid "Type"
msgstr ""
-msgid "Type error"
-msgstr ""
-
-msgid "TypeError"
-msgstr ""
-
-msgid "Cannot convert null to object."
-msgstr ""
-
-msgid "can't convert null to object"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:662
-#: htdocs/luci-static/resources/view/homeproxy/client.js:971
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1124
-#: htdocs/luci-static/resources/view/homeproxy/server.js:868
+#: htdocs/luci-static/resources/view/homeproxy/client.js:687
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1041
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1194
+#: htdocs/luci-static/resources/view/homeproxy/server.js:907
msgid "UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1597
-#: htdocs/luci-static/resources/view/homeproxy/server.js:854
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1253
+#: htdocs/luci-static/resources/view/homeproxy/server.js:893
msgid "UDP Fragment"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:358
-#: htdocs/luci-static/resources/view/homeproxy/server.js:859
+#: htdocs/luci-static/resources/view/homeproxy/client.js:384
+#: htdocs/luci-static/resources/view/homeproxy/server.js:898
msgid "UDP NAT expiration time"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1601
+#: htdocs/luci-static/resources/view/homeproxy/client.js:333
+msgid "UDP NAT filtering (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:322
+msgid "UDP NAT mapping (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:344
+msgid "UDP NAT sessions max (1.14)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1257
msgid "UDP over TCP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1146
+#: htdocs/luci-static/resources/view/homeproxy/node.js:755
msgid "UDP over stream"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1139
+#: htdocs/luci-static/resources/view/homeproxy/node.js:748
msgid "UDP packet relay mode."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1138
+#: htdocs/luci-static/resources/view/homeproxy/node.js:747
msgid "UDP relay mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:745
+#: htdocs/luci-static/resources/view/homeproxy/client.js:770
msgid "UDP timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:149
-#: htdocs/luci-static/resources/view/homeproxy/client.js:178
-#: htdocs/luci-static/resources/view/homeproxy/client.js:444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:124
+#: htdocs/luci-static/resources/view/homeproxy/client.js:153
+#: htdocs/luci-static/resources/view/homeproxy/client.js:469
msgid "URLTest"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:156
-#: htdocs/luci-static/resources/view/homeproxy/client.js:185
-#: htdocs/luci-static/resources/view/homeproxy/client.js:519
+#: htdocs/luci-static/resources/view/homeproxy/client.js:131
+#: htdocs/luci-static/resources/view/homeproxy/client.js:160
+#: htdocs/luci-static/resources/view/homeproxy/client.js:544
msgid "URLTest nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:130
-msgid "URLTest: %s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1120
-#: htdocs/luci-static/resources/view/homeproxy/server.js:346
+#: htdocs/luci-static/resources/view/homeproxy/node.js:729
+#: htdocs/luci-static/resources/view/homeproxy/server.js:362
msgid "UUID"
msgstr ""
@@ -2925,11 +3088,15 @@ msgstr ""
msgid "Unknown error: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1565
+#: htdocs/luci-static/resources/view/homeproxy/client.js:308
+msgid "Unset (default)"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1221
msgid "Unsupported fingerprint!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1849
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1495
msgid "Update %s subscriptions"
msgstr ""
@@ -2937,137 +3104,109 @@ msgstr ""
msgid "Update failed."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1415
-msgid "Update time"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1579
+msgid "Update interval"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1416
-msgid "Update time (daily)"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1580
+msgid "Update interval of rule set."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1417
-msgid "Update time (weekly)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1418
-msgid "Every day"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1419
-msgid "Every Monday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1420
-msgid "Every Tuesday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1421
-msgid "Every Wednesday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1422
-msgid "Every Thursday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1423
-msgid "Every Friday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1424
-msgid "Every Saturday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1425
-msgid "Every Sunday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1844
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1490
msgid "Update nodes from subscriptions"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1779
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1432
msgid "Update subscriptions via proxy."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1778
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1425
+msgid "Update time"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1431
msgid "Update via proxy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1534
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1190
msgid "Upload ECH config"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1425
-#: htdocs/luci-static/resources/view/homeproxy/server.js:523
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1034
+#: htdocs/luci-static/resources/view/homeproxy/server.js:539
msgid "Upload bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1426
-#: htdocs/luci-static/resources/view/homeproxy/server.js:524
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1035
+#: htdocs/luci-static/resources/view/homeproxy/server.js:540
msgid "Upload bandwidth in Mbps."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1515
-#: htdocs/luci-static/resources/view/homeproxy/server.js:767
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1171
+#: htdocs/luci-static/resources/view/homeproxy/server.js:806
msgid "Upload certificate"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:786
+#: htdocs/luci-static/resources/view/homeproxy/server.js:825
msgid "Upload key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1518
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1537
-#: htdocs/luci-static/resources/view/homeproxy/server.js:770
-#: htdocs/luci-static/resources/view/homeproxy/server.js:789
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1174
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1193
+#: htdocs/luci-static/resources/view/homeproxy/server.js:809
+#: htdocs/luci-static/resources/view/homeproxy/server.js:828
msgid "Upload..."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:596
+#: htdocs/luci-static/resources/view/homeproxy/server.js:612
msgid "Use ACME TLS certificate issuer."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1461
-#: htdocs/luci-static/resources/view/homeproxy/server.js:561
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1110
+#: htdocs/luci-static/resources/view/homeproxy/server.js:577
msgid ""
"Used to verify the hostname on the returned certificates unless insecure is "
"given."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1004
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1074
msgid "Used to verify the hostname on the returned certificates."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:665
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1138
+#: htdocs/luci-static/resources/view/homeproxy/client.js:690
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1208
msgid "User"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1819
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1050
+msgid "User key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1465
msgid "User-Agent"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:888
-#: htdocs/luci-static/resources/view/homeproxy/server.js:203
+#: htdocs/luci-static/resources/view/homeproxy/node.js:478
+#: htdocs/luci-static/resources/view/homeproxy/server.js:204
msgid "Username"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:874
-#: htdocs/luci-static/resources/view/homeproxy/server.js:189
+#: htdocs/luci-static/resources/view/homeproxy/node.js:464
+#: htdocs/luci-static/resources/view/homeproxy/server.js:190
msgid "VLESS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:875
-#: htdocs/luci-static/resources/view/homeproxy/server.js:190
+#: htdocs/luci-static/resources/view/homeproxy/node.js:465
+#: htdocs/luci-static/resources/view/homeproxy/server.js:191
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:206
-#: htdocs/luci-static/resources/view/homeproxy/client.js:243
+#: htdocs/luci-static/resources/view/homeproxy/client.js:181
+#: htdocs/luci-static/resources/view/homeproxy/client.js:219
msgid "WAN DNS (read from interface)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1487
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1651
msgid "WAN IP Policy"
msgstr ""
@@ -3075,37 +3214,43 @@ msgstr ""
msgid "Warn"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1210
-#: htdocs/luci-static/resources/view/homeproxy/server.js:406
+#: htdocs/luci-static/resources/view/homeproxy/node.js:819
+#: htdocs/luci-static/resources/view/homeproxy/server.js:422
msgid "WebSocket"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1810
+#: htdocs/luci-static/resources/view/homeproxy/client.js:302
+msgid ""
+"When the main DNS returns a mainland China IP, re-resolve via China DNS "
+"using evaluate/match_response."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1456
msgid "Whitelist mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:873
+#: htdocs/luci-static/resources/view/homeproxy/node.js:463
msgid "WireGuard"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1342
+#: htdocs/luci-static/resources/view/homeproxy/node.js:951
msgid "WireGuard peer public key."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1349
+#: htdocs/luci-static/resources/view/homeproxy/node.js:958
msgid "WireGuard pre-shared key."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1334
+#: htdocs/luci-static/resources/view/homeproxy/node.js:943
msgid "WireGuard requires base64-encoded private keys."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:928
+#: htdocs/luci-static/resources/view/homeproxy/node.js:519
msgid "Write proxy protocol in the connection header."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1319
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1832
+#: htdocs/luci-static/resources/view/homeproxy/node.js:928
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1478
msgid "Xudp (Xray-core)"
msgstr ""
@@ -3113,23 +3258,25 @@ msgstr ""
msgid "Your %s was successfully uploaded. Size: %sB."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:630
+#: htdocs/luci-static/resources/view/homeproxy/server.js:669
msgid "ZeroSSL"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1520
-#: htdocs/luci-static/resources/view/homeproxy/server.js:772
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1176
+#: htdocs/luci-static/resources/view/homeproxy/server.js:811
msgid "certificate"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:739
+#: htdocs/luci-static/resources/view/homeproxy/client.js:764
msgid "connect UDP connections"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1480
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1488
-#: htdocs/luci-static/resources/view/homeproxy/server.js:572
-#: htdocs/luci-static/resources/view/homeproxy/server.js:580
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1074
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1129
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1137
+#: htdocs/luci-static/resources/view/homeproxy/server.js:346
+#: htdocs/luci-static/resources/view/homeproxy/server.js:588
+#: htdocs/luci-static/resources/view/homeproxy/server.js:596
msgid "default"
msgstr ""
@@ -3137,52 +3284,51 @@ msgstr ""
msgid "failed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1206
-#: htdocs/luci-static/resources/view/homeproxy/server.js:402
+#: htdocs/luci-static/resources/view/homeproxy/node.js:815
+#: htdocs/luci-static/resources/view/homeproxy/server.js:418
msgid "gRPC"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1248
+#: htdocs/luci-static/resources/view/homeproxy/node.js:857
msgid "gRPC permit without stream"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1243
-#: htdocs/luci-static/resources/view/homeproxy/server.js:430
+#: htdocs/luci-static/resources/view/homeproxy/node.js:852
+#: htdocs/luci-static/resources/view/homeproxy/server.js:446
msgid "gRPC service name"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:334
+#: htdocs/luci-static/resources/view/homeproxy/client.js:360
msgid "gVisor"
msgstr ""
-#: htdocs/luci-static/resources/homeproxy.js:306
-#: htdocs/luci-static/resources/homeproxy.js:326
-#: htdocs/luci-static/resources/view/homeproxy/client.js:219
-#: htdocs/luci-static/resources/view/homeproxy/client.js:253
-#: htdocs/luci-static/resources/view/homeproxy/client.js:527
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1380
-#: htdocs/luci-static/resources/view/homeproxy/node.js:918
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1561
-#: htdocs/luci-static/resources/view/homeproxy/server.js:235
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1063
+#: htdocs/luci-static/resources/view/homeproxy/server.js:340
+msgid "http"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy.js:307
+#: htdocs/luci-static/resources/homeproxy.js:327
+#: htdocs/luci-static/resources/view/homeproxy/client.js:195
+#: htdocs/luci-static/resources/view/homeproxy/client.js:230
+#: htdocs/luci-static/resources/view/homeproxy/client.js:552
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1519
+#: htdocs/luci-static/resources/view/homeproxy/node.js:509
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1217
+#: htdocs/luci-static/resources/view/homeproxy/server.js:237
msgid "non-empty value"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1919
-msgid "The default rule set directory is /etc/homeproxy/ruleset/."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1975
-msgid "absolute path"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1061
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1317
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1830
+#: htdocs/luci-static/resources/view/homeproxy/node.js:670
+#: htdocs/luci-static/resources/view/homeproxy/node.js:926
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1062
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1476
+#: htdocs/luci-static/resources/view/homeproxy/server.js:339
msgid "none"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1318
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1831
+#: htdocs/luci-static/resources/view/homeproxy/node.js:927
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1477
msgid "packet addr (v2ray-core v5+)"
msgstr ""
@@ -3190,11 +3336,11 @@ msgstr ""
msgid "passed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/server.js:791
+#: htdocs/luci-static/resources/view/homeproxy/server.js:830
msgid "private key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:654
+#: htdocs/luci-static/resources/view/homeproxy/client.js:679
msgid "quic-go / uquic chrome"
msgstr ""
@@ -3202,15 +3348,33 @@ msgstr ""
msgid "sing-box client"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:337
+msgid ""
+"sing-box default; recommended for home use (accepts replies from any remote "
+"after mapping). Choose stricter only for specific UDP issues."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:326
+msgid ""
+"sing-box default; recommended for home use (small NAT table, QUIC/game "
+"friendly). Choose stricter only for specific UDP issues."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1043
+msgid ""
+"sing-box implements Snell v4/v5 wire as v4 and v6. The pre-shared key "
+"(Password above) must be 12-255 bytes for v6."
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/status.js:288
msgid "sing-box server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1543
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1199
msgid "uTLS fingerprint"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1544
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1200
msgid ""
"uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting "
"resistance."
@@ -3221,43 +3385,71 @@ msgid "unchecked"
msgstr ""
#: htdocs/luci-static/resources/homeproxy.js:237
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1735
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1388
msgid "unique UCI identifier"
msgstr ""
-#: htdocs/luci-static/resources/homeproxy.js:317
+#: htdocs/luci-static/resources/homeproxy.js:318
msgid "unique value"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:930
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1076
+#: htdocs/luci-static/resources/view/homeproxy/server.js:348
+msgid "unsafe-raw"
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:1075
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1608
+#: htdocs/luci-static/resources/view/homeproxy/server.js:347
+msgid "unshaped"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:521
+#: htdocs/luci-static/resources/view/homeproxy/node.js:684
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1264
msgid "v1"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:931
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1076
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1609
+#: htdocs/luci-static/resources/view/homeproxy/node.js:522
+#: htdocs/luci-static/resources/view/homeproxy/node.js:685
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1265
msgid "v2"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1077
+#: htdocs/luci-static/resources/view/homeproxy/node.js:686
msgid "v3"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:231
-#: htdocs/luci-static/resources/view/homeproxy/client.js:235
-#: htdocs/luci-static/resources/view/homeproxy/client.js:264
-#: htdocs/luci-static/resources/view/homeproxy/client.js:268
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1044
+msgid "v4"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:331
+msgid "v5"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1045
+#: htdocs/luci-static/resources/view/homeproxy/server.js:332
+msgid "v6"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1073
+#: htdocs/luci-static/resources/view/homeproxy/server.js:345
+msgid "v6 only."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:207
+#: htdocs/luci-static/resources/view/homeproxy/client.js:211
+#: htdocs/luci-static/resources/view/homeproxy/client.js:241
+#: htdocs/luci-static/resources/view/homeproxy/client.js:245
msgid "valid DNS server address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:541
-#: htdocs/luci-static/resources/view/homeproxy/client.js:544
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1385
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1388
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1796
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1799
+#: htdocs/luci-static/resources/view/homeproxy/client.js:566
+#: htdocs/luci-static/resources/view/homeproxy/client.js:569
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1527
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1530
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1442
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1445
msgid "valid URL"
msgstr ""
@@ -3265,185 +3457,48 @@ msgstr ""
msgid "valid base64 key with %d characters"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1530
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1562
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1694
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1726
msgid "valid hostname"
msgstr ""
-#: htdocs/luci-static/resources/homeproxy.js:297
+#: htdocs/luci-static/resources/homeproxy.js:298
msgid "valid port range (port1:port2)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:297
+#: htdocs/luci-static/resources/view/homeproxy/client.js:274
msgid "valid port value"
msgstr ""
-#: htdocs/luci-static/resources/homeproxy.js:328
+#: htdocs/luci-static/resources/homeproxy.js:329
msgid "valid uuid"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Panel Settings"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:808
+msgid "wrong-ack"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "UI path"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:807
+msgid "wrong-checksum"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "UI download URL"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:809
+msgid "wrong-md5"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "UI download detour"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:806
+msgid "wrong-sequence (default)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "API listen"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:810
+msgid "wrong-timestamp"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Use 0.0.0.0:port to open the panel from your browser."
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1522
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1570
+msgid "{tag} in URL when extra tags are used"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "API password"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Default mode"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "NTP Settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Enable NTP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "NTP server address"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "NTP server port"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "NTP time synchronization interval"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "NTP service always uses direct connection and mainly provides accurate time for sing-box features that depend on it, such as TLS certificate verification, VMess, Reality/uTLS and other time-sensitive connection scenarios."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Time format examples: 1m = 1 minute, 1h = 1 hour, 1d = 1 day."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Cache Settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Persistent Cache Settings"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Enable cache"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Enable cache file"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Cache file path"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Persistent cache file path"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Cache RDRC"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Persist RDRC cache"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Status"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Plugin Version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Core Version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Core Status"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Running"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Running: %s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Not Running"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Reload Service"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Restart Service"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Update Panel"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Update panel failed."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Clash API unavailable."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Open Panel"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Upload Panel ZIP"
-msgstr ""
-
-msgid "Baidu Connection"
-msgstr ""
-
-msgid "Google Connection"
-msgstr ""
-
-msgid "GitHub Connection"
-msgstr ""
-
-msgid "YouTube Connection"
-msgstr ""
-
-msgid "Click to check"
-msgstr ""
-
-msgid "Checking..."
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1573
+msgid "{tag} in initial path when extra tags are used"
msgstr ""
diff --git a/luci-app-homeproxy/po/zh_Hans/homeproxy.po b/luci-app-homeproxy/po/zh_Hans/homeproxy.po
index 26122baaf..5a9900d98 100644
--- a/luci-app-homeproxy/po/zh_Hans/homeproxy.po
+++ b/luci-app-homeproxy/po/zh_Hans/homeproxy.po
@@ -8,19 +8,11 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-#: htdocs/luci-static/resources/homeproxy.js:321
-msgid "Close"
-msgstr "关闭"
-
#: htdocs/luci-static/resources/view/homeproxy/status.js:206
msgid "%s log"
msgstr "%s 日志"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:500
-msgid "%s ms"
-msgstr "%s 毫秒"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1896
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1542
msgid "%s nodes removed"
msgstr "移除了 %s 个节点"
@@ -28,80 +20,97 @@ msgstr "移除了 %s 个节点"
msgid "/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/..."
msgstr "/etc/homeproxy/certs/...,/etc/acme/...,/etc/ssl/..."
-#: htdocs/luci-static/resources/view/homeproxy/client.js:632
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1287
+msgid ""
+"1 matches the latest untagged evaluate result; other values match an "
+"evaluate tag (1.14)."
+msgstr ""
+"1 匹配最近一次无 tag 的 evaluate 结果;其它值匹配对应的 evaluate tag"
+"(1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:657
msgid "4 or 6. Not limited if empty."
msgstr "4 或 6。留空不限制。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:798
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1233
+#: htdocs/luci-static/resources/view/homeproxy/client.js:842
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1354
msgid ""
"%s will be temporarily overwritten to %s after 50 "
"triggers in 30s if not enabled."
msgstr ""
+"若未启用,30 秒内触发 50 次后,%s 将临时改为 %s。"
"%s 在未启用的情况下,50 次触发后会在 30 秒内临时覆盖为 "
"%s。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1516
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1535
-#: htdocs/luci-static/resources/view/homeproxy/server.js:768
-#: htdocs/luci-static/resources/view/homeproxy/server.js:787
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1172
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1191
+#: htdocs/luci-static/resources/view/homeproxy/server.js:807
+#: htdocs/luci-static/resources/view/homeproxy/server.js:826
msgid "Save your configuration before uploading files!"
msgstr "上传文件前请先保存配置!"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:664
+#: htdocs/luci-static/resources/view/homeproxy/server.js:659
+msgid "ACME account key"
+msgstr "ACME 账户密钥"
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:643
+msgid "ACME key type"
+msgstr "ACME 密钥类型"
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:653
+msgid "ACME profile"
+msgstr "ACME 配置档"
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:654
+msgid "ACME profile for certificate issuance (1.14). Example: shortlived."
+msgstr "证书签发使用的 ACME profile(1.14)。示例:shortlived。"
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:703
msgid "API token"
msgstr "API 令牌"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1100
+#: htdocs/luci-static/resources/view/homeproxy/node.js:709
msgid "Accept any if empty."
msgstr "留空则不校验。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1161
-msgid "Accept empty query response"
-msgstr "接受空查询响应"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1422
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1586
msgid "Access Control"
msgstr "访问控制"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:647
+#: htdocs/luci-static/resources/view/homeproxy/server.js:686
msgid "Access key ID"
msgstr "访问密钥 ID"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:653
+#: htdocs/luci-static/resources/view/homeproxy/server.js:692
msgid "Access key secret"
msgstr "访问密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:692
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1169
+#: htdocs/luci-static/resources/view/homeproxy/client.js:717
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1235
msgid "Action"
msgstr "操作"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:210
-msgid "AdGuard Public DNS (DoH)"
-msgstr "AdGuard 公共DNS (DoH)"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1079
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1149
msgid "Add a DNS rule"
msgstr "新增 DNS 规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:956
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1026
msgid "Add a DNS server"
msgstr "新增 DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:719
+#: htdocs/luci-static/resources/view/homeproxy/node.js:416
msgid "Add a node"
msgstr "新增节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:453
msgid "Add a routing node"
-msgstr "新增策略组"
+msgstr "新增路由节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:599
+#: htdocs/luci-static/resources/view/homeproxy/client.js:624
msgid "Add a routing rule"
msgstr "新增路由规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1343
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1482
msgid "Add a rule set"
msgstr "新增规则集"
@@ -109,32 +118,47 @@ msgstr "新增规则集"
msgid "Add a server"
msgstr "新增服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:998
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1068
msgid "Additional headers to be sent to the DNS server."
msgstr "发送到 DNS 服务器的附加标头。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:980
-#: htdocs/luci-static/resources/view/homeproxy/node.js:878
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1050
+#: htdocs/luci-static/resources/view/homeproxy/node.js:468
msgid "Address"
msgstr "地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1011
+#: htdocs/luci-static/resources/view/homeproxy/client.js:325
+#: htdocs/luci-static/resources/view/homeproxy/client.js:336
+msgid "Address and port dependent"
+msgstr "地址与端口相关"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:324
+#: htdocs/luci-static/resources/view/homeproxy/client.js:335
+msgid "Address dependent"
+msgstr "地址相关"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1081
msgid "Address resolver"
msgstr "地址解析器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1043
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1113
msgid "Address strategy"
msgstr "地址解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:640
-msgid "AliYun"
-msgstr "AliYun"
+#: htdocs/luci-static/resources/view/homeproxy/node.js:640
+msgid "Aggressive"
+msgstr "激进"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:246
-msgid "AliYun Public DNS (DoH)"
-msgstr "阿里 公共DNS (DoH)"
+#: htdocs/luci-static/resources/view/homeproxy/server.js:679
+msgid "Alibaba Cloud DNS"
+msgstr "阿里云 DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:289
+#: htdocs/luci-static/resources/view/homeproxy/client.js:186
+#: htdocs/luci-static/resources/view/homeproxy/client.js:220
+msgid "Aliyun Public DNS (223.5.5.5)"
+msgstr "阿里云公共 DNS(223.5.5.5)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:266
msgid "All ports"
msgstr "所有端口"
@@ -142,21 +166,21 @@ msgstr "所有端口"
msgid "Allow access from the Internet."
msgstr "允许来自互联网的访问。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1470
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1822
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1119
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1468
msgid "Allow insecure"
msgstr "允许不安全连接"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1471
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1120
msgid "Allow insecure connection at TLS client."
msgstr "允许 TLS 客户端侧的不安全连接。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1823
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1469
msgid "Allow insecure connection by default when add nodes from subscriptions."
msgstr "从订阅获取节点时,默认允许不安全连接。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1304
-#: htdocs/luci-static/resources/view/homeproxy/server.js:482
+#: htdocs/luci-static/resources/view/homeproxy/node.js:913
+#: htdocs/luci-static/resources/view/homeproxy/server.js:498
msgid "Allowed payload size is in the request."
msgstr "请求中允许的载荷大小。"
@@ -168,177 +192,188 @@ msgstr "已是最新版本。"
msgid "Already in updating."
msgstr "已在更新中。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1172
-#: htdocs/luci-static/resources/view/homeproxy/server.js:391
+#: htdocs/luci-static/resources/view/homeproxy/node.js:781
+#: htdocs/luci-static/resources/view/homeproxy/server.js:407
msgid "Alter ID"
msgstr "额外 ID"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:678
+#: htdocs/luci-static/resources/view/homeproxy/server.js:717
msgid "Alternative HTTP port"
msgstr "替代 HTTP 端口"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:684
+#: htdocs/luci-static/resources/view/homeproxy/server.js:723
msgid "Alternative TLS port"
msgstr "替代 HTTPS 端口"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1859
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1505
msgid "An error occurred during updating subscriptions: %s"
msgstr "更新订阅时发生错误:%s"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1250
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1371
msgid "Answer"
msgstr "回答"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:859
+#: htdocs/luci-static/resources/view/homeproxy/node.js:449
#: htdocs/luci-static/resources/view/homeproxy/server.js:176
msgid "AnyTLS"
msgstr "AnyTLS"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:245
+#: htdocs/luci-static/resources/view/homeproxy/server.js:247
msgid "AnyTLS padding scheme in array."
msgstr "AnyTLS 填充方案。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:822
-#: htdocs/luci-static/resources/view/homeproxy/client.js:932
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1218
+#: htdocs/luci-static/resources/view/homeproxy/client.js:866
+#: htdocs/luci-static/resources/view/homeproxy/client.js:992
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1279
msgid ""
"Append a edns0-subnet OPT extra record with the specified IP "
"prefix to every query by default.
If value is an IP address instead of "
"prefix, /32 or /128 will be appended automatically."
msgstr ""
-"将带有指定 IP 前缀的 edns0-subnet OPT 记录附加到每个查询。如果值"
-"是 IP 地址而不是前缀,则会自动添加 /32 或 /128。"
+"默认情况下,每次查询都会附加一条包含指定 IP 前缀的 edns0-subnet "
+"OPT 附加记录。
如果值是 IP 地址而非前缀,将自动附加 /32 或 "
+"/128。将带有指定 IP 前缀的 edns0-subnet OPT 记录附"
+"加到每个查询。如果值是 IP 地址而不是前缀,则会自动添加 /32 或 "
+"/128。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1502
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1158
msgid "Append self-signed certificate"
msgstr "追加自签名证书"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:802
+#: htdocs/luci-static/resources/view/homeproxy/node.js:427
msgid "Applied"
msgstr "已应用"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:795
-#: htdocs/luci-static/resources/view/homeproxy/node.js:805
+#: htdocs/luci-static/resources/view/homeproxy/node.js:420
+#: htdocs/luci-static/resources/view/homeproxy/node.js:430
msgid "Apply"
msgstr "应用"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:26
+#: htdocs/luci-static/resources/view/homeproxy/node.js:18
msgid "Are you sure to allow insecure?"
msgstr "确定要允许不安全连接吗?"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:363
+#: htdocs/luci-static/resources/view/homeproxy/server.js:379
msgid "Auth timeout"
msgstr "认证超时"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1196
+#: htdocs/luci-static/resources/view/homeproxy/node.js:805
msgid "Authenticated length"
msgstr "认证长度"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:991
-#: htdocs/luci-static/resources/view/homeproxy/server.js:282
+#: htdocs/luci-static/resources/view/homeproxy/node.js:589
+#: htdocs/luci-static/resources/view/homeproxy/server.js:284
msgid "Authentication payload"
msgstr "认证载荷"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:984
-#: htdocs/luci-static/resources/view/homeproxy/server.js:275
+#: htdocs/luci-static/resources/view/homeproxy/node.js:582
+#: htdocs/luci-static/resources/view/homeproxy/server.js:277
msgid "Authentication type"
msgstr "认证类型"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:703
-msgid "Auto select"
-msgstr "自动选择"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1768
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1421
msgid "Auto update"
msgstr "自动更新"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1769
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1422
msgid "Auto update subscriptions and geodata."
msgstr "自动更新订阅和地理数据。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1132
+#: htdocs/luci-static/resources/view/homeproxy/node.js:741
msgid "BBR"
msgstr "BBR"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:472
-msgid "Backend execution failed"
-msgstr "后端执行失败"
+#: htdocs/luci-static/resources/view/homeproxy/node.js:637
+msgid "BBR congestion control algorithm profile. Hysteria2 only."
+msgstr "BBR 拥塞控制算法档位。仅 Hysteria2。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:636
+msgid "BBR profile (1.14)"
+msgstr "BBR 档位(1.14)"
#: htdocs/luci-static/resources/view/homeproxy/status.js:235
msgid "BaiDu"
msgstr "百度"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:986
-#: htdocs/luci-static/resources/view/homeproxy/server.js:277
+#: htdocs/luci-static/resources/view/homeproxy/node.js:584
+#: htdocs/luci-static/resources/view/homeproxy/server.js:279
msgid "Base64"
msgstr "Base64"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:346
+#: htdocs/luci-static/resources/view/homeproxy/client.js:372
msgid "Based on google/gvisor."
msgstr "基于 google/gvisor。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1364
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1503
msgid "Binary file"
msgstr "二进制文件"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:476
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1435
-#: htdocs/luci-static/resources/view/homeproxy/server.js:874
+#: htdocs/luci-static/resources/view/homeproxy/client.js:501
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1599
+#: htdocs/luci-static/resources/view/homeproxy/server.js:913
msgid "Bind interface"
msgstr "绑定接口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1436
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1600
msgid ""
"Bind outbound traffic to specific interface. Leave empty to auto detect."
msgstr "绑定出站流量至指定端口。留空自动检测。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:640
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1129
+#: htdocs/luci-static/resources/view/homeproxy/client.js:665
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1199
msgid "BitTorrent"
msgstr "BitTorrent"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1809
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1455
msgid "Blacklist mode"
msgstr "黑名单模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:388
+#: htdocs/luci-static/resources/view/homeproxy/client.js:413
msgid "Block"
msgstr "封锁"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:635
-#: htdocs/luci-static/resources/view/homeproxy/client.js:663
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1115
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1125
-#: htdocs/luci-static/resources/view/homeproxy/server.js:869
+#: htdocs/luci-static/resources/view/homeproxy/client.js:660
+#: htdocs/luci-static/resources/view/homeproxy/client.js:688
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1185
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1195
+#: htdocs/luci-static/resources/view/homeproxy/server.js:908
msgid "Both"
msgstr "全部"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:366
+#: htdocs/luci-static/resources/view/homeproxy/client.js:392
msgid "Bypass CN traffic"
msgstr "绕过中国流量"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:276
+#: htdocs/luci-static/resources/view/homeproxy/client.js:253
msgid "Bypass mainland China"
msgstr "大陆白名单"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:367
+#: htdocs/luci-static/resources/view/homeproxy/client.js:393
msgid "Bypass mainland China traffic via firewall rules by default."
msgstr "默认使用防火墙规则绕过中国大陆流量。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:627
+#: htdocs/luci-static/resources/view/homeproxy/server.js:666
msgid "CA provider"
msgstr "CA 颁发机构"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1130
+#: htdocs/luci-static/resources/view/homeproxy/client.js:301
+msgid "CN-IP DNS fallback (sing-box 1.14)"
+msgstr "大陆 IP DNS 兜底(sing-box 1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:221
+msgid "CNNIC Public DNS (210.2.4.8)"
+msgstr "CNNIC 公共 DNS(210.2.4.8)"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:739
msgid "CUBIC"
msgstr "CUBIC"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1672
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1325
msgid "Cancel"
-msgstr "关闭"
+msgstr "取消"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1507
-#: htdocs/luci-static/resources/view/homeproxy/server.js:756
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1163
+#: htdocs/luci-static/resources/view/homeproxy/server.js:795
msgid "Certificate path"
msgstr "证书路径"
@@ -350,7 +385,7 @@ msgstr "检查"
msgid "Check update"
msgstr "检查更新"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:241
+#: htdocs/luci-static/resources/view/homeproxy/client.js:217
msgid "China DNS server"
msgstr "国内 DNS 服务器"
@@ -366,28 +401,24 @@ msgstr "国内 IPv6 库版本"
msgid "China list version"
msgstr "国内域名列表版本"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1783
-msgid "Choose which method node latency tests use."
-msgstr "选择节点延迟测试使用的方法。"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:652
+#: htdocs/luci-static/resources/view/homeproxy/client.js:677
msgid "Chromium / Cronet"
msgstr "Chromium / Cronet"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1494
-#: htdocs/luci-static/resources/view/homeproxy/server.js:586
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1143
+#: htdocs/luci-static/resources/view/homeproxy/server.js:602
msgid "Cipher suites"
msgstr "密码套件"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:212
-msgid "Cisco Public DNS (DoH)"
-msgstr "Cisco 公共DNS (DoH)"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:183
+msgid "Cisco Public DNS (208.67.222.222)"
+msgstr "思科公共 DNS(208.67.222.222)"
#: htdocs/luci-static/resources/view/homeproxy/status.js:214
msgid "Clean log"
msgstr "清空日志"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:650
+#: htdocs/luci-static/resources/view/homeproxy/client.js:675
msgid "Client"
msgstr "客户端"
@@ -395,30 +426,30 @@ msgstr "客户端"
msgid "Client Settings"
msgstr "客户端设置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1094
+#: htdocs/luci-static/resources/view/homeproxy/node.js:703
msgid "Client version"
msgstr "客户端版本"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:641
-msgid "CloudFlare"
-msgstr "CloudFlare"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:182
+msgid "CloudFlare Public DNS (1.1.1.1)"
+msgstr "CloudFlare 公共 DNS(1.1.1.1)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:207
-msgid "CloudFlare Public DNS (DoH)"
-msgstr "CloudFlare 公共DNS (DoH)"
+#: htdocs/luci-static/resources/view/homeproxy/server.js:680
+msgid "Cloudflare"
+msgstr "Cloudflare"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:139
+#: htdocs/luci-static/resources/view/homeproxy/client.js:114
#: htdocs/luci-static/resources/view/homeproxy/server.js:142
#: htdocs/luci-static/resources/view/homeproxy/status.js:176
msgid "Collecting data..."
msgstr "正在收集数据中..."
-#: htdocs/luci-static/resources/view/homeproxy/client.js:290
+#: htdocs/luci-static/resources/view/homeproxy/client.js:267
msgid "Common ports only (bypass P2P traffic)"
msgstr "仅常用端口(绕过 P2P 流量)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1128
-#: htdocs/luci-static/resources/view/homeproxy/server.js:354
+#: htdocs/luci-static/resources/view/homeproxy/node.js:737
+#: htdocs/luci-static/resources/view/homeproxy/server.js:370
msgid "Congestion control algorithm"
msgstr "拥塞控制算法"
@@ -426,54 +457,63 @@ msgstr "拥塞控制算法"
msgid "Connection check"
msgstr "连接检查"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1772
-msgid "Cron expression"
-msgstr "定时任务表达式"
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1055
+msgid "Connection reuse"
+msgstr "连接复用"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:278
+#: htdocs/luci-static/resources/view/homeproxy/node.js:639
+msgid "Conservative"
+msgstr "保守"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:255
msgid "Custom routing"
msgstr "自定义路由"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:641
+#: htdocs/luci-static/resources/view/homeproxy/client.js:666
msgid "DNS"
msgstr "DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1070
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1734
+msgid "DNS Cache (1.14)"
+msgstr "DNS 缓存(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1140
msgid "DNS Rules"
msgstr "DNS 规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:947
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1017
msgid "DNS Servers"
msgstr "DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:895
+#: htdocs/luci-static/resources/view/homeproxy/client.js:959
msgid "DNS Settings"
msgstr "DNS 设置"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:639
+#: htdocs/luci-static/resources/view/homeproxy/server.js:678
msgid "DNS provider"
msgstr "DNS 提供商"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1079
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1006
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1747
+msgid "DNS query timeout"
+msgstr "DNS 查询超时"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1149
msgid "DNS rule"
msgstr "DNS 规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:204
-#: htdocs/luci-static/resources/view/homeproxy/client.js:772
-#: htdocs/luci-static/resources/view/homeproxy/client.js:956
+#: htdocs/luci-static/resources/view/homeproxy/client.js:179
+#: htdocs/luci-static/resources/view/homeproxy/client.js:816
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1026
msgid "DNS server"
msgstr "DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:211
-msgid "DNS.SB Public DNS (DoH)"
-msgstr "DNS.SB 公共DNS (DoH)"
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:635
+#: htdocs/luci-static/resources/view/homeproxy/server.js:674
msgid "DNS01 challenge"
msgstr "DNS01 验证"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:642
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1130
+#: htdocs/luci-static/resources/view/homeproxy/client.js:667
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1200
msgid "DTLS"
msgstr "DTLS"
@@ -482,439 +522,475 @@ msgid "Debug"
msgstr "调试"
#: htdocs/luci-static/resources/homeproxy.js:17
-#: htdocs/luci-static/resources/view/homeproxy/client.js:456
-#: htdocs/luci-static/resources/view/homeproxy/client.js:626
-#: htdocs/luci-static/resources/view/homeproxy/client.js:778
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1106
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1404
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1140
+#: htdocs/luci-static/resources/view/homeproxy/client.js:481
+#: htdocs/luci-static/resources/view/homeproxy/client.js:651
+#: htdocs/luci-static/resources/view/homeproxy/client.js:822
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1176
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1546
+#: htdocs/luci-static/resources/view/homeproxy/node.js:749
msgid "Default"
msgstr "默认"
-msgid "Default node"
-msgstr "默认节点"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:405
-#: htdocs/luci-static/resources/view/homeproxy/client.js:457
-#: htdocs/luci-static/resources/view/homeproxy/client.js:779
-#: htdocs/luci-static/resources/view/homeproxy/client.js:910
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1018
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1184
+#: htdocs/luci-static/resources/view/homeproxy/client.js:430
+#: htdocs/luci-static/resources/view/homeproxy/client.js:482
+#: htdocs/luci-static/resources/view/homeproxy/client.js:823
+#: htdocs/luci-static/resources/view/homeproxy/client.js:974
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1088
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1251
msgid "Default DNS (issued by WAN)"
msgstr "默认 DNS(由 WAN 下发)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:905
+#: htdocs/luci-static/resources/view/homeproxy/client.js:969
msgid "Default DNS server"
msgstr "默认 DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1332
-msgid "Daily domain name resolution for clients. Choose an overseas DNS if DNS leak protection is required."
-msgstr "客户端日常访问域名解析,DNS泄漏要求高选择国外DNS。"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:400
+#: htdocs/luci-static/resources/view/homeproxy/client.js:425
msgid "Default DNS server for resolving domain name in the server address."
-msgstr "填写国内DNS,Sing-box在连接这个代理节点前,需要先解析节点域名,这里就决定用哪个DNS去解析这个“代理服务器域名”,不要选走代理的国外 DNS,否则可能出现“代理还没连上,却要先通过代理解析代理服务器”的循环问题。"
+msgstr "用于解析服务器地址中的域名的默认 DNS 服务器。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:900
+#: htdocs/luci-static/resources/view/homeproxy/client.js:964
msgid "Default DNS strategy"
msgstr "默认 DNS 解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:380
-msgid "Default outbound (fallback)"
-msgstr "默认出站(漏网之鱼)"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:405
+msgid "Default outbound"
+msgstr "默认出站"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:399
+#: htdocs/luci-static/resources/view/homeproxy/client.js:424
msgid "Default outbound DNS"
msgstr "默认出站 DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:381
+#: htdocs/luci-static/resources/view/homeproxy/client.js:406
msgid "Default outbound for connections not matched by any routing rules."
msgstr "用于未被任何路由规则匹配的连接的默认出站。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1829
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1475
msgid "Default packet encoding"
msgstr "默认包封装格式"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:606
+#: htdocs/luci-static/resources/view/homeproxy/server.js:622
msgid "Default server name"
msgstr "默认服务器名称"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:387
-#: htdocs/luci-static/resources/view/homeproxy/client.js:489
-#: htdocs/luci-static/resources/view/homeproxy/client.js:707
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1056
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1405
-#: htdocs/luci-static/resources/view/homeproxy/node.js:858
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1007
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1748
+msgid "Default timeout per DNS query in seconds (sing-box default: 10)."
+msgstr "每次 DNS 查询的默认超时时间(秒,sing-box 默认为 10)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:412
+#: htdocs/luci-static/resources/view/homeproxy/client.js:514
+#: htdocs/luci-static/resources/view/homeproxy/client.js:732
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1126
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1547
+#: htdocs/luci-static/resources/view/homeproxy/node.js:448
msgid "Direct"
msgstr "直连"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1537
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1701
msgid "Direct Domain List"
msgstr "直连域名列表"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1451
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1496
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1615
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1660
msgid "Direct IPv4 IP-s"
msgstr "直连 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1454
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1499
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1618
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1663
msgid "Direct IPv6 IP-s"
msgstr "直连 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1457
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1621
msgid "Direct MAC-s"
msgstr "直连 MAC 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:148
-#: htdocs/luci-static/resources/view/homeproxy/client.js:176
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1445
-#: htdocs/luci-static/resources/view/homeproxy/node.js:929
-#: htdocs/luci-static/resources/view/homeproxy/node.js:985
-#: htdocs/luci-static/resources/view/homeproxy/node.js:998
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1545
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1808
-#: htdocs/luci-static/resources/view/homeproxy/server.js:276
-#: htdocs/luci-static/resources/view/homeproxy/server.js:289
+#: htdocs/luci-static/resources/view/homeproxy/client.js:123
+#: htdocs/luci-static/resources/view/homeproxy/client.js:151
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1609
+#: htdocs/luci-static/resources/view/homeproxy/node.js:520
+#: htdocs/luci-static/resources/view/homeproxy/node.js:583
+#: htdocs/luci-static/resources/view/homeproxy/node.js:596
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1201
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1454
+#: htdocs/luci-static/resources/view/homeproxy/server.js:278
+#: htdocs/luci-static/resources/view/homeproxy/server.js:291
msgid "Disable"
msgstr "禁用"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:386
+#: htdocs/luci-static/resources/view/homeproxy/client.js:411
msgid "Disable (the service)"
msgstr "禁用(服务)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:810
-#: htdocs/luci-static/resources/view/homeproxy/client.js:922
+#: htdocs/luci-static/resources/view/homeproxy/node.js:644
+msgid "Disable Chrome QUIC fingerprint (1.14)"
+msgstr "禁用 Chrome QUIC 指纹(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:645
+msgid ""
+"Disable Chrome QUIC handshake parroting, which is enabled by default since "
+"sing-box 1.14. Turn this on only when the server uses an Ed25519 certificate "
+"or the handshake otherwise fails."
+msgstr ""
+"禁用自 sing-box 1.14 起默认开启的 Chrome QUIC 握手伪装。仅在服务器证书为 "
+"Ed25519 或握手失败时才需要开启。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:854
+#: htdocs/luci-static/resources/view/homeproxy/client.js:986
msgid "Disable DNS cache"
msgstr "禁用 DNS 缓存"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:811
+#: htdocs/luci-static/resources/view/homeproxy/client.js:855
msgid "Disable DNS cache in this query."
msgstr "在本次查询中禁用 DNS 缓存。"
-msgid "Disable DNS memory cache"
-msgstr "禁用 DNS 内存缓存"
-
-msgid "Disable DNS memory cache in this query."
-msgstr "在本次查询中禁用 DNS 内存缓存。"
-
-msgid "Disable DNS memory cache expiration"
-msgstr "禁用 DNS 内存缓存过期"
-
-msgid "Independent DNS memory cache per server"
-msgstr "每个 DNS 服务器独立内存缓存"
-
-msgid "Make each DNS server's memory cache independent for special purposes. If enabled, will slightly degrade performance."
-msgstr "让每个 DNS 服务器使用独立内存缓存。启用后性能会略微下降。"
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:670
+#: htdocs/luci-static/resources/view/homeproxy/server.js:709
msgid "Disable HTTP challenge"
msgstr "禁用 HTTP 验证"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1035
-#: htdocs/luci-static/resources/view/homeproxy/server.js:321
-msgid "Disable Path MTU discovery"
-msgstr "禁用路径 MTU 探测"
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:674
+#: htdocs/luci-static/resources/view/homeproxy/server.js:713
msgid "Disable TLS ALPN challenge"
msgstr "禁用 TLS ALPN 认证"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:733
+#: htdocs/luci-static/resources/view/homeproxy/client.js:758
msgid "Disable UDP domain unmapping"
msgstr "禁用 UDP 域名映射"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1205
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1266
msgid "Disable cache and save cache in this query."
msgstr "在本次查询中禁用缓存。"
-msgid "Disable DNS memory cache and persistent cache in this query."
-msgstr "在本次查询中禁用 DNS 内存缓存和持久化缓存。"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:924
+#: htdocs/luci-static/resources/view/homeproxy/client.js:988
msgid "Disable cache expire"
msgstr "缓存永不过期"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1204
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1265
msgid "Disable dns cache"
msgstr "禁用 DNS 缓存"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1036
-#: htdocs/luci-static/resources/view/homeproxy/server.js:322
-msgid ""
-"Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 "
-"(IPv4) / 1232 (IPv6) bytes in size."
-msgstr ""
-"禁用路径 MTU 发现 (RFC 8899)。 数据包的大小最多为 1252 (IPv4) / 1232 (IPv6) "
-"字节。"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1308
+msgid "Disable optimistic DNS caching for this query."
+msgstr "对此查询禁用乐观 DNS 缓存。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:837
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1274
+#: htdocs/luci-static/resources/view/homeproxy/client.js:873
+msgid "Disable optimistic DNS caching in this lookup (1.14)."
+msgstr "关闭本次查询解析的乐观 DNS 缓存(1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:872
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1307
+msgid "Disable optimistic cache"
+msgstr "禁用乐观缓存"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:309
+msgid "Disabled"
+msgstr "禁用"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:892
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1395
msgid "Domain keyword"
msgstr "域名关键词"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:828
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1265
+#: htdocs/luci-static/resources/view/homeproxy/client.js:883
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1386
msgid "Domain name"
msgstr "域名"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:841
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1278
+#: htdocs/luci-static/resources/view/homeproxy/client.js:896
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1399
msgid "Domain regex"
msgstr "域名正则表达式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:450
+#: htdocs/luci-static/resources/view/homeproxy/client.js:475
msgid "Domain resolver"
msgstr "域名解析器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:370
-#: htdocs/luci-static/resources/view/homeproxy/client.js:469
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1197
+#: htdocs/luci-static/resources/view/homeproxy/client.js:400
+#: htdocs/luci-static/resources/view/homeproxy/client.js:494
msgid "Domain strategy"
msgstr "域名解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:804
+#: htdocs/luci-static/resources/view/homeproxy/client.js:848
msgid "Domain strategy for resolving the domain names."
msgstr "目标域名的解析策略。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:833
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1270
+#: htdocs/luci-static/resources/view/homeproxy/client.js:888
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1391
msgid "Domain suffix"
msgstr "域名后缀"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:600
+#: htdocs/luci-static/resources/view/homeproxy/server.js:616
msgid "Domains"
msgstr "域名"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:797
+#: htdocs/luci-static/resources/view/homeproxy/client.js:841
msgid "Don't drop packets"
msgstr "不丢弃数据包"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1232
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1353
msgid "Don't drop requests"
msgstr "不丢弃请求"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1419
-#: htdocs/luci-static/resources/view/homeproxy/server.js:517
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1028
+#: htdocs/luci-static/resources/view/homeproxy/server.js:533
msgid "Download bandwidth"
msgstr "下载带宽"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1420
-#: htdocs/luci-static/resources/view/homeproxy/server.js:518
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1029
+#: htdocs/luci-static/resources/view/homeproxy/server.js:534
msgid "Download bandwidth in Mbps."
msgstr "下载带宽(单位:Mbps)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:793
-#: htdocs/luci-static/resources/view/homeproxy/client.js:799
+#: htdocs/luci-static/resources/view/homeproxy/client.js:837
+#: htdocs/luci-static/resources/view/homeproxy/client.js:843
msgid "Drop packets"
msgstr "丢弃数据包"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1227
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1234
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1348
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1355
msgid "Drop requests"
msgstr "丢弃请求"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1815
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1461
msgid ""
"Drop/keep nodes that contain the specific keywords. Regex is supported."
msgstr ""
-"丢弃/保留 包含指定关键词的节点。支持"
-"正则表达式。"
+"根据名称中包含的特定关键词丢弃/保留节点。支"
+"持正则表达式。丢弃/保留 包含指定关键词的节点。支持正则表达式。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1807
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1453
msgid "Drop/keep specific nodes from subscriptions."
msgstr "从订阅中 丢弃/保留 指定节点"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:691
+#: htdocs/luci-static/resources/view/homeproxy/server.js:730
msgid ""
"EAB (External Account Binding) contains information necessary to bind or map "
"an ACME account to some other account known by the CA.
External account "
"bindings are \"used to associate an ACME account with an existing account in "
"a non-ACME system, such as a CA customer database."
msgstr ""
-"EAB(外部帐户绑定)包含将 ACME 帐户绑定或映射到 CA 已知的其他帐户所需的信息。"
-"
外部帐户绑定“用于将 ACME 帐户与非 ACME 系统中的现有帐户相关联,例如 CA "
-"客户数据库。"
+"EAB(外部账户绑定)包含将 ACME 账户绑定或映射到 CA 已知的其他账户所需的信息。"
+"
外部账户绑定“用于将 ACME 账户与一个非 ACME 系统中的现有账户(例如 CA 客"
+"户数据库)相关联”。EAB(外部帐户绑定)包含将 ACME 帐户绑定或映射到 CA 已知的"
+"其他帐户所需的信息。
外部帐户绑定“用于将 ACME 帐户与非 ACME 系统中的现有"
+"帐户相关联,例如 CA 客户数据库。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1524
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1180
msgid ""
"ECH (Encrypted Client Hello) is a TLS extension that allows a client to "
"encrypt the first part of its ClientHello message."
msgstr ""
-"ECH(Encrypted Client Hello)是一个 TLS 扩展,它允许客户端加密其 ClientHello "
-"信息的第一部分。"
+"ECH(加密客户端问候)是一种 TLS 扩展,允许客户端加密 ClientHello 消息的起始部"
+"分。ECH(Encrypted Client Hello)是一个 TLS 扩展,它允许客户端加密其 "
+"ClientHello 信息的第一部分。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1539
-#: htdocs/luci-static/resources/view/homeproxy/server.js:835
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1195
+#: htdocs/luci-static/resources/view/homeproxy/server.js:874
msgid "ECH config"
msgstr "ECH 配置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1528
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1184
msgid "ECH config path"
msgstr "ECH 配置路径"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:794
+#: htdocs/luci-static/resources/view/homeproxy/server.js:833
msgid "ECH key"
msgstr "ECH 密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:821
-#: htdocs/luci-static/resources/view/homeproxy/client.js:931
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1217
+#: htdocs/luci-static/resources/view/homeproxy/client.js:865
+#: htdocs/luci-static/resources/view/homeproxy/client.js:991
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1278
msgid "EDNS Client subnet"
-msgstr "ENDS 客户端子网"
+msgstr "EDNS 客户端子网"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1303
-#: htdocs/luci-static/resources/view/homeproxy/server.js:481
+#: htdocs/luci-static/resources/view/homeproxy/node.js:912
+#: htdocs/luci-static/resources/view/homeproxy/server.js:497
msgid "Early data"
msgstr "前置数据"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1310
-#: htdocs/luci-static/resources/view/homeproxy/server.js:488
+#: htdocs/luci-static/resources/view/homeproxy/node.js:919
+#: htdocs/luci-static/resources/view/homeproxy/server.js:504
msgid "Early data header name"
msgstr "前置数据标头"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:489
+#: htdocs/luci-static/resources/view/homeproxy/server.js:505
msgid "Early data is sent in path instead of header by default."
msgstr "前置数据默认发送在路径而不是标头中。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1644
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1297
msgid "Edit nodes"
msgstr "修改节点"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:612
+#: htdocs/luci-static/resources/view/homeproxy/server.js:628
msgid "Email"
msgstr "Email"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:437
-#: htdocs/luci-static/resources/view/homeproxy/client.js:613
-#: htdocs/luci-static/resources/view/homeproxy/client.js:965
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1093
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1352
+#: htdocs/luci-static/resources/view/homeproxy/client.js:462
+#: htdocs/luci-static/resources/view/homeproxy/client.js:638
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1035
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1163
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1491
#: htdocs/luci-static/resources/view/homeproxy/server.js:148
#: htdocs/luci-static/resources/view/homeproxy/server.js:166
msgid "Enable"
msgstr "启用"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1152
-#: htdocs/luci-static/resources/view/homeproxy/server.js:371
+#: htdocs/luci-static/resources/view/homeproxy/node.js:761
+#: htdocs/luci-static/resources/view/homeproxy/server.js:387
msgid ""
"Enable 0-RTT QUIC connection handshake on the client side. This is not "
"impacting much on the performance, as the protocol is fully multiplexed.
Disabling this is highly recommended, as it is vulnerable to replay attacks."
msgstr ""
-"在客户端启用 0-RTT QUIC 连接握手。由于协议是完全复用的,这对性能影响不大。"
-"
强烈建议禁用此功能,因为它容易受到重放攻击。"
+"在客户端启用 0-RTT QUIC 连接握手。由于协议完全多路复用,这对性能影响不大。"
+"
强烈建议禁用,因为它容易受到重放攻击。在客户端启用 0-RTT QUIC 连接握手。"
+"由于协议是完全复用的,这对性能影响不大。
强烈建议禁用此功能,因为它容易受"
+"到重放攻击。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1151
-#: htdocs/luci-static/resources/view/homeproxy/server.js:370
+#: htdocs/luci-static/resources/view/homeproxy/node.js:760
+#: htdocs/luci-static/resources/view/homeproxy/server.js:386
msgid "Enable 0-RTT handshake"
msgstr "启用 0-RTT 握手"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:595
+#: htdocs/luci-static/resources/view/homeproxy/server.js:611
msgid "Enable ACME"
msgstr "启用 ACME"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1523
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1179
msgid "Enable ECH"
msgstr "启用 ECH"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1414
-#: htdocs/luci-static/resources/view/homeproxy/server.js:512
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1023
+#: htdocs/luci-static/resources/view/homeproxy/server.js:528
msgid "Enable TCP Brutal"
msgstr "启用 TCP Brutal"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1415
-#: htdocs/luci-static/resources/view/homeproxy/server.js:513
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1024
+#: htdocs/luci-static/resources/view/homeproxy/server.js:529
msgid "Enable TCP Brutal congestion control algorithm"
msgstr "启用 TCP Brutal 拥塞控制算法。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1598
-#: htdocs/luci-static/resources/view/homeproxy/server.js:855
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1254
+#: htdocs/luci-static/resources/view/homeproxy/server.js:894
msgid "Enable UDP fragmentation."
msgstr "启用 UDP 分片。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:351
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1056
+msgid "Enable connection reuse (the Snell v2 CONNECT command)."
+msgstr "启用连接复用(Snell v2 CONNECT 指令)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:377
msgid "Enable endpoint-independent NAT"
msgstr "启用端点独立 NAT"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1410
-#: htdocs/luci-static/resources/view/homeproxy/server.js:507
+#: htdocs/luci-static/resources/view/homeproxy/client.js:397
+msgid ""
+"Enable neighbor resolution so rules can match LAN devices by hostname (1.14)."
+msgstr "启用邻居解析,使规则可按主机名匹配局域网设备(1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1019
+#: htdocs/luci-static/resources/view/homeproxy/server.js:523
msgid "Enable padding"
msgstr "启用填充"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:846
+#: htdocs/luci-static/resources/view/homeproxy/server.js:885
msgid "Enable tcp fast open for listener."
msgstr "为监听器启用 TCP 快速打开。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1602
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1258
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with multiplex."
msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1042
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1178
-#: htdocs/luci-static/resources/view/homeproxy/server.js:338
+#: htdocs/luci-static/resources/view/homeproxy/node.js:651
+#: htdocs/luci-static/resources/view/homeproxy/node.js:787
+#: htdocs/luci-static/resources/view/homeproxy/server.js:354
msgid "Encrypt method"
msgstr "加密方式"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:488
+#: htdocs/luci-static/resources/view/homeproxy/client.js:323
+#: htdocs/luci-static/resources/view/homeproxy/client.js:334
+msgid "Endpoint independent"
+msgstr "端点无关"
+
#: htdocs/luci-static/resources/view/homeproxy/status.js:139
msgid "Error"
msgstr "错误"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1240
+msgid "Evaluate (1.14)"
+msgstr "Evaluate(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1291
+msgid "Evaluate tag"
+msgstr "Evaluate 标签"
+
#: htdocs/luci-static/resources/homeproxy.js:237
#: htdocs/luci-static/resources/homeproxy.js:271
#: htdocs/luci-static/resources/homeproxy.js:279
-#: htdocs/luci-static/resources/homeproxy.js:297
-#: htdocs/luci-static/resources/homeproxy.js:306
-#: htdocs/luci-static/resources/homeproxy.js:317
-#: htdocs/luci-static/resources/homeproxy.js:326
-#: htdocs/luci-static/resources/homeproxy.js:328
-#: htdocs/luci-static/resources/view/homeproxy/client.js:219
-#: htdocs/luci-static/resources/view/homeproxy/client.js:231
-#: htdocs/luci-static/resources/view/homeproxy/client.js:235
-#: htdocs/luci-static/resources/view/homeproxy/client.js:253
-#: htdocs/luci-static/resources/view/homeproxy/client.js:264
-#: htdocs/luci-static/resources/view/homeproxy/client.js:268
-#: htdocs/luci-static/resources/view/homeproxy/client.js:297
-#: htdocs/luci-static/resources/view/homeproxy/client.js:527
-#: htdocs/luci-static/resources/view/homeproxy/client.js:541
-#: htdocs/luci-static/resources/view/homeproxy/client.js:544
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1380
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1385
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1388
+#: htdocs/luci-static/resources/homeproxy.js:298
+#: htdocs/luci-static/resources/homeproxy.js:307
+#: htdocs/luci-static/resources/homeproxy.js:318
+#: htdocs/luci-static/resources/homeproxy.js:327
+#: htdocs/luci-static/resources/homeproxy.js:329
+#: htdocs/luci-static/resources/view/homeproxy/client.js:195
+#: htdocs/luci-static/resources/view/homeproxy/client.js:207
+#: htdocs/luci-static/resources/view/homeproxy/client.js:211
+#: htdocs/luci-static/resources/view/homeproxy/client.js:230
+#: htdocs/luci-static/resources/view/homeproxy/client.js:241
+#: htdocs/luci-static/resources/view/homeproxy/client.js:245
+#: htdocs/luci-static/resources/view/homeproxy/client.js:274
+#: htdocs/luci-static/resources/view/homeproxy/client.js:552
+#: htdocs/luci-static/resources/view/homeproxy/client.js:566
+#: htdocs/luci-static/resources/view/homeproxy/client.js:569
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1519
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1522
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1527
#: htdocs/luci-static/resources/view/homeproxy/client.js:1530
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1562
-#: htdocs/luci-static/resources/view/homeproxy/node.js:918
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1561
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1735
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1796
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1799
-#: htdocs/luci-static/resources/view/homeproxy/server.js:235
-#: htdocs/luci-static/resources/view/homeproxy/server.js:618
-#: htdocs/luci-static/resources/view/homeproxy/server.js:620
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1570
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1573
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1694
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1726
+#: htdocs/luci-static/resources/view/homeproxy/node.js:509
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1217
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1388
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1442
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1445
+#: htdocs/luci-static/resources/view/homeproxy/server.js:237
+#: htdocs/luci-static/resources/view/homeproxy/server.js:634
+#: htdocs/luci-static/resources/view/homeproxy/server.js:636
msgid "Expecting: %s"
msgstr "请输入:%s"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:690
+#: htdocs/luci-static/resources/view/homeproxy/server.js:729
msgid "External Account Binding"
msgstr "外部账户绑定"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:702
+#: htdocs/luci-static/resources/view/homeproxy/server.js:741
msgid "External account MAC key"
msgstr "外部账户 MAC 密钥"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:696
+#: htdocs/luci-static/resources/view/homeproxy/server.js:735
msgid "External account key ID"
msgstr "外部账户密钥标识符"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1260
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1381
msgid "Extra records"
msgstr "附加记录"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1564
+msgid ""
+"Extra rule-set tags sharing these options. Requires {tag} in path/url (1.14)."
+msgstr ""
+"共享这些选项的额外规则集标签。使用多标签时 path/url 需包含 {tag}(1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1563
+msgid "Extra tags"
+msgstr "额外标签"
+
#: htdocs/luci-static/resources/view/homeproxy/server.js:86
msgid "Failed to generate %s, error: %s."
msgstr "生成 %s 失败,错误:%s。"
@@ -923,53 +999,23 @@ msgstr "生成 %s 失败,错误:%s。"
msgid "Failed to upload %s, error: %s."
msgstr "上传 %s 失败,错误:%s。"
-#: htdocs/luci-static/resources/homeproxy.js
-msgid "panel ZIP package"
-msgstr "面版ZIP压缩包"
-
-#: htdocs/luci-static/resources/homeproxy.js
-msgid "unknown error"
-msgstr "未知错误"
-
-#: htdocs/luci-static/resources/homeproxy.js
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Backup panel failed."
-msgstr "备份面版失败。"
-
-#: htdocs/luci-static/resources/homeproxy.js
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Restore panel failed."
-msgstr "恢复面版失败。"
-
-#: htdocs/luci-static/resources/homeproxy.js
-msgid "Panel ZIP file is empty."
-msgstr "面版 ZIP 文件为空。"
-
-#: htdocs/luci-static/resources/homeproxy.js
-msgid "The unzip command is unavailable."
-msgstr "unzip 命令不可用。"
-
-#: htdocs/luci-static/resources/homeproxy.js
-msgid "Invalid panel ZIP file."
-msgstr "面版 ZIP 文件无效。"
-
-#: htdocs/luci-static/resources/homeproxy.js
-msgid "Install panel failed."
-msgstr "安装面版失败。"
-
#: htdocs/luci-static/resources/view/homeproxy/status.js:140
msgid "Fatal"
msgstr "致命"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1814
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1460
msgid "Filter keywords"
msgstr "过滤关键词"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1806
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1452
msgid "Filter nodes"
msgstr "过滤节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:653
+#: htdocs/luci-static/resources/view/homeproxy/client.js:396
+msgid "Find neighbor hosts"
+msgstr "发现邻居主机"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:678
msgid "Firefox / uquic firefox"
msgstr "Firefox / uquic firefox"
@@ -977,33 +1023,33 @@ msgstr "Firefox / uquic firefox"
msgid "Firewall"
msgstr "防火墙"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1166
-#: htdocs/luci-static/resources/view/homeproxy/server.js:385
+#: htdocs/luci-static/resources/view/homeproxy/node.js:775
+#: htdocs/luci-static/resources/view/homeproxy/server.js:401
msgid "Flow"
msgstr "流控"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:451
+#: htdocs/luci-static/resources/view/homeproxy/client.js:476
msgid "For resolving domain name in the server address."
msgstr "用于解析服务器地址中的域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1363
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1502
msgid "Format"
msgstr "格式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:753
+#: htdocs/luci-static/resources/view/homeproxy/client.js:778
msgid "Fragment TLS handshake into multiple TLS records."
msgstr "将 TLS 握手分片为多个 TLS 记录"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:759
+#: htdocs/luci-static/resources/view/homeproxy/client.js:784
msgid ""
"Fragment TLS handshakes. Due to poor performance, try %s first."
msgstr "分片 TLS 握手。由于性能较差,请先尝试 %s。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:765
+#: htdocs/luci-static/resources/view/homeproxy/client.js:790
msgid "Fragment fallback delay"
msgstr "分片回退延迟"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1272
+#: htdocs/luci-static/resources/view/homeproxy/node.js:881
msgid "GET"
msgstr "GET"
@@ -1011,25 +1057,30 @@ msgstr "GET"
msgid "GFW list version"
msgstr "GFW 域名列表版本"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:275
+#: htdocs/luci-static/resources/view/homeproxy/client.js:252
msgid "GFWList"
msgstr "GFWList"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1469
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1633
msgid "Gaming mode IPv4 IP-s"
msgstr "游戏模式 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1471
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1635
msgid "Gaming mode IPv6 IP-s"
msgstr "游戏模式 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1474
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1638
msgid "Gaming mode MAC-s"
msgstr "游戏模式 MAC 地址"
+#: htdocs/luci-static/resources/view/homeproxy/node.js:598
+#: htdocs/luci-static/resources/view/homeproxy/server.js:293
+msgid "Gecko (1.14)"
+msgstr "Gecko(1.14)"
+
#: htdocs/luci-static/resources/view/homeproxy/server.js:36
#: htdocs/luci-static/resources/view/homeproxy/server.js:38
-#: htdocs/luci-static/resources/view/homeproxy/server.js:827
+#: htdocs/luci-static/resources/view/homeproxy/server.js:866
msgid "Generate"
msgstr "生成"
@@ -1037,23 +1088,23 @@ msgstr "生成"
msgid "GitHub token"
msgstr "GitHub 令牌"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:279
+#: htdocs/luci-static/resources/view/homeproxy/client.js:256
msgid "Global"
msgstr "全局"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1189
+#: htdocs/luci-static/resources/view/homeproxy/node.js:798
msgid "Global padding"
msgstr "全局填充"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1476
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1640
msgid "Global proxy IPv4 IP-s"
msgstr "全局代理 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1479
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1643
msgid "Global proxy IPv6 IP-s"
msgstr "全局代理 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1482
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1646
msgid "Global proxy MAC-s"
msgstr "全局代理 MAC 地址"
@@ -1065,62 +1116,84 @@ msgstr "全局设置"
msgid "Google"
msgstr "谷歌"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:208
-msgid "Google Public DNS (DoH)"
-msgstr "Google 公共DNS (DoH)"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:184
+msgid "Google Public DNS (8.8.8.8)"
+msgstr "谷歌公共 DNS(8.8.8.8)"
#: root/usr/share/rpcd/acl.d/luci-app-homeproxy.json:3
msgid "Grant access to homeproxy configuration"
msgstr "授予 homeproxy 访问 UCI 配置的权限"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:643
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1131
-#: htdocs/luci-static/resources/view/homeproxy/node.js:860
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1207
+#: htdocs/luci-static/resources/view/homeproxy/client.js:668
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1201
+#: htdocs/luci-static/resources/view/homeproxy/node.js:450
+#: htdocs/luci-static/resources/view/homeproxy/node.js:816
#: htdocs/luci-static/resources/view/homeproxy/server.js:177
-#: htdocs/luci-static/resources/view/homeproxy/server.js:403
+#: htdocs/luci-static/resources/view/homeproxy/server.js:419
msgid "HTTP"
msgstr "HTTP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:975
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1068
+msgid ""
+"HTTP Host header sent when obfuscation mode is http. bing.com is used by "
+"default."
+msgstr "混淆模式为 http 时发送的 HTTP Host 头;默认 bing.com。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1061
+msgid "HTTP obfuscation. v4 only."
+msgstr "HTTP 混淆。仅 v4。"
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:338
+msgid "HTTP obfuscation. v5 only."
+msgstr "HTTP 混淆。仅 v5。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1045
msgid "HTTP/3"
msgstr "HTTP/3"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:332
+#: htdocs/luci-static/resources/view/homeproxy/server.js:323
msgid ""
"HTTP3 server behavior when authentication fails.
A 404 page will be "
"returned if empty."
msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:974
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1044
msgid "HTTPS"
msgstr "HTTPS"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1208
-#: htdocs/luci-static/resources/view/homeproxy/server.js:404
+#: htdocs/luci-static/resources/view/homeproxy/node.js:817
+#: htdocs/luci-static/resources/view/homeproxy/server.js:420
msgid "HTTPUpgrade"
msgstr "HTTPUpgrade"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:744
+#: htdocs/luci-static/resources/view/homeproxy/server.js:783
msgid "Handshake server address"
msgstr "握手服务器地址"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:750
+#: htdocs/luci-static/resources/view/homeproxy/server.js:789
msgid "Handshake server port"
msgstr "握手服务器端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:997
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1151
+msgid "Handshake timeout (1.14)"
+msgstr "握手超时(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1067
msgid "Headers"
msgstr "标头"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1157
-#: htdocs/luci-static/resources/view/homeproxy/server.js:376
+#: htdocs/luci-static/resources/view/homeproxy/node.js:766
+#: htdocs/luci-static/resources/view/homeproxy/server.js:392
msgid "Heartbeat interval"
msgstr "心跳间隔"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:63
-#: htdocs/luci-static/resources/view/homeproxy/client.js:65
-#: htdocs/luci-static/resources/view/homeproxy/client.js:112
+#: htdocs/luci-static/resources/view/homeproxy/client.js:311
+msgid "Hijack"
+msgstr "劫持"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:55
+#: htdocs/luci-static/resources/view/homeproxy/client.js:57
+#: htdocs/luci-static/resources/view/homeproxy/client.js:101
#: htdocs/luci-static/resources/view/homeproxy/status.js:282
#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3
msgid "HomeProxy"
@@ -1132,80 +1205,68 @@ msgstr "HomeProxy"
msgid "HomeProxy Server"
msgstr "HomeProxy 服务端"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:965
+#: htdocs/luci-static/resources/view/homeproxy/node.js:556
msgid "Hop interval"
msgstr "跳跃间隔"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:959
+#: htdocs/luci-static/resources/view/homeproxy/node.js:550
msgid "Hopping port"
msgstr "跳跃端口"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1256
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1261
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1295
-#: htdocs/luci-static/resources/view/homeproxy/server.js:437
-#: htdocs/luci-static/resources/view/homeproxy/server.js:442
-#: htdocs/luci-static/resources/view/homeproxy/server.js:473
+#: htdocs/luci-static/resources/view/homeproxy/node.js:865
+#: htdocs/luci-static/resources/view/homeproxy/node.js:870
+#: htdocs/luci-static/resources/view/homeproxy/node.js:904
+#: htdocs/luci-static/resources/view/homeproxy/server.js:453
+#: htdocs/luci-static/resources/view/homeproxy/server.js:458
+#: htdocs/luci-static/resources/view/homeproxy/server.js:489
msgid "Host"
msgstr "主机名"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1099
+#: htdocs/luci-static/resources/view/homeproxy/node.js:708
msgid "Host key"
msgstr "主机密钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1104
+#: htdocs/luci-static/resources/view/homeproxy/node.js:713
msgid "Host key algorithms"
msgstr "主机密钥算法"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:604
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1084
+#: htdocs/luci-static/resources/view/homeproxy/client.js:629
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1154
msgid "Host/IP fields"
msgstr "主机/IP 字段"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:364
+#: htdocs/luci-static/resources/view/homeproxy/server.js:380
msgid ""
"How long the server should wait for the client to send the authentication "
"command (in seconds)."
msgstr "服务器等待客户端发送认证命令的时间(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:862
+#: htdocs/luci-static/resources/view/homeproxy/client.js:805
+msgid "How the forged segment is rejected by the real server."
+msgstr "伪造段被真实服务器拒绝的方式。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:452
#: htdocs/luci-static/resources/view/homeproxy/server.js:179
msgid "Hysteria"
msgstr "Hysteria"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:863
+#: htdocs/luci-static/resources/view/homeproxy/node.js:453
#: htdocs/luci-static/resources/view/homeproxy/server.js:180
msgid "Hysteria2"
msgstr "Hysteria2"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1784
-msgid "ICMP"
-msgstr "ICMP"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:474
-msgid "ICMP Failed"
-msgstr "ICMP 失败"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:476
-msgid "ICMP Probe unavailable"
-msgstr "ICMP 探测不可用"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:478
-msgid "ICMP Timeout"
-msgstr "ICMP 超时"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:853
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1290
+#: htdocs/luci-static/resources/view/homeproxy/client.js:908
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1411
msgid "IP CIDR"
msgstr "IP CIDR"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:631
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1112
+#: htdocs/luci-static/resources/view/homeproxy/client.js:656
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1182
msgid "IP version"
msgstr "IP 版本"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:633
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1113
+#: htdocs/luci-static/resources/view/homeproxy/client.js:658
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1183
msgid "IPv4"
msgstr "IPv4"
@@ -1213,8 +1274,8 @@ msgstr "IPv4"
msgid "IPv4 only"
msgstr "仅 IPv4"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:634
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1114
+#: htdocs/luci-static/resources/view/homeproxy/client.js:659
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1184
msgid "IPv6"
msgstr "IPv6"
@@ -1222,228 +1283,224 @@ msgstr "IPv6"
msgid "IPv6 only"
msgstr "仅 IPv6"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:320
+#: htdocs/luci-static/resources/view/homeproxy/client.js:297
msgid "IPv6 support"
msgstr "IPv6 支持"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:936
+#: htdocs/luci-static/resources/view/homeproxy/node.js:527
msgid "Idle session check interval"
msgstr "空闲会话检查间隔"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:943
+#: htdocs/luci-static/resources/view/homeproxy/node.js:534
msgid "Idle session check timeout"
msgstr "空闲会话检查超时"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:576
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1277
-#: htdocs/luci-static/resources/view/homeproxy/server.js:456
+#: htdocs/luci-static/resources/view/homeproxy/client.js:601
+#: htdocs/luci-static/resources/view/homeproxy/node.js:886
+#: htdocs/luci-static/resources/view/homeproxy/server.js:472
msgid "Idle timeout"
msgstr "空闲超时"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:740
+#: htdocs/luci-static/resources/view/homeproxy/client.js:765
msgid ""
"If enabled, attempts to connect UDP connection to the destination instead of "
"listen."
msgstr "如果启用,尝试主动连接到目标的 UDP 而不是监听。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:734
+#: htdocs/luci-static/resources/view/homeproxy/client.js:759
msgid ""
"If enabled, for UDP proxy requests addressed to a domain, the original "
"packet address will be sent in the response instead of the mapped domain."
msgstr ""
-"如果启用,对于发送到域名的 UDP 代理请求,响应中将发送原始数据包地址而不是映射"
-"的域名。"
+"如启用,对于发往域名的 UDP 代理请求,响应中将发送原始数据包地址,而不是映射后"
+"的域名。如果启用,对于发送到域名的 UDP 代理请求,响应中将发送原始数据包地址而"
+"不是映射的域名。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1249
+#: htdocs/luci-static/resources/view/homeproxy/node.js:858
msgid ""
"If enabled, the client transport sends keepalive pings even with no active "
"connections."
msgstr "如果启用,客户端传输即使没有活动连接也会发送 keepalive ping。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:371
+#: htdocs/luci-static/resources/view/homeproxy/client.js:401
msgid ""
"If set, the requested domain name will be resolved to IP before routing."
msgstr "如果设置,请求的域名将在路由前被解析为 IP 地址。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1234
-#: htdocs/luci-static/resources/view/homeproxy/server.js:425
+#: htdocs/luci-static/resources/view/homeproxy/node.js:843
+#: htdocs/luci-static/resources/view/homeproxy/server.js:441
msgid ""
"If the transport doesn't see any activity after a duration of this time (in "
"seconds), it pings the client to check if the connection is still active."
msgstr ""
-"如果传输在此时间段(单位:秒)后没有看到任何活动,它会向客户端发送 ping 请求"
-"以检查连接是否仍然活动。"
+"如果传输在一段时间(单位:秒)内没有任何活动,则向客户端发送 ping 以检查连接"
+"是否仍处于活动状态。如果传输在此时间段(单位:秒)后没有看到任何活动,它会向"
+"客户端发送 ping 请求以检查连接是否仍然活动。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1503
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1159
msgid ""
"If you have the root certificate, use this option instead of allowing "
"insecure."
msgstr "如果你拥有根证书,使用此选项而不是允许不安全连接。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:326
+#: htdocs/luci-static/resources/view/homeproxy/server.js:317
msgid "Ignore client bandwidth"
msgstr "忽略客户端带宽"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1718
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1371
msgid "Import"
msgstr "导入"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1665
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1744
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1746
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1318
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1397
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1399
msgid "Import share links"
msgstr "导入分享链接"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:359
-#: htdocs/luci-static/resources/view/homeproxy/server.js:860
+#: htdocs/luci-static/resources/view/homeproxy/client.js:385
+#: htdocs/luci-static/resources/view/homeproxy/server.js:899
msgid "In seconds."
msgstr "单位:秒。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1367
+#: htdocs/luci-static/resources/view/homeproxy/node.js:976
msgid "In seconds. Disabled by default."
msgstr "单位:秒。默认禁用。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:951
+#: htdocs/luci-static/resources/view/homeproxy/node.js:542
msgid ""
"In the check, at least the first n idle sessions are kept open."
msgstr "在检查中,至少保持前 n 个空闲会话处于打开状态。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:944
+#: htdocs/luci-static/resources/view/homeproxy/node.js:535
msgid ""
"In the check, close sessions that have been idle for longer than this, in "
"seconds."
msgstr "在检查中,关闭空闲时间超过此值的会话(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:927
-msgid "Independent cache per server"
-msgstr "独立缓存"
-
#: htdocs/luci-static/resources/view/homeproxy/status.js:137
msgid "Info"
msgstr "信息"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1557
+msgid "Initial path"
+msgstr "初始路径"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:798
+msgid ""
+"Inject a forged TLS ClientHello carrying this SNI before the real one to "
+"fool SNI-filtering middleboxes. Requires elevated privileges."
+msgstr "在真实握手前注入携带该 SNI 的伪造 TLS ClientHello,以欺骗按 SNI 过滤的中间盒;需要特权。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1592
msgid "Interface Control"
msgstr "接口控制"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:583
+#: htdocs/luci-static/resources/view/homeproxy/client.js:608
msgid "Interrupt existing connections"
msgstr "中断现有连接"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:584
+#: htdocs/luci-static/resources/view/homeproxy/client.js:609
msgid "Interrupt existing connections when the selected outbound has changed."
msgstr "当选择的出站发生变化时中断现有连接。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:937
+#: htdocs/luci-static/resources/view/homeproxy/node.js:528
msgid "Interval checking for idle sessions, in seconds."
msgstr "空闲会话检查间隔(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1158
-#: htdocs/luci-static/resources/view/homeproxy/server.js:377
+#: htdocs/luci-static/resources/view/homeproxy/node.js:767
+#: htdocs/luci-static/resources/view/homeproxy/server.js:393
msgid ""
"Interval for sending heartbeat packets for keeping the connection alive (in "
"seconds)."
msgstr "发送心跳包以保持连接存活的时间间隔(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:128
-#: htdocs/luci-static/resources/view/homeproxy/node.js:480
-msgid "Invalid node"
-msgstr "无效节点"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:482
-msgid "Invalid response"
-msgstr "无效响应"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:688
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1165
+#: htdocs/luci-static/resources/view/homeproxy/client.js:713
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1231
msgid "Invert"
msgstr "反转"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:689
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1166
+#: htdocs/luci-static/resources/view/homeproxy/client.js:714
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1232
msgid "Invert match result."
msgstr "反转匹配结果"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:775
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1297
+msgid ""
+"Judge this response-dependent rule in parallel; first match wins (1.14)."
+msgstr "并行判定此响应依赖规则,首个命中即生效(1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:814
msgid "Key path"
msgstr "证书路径"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1442
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1606
msgid "LAN IP Policy"
msgstr "LAN IP 策略"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:432
-#: htdocs/luci-static/resources/view/homeproxy/client.js:608
-#: htdocs/luci-static/resources/view/homeproxy/client.js:960
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1088
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1347
-#: htdocs/luci-static/resources/view/homeproxy/node.js:852
+#: htdocs/luci-static/resources/view/homeproxy/client.js:457
+#: htdocs/luci-static/resources/view/homeproxy/client.js:633
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1030
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1158
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1486
+#: htdocs/luci-static/resources/view/homeproxy/node.js:442
#: htdocs/luci-static/resources/view/homeproxy/server.js:160
msgid "Label"
msgstr "标签"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:817
-msgid "Latency"
-msgstr "延迟"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1782
-msgid "Latency test mode"
-msgstr "延迟测试模式"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1173
-#: htdocs/luci-static/resources/view/homeproxy/server.js:392
+#: htdocs/luci-static/resources/view/homeproxy/node.js:782
+#: htdocs/luci-static/resources/view/homeproxy/server.js:408
msgid ""
"Legacy protocol support (VMess MD5 Authentication) is provided for "
"compatibility purposes only, use of alterId > 1 is not recommended."
msgstr ""
-"提供旧协议支持(VMess MD5 身份验证)仅出于兼容性目的,不建议使用 alterId > "
-"1。"
+"仅为兼容目的提供旧协议(VMess MD5 认证)支持,不建议使用大于 1 的 alterId。提"
+"供旧协议支持(VMess MD5 身份验证)仅出于兼容性目的,不建议使用 alterId > 1。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:348
+#: htdocs/luci-static/resources/view/homeproxy/client.js:374
msgid "Less compatibility and sometimes better performance."
msgstr "有时性能更好。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:629
+#: htdocs/luci-static/resources/view/homeproxy/server.js:668
msgid "Let's Encrypt"
msgstr "Let's Encrypt"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1327
+#: htdocs/luci-static/resources/view/homeproxy/node.js:936
msgid ""
"List of IP (v4 or v6) addresses prefixes to be assigned to the interface."
msgstr "分配给接口的 IP(v4 或 v6)地址前缀列表。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:157
-#: htdocs/luci-static/resources/view/homeproxy/client.js:186
-#: htdocs/luci-static/resources/view/homeproxy/client.js:520
+#: htdocs/luci-static/resources/view/homeproxy/client.js:132
+#: htdocs/luci-static/resources/view/homeproxy/client.js:161
+#: htdocs/luci-static/resources/view/homeproxy/client.js:545
msgid "List of nodes to test."
msgstr "要测试的节点列表。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1466
-#: htdocs/luci-static/resources/view/homeproxy/server.js:566
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1115
+#: htdocs/luci-static/resources/view/homeproxy/server.js:582
msgid "List of supported application level protocols, in order of preference."
msgstr "支持的应用层协议协商列表,按顺序排列。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1251
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1372
msgid "List of text DNS record to respond as answers."
msgstr "要响应的 DNS 记录列表。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1261
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1382
msgid "List of text DNS record to respond as extra records."
msgstr "要响应的附加 DNS 记录列表。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1256
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1377
msgid "List of text DNS record to respond as name servers."
msgstr "要响应的域名服务器(NS) DNS 记录列表。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:193
+#: htdocs/luci-static/resources/view/homeproxy/server.js:194
msgid "Listen address"
msgstr "监听地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1430
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1594
msgid "Listen interfaces"
msgstr "监听接口"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:198
+#: htdocs/luci-static/resources/view/homeproxy/server.js:199
msgid "Listen port"
msgstr "监听端口"
@@ -1451,14 +1508,20 @@ msgstr "监听端口"
msgid "Loading"
msgstr "加载中"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1358
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1497
msgid "Local"
msgstr "本地"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1326
+#: htdocs/luci-static/resources/view/homeproxy/node.js:935
msgid "Local address"
msgstr "本地地址"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1558
+msgid ""
+"Local file with initial rule-set content; avoids blocking startup on first "
+"download (1.14)."
+msgstr "远程规则集的本地初始内容文件,避免首次下载阻塞启动(1.14)。"
+
#: htdocs/luci-static/resources/view/homeproxy/status.js:191
msgid "Log file does not exist."
msgstr "日志文件不存在。"
@@ -1467,257 +1530,325 @@ msgstr "日志文件不存在。"
msgid "Log is empty."
msgstr "日志为空。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1360
+#: htdocs/luci-static/resources/view/homeproxy/node.js:969
msgid "MTU"
msgstr "MTU"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:175
+#: htdocs/luci-static/resources/view/homeproxy/client.js:150
msgid "Main UDP node"
msgstr "主 UDP 节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:147
+#: htdocs/luci-static/resources/view/homeproxy/client.js:122
msgid "Main node"
msgstr "主节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:685
+#: htdocs/luci-static/resources/view/homeproxy/client.js:710
msgid "Make IP CIDR in rule set used to match the source IP."
msgstr "使规则集中的 IP CIDR 用于匹配源 IP。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1158
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1228
msgid "Make IP CIDR in rule sets match the source IP."
msgstr "使规则集中的 IP CIDR 匹配源 IP。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1162
-msgid "Make IP CIDR in rule-sets accept empty query response."
-msgstr "使规则集中的 IP CIDR 接受空查询响应。"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:928
-msgid ""
-"Make each DNS server's cache independent for special purposes. If enabled, "
-"will slightly degrade performance."
-msgstr "独立缓存每个 DNS 服务器的结果以供特殊用途。启用后会略微降低性能。"
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:331
+#: htdocs/luci-static/resources/view/homeproxy/server.js:322
msgid "Masquerade"
msgstr "伪装"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1291
-msgid ""
-"Match IP CIDR with query response. Current rule will be skipped if not match."
-msgstr "使用查询响应匹配 IP CIDR。如果不匹配,则跳过当前规则。"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1434
+msgid "Match DNSSEC OK"
+msgstr "匹配 DNSSEC OK"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:854
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1412
+msgid ""
+"Match IP CIDR with the evaluated response (needs match_response; old rules "
+"are auto-wrapped in 1.14)."
+msgstr ""
+"以已评估的响应匹配 IP CIDR(需要 match_response;旧规则在 1.14 自动包装)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:909
msgid "Match IP CIDR."
msgstr "匹配 IP CIDR。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:834
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1271
+#: htdocs/luci-static/resources/view/homeproxy/client.js:917
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1421
+msgid "Match LAN device by MAC address."
+msgstr "按 MAC 地址匹配局域网设备。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:922
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1426
+msgid ""
+"Match LAN device hostname via neighbor resolution; enable find_neighbor."
+msgstr "通过邻居解析按主机名匹配局域网设备;需启用 find_neighbor。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:889
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1392
msgid "Match domain suffix."
msgstr "匹配域名后缀。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:838
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1275
+#: htdocs/luci-static/resources/view/homeproxy/client.js:893
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1396
msgid "Match domain using keyword."
msgstr "使用关键词匹配域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:842
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1279
+#: htdocs/luci-static/resources/view/homeproxy/client.js:897
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1400
msgid "Match domain using regular expression."
msgstr "使用正则表达式匹配域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:829
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1266
+#: htdocs/luci-static/resources/view/homeproxy/client.js:884
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1387
msgid "Match full domain."
msgstr "匹配完整域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:877
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1315
+#: htdocs/luci-static/resources/view/homeproxy/client.js:941
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1454
msgid "Match port range. Format as START:/:END/START:END."
msgstr "匹配端口范围。格式为 START:/:END/START:END。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:872
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1310
+#: htdocs/luci-static/resources/view/homeproxy/client.js:936
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1449
msgid "Match port."
msgstr "匹配端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:858
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1295
+#: htdocs/luci-static/resources/view/homeproxy/client.js:913
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1416
msgid "Match private IP"
msgstr "匹配私有 IP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1296
-msgid "Match private IP with query response."
-msgstr "使用查询响应匹配私有 IP。"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1417
+msgid "Match private IP with the evaluated response (needs match_response)."
+msgstr "以已评估的响应匹配私网 IP(需要 match_response)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:850
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1287
+#: htdocs/luci-static/resources/view/homeproxy/client.js:905
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1408
msgid "Match private source IP"
msgstr "匹配私有源 IP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:882
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1320
+#: htdocs/luci-static/resources/view/homeproxy/client.js:946
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1459
msgid "Match process name."
msgstr "匹配进程名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:890
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1328
+#: htdocs/luci-static/resources/view/homeproxy/client.js:954
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1467
msgid "Match process path using regular expression."
msgstr "使用正则表达式匹配进程路径。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:886
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1324
+#: htdocs/luci-static/resources/view/homeproxy/client.js:950
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1463
msgid "Match process path."
msgstr "匹配进程路径。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1119
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1435
+msgid "Match queries with the DNSSEC OK bit set (1.14)."
+msgstr "匹配设置了 DNSSEC OK 位的查询(1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1189
msgid "Match query type."
msgstr "匹配请求类型。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:670
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1143
-msgid "Match rule set."
-msgstr "匹配规则集。"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1286
+msgid "Match response"
+msgstr "匹配响应"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:846
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1283
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1213
+msgid ""
+"Match rule set. DNS: rules referencing rule-sets that contain query_type are "
+"incompatible with legacy address filters (ip_cidr / ip_is_private) — use "
+"match_response instead (1.14)."
+msgstr ""
+"匹配规则集。DNS:引用含 query_type 规则集的规则与 legacy 地址过滤(ip_cidr / "
+"ip_is_private)不兼容——请改用 match_response(1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:695
+msgid ""
+"Match rule set. Since 1.14: a rule-set holding a single default rule is "
+"merged into this rule; any other rule-set matches as an OR collection."
+msgstr ""
+"匹配规则集。自 1.14:仅含单条 default 规则的规则集字段会合并进本条规则;其余"
+"规则集整体按 OR 集合匹配。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:901
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1404
msgid "Match source IP CIDR."
msgstr "匹配源 IP CIDR。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:867
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1305
+#: htdocs/luci-static/resources/view/homeproxy/client.js:931
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1444
msgid "Match source port range. Format as START:/:END/START:END."
msgstr "匹配源端口范围。格式为 START:/:END/START:END。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:862
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1300
+#: htdocs/luci-static/resources/view/homeproxy/client.js:926
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1439
msgid "Match source port."
msgstr "匹配源端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:666
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1139
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1430
+msgid "Match the EDNS Client Subnet in the query (1.14)."
+msgstr "匹配查询中的 EDNS Client Subnet(1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1327
+msgid "Match the evaluated response code (requires match_response)."
+msgstr "匹配已评估响应的响应码(需 match_response)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:691
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1209
msgid "Match user name."
msgstr "匹配用户名。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1009
-#: htdocs/luci-static/resources/view/homeproxy/server.js:261
+#: htdocs/luci-static/resources/view/homeproxy/node.js:622
+#: htdocs/luci-static/resources/view/homeproxy/server.js:263
msgid "Max download speed"
msgstr "最大下载速度"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1010
-#: htdocs/luci-static/resources/view/homeproxy/server.js:262
+#: htdocs/luci-static/resources/view/homeproxy/node.js:623
+#: htdocs/luci-static/resources/view/homeproxy/server.js:264
msgid "Max download speed in Mbps."
msgstr "最大下载速度(Mbps)。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:739
+#: htdocs/luci-static/resources/view/homeproxy/node.js:564
+msgid "Max hop interval (1.14)"
+msgstr "最大跳变间隔(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:615
+#: htdocs/luci-static/resources/view/homeproxy/server.js:310
+msgid "Max obfs packet size (1.14)"
+msgstr "最大混淆包长(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1003
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1744
+msgid "Max time an expired entry may be served. Examples: 3d, 1h."
+msgstr "过期缓存项可被乐观返回的最长时间。示例:3d、1h。"
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:778
msgid "Max time difference"
msgstr "最大时间差"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1016
-#: htdocs/luci-static/resources/view/homeproxy/server.js:268
+#: htdocs/luci-static/resources/view/homeproxy/node.js:629
+#: htdocs/luci-static/resources/view/homeproxy/server.js:270
msgid "Max upload speed"
msgstr "最大上传速度"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1017
-#: htdocs/luci-static/resources/view/homeproxy/server.js:269
+#: htdocs/luci-static/resources/view/homeproxy/node.js:630
+#: htdocs/luci-static/resources/view/homeproxy/server.js:271
msgid "Max upload speed in Mbps."
msgstr "最大上传速度(Mbps)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1486
-#: htdocs/luci-static/resources/view/homeproxy/server.js:578
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1135
+#: htdocs/luci-static/resources/view/homeproxy/server.js:594
msgid "Maximum TLS version"
msgstr "最大 TLS 版本"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1391
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1405
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1000
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1014
msgid "Maximum connections"
msgstr "最大连接数"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1403
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1012
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
msgstr ""
-"在打开新连接之前,连接中的最大多路复用流数量。与 %s 和 "
-"%s 冲突。"
+"在打开新连接之前,一个连接内允许的最大多路复用流数量。
与 %s"
+"code> 和 %s 冲突。在打开新连接之前,连接中的最大多路复用流数量。"
+"与 %s 和 %s 冲突。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1402
+#: htdocs/luci-static/resources/view/homeproxy/node.js:616
+#: htdocs/luci-static/resources/view/homeproxy/server.js:311
+msgid "Maximum on-wire packet size in bytes. Gecko only."
+msgstr "线上的最大包长(字节)。仅 Gecko 生效。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:565
+msgid ""
+"Maximum port hopping interval in seconds; the actual interval is randomized "
+"between the two values. Hysteria2 only."
+msgstr "最大端口跳变间隔(秒);实际间隔在两者之间随机。仅 Hysteria2。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1011
msgid "Maximum streams"
msgstr "最大流数量"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:791
-#: htdocs/luci-static/resources/view/homeproxy/client.js:799
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1225
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1234
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1271
-#: htdocs/luci-static/resources/view/homeproxy/server.js:452
+#: htdocs/luci-static/resources/view/homeproxy/client.js:835
+#: htdocs/luci-static/resources/view/homeproxy/client.js:843
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1346
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1355
+#: htdocs/luci-static/resources/view/homeproxy/node.js:880
+#: htdocs/luci-static/resources/view/homeproxy/server.js:468
msgid "Method"
msgstr "方式"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1478
-#: htdocs/luci-static/resources/view/homeproxy/server.js:570
+#: htdocs/luci-static/resources/view/homeproxy/node.js:608
+#: htdocs/luci-static/resources/view/homeproxy/server.js:303
+msgid "Min obfs packet size (1.14)"
+msgstr "最小混淆包长(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1127
+#: htdocs/luci-static/resources/view/homeproxy/server.js:586
msgid "Minimum TLS version"
msgstr "最低 TLS 版本"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:950
+#: htdocs/luci-static/resources/view/homeproxy/node.js:541
msgid "Minimum idle sessions"
msgstr "最小空闲会话数"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1397
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1006
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr "在打开新连接之前,连接中的最小多路复用流数量。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1396
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1405
+#: htdocs/luci-static/resources/view/homeproxy/node.js:609
+#: htdocs/luci-static/resources/view/homeproxy/server.js:304
+msgid "Minimum on-wire packet size in bytes. Gecko only."
+msgstr "线上的最小包长(字节)。仅 Gecko 生效。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1005
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1014
msgid "Minimum streams"
msgstr "最小流数量"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1773
-msgid "Minutes(0-59) Hours(0-23) Dates(1-31) Months(1-12) Weeks(0-6)"
-msgstr "分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-6)"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:333
+#: htdocs/luci-static/resources/view/homeproxy/client.js:359
#: htdocs/luci-static/resources/view/homeproxy/server.js:183
msgid "Mixed"
msgstr "混合"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:344
+#: htdocs/luci-static/resources/view/homeproxy/client.js:370
msgid "Mixed system TCP stack and gVisor UDP stack."
msgstr "混合系统 TCP 栈和 gVisor UDP 栈。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:618
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1098
+#: htdocs/luci-static/resources/view/homeproxy/client.js:643
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1168
msgid "Mode"
msgstr "模式"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1594
-#: htdocs/luci-static/resources/view/homeproxy/server.js:850
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1250
+#: htdocs/luci-static/resources/view/homeproxy/server.js:889
msgid "MultiPath TCP"
msgstr "多路径 TCP(MPTCP)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1374
-#: htdocs/luci-static/resources/view/homeproxy/server.js:500
+#: htdocs/luci-static/resources/view/homeproxy/node.js:983
+#: htdocs/luci-static/resources/view/homeproxy/server.js:516
msgid "Multiplex"
msgstr "多路复用"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1382
+#: htdocs/luci-static/resources/view/homeproxy/node.js:991
msgid "Multiplex protocol."
msgstr "多路复用协议。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:65
+#: htdocs/luci-static/resources/view/homeproxy/client.js:57
#: htdocs/luci-static/resources/view/homeproxy/server.js:60
msgid "NOT RUNNING"
msgstr "未运行"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1835
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1481
msgid "NOTE: Save current settings before updating subscriptions."
msgstr "注意:更新订阅前先保存当前配置。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1255
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1376
msgid "NS"
msgstr "NS"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1141
+#: htdocs/luci-static/resources/view/homeproxy/client.js:310
+#: htdocs/luci-static/resources/view/homeproxy/node.js:750
msgid "Native"
msgstr "原生"
@@ -1725,42 +1856,42 @@ msgstr "原生"
msgid "NaïveProxy"
msgstr "NaïveProxy"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:660
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1122
-#: htdocs/luci-static/resources/view/homeproxy/server.js:866
+#: htdocs/luci-static/resources/view/homeproxy/client.js:685
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1192
+#: htdocs/luci-static/resources/view/homeproxy/server.js:905
msgid "Network"
msgstr "网络"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1131
+#: htdocs/luci-static/resources/view/homeproxy/node.js:740
msgid "New Reno"
msgstr "New Reno"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1204
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1221
-#: htdocs/luci-static/resources/view/homeproxy/server.js:400
-#: htdocs/luci-static/resources/view/homeproxy/server.js:417
+#: htdocs/luci-static/resources/view/homeproxy/node.js:813
+#: htdocs/luci-static/resources/view/homeproxy/node.js:830
+#: htdocs/luci-static/resources/view/homeproxy/server.js:416
+#: htdocs/luci-static/resources/view/homeproxy/server.js:433
msgid "No TCP transport, plain HTTP is merged into the HTTP transport."
msgstr "无 TCP 传输层, 纯 HTTP 已合并到 HTTP 传输层。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1219
-#: htdocs/luci-static/resources/view/homeproxy/server.js:415
+#: htdocs/luci-static/resources/view/homeproxy/node.js:828
+#: htdocs/luci-static/resources/view/homeproxy/server.js:431
msgid "No additional encryption support: It's basically duplicate encryption."
msgstr "无额外加密支持:它基本上是重复加密。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1852
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1498
msgid "No subscription available"
msgstr "无可用订阅"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1877
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1523
msgid "No subscription node"
msgstr "无订阅节点"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1704
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1357
msgid "No valid share link found."
msgstr "找不到有效分享链接。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:442
-#: htdocs/luci-static/resources/view/homeproxy/node.js:719
+#: htdocs/luci-static/resources/view/homeproxy/client.js:467
+#: htdocs/luci-static/resources/view/homeproxy/node.js:416
msgid "Node"
msgstr "节点"
@@ -1768,90 +1899,121 @@ msgstr "节点"
msgid "Node Settings"
msgstr "节点设置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1650
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1303
msgid "Nodes"
msgstr "节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1017
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1167
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1205
-#: htdocs/luci-static/resources/view/homeproxy/server.js:386
-#: htdocs/luci-static/resources/view/homeproxy/server.js:401
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1087
+#: htdocs/luci-static/resources/view/homeproxy/node.js:776
+#: htdocs/luci-static/resources/view/homeproxy/node.js:814
+#: htdocs/luci-static/resources/view/homeproxy/server.js:402
+#: htdocs/luci-static/resources/view/homeproxy/server.js:417
msgid "None"
msgstr "无"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:494
-#: htdocs/luci-static/resources/view/homeproxy/node.js:507
-msgid "Not Tested"
-msgstr "未测试"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1003
-#: htdocs/luci-static/resources/view/homeproxy/server.js:294
+#: htdocs/luci-static/resources/view/homeproxy/node.js:602
+#: htdocs/luci-static/resources/view/homeproxy/server.js:297
msgid "Obfuscate password"
msgstr "混淆密码"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:997
-#: htdocs/luci-static/resources/view/homeproxy/server.js:288
+#: htdocs/luci-static/resources/view/homeproxy/node.js:595
+#: htdocs/luci-static/resources/view/homeproxy/server.js:290
msgid "Obfuscate type"
msgstr "混淆类型"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1431
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1067
+msgid "Obfuscation host"
+msgstr "混淆主机"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1060
+#: htdocs/luci-static/resources/view/homeproxy/server.js:337
+msgid "Obfuscation mode"
+msgstr "混淆模式"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1595
msgid "Only process traffic from specific interfaces. Leave empty for all."
msgstr "只处理来自指定接口的流量。留空表示全部。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:277
+#: htdocs/luci-static/resources/view/homeproxy/client.js:254
msgid "Only proxy mainland China"
msgstr "仅代理中国大陆"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:603
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1083
+#: htdocs/luci-static/resources/view/homeproxy/client.js:996
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1739
+msgid "Optimistic DNS cache"
+msgstr "乐观 DNS 缓存"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1002
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1743
+msgid "Optimistic cache timeout"
+msgstr "乐观缓存超时"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1292
+msgid "Optional tag for this evaluate result."
+msgstr "此 evaluate 结果的可选标签。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1051
+msgid "Optional; only required when connecting to a multi-user Snell server."
+msgstr "可选;仅在连接多用户 Snell 服务器时需要。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:628
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1153
msgid "Other fields"
msgstr "其他字段"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:483
-#: htdocs/luci-static/resources/view/homeproxy/client.js:701
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1050
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1398
+#: htdocs/luci-static/resources/view/homeproxy/client.js:508
+#: htdocs/luci-static/resources/view/homeproxy/client.js:726
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1120
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1540
msgid "Outbound"
msgstr "出站"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:443
+#: htdocs/luci-static/resources/view/homeproxy/client.js:468
msgid "Outbound node"
msgstr "出站节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:719
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1541
+msgid ""
+"Outbound used to download this rule-set (via sing-box 1.14 http_clients)."
+msgstr "下载此规则集所使用的出站(经 sing-box 1.14 http_clients 生效)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:744
msgid "Override address"
msgstr "覆盖地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:375
-msgid "Override destination"
-msgstr "覆盖目标地址"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:878
+msgid "Override dns.timeout for this lookup, in seconds (1.14)."
+msgstr "覆盖本次查询解析的 dns.timeout(秒)(1.14)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:726
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1314
+msgid "Override dns.timeout for this query, in seconds."
+msgstr "覆盖本次查询的 dns.timeout,单位秒。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:751
msgid "Override port"
msgstr "覆盖端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:376
-msgid "Override the connection destination address with the sniffed domain."
-msgstr "使用嗅探到的域名覆盖连接目标。"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:720
+#: htdocs/luci-static/resources/view/homeproxy/client.js:745
msgid "Override the connection destination address."
msgstr "覆盖目标连接地址。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:727
+#: htdocs/luci-static/resources/view/homeproxy/client.js:752
msgid "Override the connection destination port."
msgstr "覆盖目标连接端口。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1273
+#: htdocs/luci-static/resources/view/homeproxy/server.js:660
+msgid "PEM-encoded private key of an existing ACME account (1.14)."
+msgstr "已有 ACME 账户的 PEM 编码私钥(1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:882
msgid "PUT"
msgstr "PUT"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1316
+#: htdocs/luci-static/resources/view/homeproxy/node.js:925
msgid "Packet encoding"
msgstr "数据包编码"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:244
+#: htdocs/luci-static/resources/view/homeproxy/server.js:246
msgid "Padding scheme"
msgstr "填充方案"
@@ -1859,77 +2021,85 @@ msgstr "填充方案"
msgid "Panic"
msgstr "崩溃"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:894
-#: htdocs/luci-static/resources/view/homeproxy/server.js:210
+#: htdocs/luci-static/resources/view/homeproxy/node.js:484
+#: htdocs/luci-static/resources/view/homeproxy/server.js:211
msgid "Password"
msgstr "密码"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:990
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1369
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1266
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1299
-#: htdocs/luci-static/resources/view/homeproxy/server.js:447
-#: htdocs/luci-static/resources/view/homeproxy/server.js:477
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1060
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1508
+#: htdocs/luci-static/resources/view/homeproxy/node.js:875
+#: htdocs/luci-static/resources/view/homeproxy/node.js:908
+#: htdocs/luci-static/resources/view/homeproxy/server.js:463
+#: htdocs/luci-static/resources/view/homeproxy/server.js:493
msgid "Path"
msgstr "路径"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1341
+#: htdocs/luci-static/resources/view/homeproxy/node.js:950
msgid "Peer pubkic key"
msgstr "对端公钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:352
+#: htdocs/luci-static/resources/view/homeproxy/client.js:378
msgid ""
"Performance may degrade slightly, so it is not recommended to enable on when "
"it is not needed."
msgstr "性能可能会略有下降,建议仅在需要时开启。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1366
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1752
+msgid "Persist DNS cache across restarts (replaces Store RDRC)."
+msgstr "重启后持久化 DNS 缓存(替代 Store RDRC)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1011
+msgid "Persist DNS cache across restarts (sing-box 1.14, replaces Store RDRC)."
+msgstr "重启后持久化 DNS 缓存(sing-box 1.14,替代 Store RDRC)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:975
msgid "Persistent keepalive interval"
msgstr "持久 keepalive 间隔"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1285
-#: htdocs/luci-static/resources/view/homeproxy/server.js:464
+#: htdocs/luci-static/resources/view/homeproxy/node.js:894
+#: htdocs/luci-static/resources/view/homeproxy/server.js:480
msgid "Ping timeout"
msgstr "Ping 超时"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1060
+#: htdocs/luci-static/resources/view/homeproxy/node.js:669
msgid "Plugin"
msgstr "插件"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1067
+#: htdocs/luci-static/resources/view/homeproxy/node.js:676
msgid "Plugin opts"
msgstr "插件参数"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:871
-#: htdocs/luci-static/resources/view/homeproxy/client.js:985
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1309
-#: htdocs/luci-static/resources/view/homeproxy/node.js:883
+#: htdocs/luci-static/resources/view/homeproxy/client.js:935
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1055
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1448
+#: htdocs/luci-static/resources/view/homeproxy/node.js:473
msgid "Port"
msgstr "端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:299
+#: htdocs/luci-static/resources/view/homeproxy/client.js:276
msgid "Port %s alrealy exists!"
msgstr "端口 %s 已存在!"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:605
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1085
+#: htdocs/luci-static/resources/view/homeproxy/client.js:630
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1155
msgid "Port fields"
msgstr "端口字段"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:966
+#: htdocs/luci-static/resources/view/homeproxy/node.js:557
msgid "Port hopping interval in seconds."
msgstr "端口跳跃间隔(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:876
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1314
+#: htdocs/luci-static/resources/view/homeproxy/client.js:940
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1453
msgid "Port range"
msgstr "端口范围"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1348
+#: htdocs/luci-static/resources/view/homeproxy/node.js:957
msgid "Pre-shared key"
msgstr "预共享密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1173
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1239
msgid "Predefined"
msgstr "预定义"
@@ -1941,197 +2111,180 @@ msgstr "优先 IPv4"
msgid "Prefer IPv6"
msgstr "优先 IPv6"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1108
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1333
+#: htdocs/luci-static/resources/view/homeproxy/node.js:717
+#: htdocs/luci-static/resources/view/homeproxy/node.js:942
msgid "Private key"
msgstr "私钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1113
+#: htdocs/luci-static/resources/view/homeproxy/node.js:722
msgid "Private key passphrase"
msgstr "私钥指纹"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:484
-msgid "Probe failed"
-msgstr "探测失败"
+#: htdocs/luci-static/resources/view/homeproxy/server.js:644
+msgid "Private key type for new certificates (1.14). Empty uses the default."
+msgstr "新证书的私钥类型(1.14)。留空使用默认值。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:606
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1086
+#: htdocs/luci-static/resources/view/homeproxy/client.js:631
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1156
msgid "Process fields"
msgstr "进程字段"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:881
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1319
+#: htdocs/luci-static/resources/view/homeproxy/client.js:945
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1458
msgid "Process name"
msgstr "进程名"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:885
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1323
+#: htdocs/luci-static/resources/view/homeproxy/client.js:949
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1462
msgid "Process path"
msgstr "进程路径"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:889
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1327
+#: htdocs/luci-static/resources/view/homeproxy/client.js:953
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1466
msgid "Process path (regex)"
msgstr "进程路径(正则表达式)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:638
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1127
-#: htdocs/luci-static/resources/view/homeproxy/node.js:973
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1381
-#: htdocs/luci-static/resources/view/homeproxy/server.js:250
+#: htdocs/luci-static/resources/view/homeproxy/client.js:663
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1197
+#: htdocs/luci-static/resources/view/homeproxy/node.js:571
+#: htdocs/luci-static/resources/view/homeproxy/node.js:990
+#: htdocs/luci-static/resources/view/homeproxy/server.js:252
msgid "Protocol"
msgstr "协议"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1197
+#: htdocs/luci-static/resources/view/homeproxy/node.js:806
msgid "Protocol parameter. Enable length block encryption."
msgstr "协议参数。启用长度块加密。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1190
+#: htdocs/luci-static/resources/view/homeproxy/node.js:799
msgid ""
"Protocol parameter. Will waste traffic randomly if enabled (enabled by "
"default in v2ray and cannot be disabled)."
msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1505
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1669
msgid "Proxy Domain List"
msgstr "代理域名列表"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1460
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1489
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1624
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1653
msgid "Proxy IPv4 IP-s"
msgstr "代理 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1463
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1492
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1627
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1656
msgid "Proxy IPv6 IP-s"
msgstr "代理 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1466
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1630
msgid "Proxy MAC-s"
msgstr "代理 MAC 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1447
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1611
msgid "Proxy all except listed"
msgstr "仅允许列表外"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1608
msgid "Proxy filter mode"
msgstr "代理过滤模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1446
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1610
msgid "Proxy listed only"
msgstr "仅允许列表内"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:307
+#: htdocs/luci-static/resources/view/homeproxy/client.js:284
msgid "Proxy mode"
msgstr "代理模式"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:927
+#: htdocs/luci-static/resources/view/homeproxy/node.js:518
msgid "Proxy protocol"
msgstr "代理协议"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:644
-#: htdocs/luci-static/resources/view/homeproxy/client.js:976
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1132
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1142
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1209
-#: htdocs/luci-static/resources/view/homeproxy/server.js:405
+#: htdocs/luci-static/resources/view/homeproxy/client.js:669
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1046
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1202
+#: htdocs/luci-static/resources/view/homeproxy/node.js:751
+#: htdocs/luci-static/resources/view/homeproxy/node.js:818
+#: htdocs/luci-static/resources/view/homeproxy/server.js:421
msgid "QUIC"
msgstr "QUIC"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1129
-#: htdocs/luci-static/resources/view/homeproxy/server.js:355
+#: htdocs/luci-static/resources/view/homeproxy/node.js:738
+#: htdocs/luci-static/resources/view/homeproxy/server.js:371
msgid "QUIC congestion control algorithm."
msgstr "QUIC 拥塞控制算法。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1029
-#: htdocs/luci-static/resources/view/homeproxy/server.js:307
-msgid "QUIC connection receive window"
-msgstr "QUIC 连接窗口"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1429
+msgid "Query EDNS client subnet"
+msgstr "查询 EDNS Client Subnet"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:314
-msgid "QUIC maximum concurrent bidirectional streams"
-msgstr "QUIC 最大双向并发流"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:877
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1313
+msgid "Query timeout"
+msgstr "查询超时"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1023
-#: htdocs/luci-static/resources/view/homeproxy/server.js:300
-msgid "QUIC stream receive window"
-msgstr "QUIC 流接收窗口"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:209
-msgid "Quad9 Public DNS (DoH)"
-msgstr "Quad9 公共DNS (DoH)"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1118
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1188
msgid "Query type"
msgstr "请求类型"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1238
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1359
msgid "RCode"
msgstr "RCode"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:645
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1133
+#: htdocs/luci-static/resources/view/homeproxy/client.js:670
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1203
msgid "RDP"
msgstr "RDP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:940
-msgid "RDRC timeout"
-msgstr "RDRC 超时"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1572
-#: htdocs/luci-static/resources/view/homeproxy/server.js:709
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1228
+#: htdocs/luci-static/resources/view/homeproxy/server.js:748
msgid "REALITY"
msgstr "REALITY"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:714
+#: htdocs/luci-static/resources/view/homeproxy/server.js:753
msgid "REALITY private key"
msgstr "REALITY 私钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1577
-#: htdocs/luci-static/resources/view/homeproxy/server.js:730
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1233
+#: htdocs/luci-static/resources/view/homeproxy/server.js:769
msgid "REALITY public key"
msgstr "REALITY 公钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1583
-#: htdocs/luci-static/resources/view/homeproxy/server.js:734
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1239
+#: htdocs/luci-static/resources/view/homeproxy/server.js:773
msgid "REALITY short ID"
msgstr "REALITY 标识符"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1785
-msgid "RP"
-msgstr "RP"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:486
-msgid "RPC failed"
-msgstr "RPC 失败"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:63
+#: htdocs/luci-static/resources/view/homeproxy/client.js:55
#: htdocs/luci-static/resources/view/homeproxy/server.js:58
msgid "RUNNING"
msgstr "运行中"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1095
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1296
+msgid "Race"
+msgstr "并行竞争"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:704
msgid "Random version will be used if empty."
msgstr "如留空,则使用随机版本。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:511
+#: htdocs/luci-static/resources/view/homeproxy/client.js:536
msgid "Recursive outbound detected!"
msgstr "检测到递归出站!"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1036
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1106
msgid "Recursive resolver detected!"
msgstr "检测到递归解析器!"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:308
+#: htdocs/luci-static/resources/view/homeproxy/client.js:285
msgid "Redirect TCP"
msgstr "Redirect TCP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:310
+#: htdocs/luci-static/resources/view/homeproxy/client.js:287
msgid "Redirect TCP + TProxy UDP"
msgstr "Redirect TCP + TProxy UDP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:312
+#: htdocs/luci-static/resources/view/homeproxy/client.js:289
msgid "Redirect TCP + Tun UDP"
msgstr "Redirect TCP + Tun UDP"
@@ -2139,44 +2292,52 @@ msgstr "Redirect TCP + Tun UDP"
msgid "Refresh every %s seconds."
msgstr "每 %s 秒刷新。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:659
+#: htdocs/luci-static/resources/view/homeproxy/server.js:698
msgid "Region ID"
msgstr "区域 ID"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:695
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1172
+#: htdocs/luci-static/resources/view/homeproxy/client.js:720
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1238
msgid "Reject"
msgstr "拒绝"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1359
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1498
msgid "Remote"
msgstr "远程"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1874
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1520
msgid "Remove %s nodes"
msgstr "移除 %s 个节点"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1864
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1320
+msgid "Remove EDNS client subnet"
+msgstr "移除 EDNS Client Subnet"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1510
msgid "Remove all nodes from subscriptions"
msgstr "移除所有订阅节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1226
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1321
+msgid "Remove the edns0-subnet record from the query (1.14)."
+msgstr "从查询中移除 edns0-subnet 记录(1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1347
msgid "Reply with REFUSED"
msgstr "回复 REFUSED"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:792
+#: htdocs/luci-static/resources/view/homeproxy/client.js:836
msgid "Reply with TCP RST / ICMP port unreachable"
msgstr "回复 TCP RST / ICMP 端口不可达"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1355
+#: htdocs/luci-static/resources/view/homeproxy/node.js:964
msgid "Reserved field bytes"
msgstr "保留字段字节"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:696
+#: htdocs/luci-static/resources/view/homeproxy/client.js:721
msgid "Resolve"
msgstr "解析"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:803
+#: htdocs/luci-static/resources/view/homeproxy/client.js:847
msgid "Resolve strategy"
msgstr "解析策略"
@@ -2184,145 +2345,128 @@ msgstr "解析策略"
msgid "Resources management"
msgstr "资源管理"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:880
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1338
+msgid "Response NS"
+msgstr "响应 NS 记录"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1326
+msgid "Response RCode"
+msgstr "响应 RCode"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1333
+msgid "Response answer"
+msgstr "响应 Answer 记录"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1342
+msgid "Response extra"
+msgstr "响应 Extra 记录"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:997
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1740
+msgid ""
+"Return expired cache immediately and refresh in background (sing-box 1.14)."
+msgstr "立即返回已过期缓存并在后台刷新(sing-box 1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:919
msgid "Reuse address"
msgstr "复用地址"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:881
+#: htdocs/luci-static/resources/view/homeproxy/server.js:920
msgid "Reuse listener address."
msgstr "复用监听地址。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:815
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1210
+#: htdocs/luci-static/resources/view/homeproxy/client.js:859
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1271
msgid "Rewrite TTL"
msgstr "重写 TTL"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:816
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1211
+#: htdocs/luci-static/resources/view/homeproxy/client.js:860
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1272
msgid "Rewrite TTL in DNS responses."
msgstr "在 DNS 响应中重写 TTL。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:693
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1170
+#: htdocs/luci-static/resources/view/homeproxy/client.js:718
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1236
msgid "Route"
msgstr "路由"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:694
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1171
+#: htdocs/luci-static/resources/view/homeproxy/client.js:719
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1237
msgid "Route options"
msgstr "路由选项"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:419
+#: htdocs/luci-static/resources/view/homeproxy/client.js:444
msgid "Routing Nodes"
-msgstr "策略组"
+msgstr "路由节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:590
+#: htdocs/luci-static/resources/view/homeproxy/client.js:615
msgid "Routing Rules"
msgstr "路由规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:145
+#: htdocs/luci-static/resources/view/homeproxy/client.js:120
msgid "Routing Settings"
msgstr "路由设置"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:274
+#: htdocs/luci-static/resources/view/homeproxy/client.js:251
msgid "Routing mode"
msgstr "路由模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:453
msgid "Routing node"
-msgstr "策略组"
+msgstr "路由节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:287
+#: htdocs/luci-static/resources/view/homeproxy/client.js:264
msgid "Routing ports"
msgstr "路由端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:599
+#: htdocs/luci-static/resources/view/homeproxy/client.js:624
msgid "Routing rule"
msgstr "路由规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1334
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1473
msgid "Rule Set"
msgstr "规则集"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:669
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1142
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1343
+#: htdocs/luci-static/resources/view/homeproxy/client.js:694
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1212
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1482
msgid "Rule set"
msgstr "规则集"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:684
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1157
+#: htdocs/luci-static/resources/view/homeproxy/client.js:709
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1227
msgid "Rule set IP CIDR as source IP"
msgstr "规则集 IP CIDR 作为源 IP"
-msgid "Tag"
-msgstr "标签"
-
-msgid "Used by sing-box rule sets. Please fill it in yourself."
-msgstr "用于 sing-box 规则集,请自行填写。"
-
-msgid "valid tag"
-msgstr "有效标签"
-
-msgid "valid duration"
-msgstr "有效时间格式"
-
-msgid "valid cron expression"
-msgstr "有效 cron 表达式"
-
-msgid "Manual select"
-msgstr "手动选择"
-
-msgid "Custom nodes"
-msgstr "自选节点"
-
-msgid "Custom"
-msgstr "自定义"
-
-msgid "Custom URL"
-msgstr "自定义URL"
-
-msgid "Policy nodes"
-msgstr "策略节点"
-
-msgid "List of policy groups."
-msgstr "策略组列表。"
-
-msgid "Subscription nodes"
-msgstr "订阅节点"
-
-msgid "List of nodes from subscriptions."
-msgstr "订阅节点列表。"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1376
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1515
msgid "Rule set URL"
msgstr "规则集 URL"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:646
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1134
-#: htdocs/luci-static/resources/view/homeproxy/node.js:868
+#: htdocs/luci-static/resources/view/homeproxy/client.js:671
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1204
+#: htdocs/luci-static/resources/view/homeproxy/node.js:458
msgid "SSH"
msgstr "SSH"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:647
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1135
+#: htdocs/luci-static/resources/view/homeproxy/client.js:672
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1205
msgid "STUN"
msgstr "STUN"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1607
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1263
msgid "SUoT version"
msgstr "SUoT 版本"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:655
+#: htdocs/luci-static/resources/view/homeproxy/client.js:680
msgid "Safari / Apple Network API"
msgstr "Safari / Apple Network API"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:999
-#: htdocs/luci-static/resources/view/homeproxy/server.js:290
+#: htdocs/luci-static/resources/view/homeproxy/node.js:597
+#: htdocs/luci-static/resources/view/homeproxy/server.js:292
msgid "Salamander"
msgstr "Salamander"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:177
+#: htdocs/luci-static/resources/view/homeproxy/client.js:152
msgid "Same as main node"
msgstr "保持与主节点一致"
@@ -2331,15 +2475,19 @@ msgstr "保持与主节点一致"
msgid "Save"
msgstr "保存"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1837
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1483
msgid "Save current settings"
msgstr "保存当前设置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1834
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1480
msgid "Save subscriptions settings"
msgstr "保存订阅设置"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1178
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1302
+msgid "Send the query before pending race rules are judged (1.14)."
+msgstr "在待定 race 规则判定前即发送查询(1.14)。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1245
#: htdocs/luci-static/resources/view/homeproxy/server.js:156
msgid "Server"
msgstr "服务器"
@@ -2348,7 +2496,7 @@ msgstr "服务器"
msgid "Server Settings"
msgstr "服务器设置"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:607
+#: htdocs/luci-static/resources/view/homeproxy/server.js:623
msgid ""
"Server name to use when choosing a certificate if the ClientHello's "
"ServerName field is empty."
@@ -2362,83 +2510,111 @@ msgstr "服务器设置"
msgid "Service Status"
msgstr "服务状态"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1198
-msgid "Set domain strategy for this query."
-msgstr "为此查询设置域名策略。"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:866
+#: htdocs/luci-static/resources/view/homeproxy/node.js:456
msgid "ShadowTLS"
msgstr "ShadowTLS"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1074
+#: htdocs/luci-static/resources/view/homeproxy/node.js:683
msgid "ShadowTLS version"
msgstr "ShadowTLS 版本"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:865
+#: htdocs/luci-static/resources/view/homeproxy/node.js:455
#: htdocs/luci-static/resources/view/homeproxy/server.js:184
msgid "Shadowsocks"
msgstr "Shadowsocks"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:651
+#: htdocs/luci-static/resources/view/homeproxy/client.js:307
+msgid ""
+"Since sing-box 1.14 the default (Unset) behaves as hijack: sing-box sets the "
+"platform interface DNS and hijacks port 53. On OpenWrt this overlaps with "
+"the own dnsmasq/nftables DNS hijack of this plugin, so keep Disabled on a "
+"gateway unless you need sing-box to own TUN DNS."
+msgstr ""
+"自 sing-box 1.14 起,默认(Unset)即 hijack:sing-box 会设置平台接口 DNS 并劫"
+"持 53 端口。OpenWrt 下这会与本插件自身的 dnsmasq/nftables DNS 劫持叠加,网关"
+"建议保持 Disabled,除非需要 sing-box 全权接管 TUN 内 DNS。"
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:185
+msgid "Snell (1.14)"
+msgstr "Snell(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1042
+#: htdocs/luci-static/resources/view/homeproxy/server.js:329
+msgid "Snell version"
+msgstr "Snell 版本"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:676
msgid "Sniffed client type (QUIC client type or SSH client name)."
msgstr "嗅探到的客户端类型(QUIC 客户端类型或 SSH 客户端名称)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:639
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1128
+#: htdocs/luci-static/resources/view/homeproxy/client.js:664
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1198
msgid ""
-"Sniffed protocol, see Sniff for details."
+"Sniffed protocol, see Sniff for details."
msgstr ""
-"嗅探协议,具体参见 Sniff。"
+"嗅探到的协议,详情请参阅 嗅探。嗅探协议,具体参见 Sniff。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:867
-#: htdocs/luci-static/resources/view/homeproxy/server.js:185
+#: htdocs/luci-static/resources/view/homeproxy/node.js:457
+#: htdocs/luci-static/resources/view/homeproxy/server.js:186
msgid "Socks"
msgstr "Socks"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1084
+#: htdocs/luci-static/resources/view/homeproxy/node.js:693
msgid "Socks version"
msgstr "Socks 版本"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1085
+#: htdocs/luci-static/resources/view/homeproxy/node.js:694
msgid "Socks4"
msgstr "Socks4"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1086
+#: htdocs/luci-static/resources/view/homeproxy/node.js:695
msgid "Socks4A"
msgstr "Socks4A"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1087
+#: htdocs/luci-static/resources/view/homeproxy/node.js:696
msgid "Socks5"
msgstr "Socks5"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:845
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1282
+#: htdocs/luci-static/resources/view/homeproxy/client.js:900
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1403
msgid "Source IP CIDR"
msgstr "源 IP CIDR"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1365
+#: htdocs/luci-static/resources/view/homeproxy/client.js:916
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1420
+msgid "Source MAC address"
+msgstr "来源 MAC 地址"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1504
msgid "Source file"
msgstr "源文件"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:861
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1299
+#: htdocs/luci-static/resources/view/homeproxy/client.js:921
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1425
+msgid "Source hostname"
+msgstr "来源主机名"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:925
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1438
msgid "Source port"
msgstr "源端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:866
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1304
+#: htdocs/luci-static/resources/view/homeproxy/client.js:930
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1443
msgid "Source port range"
msgstr "源端口范围"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:773
+#: htdocs/luci-static/resources/view/homeproxy/client.js:817
msgid ""
"Specifies DNS server tag to use instead of selecting through DNS routing."
msgstr "指定使用的 DNS 服务器,而不是通过 DNS 规则选择。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1226
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1278
+#: htdocs/luci-static/resources/view/homeproxy/node.js:835
+#: htdocs/luci-static/resources/view/homeproxy/node.js:887
msgid ""
"Specifies the period of time (in seconds) after which a health check will be "
"performed using a ping frame if no frames have been received on the "
@@ -2446,58 +2622,71 @@ msgid ""
"frame, so if there is no other traffic on the connection, the health check "
"will be executed every interval."
msgstr ""
-"如果连接上没有收到任何帧,指定一段时间(单位:秒)后将使用 PING 帧执行健康检"
-"查。
需要注意的是,PING 响应被视为已接收的帧,因此如果连接上没有其他流"
-"量,则健康检查将在每个间隔执行一次。"
+"指定时间(单位:秒)内未收到任何帧后,将使用 ping 帧执行健康检查。
请注"
+"意,ping 响应被视为已接收的帧,因此如果连接上没有其他流量,则每隔该时间间隔执"
+"行一次健康检查。如果连接上没有收到任何帧,指定一段时间(单位:秒)后将使用 "
+"PING 帧执行健康检查。
需要注意的是,PING 响应被视为已接收的帧,因此如果连"
+"接上没有其他流量,则健康检查将在每个间隔执行一次。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:422
-#: htdocs/luci-static/resources/view/homeproxy/server.js:457
+#: htdocs/luci-static/resources/view/homeproxy/server.js:438
+#: htdocs/luci-static/resources/view/homeproxy/server.js:473
msgid ""
"Specifies the time (in seconds) until idle clients should be closed with a "
"GOAWAY frame. PING frames are not considered as activity."
msgstr ""
-"指定闲置客户端应在多长时间(单位:秒)内使用 GOAWAY 帧关闭。PING 帧不被视为活"
-"动。"
+"指定空闲客户端应在多久(单位:秒)内以 GOAWAY 帧关闭。PING 帧不计为活动。指定"
+"闲置客户端应在多长时间(单位:秒)内使用 GOAWAY 帧关闭。PING 帧不被视为活动。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1230
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1286
+#: htdocs/luci-static/resources/view/homeproxy/node.js:839
+#: htdocs/luci-static/resources/view/homeproxy/node.js:895
msgid ""
"Specifies the timeout duration (in seconds) after sending a PING frame, "
"within which a response must be received.
If a response to the PING "
"frame is not received within the specified timeout duration, the connection "
"will be closed."
msgstr ""
-"指定发送 PING 帧后,在指定的超时时间(单位:秒)内必须接收到响应。
如果在"
-"指定的超时时间内没有收到 PING 帧的响应,则连接将关闭。"
+"指定发送 PING 帧后必须收到响应的时间(单位:秒)。
如果在指定时间内未收到"
+"对 PING 帧的响应,连接将被关闭。指定发送 PING 帧后,在指定的超时时间(单位:"
+"秒)内必须接收到响应。
如果在指定的超时时间内没有收到 PING 帧的响应,则连"
+"接将关闭。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:288
+#: htdocs/luci-static/resources/view/homeproxy/client.js:265
msgid ""
"Specify target ports to be proxied. Multiple ports must be separated by "
"commas."
msgstr "指定需要被代理的目标端口。多个端口必须用逗号隔开。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:987
-#: htdocs/luci-static/resources/view/homeproxy/server.js:278
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1301
+msgid "Speculative"
+msgstr "抢先查询"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:638
+msgid "Standard (default)"
+msgstr "标准(默认)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1010
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1751
+msgid "Store DNS cache"
+msgstr "存储 DNS 缓存"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:585
+#: htdocs/luci-static/resources/view/homeproxy/server.js:280
msgid "String"
msgstr "字符串"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1755
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1408
msgid "Sub (%s)"
msgstr "订阅(%s)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1789
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1435
msgid "Subscription URL-s"
msgstr "订阅地址"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1766
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1419
msgid "Subscriptions"
msgstr "订阅"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:500
-msgid "Success"
-msgstr "成功"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1706
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1359
msgid "Successfully imported %s nodes of total %s."
msgstr "成功导入 %s 个节点,共 %s 个。"
@@ -2505,469 +2694,504 @@ msgstr "成功导入 %s 个节点,共 %s 个。"
msgid "Successfully updated."
msgstr "更新成功。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1666
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1790
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1319
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1436
msgid ""
"Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) "
"online configuration delivery standard."
msgstr ""
"支持 Hysteria、Shadowsocks、Trojan、v2rayN(VMess)和 XTLS(VLESS)在线配置交"
-"付标准。"
+"付标准。支持 Hysteria、Shadowsocks、Trojan、v2rayN(VMess)和 XTLS(VLESS)在"
+"线配置交付标准。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:205
+#: htdocs/luci-static/resources/view/homeproxy/client.js:180
msgid ""
"Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified."
msgstr "支持 UDP、TCP、DoH、DoQ、DoT。如未指定则使用 TCP 协议。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:336
+#: htdocs/luci-static/resources/view/homeproxy/client.js:362
msgid "System"
msgstr "系统"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:406
-#: htdocs/luci-static/resources/view/homeproxy/client.js:458
-#: htdocs/luci-static/resources/view/homeproxy/client.js:780
-#: htdocs/luci-static/resources/view/homeproxy/client.js:911
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1019
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1185
+#: htdocs/luci-static/resources/view/homeproxy/client.js:431
+#: htdocs/luci-static/resources/view/homeproxy/client.js:483
+#: htdocs/luci-static/resources/view/homeproxy/client.js:824
+#: htdocs/luci-static/resources/view/homeproxy/client.js:975
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1089
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1252
msgid "System DNS"
msgstr "系统 DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:661
-#: htdocs/luci-static/resources/view/homeproxy/client.js:972
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1123
-#: htdocs/luci-static/resources/view/homeproxy/server.js:867
+#: htdocs/luci-static/resources/view/homeproxy/client.js:686
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1042
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1193
+#: htdocs/luci-static/resources/view/homeproxy/server.js:906
msgid "TCP"
msgstr "TCP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1591
-#: htdocs/luci-static/resources/view/homeproxy/server.js:845
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1247
+#: htdocs/luci-static/resources/view/homeproxy/server.js:884
msgid "TCP fast open"
msgstr "TCP 快速打开"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:330
+#: htdocs/luci-static/resources/view/homeproxy/client.js:356
msgid "TCP/IP stack"
msgstr "TCP/IP 协议栈"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:331
+#: htdocs/luci-static/resources/view/homeproxy/client.js:357
msgid "TCP/IP stack."
msgstr "TCP/IP 协议栈。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:648
-#: htdocs/luci-static/resources/view/homeproxy/client.js:973
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1136
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1433
-#: htdocs/luci-static/resources/view/homeproxy/server.js:532
+#: htdocs/luci-static/resources/view/homeproxy/client.js:673
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1043
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1206
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1082
+#: htdocs/luci-static/resources/view/homeproxy/server.js:548
msgid "TLS"
msgstr "TLS"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1465
-#: htdocs/luci-static/resources/view/homeproxy/server.js:565
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1114
+#: htdocs/luci-static/resources/view/homeproxy/server.js:581
msgid "TLS ALPN"
msgstr "TLS ALPN"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1003
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1460
-#: htdocs/luci-static/resources/view/homeproxy/server.js:560
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1073
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1109
+#: htdocs/luci-static/resources/view/homeproxy/server.js:576
msgid "TLS SNI"
msgstr "TLS SNI"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:758
+#: htdocs/luci-static/resources/view/homeproxy/client.js:783
msgid "TLS fragment"
msgstr "TLS 分片"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1217
-#: htdocs/luci-static/resources/view/homeproxy/server.js:413
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1152
+msgid "TLS handshake timeout in seconds. 15s is used by default."
+msgstr "TLS 握手超时(秒)。默认 15 秒。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:826
+#: htdocs/luci-static/resources/view/homeproxy/server.js:429
msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used."
msgstr "不强制执行 TLS。如未配置 TLS,将使用纯 HTTP 1.1。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:752
-#: htdocs/luci-static/resources/view/homeproxy/client.js:760
+#: htdocs/luci-static/resources/view/homeproxy/client.js:777
+#: htdocs/luci-static/resources/view/homeproxy/client.js:785
msgid "TLS record fragment"
msgstr "TLS 记录分片"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1012
-msgid "Used to resolve DNS server addresses in domain form. IP addresses do not require it."
-msgstr "用于解析域名形式的DNS,如:https://dns.alidns.com/dns-query,数字形式则不需要如:https://223.5.5.5/dns-query"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:797
+msgid "TLS spoof SNI (1.14)"
+msgstr "TLS spoof SNI(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1051
+#: htdocs/luci-static/resources/view/homeproxy/client.js:804
+msgid "TLS spoof method (1.14)"
+msgstr "TLS spoof 方式(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:317
+msgid "TUN DNS addresses (1.14)"
+msgstr "TUN DNS 地址(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:306
+msgid "TUN DNS mode (1.14)"
+msgstr "TUN DNS 模式(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1082
+msgid ""
+"Tag of a another server to resolve the domain name in the address. Required "
+"if address contains domain."
+msgstr ""
+"用于解析地址中域名的另一个服务器的标签。如果地址包含域名,则必填。用于解析本 "
+"DNS 服务器的域名的另一个 DNS 服务器的标签。如果服务器地址包括域名则必须。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1121
msgid "Tag of an outbound for connecting to the dns server."
msgstr "用于连接到 DNS 服务器的出站标签。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1399
-msgid "Tag of the outbound to download rule set."
-msgstr "用于下载规则集的出站标签。"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1179
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1246
msgid "Tag of the target dns server."
msgstr "目标 DNS 服务器标签。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:702
+#: htdocs/luci-static/resources/view/homeproxy/client.js:727
msgid "Tag of the target outbound."
msgstr "目标出站标签。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:327
+#: htdocs/luci-static/resources/view/homeproxy/server.js:318
msgid ""
"Tell the client to use the BBR flow control algorithm instead of Hysteria CC."
msgstr "让客户端使用 BBR 流控算法。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:245
-msgid "Tencent Public DNS (DoH)"
-msgstr "腾讯 公共DNS (DoH)"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:187
+#: htdocs/luci-static/resources/view/homeproxy/client.js:222
+msgid "Tencent Public DNS (119.29.29.29)"
+msgstr "腾讯公共 DNS(119.29.29.29)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:541
-#: htdocs/luci-static/resources/view/homeproxy/node.js:826
-msgid "Test"
-msgstr "测试"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1924
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1928
-msgid "Test Current List"
-msgstr "测试当前列表"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:533
+#: htdocs/luci-static/resources/view/homeproxy/client.js:558
msgid "Test URL"
msgstr "测试 URL"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:163
-#: htdocs/luci-static/resources/view/homeproxy/client.js:192
-#: htdocs/luci-static/resources/view/homeproxy/client.js:553
+#: htdocs/luci-static/resources/view/homeproxy/client.js:138
+#: htdocs/luci-static/resources/view/homeproxy/client.js:167
+#: htdocs/luci-static/resources/view/homeproxy/client.js:578
msgid "Test interval"
msgstr "测试间隔"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:561
+#: htdocs/luci-static/resources/view/homeproxy/client.js:586
msgid "Test interval must be less or equal than idle timeout."
msgstr "测试间隔时间必须小于或等于空闲超时时间。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:169
-#: htdocs/luci-static/resources/view/homeproxy/client.js:198
-#: htdocs/luci-static/resources/view/homeproxy/client.js:569
+#: htdocs/luci-static/resources/view/homeproxy/client.js:144
+#: htdocs/luci-static/resources/view/homeproxy/client.js:173
+#: htdocs/luci-static/resources/view/homeproxy/client.js:594
msgid "Test tolerance"
msgstr "测试容差"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:498
-#: htdocs/luci-static/resources/view/homeproxy/node.js:541
-msgid "Testing"
-msgstr "测试中"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1334
+msgid "Text DNS records to match in the evaluated answer."
+msgstr "用于匹配已评估 Answer 的文本 DNS 记录。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1917
-msgid "Testing Current List..."
-msgstr "当前列表测试中..."
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:628
+#: htdocs/luci-static/resources/view/homeproxy/server.js:667
msgid "The ACME CA provider to use."
msgstr "使用的 ACME CA 颁发机构。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:901
+#: htdocs/luci-static/resources/view/homeproxy/client.js:965
msgid "The DNS strategy for resolving the domain name in the address."
msgstr "解析域名的默认策略。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1030
-#: htdocs/luci-static/resources/view/homeproxy/server.js:308
-msgid "The QUIC connection-level flow control window for receiving data."
-msgstr "用于接收数据的 QUIC 连接级流控制窗口。"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1024
-#: htdocs/luci-static/resources/view/homeproxy/server.js:301
-msgid "The QUIC stream-level flow control window for receiving data."
-msgstr "用于接收数据的 QUIC 流级流控制窗口。"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:534
+#: htdocs/luci-static/resources/view/homeproxy/client.js:559
msgid "The URL to test."
msgstr "用于测试的 URL。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:981
-msgid "Full URL, e.g. https://dns.alidns.com/dns-query"
-msgstr "完整路径 如:https://dns.alidns.com/dns-query"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1051
+msgid "The address of the dns server."
+msgstr "DNS 服务器的地址。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:679
+#: htdocs/luci-static/resources/view/homeproxy/server.js:718
msgid ""
"The alternate port to use for the ACME HTTP challenge; if non-empty, this "
"port will be used instead of 80 to spin up a listener for the HTTP challenge."
msgstr ""
-"用于 ACME HTTP 质询的备用端口;如果非空,将使用此端口而不是 80 来启动 HTTP 质"
-"询的侦听器。"
+"用于 ACME HTTP 挑战的备用端口;若不为空,将使用该端口(而非 80)启动 HTTP 挑"
+"战监听。用于 ACME HTTP 质询的备用端口;如果非空,将使用此端口而不是 80 来启"
+"动 HTTP 质询的侦听器。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:685
+#: htdocs/luci-static/resources/view/homeproxy/server.js:724
msgid ""
"The alternate port to use for the ACME TLS-ALPN challenge; the system must "
"forward 443 to this port for challenge to succeed."
msgstr ""
-"用于 ACME TLS-ALPN 质询的备用端口; 系统必须将 443 转发到此端口以使质询成功。"
+"用于 ACME TLS-ALPN 挑战的备用端口;系统必须将 443 转发到此端口,挑战才能成"
+"功。用于 ACME TLS-ALPN 质询的备用端口; 系统必须将 443 转发到此端口以使质询成"
+"功。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "In default mode, rule fields are matched by category. Any condition in the same category can match, while different categories must match at the same time. Rule sets are merged into the rule for matching and are not treated as separate sub-rules."
-msgstr "默认模式下,规则会按条件类别进行匹配。同一类别内任意条件命中即可,不同类别之间需要同时满足。规则集会合并到当前规则中参与匹配,不会作为独立子规则单独生效。"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:644
+msgid ""
+"The default rule uses the following matching logic:
(domain || "
+"domain_suffix || domain_keyword || domain_regex || ip_cidr || "
+"ip_is_private) &&
(port || port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields"
+"code>.
Additionally, included rule sets can be considered merged rather "
+"than as a single rule sub-item."
+msgstr ""
+"默认规则使用以下匹配逻辑:
(domain || domain_suffix || "
+"domain_keyword || domain_regex || ip_cidr || ip_is_private) &&
(port || port_range) &&
(source_ip_cidr || "
+"source_ip_is_private) &&
(source_port || "
+"source_port_range) &&
其他字段。
此外,包含的规则"
+"集可视为合并项,而非单一规则的子项。默认规则使用以下匹配逻辑:
(domain || domain_suffix || domain_keyword || domain_regex || ip_cidr "
+"|| ip_is_private) &&
(port || port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
其他字段"
+"code>。此外,包含的所有规则集会被合并而不是独立生效。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:242
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1169
+msgid ""
+"The default rule uses the following matching logic:
(domain || "
+"domain_suffix || domain_keyword || domain_regex) &&
(port "
+"|| port_range) &&
(source_ip_cidr || source_ip_is_private)"
+"code> &&
(source_port || source_port_range) &&
other fields.
Additionally, included rule sets can be "
+"considered merged rather than as a single rule sub-item."
+msgstr ""
+"默认规则使用以下匹配逻辑:
(domain || domain_suffix || "
+"domain_keyword || domain_regex) &&
(port || port_range)"
+"code> &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
其他字段"
+"code>。
此外,包含的规则集可视为合并项,而非单一规则的子项。默认规则使用"
+"以下匹配逻辑:
(domain || domain_suffix || domain_keyword || "
+"domain_regex) &&
(port || port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
其他字段"
+"code>。此外,包含的所有规则集会被合并而不是独立生效。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:218
msgid ""
"The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT."
msgstr "用于解析国内域名的 DNS 服务器。支持 UDP、TCP、DoH、DoQ、DoT。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:470
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1044
+#: htdocs/luci-static/resources/view/homeproxy/client.js:495
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1114
msgid "The domain strategy for resolving the domain name in the address."
msgstr "用于解析本 DNS 服务器的域名的策略。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1495
-#: htdocs/luci-static/resources/view/homeproxy/server.js:587
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1144
+#: htdocs/luci-static/resources/view/homeproxy/server.js:603
msgid ""
"The elliptic curves that will be used in an ECDHE handshake, in preference "
"order. If empty, the default will be used."
msgstr "将在 ECDHE 握手中使用的椭圆曲线,按优先顺序排列。留空使用默认值。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:613
+#: htdocs/luci-static/resources/view/homeproxy/server.js:629
msgid ""
"The email address to use when creating or selecting an existing ACME server "
"account."
msgstr "创建或选择现有 ACME 服务器帐户时使用的电子邮件地址。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:766
+#: htdocs/luci-static/resources/view/homeproxy/client.js:791
msgid ""
"The fallback value in milliseconds used when TLS segmentation cannot "
"automatically determine the wait time."
msgstr "当 TLS 分段无法自动确定等待时间时使用的回退值(单位:毫秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:577
+#: htdocs/luci-static/resources/view/homeproxy/client.js:602
msgid "The idle timeout in seconds."
msgstr "空闲超时时间(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1487
-#: htdocs/luci-static/resources/view/homeproxy/server.js:579
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1136
+#: htdocs/luci-static/resources/view/homeproxy/server.js:595
msgid "The maximum TLS version that is acceptable."
msgstr "可接受的最高 TLS 版本。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:315
-msgid ""
-"The maximum number of QUIC concurrent bidirectional streams that a peer is "
-"allowed to open."
-msgstr "允许对等点打开的 QUIC 并发双向流的最大数量。"
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:740
+#: htdocs/luci-static/resources/view/homeproxy/server.js:779
msgid "The maximum time difference between the server and the client."
msgstr "服务器和客户端之间的最大时间差。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1479
-#: htdocs/luci-static/resources/view/homeproxy/server.js:571
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1128
+#: htdocs/luci-static/resources/view/homeproxy/server.js:587
msgid "The minimum TLS version that is acceptable."
msgstr "可接受的最低 TLS 版本。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:113
+#: htdocs/luci-static/resources/view/homeproxy/client.js:102
#: htdocs/luci-static/resources/view/homeproxy/server.js:130
-msgid "OpenWrt-designed Sing-box proxy management platform. It is recommended to disable Dnsmasq DNS redirection."
-msgstr "Openwrt设计的Sing-box代理管理平台,建议Dnsmasq的DNS重定向去勾。"
+msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64."
+msgstr "为 ARM64/AMD64 设计的现代 ImmortalWrt 代理平台。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:477
-#: htdocs/luci-static/resources/view/homeproxy/server.js:875
+#: htdocs/luci-static/resources/view/homeproxy/client.js:502
+#: htdocs/luci-static/resources/view/homeproxy/server.js:914
msgid "The network interface to bind to."
msgstr "绑定到的网络接口。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1529
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1061
+msgid "The path of the DNS server."
+msgstr "DNS 服务器的路径。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1185
msgid ""
"The path to the ECH config, in PEM format. If empty, load from DNS will be "
"attempted."
msgstr "PEM 格式的 ECH 配置路径。如果为空,将尝试从 DNS 加载。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1508
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1164
msgid "The path to the server certificate, in PEM format."
msgstr "服务端证书路径,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:199
+#: htdocs/luci-static/resources/view/homeproxy/server.js:200
msgid "The port must be unique."
msgstr "必须是唯一端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:986
-msgid "Leave empty to use the default port."
-msgstr "留空则表示使用默认端口。"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1056
+msgid "The port of the DNS server."
+msgstr "DNS 服务器的端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1239
+#: htdocs/luci-static/resources/view/homeproxy/server.js:330
+msgid "The pre-shared key (password) above must be 12-255 bytes for v6."
+msgstr "v6 下,上方的预共享密钥(密码)长度须为 12-255 字节。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1360
msgid "The response code."
msgstr "响应代码。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:776
+#: htdocs/luci-static/resources/view/homeproxy/server.js:815
msgid "The server private key, in PEM format."
msgstr "服务端私钥,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:757
+#: htdocs/luci-static/resources/view/homeproxy/server.js:796
msgid "The server public key, in PEM format."
msgstr "服务端公钥,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:484
+#: htdocs/luci-static/resources/view/homeproxy/client.js:509
msgid ""
"The tag of the upstream outbound.
Other dial fields will be ignored when "
"enabled."
msgstr "上游出站的标签。
启用时,其他拨号字段将被忽略。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:164
-#: htdocs/luci-static/resources/view/homeproxy/client.js:193
-#: htdocs/luci-static/resources/view/homeproxy/client.js:554
+#: htdocs/luci-static/resources/view/homeproxy/client.js:139
+#: htdocs/luci-static/resources/view/homeproxy/client.js:168
+#: htdocs/luci-static/resources/view/homeproxy/client.js:579
msgid "The test interval in seconds."
msgstr "测试间隔时间(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:170
-#: htdocs/luci-static/resources/view/homeproxy/client.js:199
-#: htdocs/luci-static/resources/view/homeproxy/client.js:570
+#: htdocs/luci-static/resources/view/homeproxy/client.js:145
+#: htdocs/luci-static/resources/view/homeproxy/client.js:174
+#: htdocs/luci-static/resources/view/homeproxy/client.js:595
msgid "The test tolerance in milliseconds."
msgstr "测试容差时间(单位:毫秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1237
-#: htdocs/luci-static/resources/view/homeproxy/server.js:465
+#: htdocs/luci-static/resources/view/homeproxy/node.js:846
+#: htdocs/luci-static/resources/view/homeproxy/server.js:481
msgid ""
"The timeout (in seconds) that after performing a keepalive check, the client "
"will wait for activity. If no activity is detected, the connection will be "
"closed."
msgstr ""
-"经过一段时间(单位:秒)之后,客户端将执行 keepalive 检查并等待活动。如果没有"
-"检测到任何活动,则会关闭连接。"
+"执行保活检查后,客户端等待活动的时间(单位:秒)。如果未检测到活动,连接将被"
+"关闭。经过一段时间(单位:秒)之后,客户端将执行 keepalive 检查并等待活动。如"
+"果没有检测到任何活动,则会关闭连接。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1473
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1825
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1122
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1471
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
msgstr ""
-"这是危险行为,您的流量将几乎等同于明文!使用风险自负!"
+"这非常危险,你的流量几乎等同于明文!风险自"
+"负!这是危险行为,您的流量将几乎等同于明文!使用风险自负!"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1147
+#: htdocs/luci-static/resources/view/homeproxy/node.js:756
msgid ""
"This is the TUIC port of the UDP over TCP protocol, designed to provide a "
"QUIC stream based UDP relay mode that TUIC does not provide."
msgstr ""
-"这是 TUIC 的 UDP over TCP 协议移植, 旨在提供 TUIC 不提供的基于 QUIC 流的 "
-"UDP 中继模式。"
+"这是 UDP over TCP 协议的 TUIC 版本,旨在提供 TUIC 本身不具备的基于 QUIC 流的 "
+"UDP 中继模式。这是 TUIC 的 UDP over TCP 协议移植, 旨在提供 TUIC 不提供的基"
+"于 QUIC 流的 UDP 中继模式。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:244
-msgid "ThreatBook Public DNS (DoH)"
-msgstr "微步 公共DNS (DoH)"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:188
+#: htdocs/luci-static/resources/view/homeproxy/client.js:223
+msgid "ThreatBook Public DNS (117.50.10.10)"
+msgstr "微步在线公共 DNS(117.50.10.10)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:502
-msgid "Timeout"
-msgstr "超时"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:746
+#: htdocs/luci-static/resources/view/homeproxy/client.js:771
msgid ""
"Timeout for UDP connections.
Setting a larger value than the UDP timeout "
"in inbounds will have no effect."
msgstr "UDP 连接的超时时间。
设置比入站的 UDP 超时更大的值将无效。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:941
-msgid ""
-"Timeout of rejected DNS response cache in seconds. 604800 (7d) "
-"is used by default."
-msgstr ""
-"被拒绝的 DNS 响应缓存超时时间(单位:秒)。默认为 604800(7 天)"
-"code>。"
-
-#: htdocs/luci-static/resources/view/homeproxy/server.js:491
+#: htdocs/luci-static/resources/view/homeproxy/server.js:507
msgid ""
"To be compatible with Xray-core, set this to Sec-WebSocket-Protocol"
"code>."
msgstr ""
-"要与 Xray-core 兼容,请将其设置为 Sec-WebSocket-Protocol。"
+"要与 Xray-core 兼容,请将其设置为 Sec-WebSocket-Protocol。要与 "
+"Xray-core 兼容,请将其设置为 Sec-WebSocket-Protocol。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:315
+#: htdocs/luci-static/resources/view/homeproxy/client.js:292
msgid ""
"To enable Tun support, you need to install ip-full and "
"kmod-tun"
msgstr ""
-"要启用 Tun 支持,您需要安装 ip-full 和 kmod-tun。"
+"要启用 Tun 支持,你需要安装 ip-full 和 kmod-tun。要"
+"启用 Tun 支持,您需要安装 ip-full 和 kmod-tun。"
#: htdocs/luci-static/resources/view/homeproxy/status.js:135
msgid "Trace"
msgstr "跟踪"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1203
-#: htdocs/luci-static/resources/view/homeproxy/server.js:399
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1072
+#: htdocs/luci-static/resources/view/homeproxy/server.js:344
+msgid "Traffic shaping mode"
+msgstr "流量整形模式"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:812
+#: htdocs/luci-static/resources/view/homeproxy/server.js:415
msgid "Transport"
msgstr "传输层"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:869
-#: htdocs/luci-static/resources/view/homeproxy/server.js:186
+#: htdocs/luci-static/resources/view/homeproxy/node.js:459
+#: htdocs/luci-static/resources/view/homeproxy/server.js:187
msgid "Trojan"
msgstr "Trojan"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:871
-#: htdocs/luci-static/resources/view/homeproxy/server.js:188
+#: htdocs/luci-static/resources/view/homeproxy/node.js:461
+#: htdocs/luci-static/resources/view/homeproxy/server.js:189
msgid "Tuic"
msgstr "Tuic"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:313
+#: htdocs/luci-static/resources/view/homeproxy/client.js:290
msgid "Tun TCP/UDP"
msgstr "Tun TCP/UDP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:970
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1357
-#: htdocs/luci-static/resources/view/homeproxy/node.js:857
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1040
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1496
+#: htdocs/luci-static/resources/view/homeproxy/node.js:447
#: htdocs/luci-static/resources/view/homeproxy/server.js:175
msgid "Type"
msgstr "类型"
-msgid "Type error"
-msgstr "类型错误"
-
-msgid "TypeError"
-msgstr "类型错误"
-
-msgid "Cannot convert null to object."
-msgstr "无法将 null 转换为对象。"
-
-msgid "can't convert null to object"
-msgstr "无法将 null 转换为对象"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:662
-#: htdocs/luci-static/resources/view/homeproxy/client.js:971
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1124
-#: htdocs/luci-static/resources/view/homeproxy/server.js:868
+#: htdocs/luci-static/resources/view/homeproxy/client.js:687
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1041
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1194
+#: htdocs/luci-static/resources/view/homeproxy/server.js:907
msgid "UDP"
msgstr "UDP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1597
-#: htdocs/luci-static/resources/view/homeproxy/server.js:854
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1253
+#: htdocs/luci-static/resources/view/homeproxy/server.js:893
msgid "UDP Fragment"
msgstr "UDP 分片"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:358
-#: htdocs/luci-static/resources/view/homeproxy/server.js:859
+#: htdocs/luci-static/resources/view/homeproxy/client.js:384
+#: htdocs/luci-static/resources/view/homeproxy/server.js:898
msgid "UDP NAT expiration time"
msgstr "UDP NAT 过期时间"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1601
+#: htdocs/luci-static/resources/view/homeproxy/client.js:333
+msgid "UDP NAT filtering (1.14)"
+msgstr "UDP NAT 过滤(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:322
+msgid "UDP NAT mapping (1.14)"
+msgstr "UDP NAT 映射(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:344
+msgid "UDP NAT sessions max (1.14)"
+msgstr "UDP NAT 会话数上限(1.14)"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1257
msgid "UDP over TCP"
msgstr "UDP over TCP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1146
+#: htdocs/luci-static/resources/view/homeproxy/node.js:755
msgid "UDP over stream"
msgstr "UDP over stream"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1139
+#: htdocs/luci-static/resources/view/homeproxy/node.js:748
msgid "UDP packet relay mode."
msgstr "UDP 包中继模式。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1138
+#: htdocs/luci-static/resources/view/homeproxy/node.js:747
msgid "UDP relay mode"
msgstr "UDP 中继模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:745
+#: htdocs/luci-static/resources/view/homeproxy/client.js:770
msgid "UDP timeout"
msgstr "UDP 超时"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:149
-#: htdocs/luci-static/resources/view/homeproxy/client.js:178
-#: htdocs/luci-static/resources/view/homeproxy/client.js:444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:124
+#: htdocs/luci-static/resources/view/homeproxy/client.js:153
+#: htdocs/luci-static/resources/view/homeproxy/client.js:469
msgid "URLTest"
msgstr "URLTest"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:156
-#: htdocs/luci-static/resources/view/homeproxy/client.js:185
-#: htdocs/luci-static/resources/view/homeproxy/client.js:519
+#: htdocs/luci-static/resources/view/homeproxy/client.js:131
+#: htdocs/luci-static/resources/view/homeproxy/client.js:160
+#: htdocs/luci-static/resources/view/homeproxy/client.js:544
msgid "URLTest nodes"
msgstr "URLTest 节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:130
-msgid "URLTest: %s"
-msgstr "URLTest: %s"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1120
-#: htdocs/luci-static/resources/view/homeproxy/server.js:346
+#: htdocs/luci-static/resources/view/homeproxy/node.js:729
+#: htdocs/luci-static/resources/view/homeproxy/server.js:362
msgid "UUID"
msgstr "UUID"
@@ -2979,11 +3203,15 @@ msgstr "未知错误。"
msgid "Unknown error: %s"
msgstr "未知错误:%s"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1565
+#: htdocs/luci-static/resources/view/homeproxy/client.js:308
+msgid "Unset (default)"
+msgstr "不设置(默认)"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1221
msgid "Unsupported fingerprint!"
msgstr "不支持的指纹!"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1849
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1495
msgid "Update %s subscriptions"
msgstr "更新 %s 个订阅"
@@ -2991,137 +3219,109 @@ msgstr "更新 %s 个订阅"
msgid "Update failed."
msgstr "更新失败。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1415
-msgid "Update time"
-msgstr "更新时间"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1579
+msgid "Update interval"
+msgstr "更新间隔"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1416
-msgid "Update time (daily)"
-msgstr "更新时间(每天)"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1580
+msgid "Update interval of rule set."
+msgstr "规则集更新间隔。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1417
-msgid "Update time (weekly)"
-msgstr "更新时间(每周)"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1418
-msgid "Every day"
-msgstr "每天"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1419
-msgid "Every Monday"
-msgstr "每周一"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1420
-msgid "Every Tuesday"
-msgstr "每周二"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1421
-msgid "Every Wednesday"
-msgstr "每周三"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1422
-msgid "Every Thursday"
-msgstr "每周四"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1423
-msgid "Every Friday"
-msgstr "每周五"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1424
-msgid "Every Saturday"
-msgstr "每周六"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1425
-msgid "Every Sunday"
-msgstr "每周日"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1844
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1490
msgid "Update nodes from subscriptions"
msgstr "从订阅更新节点"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1779
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1432
msgid "Update subscriptions via proxy."
msgstr "使用代理更新订阅。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1778
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1425
+msgid "Update time"
+msgstr "更新时间"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1431
msgid "Update via proxy"
msgstr "使用代理更新"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1534
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1190
msgid "Upload ECH config"
msgstr "上传 ECH 配置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1425
-#: htdocs/luci-static/resources/view/homeproxy/server.js:523
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1034
+#: htdocs/luci-static/resources/view/homeproxy/server.js:539
msgid "Upload bandwidth"
msgstr "上传带宽"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1426
-#: htdocs/luci-static/resources/view/homeproxy/server.js:524
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1035
+#: htdocs/luci-static/resources/view/homeproxy/server.js:540
msgid "Upload bandwidth in Mbps."
msgstr "上传带宽(单位:Mbps)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1515
-#: htdocs/luci-static/resources/view/homeproxy/server.js:767
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1171
+#: htdocs/luci-static/resources/view/homeproxy/server.js:806
msgid "Upload certificate"
msgstr "上传证书"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:786
+#: htdocs/luci-static/resources/view/homeproxy/server.js:825
msgid "Upload key"
msgstr "上传密钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1518
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1537
-#: htdocs/luci-static/resources/view/homeproxy/server.js:770
-#: htdocs/luci-static/resources/view/homeproxy/server.js:789
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1174
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1193
+#: htdocs/luci-static/resources/view/homeproxy/server.js:809
+#: htdocs/luci-static/resources/view/homeproxy/server.js:828
msgid "Upload..."
msgstr "上传..."
-#: htdocs/luci-static/resources/view/homeproxy/server.js:596
+#: htdocs/luci-static/resources/view/homeproxy/server.js:612
msgid "Use ACME TLS certificate issuer."
msgstr "使用 ACME TLS 证书颁发机构。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1461
-#: htdocs/luci-static/resources/view/homeproxy/server.js:561
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1110
+#: htdocs/luci-static/resources/view/homeproxy/server.js:577
msgid ""
"Used to verify the hostname on the returned certificates unless insecure is "
"given."
msgstr "用于验证返回证书上的主机名。如允许不安全连接,此配置无效。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1004
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1074
msgid "Used to verify the hostname on the returned certificates."
msgstr "用于验证返回证书上的主机名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:665
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1138
+#: htdocs/luci-static/resources/view/homeproxy/client.js:690
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1208
msgid "User"
msgstr "用户"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1819
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1050
+msgid "User key"
+msgstr "用户密钥"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1465
msgid "User-Agent"
msgstr "用户代理"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:888
-#: htdocs/luci-static/resources/view/homeproxy/server.js:203
+#: htdocs/luci-static/resources/view/homeproxy/node.js:478
+#: htdocs/luci-static/resources/view/homeproxy/server.js:204
msgid "Username"
msgstr "用户名"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:874
-#: htdocs/luci-static/resources/view/homeproxy/server.js:189
+#: htdocs/luci-static/resources/view/homeproxy/node.js:464
+#: htdocs/luci-static/resources/view/homeproxy/server.js:190
msgid "VLESS"
msgstr "VLESS"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:875
-#: htdocs/luci-static/resources/view/homeproxy/server.js:190
+#: htdocs/luci-static/resources/view/homeproxy/node.js:465
+#: htdocs/luci-static/resources/view/homeproxy/server.js:191
msgid "VMess"
msgstr "VMess"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:206
-#: htdocs/luci-static/resources/view/homeproxy/client.js:243
+#: htdocs/luci-static/resources/view/homeproxy/client.js:181
+#: htdocs/luci-static/resources/view/homeproxy/client.js:219
msgid "WAN DNS (read from interface)"
msgstr "WAN DNS(从接口获取)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1487
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1651
msgid "WAN IP Policy"
msgstr "WAN IP 策略"
@@ -3129,37 +3329,44 @@ msgstr "WAN IP 策略"
msgid "Warn"
msgstr "警告"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1210
-#: htdocs/luci-static/resources/view/homeproxy/server.js:406
+#: htdocs/luci-static/resources/view/homeproxy/node.js:819
+#: htdocs/luci-static/resources/view/homeproxy/server.js:422
msgid "WebSocket"
msgstr "WebSocket"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1810
+#: htdocs/luci-static/resources/view/homeproxy/client.js:302
+msgid ""
+"When the main DNS returns a mainland China IP, re-resolve via China DNS "
+"using evaluate/match_response."
+msgstr ""
+"当主 DNS 返回大陆 IP 时,通过 evaluate/match_response 改用国内 DNS 复解析。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1456
msgid "Whitelist mode"
msgstr "白名单模式"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:873
+#: htdocs/luci-static/resources/view/homeproxy/node.js:463
msgid "WireGuard"
msgstr "WireGuard"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1342
+#: htdocs/luci-static/resources/view/homeproxy/node.js:951
msgid "WireGuard peer public key."
msgstr "WireGuard 对端公钥。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1349
+#: htdocs/luci-static/resources/view/homeproxy/node.js:958
msgid "WireGuard pre-shared key."
msgstr "WireGuard 预共享密钥。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1334
+#: htdocs/luci-static/resources/view/homeproxy/node.js:943
msgid "WireGuard requires base64-encoded private keys."
msgstr "WireGuard 要求 base64 编码的私钥。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:928
+#: htdocs/luci-static/resources/view/homeproxy/node.js:519
msgid "Write proxy protocol in the connection header."
msgstr "在连接头中写入代理协议。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1319
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1832
+#: htdocs/luci-static/resources/view/homeproxy/node.js:928
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1478
msgid "Xudp (Xray-core)"
msgstr "Xudp (Xray-core)"
@@ -3167,23 +3374,25 @@ msgstr "Xudp (Xray-core)"
msgid "Your %s was successfully uploaded. Size: %sB."
msgstr "您的 %s 已成功上传。大小:%sB。"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:630
+#: htdocs/luci-static/resources/view/homeproxy/server.js:669
msgid "ZeroSSL"
msgstr "ZeroSSL"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1520
-#: htdocs/luci-static/resources/view/homeproxy/server.js:772
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1176
+#: htdocs/luci-static/resources/view/homeproxy/server.js:811
msgid "certificate"
msgstr "证书"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:739
+#: htdocs/luci-static/resources/view/homeproxy/client.js:764
msgid "connect UDP connections"
msgstr "主动连接 UDP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1480
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1488
-#: htdocs/luci-static/resources/view/homeproxy/server.js:572
-#: htdocs/luci-static/resources/view/homeproxy/server.js:580
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1074
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1129
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1137
+#: htdocs/luci-static/resources/view/homeproxy/server.js:346
+#: htdocs/luci-static/resources/view/homeproxy/server.js:588
+#: htdocs/luci-static/resources/view/homeproxy/server.js:596
msgid "default"
msgstr "默认"
@@ -3191,52 +3400,51 @@ msgstr "默认"
msgid "failed"
msgstr "失败"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1206
-#: htdocs/luci-static/resources/view/homeproxy/server.js:402
+#: htdocs/luci-static/resources/view/homeproxy/node.js:815
+#: htdocs/luci-static/resources/view/homeproxy/server.js:418
msgid "gRPC"
msgstr "gRPC"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1248
+#: htdocs/luci-static/resources/view/homeproxy/node.js:857
msgid "gRPC permit without stream"
msgstr "gRPC 允许无活动连接"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1243
-#: htdocs/luci-static/resources/view/homeproxy/server.js:430
+#: htdocs/luci-static/resources/view/homeproxy/node.js:852
+#: htdocs/luci-static/resources/view/homeproxy/server.js:446
msgid "gRPC service name"
msgstr "gRPC 服务名称"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:334
+#: htdocs/luci-static/resources/view/homeproxy/client.js:360
msgid "gVisor"
msgstr "gVisor"
-#: htdocs/luci-static/resources/homeproxy.js:306
-#: htdocs/luci-static/resources/homeproxy.js:326
-#: htdocs/luci-static/resources/view/homeproxy/client.js:219
-#: htdocs/luci-static/resources/view/homeproxy/client.js:253
-#: htdocs/luci-static/resources/view/homeproxy/client.js:527
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1380
-#: htdocs/luci-static/resources/view/homeproxy/node.js:918
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1561
-#: htdocs/luci-static/resources/view/homeproxy/server.js:235
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1063
+#: htdocs/luci-static/resources/view/homeproxy/server.js:340
+msgid "http"
+msgstr ""
+
+#: htdocs/luci-static/resources/homeproxy.js:307
+#: htdocs/luci-static/resources/homeproxy.js:327
+#: htdocs/luci-static/resources/view/homeproxy/client.js:195
+#: htdocs/luci-static/resources/view/homeproxy/client.js:230
+#: htdocs/luci-static/resources/view/homeproxy/client.js:552
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1519
+#: htdocs/luci-static/resources/view/homeproxy/node.js:509
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1217
+#: htdocs/luci-static/resources/view/homeproxy/server.js:237
msgid "non-empty value"
msgstr "非空值"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1919
-msgid "The default rule set directory is /etc/homeproxy/ruleset/."
-msgstr "规则集默认目录为 /etc/homeproxy/ruleset/。"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1975
-msgid "absolute path"
-msgstr "绝对路径"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1061
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1317
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1830
+#: htdocs/luci-static/resources/view/homeproxy/node.js:670
+#: htdocs/luci-static/resources/view/homeproxy/node.js:926
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1062
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1476
+#: htdocs/luci-static/resources/view/homeproxy/server.js:339
msgid "none"
msgstr "无"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1318
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1831
+#: htdocs/luci-static/resources/view/homeproxy/node.js:927
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1477
msgid "packet addr (v2ray-core v5+)"
msgstr "packet addr (v2ray-core v5+)"
@@ -3244,11 +3452,11 @@ msgstr "packet addr (v2ray-core v5+)"
msgid "passed"
msgstr "通过"
-#: htdocs/luci-static/resources/view/homeproxy/server.js:791
+#: htdocs/luci-static/resources/view/homeproxy/server.js:830
msgid "private key"
msgstr "私钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:654
+#: htdocs/luci-static/resources/view/homeproxy/client.js:679
msgid "quic-go / uquic chrome"
msgstr "quic-go / uquic chrome"
@@ -3256,63 +3464,116 @@ msgstr "quic-go / uquic chrome"
msgid "sing-box client"
msgstr "sing-box 客户端"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:337
+msgid ""
+"sing-box default; recommended for home use (accepts replies from any remote "
+"after mapping). Choose stricter only for specific UDP issues."
+msgstr ""
+"sing-box 默认值,家用推荐(建映射后接受任意远端回包)。仅当遇到特定 UDP 问题"
+"时才用更严格选项。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:326
+msgid ""
+"sing-box default; recommended for home use (small NAT table, QUIC/game "
+"friendly). Choose stricter only for specific UDP issues."
+msgstr ""
+"sing-box 默认值,家用推荐(NAT 表占用小,对游戏/QUIC 友好)。仅当遇到特定 "
+"UDP 问题时才用更严格选项。"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1043
+msgid ""
+"sing-box implements Snell v4/v5 wire as v4 and v6. The pre-shared key "
+"(Password above) must be 12-255 bytes for v6."
+msgstr ""
+"sing-box 将 Snell v4/v5 线协议统一为 v4,另提供 v6;v6 的预共享密钥(上方密"
+"码)长度须为 12-255 字节。"
+
#: htdocs/luci-static/resources/view/homeproxy/status.js:288
msgid "sing-box server"
msgstr "sing-box 服务端"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1543
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1199
msgid "uTLS fingerprint"
msgstr "uTLS 指纹"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1544
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1200
msgid ""
"uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting "
"resistance."
msgstr ""
-"uTLS 是 \"crypto/tls\" 的一个分支,拥有抵抗 ClientHello 指纹识别的能力。"
+"uTLS 是 “crypto/tls” 的一个分支,可提供 ClientHello 指纹识别抵抗能力。uTLS "
+"是 \"crypto/tls\" 的一个分支,拥有抵抗 ClientHello 指纹识别的能力。"
#: htdocs/luci-static/resources/view/homeproxy/status.js:59
msgid "unchecked"
msgstr "未检查"
#: htdocs/luci-static/resources/homeproxy.js:237
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1735
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1388
msgid "unique UCI identifier"
msgstr "独立 UCI 标识"
-#: htdocs/luci-static/resources/homeproxy.js:317
+#: htdocs/luci-static/resources/homeproxy.js:318
msgid "unique value"
msgstr "独立值"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:930
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1076
+#: htdocs/luci-static/resources/view/homeproxy/server.js:348
+msgid "unsafe-raw"
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:1075
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1608
+#: htdocs/luci-static/resources/view/homeproxy/server.js:347
+msgid "unshaped"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:521
+#: htdocs/luci-static/resources/view/homeproxy/node.js:684
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1264
msgid "v1"
msgstr "v1"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:931
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1076
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1609
+#: htdocs/luci-static/resources/view/homeproxy/node.js:522
+#: htdocs/luci-static/resources/view/homeproxy/node.js:685
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1265
msgid "v2"
msgstr "v2"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1077
+#: htdocs/luci-static/resources/view/homeproxy/node.js:686
msgid "v3"
msgstr "v3"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:231
-#: htdocs/luci-static/resources/view/homeproxy/client.js:235
-#: htdocs/luci-static/resources/view/homeproxy/client.js:264
-#: htdocs/luci-static/resources/view/homeproxy/client.js:268
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1044
+msgid "v4"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/server.js:331
+msgid "v5"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1045
+#: htdocs/luci-static/resources/view/homeproxy/server.js:332
+msgid "v6"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1073
+#: htdocs/luci-static/resources/view/homeproxy/server.js:345
+msgid "v6 only."
+msgstr "仅 v6。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:207
+#: htdocs/luci-static/resources/view/homeproxy/client.js:211
+#: htdocs/luci-static/resources/view/homeproxy/client.js:241
+#: htdocs/luci-static/resources/view/homeproxy/client.js:245
msgid "valid DNS server address"
msgstr "有效 DNS 服务器地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:541
-#: htdocs/luci-static/resources/view/homeproxy/client.js:544
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1385
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1388
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1796
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1799
+#: htdocs/luci-static/resources/view/homeproxy/client.js:566
+#: htdocs/luci-static/resources/view/homeproxy/client.js:569
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1527
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1530
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1442
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1445
msgid "valid URL"
msgstr "有效网址"
@@ -3320,190 +3581,148 @@ msgstr "有效网址"
msgid "valid base64 key with %d characters"
msgstr "包含 %d 个字符的有效 base64 密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1530
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1562
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1694
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1726
msgid "valid hostname"
msgstr "有效主机名"
-#: htdocs/luci-static/resources/homeproxy.js:297
+#: htdocs/luci-static/resources/homeproxy.js:298
msgid "valid port range (port1:port2)"
msgstr "有效端口范围(port1:port2)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:297
+#: htdocs/luci-static/resources/view/homeproxy/client.js:274
msgid "valid port value"
msgstr "有效端口值"
-#: htdocs/luci-static/resources/homeproxy.js:328
+#: htdocs/luci-static/resources/homeproxy.js:329
msgid "valid uuid"
msgstr "有效 uuid"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Panel Settings"
-msgstr "面版设置"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:808
+msgid "wrong-ack"
+msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "UI path"
-msgstr "UI 路径"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:807
+msgid "wrong-checksum"
+msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "UI download URL"
-msgstr "UI 下载地址"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:809
+msgid "wrong-md5"
+msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "UI download detour"
-msgstr "UI 下载节点"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:806
+msgid "wrong-sequence (default)"
+msgstr "wrong-sequence(默认)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "API listen"
-msgstr "API 监听"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:810
+msgid "wrong-timestamp"
+msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Use 0.0.0.0:port to open the panel from your browser."
-msgstr "使用 0.0.0.0:端口 才能从浏览器打开面板。"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1522
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1570
+msgid "{tag} in URL when extra tags are used"
+msgstr "使用额外标签时 URL 需包含 {tag}"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "API password"
-msgstr "API 密码"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1573
+msgid "{tag} in initial path when extra tags are used"
+msgstr "使用额外标签时初始路径需包含 {tag}"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Default mode"
-msgstr "默认模式"
+#~ msgid "Disable Path MTU discovery"
+#~ msgstr "禁用路径 MTU 探测"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "NTP Settings"
-msgstr "NTP 设置"
+#~ msgid ""
+#~ "Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 "
+#~ "(IPv4) / 1232 (IPv6) bytes in size."
+#~ msgstr ""
+#~ "禁用路径 MTU 发现(RFC 8899)。数据包将最多为 1252(IPv4)/ 1232(IPv6)字"
+#~ "节。禁用路径 MTU 发现 (RFC 8899)。 数据包的大小最多为 1252 (IPv4) / 1232 "
+#~ "(IPv6) 字节。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Enable NTP"
-msgstr "启用 NTP"
+#~ msgid ""
+#~ "Leave empty to keep current behavior. hijack/native lets sing-box manage "
+#~ "platform DNS; may overlap dnsmasq DNS hijack."
+#~ msgstr ""
+#~ "留空保持现有行为。hijack/native 让 sing-box 接管系统 DNS,可能与 dnsmasq "
+#~ "的 DNS 劫持重叠。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "NTP server address"
-msgstr "NTP 服务地址"
+#~ msgid "Match rule set."
+#~ msgstr "匹配规则集。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "NTP server port"
-msgstr "NTP 服务端口"
+#~ msgid "QUIC connection receive window"
+#~ msgstr "QUIC 连接窗口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "NTP time synchronization interval"
-msgstr "NTP 时间同步间隔"
+#~ msgid "QUIC maximum concurrent bidirectional streams"
+#~ msgstr "QUIC 最大双向并发流"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "NTP service always uses direct connection and mainly provides accurate time for sing-box features that depend on it, such as TLS certificate verification, VMess, Reality/uTLS and other time-sensitive connection scenarios."
-msgstr "NTP服务固定走直连,主要提供给Sing-box某些依赖准确时间的功能使用,如:TLS证书校验、VMess、Reality/uTLS等对时间敏感的连接场景。"
+#~ msgid "QUIC stream receive window"
+#~ msgstr "QUIC 流接收窗口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Time format examples: 1m = 1 minute, 1h = 1 hour, 1d = 1 day."
-msgstr "时间格式示例:1m = 1分钟,1h = 1小时,1d = 1天。"
+#~ msgid "Respond (1.14)"
+#~ msgstr "Respond(1.14)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Cache Settings"
-msgstr "缓存设置"
+#~ msgid "The QUIC connection-level flow control window for receiving data."
+#~ msgstr "用于接收数据的 QUIC 连接级流控制窗口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Persistent Cache Settings"
-msgstr "持久化缓存设置"
+#~ msgid "The QUIC stream-level flow control window for receiving data."
+#~ msgstr "用于接收数据的 QUIC 流级流控制窗口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Enable cache"
-msgstr "启用缓存"
+#~ msgid ""
+#~ "The maximum number of QUIC concurrent bidirectional streams that a peer "
+#~ "is allowed to open."
+#~ msgstr "允许对等点打开的 QUIC 并发双向流的最大数量。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Enable cache file"
-msgstr "启用缓存文件"
+#~ msgid "Accept empty query response"
+#~ msgstr "接受空查询响应"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Cache file path"
-msgstr "缓存文件路径"
+#~ msgid "Independent cache per server"
+#~ msgstr "独立缓存"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Persistent cache file path"
-msgstr "持久化缓存文件路径"
+#~ msgid "Make IP CIDR in rule-sets accept empty query response."
+#~ msgstr "使规则集中的 IP CIDR 接受空查询响应。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Cache RDRC"
-msgstr "缓存 RDRC"
+#~ msgid ""
+#~ "Make each DNS server's cache independent for special purposes. If "
+#~ "enabled, will slightly degrade performance."
+#~ msgstr "独立缓存每个 DNS 服务器的结果以供特殊用途。启用后会略微降低性能。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Persist RDRC cache"
-msgstr "持久化 RDRC 缓存"
+#~ msgid ""
+#~ "Match IP CIDR with query response. Current rule will be skipped if not "
+#~ "match."
+#~ msgstr "使用查询响应匹配 IP CIDR。如果不匹配,则跳过当前规则。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Status"
-msgstr "状态"
+#~ msgid "Match private IP with query response."
+#~ msgstr "使用查询响应匹配私有 IP。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Plugin Version"
-msgstr "插件版本"
+#~ msgid "Override destination"
+#~ msgstr "覆盖目标地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Core Version"
-msgstr "核心版本"
+#~ msgid "Override the connection destination address with the sniffed domain."
+#~ msgstr "使用嗅探到的域名覆盖连接目标。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Core Status"
-msgstr "核心状态"
+#~ msgid "RDRC timeout"
+#~ msgstr "RDRC 超时"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Running"
-msgstr "运行中"
+#~ msgid "Set domain strategy for this query."
+#~ msgstr "为此查询设置域名策略。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Running: %s"
-msgstr "运行中:%s"
+#~ msgid "Store RDRC"
+#~ msgstr "存储 RDRC"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Not Running"
-msgstr "未运行"
+#~ msgid ""
+#~ "Store rejected DNS response cache.
The check results of Address "
+#~ "filter DNS rule items will be cached until expiration."
+#~ msgstr ""
+#~ "存储被拒绝的 DNS 响应缓存。
Address filter DNS rule items"
+#~ "code> 的检查结果将缓存至过期。存储被拒绝的 DNS 响应缓存。
地址过"
+#~ "滤 DNS 规则 的检查结果将被缓存直到过期。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Reload Service"
-msgstr "重载服务"
+#~ msgid "Tag of the outbound to download rule set."
+#~ msgstr "用于下载规则集的出站标签。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Restart Service"
-msgstr "重启服务"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Update Panel"
-msgstr "更新面版"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Update panel failed."
-msgstr "更新面版失败"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Clash API unavailable."
-msgstr "Clash API 不可用"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Open Panel"
-msgstr "打开面版"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js
-msgid "Upload Panel ZIP"
-msgstr "上传面版ZIP"
-
-#~ msgid "Real Proxy"
-#~ msgstr "Real Proxy"
-
-#~ msgid "HTTP3"
-#~ msgstr "HTTP3"
-msgid "Baidu Connection"
-msgstr "百度连接"
-
-msgid "Google Connection"
-msgstr "谷歌连接"
-
-msgid "GitHub Connection"
-msgstr "GitHub 连接"
-
-msgid "YouTube Connection"
-msgstr "YouTube 连接"
-
-msgid "Click to check"
-msgstr "点我检测"
-
-msgid "Checking..."
-msgstr "检测中..."
+#~ msgid ""
+#~ "Timeout of rejected DNS response cache in seconds. 604800 (7d)"
+#~ "code> is used by default."
+#~ msgstr ""
+#~ "被拒绝的 DNS 响应缓存的超时时间(单位:秒)。默认使用 604800 (7d)"
+#~ "code>。被拒绝的 DNS 响应缓存超时时间(单位:秒)。默认为 604800(7 "
+#~ "天)。"
diff --git a/luci-app-homeproxy/root/etc/config/homeproxy b/luci-app-homeproxy/root/etc/config/homeproxy
index d6e62dc5f..b5838762c 100644
--- a/luci-app-homeproxy/root/etc/config/homeproxy
+++ b/luci-app-homeproxy/root/etc/config/homeproxy
@@ -8,7 +8,6 @@ config homeproxy 'infra'
option dns_port '5333'
option dns_redirect '1'
option ntp_server 'nil'
- option sniff_override '1'
option udp_timeout ''
option tun_name 'singtun0'
option tun_addr4 '172.19.0.1/30'
@@ -25,68 +24,61 @@ config homeproxy 'migration'
config homeproxy 'config'
option main_node 'nil'
option main_udp_node 'same'
- option dns_server 'https://dns.quad9.net/dns-query'
- option china_dns_server 'https://dns.alidns.com/dns-query'
+ option dns_server '8.8.8.8'
+ option china_dns_server '223.5.5.5'
option routing_mode 'bypass_mainland_china'
option routing_port 'common'
option proxy_mode 'redirect_tproxy'
option ipv6_support '1'
option github_token ''
option log_level 'warn'
+ option cn_ip_fallback '0'
+ option tun_dns_mode ''
+ option udp_mapping ''
+ option udp_filtering ''
+ option udp_nat_max ''
config homeproxy 'control'
option lan_proxy_mode 'disabled'
list wan_proxy_ipv4_ips '91.105.192.0/23'
list wan_proxy_ipv4_ips '91.108.4.0/22'
- list wan_proxy_ipv4_ips '91.108.8.0/21'
- list wan_proxy_ipv4_ips '91.108.16.0/21'
+ list wan_proxy_ipv4_ips '91.108.8.0/22'
+ list wan_proxy_ipv4_ips '91.108.16.0/22'
+ list wan_proxy_ipv4_ips '91.108.12.0/22'
+ list wan_proxy_ipv4_ips '91.108.20.0/22'
list wan_proxy_ipv4_ips '91.108.56.0/22'
- list wan_proxy_ipv4_ips '95.161.64.0/20'
list wan_proxy_ipv4_ips '149.154.160.0/20'
list wan_proxy_ipv4_ips '185.76.151.0/24'
+ list wan_proxy_ipv4_ips '203.208.50.66/32'
list wan_proxy_ipv6_ips '2001:67c:4e8::/48'
- list wan_proxy_ipv6_ips '2001:b28:f23c::/47'
+ list wan_proxy_ipv6_ips '2001:b28:f23c::/48'
+ list wan_proxy_ipv6_ips '2001:b28:f23d::/48'
list wan_proxy_ipv6_ips '2001:b28:f23f::/48'
list wan_proxy_ipv6_ips '2a0a:f280::/32'
-config homeproxy 'clash_api'
- option external_ui '/etc/homeproxy/run/ui'
- option external_ui_download_url 'https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip'
- option external_ui_download_detour 'direct-out'
- option external_controller '0.0.0.0:9095'
- option secret 'homeproxy'
- option default_mode 'rule'
-
-config homeproxy 'ntp'
- option enabled '1'
- option server 'ntp.aliyun.com'
- option server_port '123'
- option interval '30m'
-
-config homeproxy 'cache'
- option enabled '1'
- option path '/etc/homeproxy/cache.db'
- option store_rdrc '1'
-
config homeproxy 'routing'
- option sniff_override '1'
option default_outbound 'direct-out'
option default_outbound_dns 'default-dns'
+ option find_neighbor '0'
config homeproxy 'dns'
- option dns_strategy 'prefer_ipv4'
- option default_server 'local-dns'
+ option default_strategy 'prefer_ipv4'
+ option default_server 'default-dns'
option disable_cache '0'
option disable_cache_expire '0'
+ option optimistic_cache '0'
+ option optimistic_timeout ''
+ option dns_timeout ''
+ option cache_file_store_dns '0'
config homeproxy 'subscription'
option auto_update '0'
option allow_insecure '0'
- option latency_test_mode 'icmp'
option packet_encoding 'xudp'
option update_via_proxy '0'
- option auto_update_time '0 0 * * *'
- option filter_nodes 'disabled'
+ option filter_nodes 'blacklist'
+ list filter_keywords '重置|到期|过期|剩余|套餐'
+ list filter_keywords 'Expiration|Remaining'
config homeproxy 'server'
option enabled '0'
diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt
index f48438506..f9b5b40d7 100644
--- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt
+++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt
@@ -1,64 +1,36 @@
-1.0.1.0/24
-1.0.2.0/23
-1.0.8.0/21
-1.0.32.0/19
-1.1.0.0/24
-1.1.2.0/23
-1.1.4.0/22
-1.1.8.0/21
-1.1.16.0/20
-1.1.32.0/19
-1.2.0.0/23
-1.2.2.0/24
-1.2.4.0/22
-1.2.8.0/21
-1.2.16.0/20
-1.2.32.0/19
-1.2.64.0/18
-1.3.0.0/16
-1.4.1.0/24
-1.4.2.0/23
-1.4.4.0/22
-1.4.8.0/21
-1.4.16.0/20
-1.4.32.0/19
-1.4.64.0/18
-1.8.0.0/16
-1.10.0.0/21
-1.10.8.0/23
-1.10.11.0/24
-1.10.12.0/22
-1.10.16.0/20
-1.10.32.0/19
-1.10.64.0/18
+1.1.8.0/24
+1.2.4.0/24
+1.8.1.0/24
+1.8.8.0/24
1.12.0.0/14
+1.18.128.0/24
1.24.0.0/13
1.45.0.0/16
1.48.0.0/14
1.56.0.0/13
1.68.0.0/14
-1.80.0.0/12
+1.80.0.0/13
+1.88.0.0/14
+1.92.0.0/16
+1.94.0.0/15
1.116.0.0/15
-1.118.0.0/23
-1.118.4.0/22
-1.118.8.0/21
-1.118.16.0/20
-1.118.37.0/24
-1.118.38.0/23
-1.118.40.0/21
-1.118.56.0/21
-1.118.96.0/19
-1.118.128.0/17
-1.119.0.0/16
+1.119.0.0/17
+1.119.128.0/18
+1.119.192.0/20
+1.119.208.0/22
1.180.0.0/14
1.184.0.0/15
1.188.0.0/14
1.192.0.0/13
1.202.0.0/15
1.204.0.0/14
+2.56.255.0/24
+2.58.242.0/24
+2.59.151.0/24
5.10.138.0/23
5.10.140.0/24
5.10.143.0/24
+5.181.219.0/24
8.128.4.0/22
8.128.32.0/19
8.128.64.0/19
@@ -75,724 +47,395 @@
8.148.64.0/18
8.148.128.0/17
8.149.0.0/16
-8.150.0.0/19
-8.150.32.0/21
+8.150.0.0/20
+8.150.16.0/21
8.150.64.0/23
8.152.0.0/13
8.160.0.0/15
-8.162.0.0/17
+8.162.0.0/18
+8.162.64.0/19
8.163.0.0/16
8.164.0.0/14
8.168.0.0/15
8.176.0.0/17
8.176.128.0/19
-14.0.0.0/21
-14.0.12.0/22
-14.1.0.0/22
-14.1.24.0/22
-14.1.108.0/22
14.16.0.0/12
-14.102.128.0/22
-14.102.180.0/22
14.103.0.0/16
14.104.0.0/13
14.112.0.0/12
-14.130.0.0/15
14.134.0.0/15
14.144.0.0/12
-14.192.60.0/22
-14.192.76.0/22
-14.196.0.0/15
14.204.0.0/15
14.208.0.0/12
+14.241.232.0/21
+14.255.16.0/24
+14.255.238.0/24
+14.255.254.0/24
16.2.142.0/23
-27.0.128.0/21
-27.0.160.0/21
-27.0.188.0/22
+23.162.120.0/24
+23.247.128.0/24
+23.247.130.0/24
+27.0.128.0/24
+27.0.130.0/23
+27.0.132.0/22
+27.0.164.0/22
27.0.204.0/22
27.0.208.0/21
27.8.0.0/13
27.16.0.0/12
-27.34.232.0/21
27.36.0.0/14
27.40.0.0/13
-27.50.40.0/21
27.50.128.0/17
-27.54.72.0/21
-27.54.152.0/21
-27.54.192.0/18
-27.98.208.0/20
27.98.224.0/19
-27.99.128.0/17
-27.103.0.0/16
-27.106.128.0/18
27.106.204.0/22
-27.109.32.0/19
27.109.124.0/22
-27.112.0.0/18
-27.112.80.0/20
-27.112.112.0/21
-27.113.128.0/18
+27.112.0.0/21
27.115.0.0/17
-27.116.44.0/22
-27.121.72.0/21
-27.121.120.0/21
27.128.0.0/15
-27.131.220.0/22
27.144.0.0/16
27.148.0.0/14
27.152.0.0/13
27.184.0.0/13
27.192.0.0/11
27.224.0.0/14
-36.0.0.0/22
-36.0.8.0/21
-36.0.16.0/20
-36.0.32.0/19
-36.0.64.0/18
-36.0.128.0/17
+31.40.214.0/24
36.1.0.0/16
36.4.0.0/14
36.16.0.0/12
36.32.0.0/14
36.36.0.0/16
-36.37.0.0/19
-36.37.36.0/23
-36.37.39.0/24
-36.37.40.0/21
-36.37.48.0/20
36.40.0.0/13
36.48.0.0/15
-36.50.226.0/23
-36.50.254.0/23
-36.51.0.0/16
+36.50.226.0/24
+36.51.253.0/24
36.56.0.0/13
-36.96.0.0/11
-36.128.0.0/13
-36.136.0.0/14
-36.140.0.0/17
-36.140.128.0/18
-36.140.192.0/20
-36.140.208.0/21
-36.140.216.0/23
-36.140.218.0/24
-36.140.220.0/22
-36.140.224.0/19
-36.141.0.0/16
-36.142.0.0/15
-36.144.0.0/12
-36.160.0.0/11
-36.192.0.0/11
+36.96.0.0/12
+36.112.0.0/15
+36.128.0.0/10
+36.192.0.0/16
+36.206.0.0/16
+36.212.0.0/15
+36.214.0.0/16
+36.221.0.0/17
36.248.0.0/14
-36.254.0.0/16
36.255.116.0/22
36.255.128.0/22
-36.255.164.0/22
-36.255.172.0/22
-36.255.176.0/22
-39.0.0.0/24
-39.0.2.0/23
-39.0.4.0/22
-39.0.8.0/21
-39.0.16.0/20
-39.0.32.0/19
-39.0.64.0/18
-39.0.128.0/17
+36.255.164.0/24
39.64.0.0/11
-39.96.0.0/16
-39.97.0.0/17
-39.97.128.0/18
-39.97.192.0/21
-39.97.200.0/22
-39.97.208.0/20
-39.97.224.0/19
-39.98.0.0/15
-39.100.0.0/14
+39.96.0.0/13
39.104.0.0/14
39.108.0.0/16
39.128.0.0/10
+40.0.176.0/20
+40.0.248.0/21
40.72.0.0/15
40.125.128.0/17
40.126.64.0/18
40.162.0.0/16
-42.0.0.0/22
-42.0.8.0/21
-42.0.16.0/21
-42.0.24.0/22
-42.0.32.0/19
-42.0.128.0/18
-42.0.192.0/21
-42.0.201.0/24
-42.0.202.0/23
-42.0.204.0/22
-42.0.208.0/20
-42.0.224.0/19
-42.1.0.0/19
-42.1.32.0/20
-42.1.48.0/21
-42.1.56.0/22
-42.1.128.0/17
+40.198.10.0/24
+40.198.16.0/21
+40.198.24.0/23
+40.251.225.0/24
+40.251.227.0/24
+40.251.228.0/24
42.4.0.0/14
-42.48.0.0/13
+42.48.0.0/15
+42.51.0.0/16
+42.52.0.0/14
42.56.0.0/14
42.62.0.0/17
-42.62.128.0/19
-42.62.160.0/20
-42.62.180.0/22
-42.62.184.0/21
42.63.0.0/16
42.80.0.0/15
-42.83.64.0/20
-42.83.80.0/22
-42.83.88.0/21
-42.83.96.0/19
-42.83.128.0/17
+42.83.128.0/22
+42.83.132.0/23
+42.83.134.0/24
+42.83.144.0/22
+42.83.189.0/24
+42.83.190.0/24
+42.83.200.0/23
42.84.0.0/14
42.88.0.0/13
-42.96.64.0/19
-42.96.96.0/21
-42.96.108.0/22
-42.96.112.0/20
42.96.128.0/17
42.97.0.0/16
42.99.0.0/18
-42.99.64.0/19
-42.99.96.0/20
-42.99.112.0/22
-42.99.120.0/21
42.100.0.0/14
42.120.0.0/15
42.122.0.0/16
-42.123.0.0/19
-42.123.36.0/22
-42.123.40.0/21
-42.123.48.0/20
42.123.64.0/18
-42.123.128.0/17
-42.128.0.0/12
-42.156.0.0/19
-42.156.36.0/22
-42.156.40.0/21
-42.156.48.0/20
-42.156.64.0/18
42.156.128.0/17
-42.157.0.0/16
+42.157.128.0/21
+42.157.160.0/19
+42.157.192.0/21
42.158.0.0/15
-42.160.0.0/12
42.176.0.0/13
42.184.0.0/15
42.186.0.0/16
-42.187.0.0/18
-42.187.64.0/19
-42.187.96.0/20
-42.187.112.0/21
42.187.120.0/22
42.187.128.0/17
-42.192.0.0/13
-42.201.0.0/17
+42.192.0.0/15
+42.194.12.0/24
+42.194.128.0/17
+42.199.240.0/22
+42.201.32.0/19
+42.201.64.0/21
+42.201.72.0/22
+42.201.76.0/23
42.202.0.0/15
-42.204.0.0/14
-42.208.0.0/12
42.224.0.0/12
-42.240.0.0/17
-42.240.128.0/18
-42.240.192.0/19
-42.240.224.0/20
-42.240.240.0/21
-42.240.248.0/23
+42.240.0.0/21
+42.240.8.0/22
+42.240.12.0/23
+42.240.16.0/23
+42.240.20.0/22
+42.240.48.0/24
+42.240.128.0/17
42.242.0.0/15
42.244.0.0/14
-42.248.0.0/13
+42.248.0.0/15
43.136.0.0/13
43.144.0.0/15
-43.148.0.0/14
-43.176.0.0/12
-43.192.0.0/14
-43.196.0.0/15
+43.176.0.0/14
+43.180.0.0/16
+43.192.0.0/16
+43.193.0.0/18
+43.193.64.0/23
+43.194.0.0/20
+43.194.16.0/24
+43.195.0.0/20
+43.195.16.0/22
+43.195.20.0/23
+43.196.0.0/16
43.224.12.0/22
43.224.24.0/22
-43.224.44.0/22
-43.224.52.0/22
+43.224.52.0/23
43.224.56.0/22
-43.224.68.0/22
-43.224.72.0/22
43.224.80.0/22
-43.224.100.0/22
-43.224.160.0/22
-43.224.176.0/22
-43.224.184.0/22
-43.224.200.0/21
-43.224.208.0/21
-43.224.216.0/22
-43.224.240.0/22
+43.224.240.0/24
43.225.76.0/22
-43.225.84.0/22
+43.225.84.0/23
43.225.120.0/22
43.225.180.0/22
43.225.208.0/22
-43.225.216.0/21
-43.225.224.0/20
-43.225.240.0/21
-43.225.252.0/22
+43.225.255.0/24
43.226.32.0/19
-43.226.64.0/19
-43.226.96.0/20
-43.226.112.0/21
-43.226.120.0/22
-43.226.128.0/18
-43.226.192.0/20
-43.226.208.0/21
+43.226.64.0/20
+43.226.116.0/22
+43.226.128.0/19
+43.226.164.0/22
43.226.236.0/22
-43.226.240.0/20
-43.227.0.0/21
-43.227.8.0/22
-43.227.32.0/19
-43.227.64.0/19
-43.227.96.0/21
+43.227.56.0/21
+43.227.64.0/21
+43.227.80.0/20
43.227.104.0/22
-43.227.136.0/21
-43.227.144.0/22
+43.227.140.0/22
43.227.152.0/21
43.227.160.0/20
43.227.176.0/21
-43.227.188.0/22
43.227.192.0/19
-43.227.232.0/22
-43.227.248.0/21
-43.228.0.0/18
+43.227.252.0/22
+43.228.0.0/19
+43.228.36.0/22
+43.228.40.0/21
+43.228.48.0/20
43.228.64.0/21
43.228.76.0/22
-43.228.100.0/22
-43.228.116.0/22
-43.228.120.0/22
-43.228.132.0/22
-43.228.136.0/22
-43.228.148.0/22
-43.228.152.0/22
-43.228.188.0/22
43.228.204.0/22
43.228.240.0/22
-43.229.40.0/22
43.229.48.0/22
-43.229.56.0/22
-43.229.96.0/22
-43.229.136.0/21
-43.229.144.0/22
-43.229.168.0/21
-43.229.176.0/20
-43.229.192.0/21
-43.229.216.0/21
-43.229.232.0/21
-43.230.20.0/22
-43.230.32.0/22
-43.230.68.0/22
+43.229.184.0/23
+43.229.216.0/22
43.230.72.0/22
-43.230.124.0/22
-43.230.220.0/22
-43.230.224.0/19
-43.231.32.0/20
-43.231.80.0/20
+43.230.221.0/24
+43.230.222.0/23
+43.231.41.0/24
+43.231.46.0/23
43.231.96.0/20
-43.231.136.0/21
43.231.144.0/20
-43.231.160.0/20
-43.231.176.0/21
-43.236.0.0/16
-43.237.0.0/17
-43.237.128.0/18
-43.237.192.0/22
-43.237.200.0/21
-43.237.208.0/20
-43.237.224.0/19
-43.238.0.0/16
-43.239.0.0/19
-43.239.32.0/20
-43.239.48.0/22
-43.239.116.0/22
+43.231.160.0/21
+43.231.168.0/23
+43.231.170.0/24
43.239.120.0/22
-43.239.172.0/22
-43.239.176.0/23
-43.239.179.0/24
+43.239.172.0/23
43.240.0.0/22
-43.240.56.0/21
-43.240.68.0/22
-43.240.72.0/21
-43.240.84.0/22
+43.240.60.0/22
+43.240.72.0/22
43.240.124.0/22
-43.240.128.0/21
+43.240.128.0/22
+43.240.133.0/24
43.240.136.0/22
43.240.156.0/22
-43.240.192.0/19
-43.240.240.0/20
-43.241.0.0/20
-43.241.16.0/21
-43.241.48.0/22
+43.240.192.0/21
+43.240.200.0/23
+43.240.202.0/24
+43.240.204.0/22
+43.240.220.0/22
+43.241.16.0/22
+43.241.48.0/24
+43.241.50.0/23
43.241.76.0/22
-43.241.80.0/20
-43.241.112.0/22
-43.241.168.0/21
-43.241.176.0/21
-43.241.184.0/22
+43.241.180.0/22
43.241.208.0/20
43.241.224.0/20
43.241.240.0/22
-43.241.248.0/22
-43.242.8.0/21
-43.242.16.0/20
-43.242.48.0/22
-43.242.53.0/24
-43.242.54.0/24
-43.242.56.0/21
-43.242.64.0/22
-43.242.72.0/21
-43.242.80.0/20
+43.242.72.0/22
+43.242.84.0/22
43.242.96.0/22
-43.242.144.0/20
-43.242.160.0/21
-43.242.168.0/22
+43.242.152.0/21
+43.242.164.0/22
43.242.180.0/22
-43.242.188.0/22
43.242.192.0/21
-43.242.204.0/22
-43.242.216.0/21
43.242.252.0/22
43.243.4.0/22
-43.243.8.0/21
+43.243.12.0/22
43.243.16.0/22
43.243.88.0/22
43.243.128.0/22
43.243.136.0/22
-43.243.144.0/21
+43.243.148.0/22
43.243.156.0/22
-43.243.180.0/22
43.243.228.0/22
43.243.232.0/22
43.243.244.0/22
-43.246.0.0/18
-43.246.64.0/19
-43.246.96.0/22
-43.246.112.0/24
-43.246.114.0/23
-43.246.228.0/22
-43.247.4.0/22
-43.247.8.0/22
-43.247.44.0/22
-43.247.48.0/22
+43.247.4.0/24
43.247.68.0/22
-43.247.76.0/22
43.247.84.0/22
-43.247.88.0/21
-43.247.96.0/21
-43.247.108.0/22
-43.247.112.0/22
-43.247.148.0/22
-43.247.152.0/22
+43.247.88.0/22
+43.247.100.0/22
43.247.176.0/20
43.247.196.0/22
-43.247.200.0/21
-43.247.208.0/20
-43.247.224.0/22
-43.247.232.0/21
-43.247.240.0/20
-43.248.0.0/21
-43.248.20.0/22
-43.248.28.0/22
+43.247.244.0/22
+43.247.248.0/22
+43.248.0.0/22
43.248.48.0/22
43.248.76.0/22
-43.248.80.0/20
-43.248.96.0/19
+43.248.96.0/21
+43.248.108.0/22
+43.248.112.0/21
43.248.128.0/20
-43.248.144.0/21
-43.248.176.0/20
43.248.192.0/20
-43.248.208.0/22
-43.248.228.0/22
43.248.232.0/22
43.248.244.0/22
-43.249.4.0/22
-43.249.120.0/22
-43.249.132.0/22
+43.249.0.0/23
+43.249.2.0/24
43.249.136.0/22
-43.249.144.0/20
-43.249.160.0/21
-43.249.168.0/22
+43.249.144.0/22
43.249.192.0/22
43.249.236.0/22
43.250.4.0/22
-43.250.12.0/22
-43.250.16.0/21
-43.250.28.0/22
-43.250.32.0/21
-43.250.96.0/21
-43.250.108.0/22
+43.250.32.0/22
+43.250.96.0/22
43.250.112.0/22
-43.250.128.0/22
-43.250.144.0/21
-43.250.160.0/22
+43.250.144.0/22
43.250.168.0/22
-43.250.176.0/22
-43.250.180.0/23
43.250.200.0/22
-43.250.212.0/22
-43.250.216.0/21
43.250.236.0/22
43.250.244.0/22
43.251.4.0/22
43.251.36.0/22
-43.251.118.0/23
-43.251.192.0/22
43.251.232.0/22
43.251.244.0/22
-43.252.48.0/22
-43.252.56.0/22
-43.254.0.0/21
+43.252.48.0/24
+43.254.0.0/22
43.254.8.0/22
43.254.24.0/22
-43.254.36.0/22
43.254.44.0/22
43.254.52.0/22
-43.254.72.0/22
-43.254.84.0/22
-43.254.88.0/21
+43.254.88.0/22
43.254.100.0/22
-43.254.104.0/22
-43.254.112.0/21
-43.254.128.0/22
-43.254.136.0/21
+43.254.104.0/23
+43.254.106.0/24
+43.254.116.0/22
+43.254.136.0/22
+43.254.140.0/23
43.254.144.0/20
43.254.168.0/21
-43.254.180.0/22
-43.254.184.0/21
-43.254.192.0/21
+43.254.192.0/22
43.254.200.0/22
-43.254.208.0/22
43.254.220.0/22
43.254.224.0/20
43.254.240.0/22
43.254.248.0/21
-43.255.0.0/21
-43.255.8.0/22
-43.255.48.0/22
-43.255.64.0/20
+43.255.0.0/22
+43.255.68.0/22
43.255.84.0/22
43.255.96.0/22
-43.255.144.0/22
-43.255.176.0/22
43.255.184.0/22
-43.255.192.0/22
-43.255.200.0/21
-43.255.208.0/21
-43.255.224.0/21
-43.255.232.0/22
-43.255.244.0/22
-44.30.120.0/24
+43.255.200.0/22
+43.255.212.0/22
+43.255.224.0/22
+45.12.88.0/24
+45.12.90.0/24
45.40.192.0/18
-45.65.16.0/20
-45.112.132.0/22
-45.112.188.0/22
-45.112.208.0/20
-45.112.228.0/22
-45.112.232.0/21
-45.113.12.0/22
-45.113.16.0/20
+45.61.200.0/23
+45.61.226.0/24
+45.65.20.0/22
+45.67.223.0/24
+45.81.34.0/24
+45.82.239.0/24
+45.112.232.0/22
+45.113.20.0/22
+45.113.24.0/22
45.113.40.0/22
-45.113.52.0/22
-45.113.56.0/22
-45.113.72.0/22
-45.113.144.0/21
-45.113.168.0/22
-45.113.176.0/22
-45.113.184.0/22
-45.113.200.0/21
-45.113.208.0/20
-45.113.240.0/22
-45.113.252.0/22
-45.114.0.0/22
-45.114.32.0/22
-45.114.40.0/22
-45.114.52.0/22
-45.114.96.0/22
-45.114.136.0/22
-45.114.196.0/22
-45.114.200.0/22
-45.114.228.0/22
-45.114.252.0/22
-45.115.18.0/23
+45.113.200.0/22
+45.113.206.0/24
45.115.44.0/22
-45.115.100.0/22
-45.115.120.0/22
-45.115.132.0/22
45.115.144.0/22
-45.115.156.0/22
45.115.164.0/22
45.115.200.0/22
-45.115.212.0/22
-45.115.244.0/22
-45.115.248.0/22
-45.116.16.0/22
-45.116.24.0/22
-45.116.32.0/21
+45.116.32.0/22
45.116.52.0/22
-45.116.96.0/21
+45.116.100.0/22
45.116.140.0/22
45.116.152.0/22
45.116.208.0/22
45.117.8.0/22
-45.117.20.0/22
45.117.68.0/22
-45.117.124.0/22
-45.117.252.0/22
45.119.60.0/22
-45.119.64.0/21
-45.119.72.0/22
-45.119.104.0/22
+45.119.68.0/22
+45.119.104.0/23
45.119.116.0/22
-45.119.232.0/22
45.120.100.0/22
-45.120.140.0/22
45.120.164.0/22
-45.120.240.0/22
-45.121.52.0/22
-45.121.64.0/21
-45.121.72.0/22
-45.121.92.0/22
-45.121.172.0/22
-45.121.176.0/22
-45.121.215.0/24
-45.121.240.0/20
-45.122.0.0/19
-45.122.32.0/21
-45.122.40.0/22
-45.122.60.0/22
-45.122.64.0/19
-45.122.96.0/20
-45.122.112.0/21
-45.122.160.0/19
-45.122.192.0/20
-45.122.208.0/21
-45.122.216.0/22
-45.123.28.0/22
-45.123.32.0/21
-45.123.44.0/22
-45.123.48.0/20
-45.123.64.0/20
-45.123.80.0/21
-45.123.88.0/22
-45.123.120.0/22
-45.123.128.0/21
-45.123.136.0/22
-45.123.148.0/22
-45.123.152.0/21
-45.123.164.0/22
+45.120.243.0/24
+45.123.117.0/24
+45.123.128.0/22
45.123.168.0/21
45.123.176.0/21
-45.123.184.0/22
-45.123.204.0/22
-45.123.212.0/22
-45.123.224.0/19
-45.124.0.0/22
45.124.20.0/22
-45.124.28.0/22
-45.124.32.0/21
45.124.68.0/22
45.124.76.0/22
45.124.80.0/22
-45.124.100.0/22
45.124.124.0/22
-45.124.172.0/22
-45.124.176.0/22
-45.124.208.0/22
-45.124.248.0/22
-45.125.24.0/22
+45.125.25.0/24
45.125.44.0/22
-45.125.52.0/22
45.125.56.0/22
-45.125.76.0/22
-45.125.80.0/20
-45.125.96.0/21
-45.125.136.0/22
-45.126.48.0/21
-45.126.100.0/22
-45.126.108.0/22
-45.126.112.0/21
+45.126.112.0/22
45.126.120.0/22
-45.126.212.0/22
-45.126.220.0/22
-45.127.8.0/21
-45.127.128.0/22
+45.127.129.0/24
45.127.144.0/21
-45.127.156.0/22
+45.150.236.0/23
45.248.8.0/22
-45.248.80.0/21
-45.248.96.0/20
-45.248.128.0/21
-45.248.204.0/22
-45.248.208.0/20
-45.248.224.0/19
-45.249.0.0/21
-45.249.12.0/22
-45.249.16.0/20
-45.249.32.0/21
-45.249.112.0/22
-45.249.188.0/22
-45.249.192.0/20
-45.249.208.0/21
-45.250.12.0/22
-45.250.16.0/22
-45.250.28.0/22
+45.248.108.0/23
+45.248.110.0/24
+45.249.212.0/22
45.250.32.0/21
45.250.40.0/22
-45.250.76.0/22
-45.250.80.0/20
-45.250.96.0/22
-45.250.104.0/21
-45.250.112.0/20
-45.250.128.0/20
-45.250.144.0/21
-45.250.152.0/22
-45.250.164.0/22
-45.250.180.0/22
-45.250.184.0/21
-45.250.192.0/22
-45.251.0.0/22
+45.250.152.0/23
+45.250.180.0/23
+45.250.184.0/22
+45.250.188.0/24
45.251.8.0/22
-45.251.16.0/21
-45.251.52.0/22
-45.251.84.0/22
+45.251.20.0/22
45.251.88.0/21
-45.251.96.0/21
-45.251.120.0/21
-45.251.140.0/22
-45.251.144.0/20
-45.251.160.0/19
-45.251.192.0/19
-45.251.224.0/22
-45.252.0.0/21
-45.252.9.0/24
-45.252.10.0/23
-45.252.12.0/22
-45.252.16.0/20
-45.252.32.0/20
-45.252.48.0/22
-45.252.88.0/21
-45.252.96.0/22
-45.252.104.0/21
-45.252.112.0/20
-45.252.128.0/20
-45.252.148.0/22
-45.252.152.0/21
-45.252.160.0/20
-45.252.176.0/22
-45.252.192.0/19
-45.252.224.0/21
-45.252.232.0/22
-45.253.0.0/18
-45.253.64.0/20
-45.253.80.0/21
-45.253.92.0/22
+45.251.100.0/22
+45.251.120.0/22
+45.252.0.0/22
+45.252.104.0/22
+45.253.24.0/22
+45.253.32.0/24
+45.253.60.0/22
45.253.96.0/20
45.253.112.0/21
-45.253.120.0/22
45.253.132.0/22
45.253.136.0/21
45.253.144.0/20
@@ -800,86 +443,88 @@
45.253.192.0/19
45.253.224.0/20
45.253.240.0/22
-45.254.0.0/20
-45.254.16.0/21
-45.254.28.0/22
-45.254.40.0/22
-45.254.48.0/20
-45.254.64.0/18
-45.254.128.0/18
-45.254.192.0/19
-45.254.224.0/21
-45.254.236.0/22
-45.254.240.0/22
-45.254.248.0/22
-45.255.0.0/18
-45.255.64.0/19
-45.255.96.0/20
-45.255.112.0/21
-45.255.120.0/22
-45.255.136.0/21
-45.255.144.0/20
-45.255.160.0/19
-45.255.192.0/19
-45.255.224.0/20
-45.255.240.0/21
-45.255.248.0/22
+45.254.8.0/22
+45.254.20.0/22
+45.254.48.0/23
+45.254.50.0/24
+45.254.64.0/20
+45.255.152.0/22
47.92.0.0/14
-47.96.0.0/11
-49.4.0.0/17
+47.96.0.0/12
+47.112.0.0/13
+47.120.0.0/14
+49.4.0.0/18
+49.4.64.0/19
+49.4.96.0/21
+49.4.104.0/22
+49.4.108.0/23
+49.4.110.0/24
+49.4.112.0/21
+49.4.120.0/22
+49.4.124.0/23
+49.4.126.0/24
49.4.128.0/22
-49.4.160.0/20
-49.4.178.0/23
-49.4.180.0/22
-49.4.184.0/21
-49.4.192.0/18
-49.5.0.0/16
-49.6.0.0/15
-49.51.0.0/19
-49.51.54.0/23
-49.51.56.0/21
-49.51.88.0/21
-49.51.96.0/19
-49.51.226.0/23
+49.7.0.0/16
49.52.0.0/14
49.64.0.0/11
49.112.0.0/13
49.120.0.0/14
-49.128.0.0/24
-49.128.2.0/23
-49.128.4.0/22
49.140.0.0/15
-49.152.0.0/14
49.208.0.0/14
-49.213.60.0/23
-49.220.0.0/14
+49.221.26.0/23
+49.221.64.0/19
+49.221.128.0/19
49.232.0.0/14
-49.239.0.0/18
49.239.192.0/18
-49.246.224.0/23
-49.246.228.0/22
-49.246.232.0/23
-49.246.236.0/22
-49.246.240.0/20
-52.80.0.0/14
+50.114.187.0/24
+52.80.0.0/15
+52.82.0.0/17
+52.82.128.0/23
+52.82.131.0/24
+52.82.132.0/24
+52.82.134.0/23
+52.82.136.0/24
+52.82.144.0/23
+52.82.148.0/22
+52.82.160.0/21
+52.82.170.0/23
+52.82.172.0/22
+52.82.176.0/21
+52.82.184.0/23
+52.82.187.0/24
+52.82.188.0/23
+52.82.190.0/24
+52.82.192.0/18
+52.83.0.0/16
52.130.0.0/15
-54.222.0.0/15
-57.176.0.0/15
-58.14.0.0/21
-58.14.16.0/20
-58.14.32.0/19
-58.14.64.0/18
-58.14.128.0/17
-58.15.0.0/16
+54.222.0.0/19
+54.222.32.0/21
+54.222.45.0/24
+54.222.46.0/23
+54.222.48.0/21
+54.222.57.0/24
+54.222.60.0/22
+54.222.64.0/23
+54.222.70.0/23
+54.222.72.0/21
+54.222.80.0/21
+54.222.88.0/22
+54.222.96.0/23
+54.222.100.0/22
+54.222.104.0/21
+54.222.112.0/22
+54.222.116.0/23
+54.222.128.0/17
+54.223.0.0/16
58.16.0.0/13
58.24.0.0/15
58.30.0.0/15
58.32.0.0/11
-58.65.232.0/21
-58.66.0.0/15
-58.68.224.0/19
-58.82.0.0/17
-58.83.0.0/16
+58.67.128.0/17
+58.68.236.0/24
+58.68.247.0/24
+58.82.0.0/22
+58.83.128.0/17
58.87.64.0/18
58.99.128.0/17
58.100.0.0/15
@@ -889,94 +534,123 @@
58.154.0.0/15
58.192.0.0/11
58.240.0.0/12
-59.32.0.0/11
+59.32.0.0/13
+59.40.0.0/15
+59.42.0.0/16
+59.44.0.0/14
+59.48.0.0/12
59.64.0.0/12
-59.80.0.0/15
-59.82.0.0/16
-59.83.0.0/17
-59.83.144.0/20
-59.83.160.0/20
+59.80.0.0/17
+59.81.8.0/23
+59.81.40.0/23
+59.81.46.0/24
+59.81.64.0/23
+59.81.82.0/23
+59.81.94.0/23
+59.81.102.0/23
+59.81.104.0/22
+59.82.0.0/17
+59.82.128.0/19
59.83.192.0/19
59.83.224.0/21
59.83.232.0/22
-59.107.0.0/16
-59.108.0.0/14
+59.107.0.0/17
+59.108.0.0/16
+59.110.0.0/16
+59.111.0.0/20
+59.111.17.0/24
+59.111.18.0/23
+59.111.21.0/24
+59.111.22.0/24
+59.111.24.0/21
+59.111.32.0/24
+59.111.35.0/24
+59.111.36.0/24
+59.111.40.0/21
+59.111.64.0/19
+59.111.96.0/21
+59.111.104.0/23
+59.111.107.0/24
+59.111.109.0/24
+59.111.111.0/24
+59.111.112.0/21
+59.111.128.0/20
+59.111.144.0/24
+59.111.152.0/21
+59.111.160.0/21
+59.111.168.0/22
+59.111.173.0/24
+59.111.175.0/24
+59.111.178.0/23
+59.111.181.0/24
+59.111.182.0/23
+59.111.190.0/24
+59.111.192.0/23
+59.111.198.0/23
+59.111.203.0/24
+59.111.205.0/24
+59.111.211.0/24
+59.111.214.0/24
+59.111.224.0/21
+59.111.232.0/23
+59.111.236.0/24
+59.111.238.0/23
+59.111.240.0/22
+59.111.244.0/24
+59.111.248.0/21
59.151.0.0/17
-59.152.16.0/20
-59.152.32.0/21
-59.152.64.0/20
-59.152.112.0/21
-59.153.4.0/22
+59.152.36.0/24
+59.152.38.0/23
+59.153.4.0/23
59.153.32.0/22
-59.153.60.0/22
-59.153.64.0/21
-59.153.72.0/22
59.153.92.0/22
-59.153.136.0/22
-59.153.152.0/22
59.153.164.0/22
-59.153.168.0/22
-59.153.173.0/24
-59.153.174.0/23
-59.153.176.0/20
-59.153.192.0/22
-59.155.0.0/16
+59.153.168.0/24
59.172.0.0/14
-59.191.0.0/17
-59.192.0.0/10
+59.252.0.0/16
60.0.0.0/11
-60.55.0.0/16
60.63.0.0/16
60.160.0.0/11
60.194.0.0/15
-60.200.0.0/13
+60.200.0.0/24
+60.204.0.0/14
60.208.0.0/12
-60.232.0.0/15
+60.232.0.0/16
60.235.0.0/16
60.245.128.0/17
60.247.0.0/16
60.252.0.0/16
60.253.128.0/17
60.255.0.0/16
-61.4.80.0/20
-61.4.176.0/20
-61.8.160.0/20
-61.14.212.0/22
-61.14.216.0/21
-61.14.240.0/21
-61.28.0.0/17
+61.4.80.0/23
+61.10.96.0/20
+61.10.128.0/20
+61.10.160.0/19
+61.15.0.0/18
+61.18.0.0/18
+61.18.64.0/19
+61.28.20.0/24
+61.28.22.0/24
+61.28.49.0/24
+61.28.108.0/24
+61.28.112.0/20
61.29.128.0/18
-61.29.192.0/19
-61.29.224.0/20
-61.29.251.0/24
-61.45.128.0/18
-61.45.224.0/20
61.47.128.0/18
61.48.0.0/13
61.87.192.0/18
-61.128.0.0/11
-61.160.0.0/12
-61.176.0.0/13
-61.184.0.0/15
-61.186.0.0/23
-61.186.3.0/24
-61.186.4.0/22
-61.186.8.0/21
-61.186.16.0/20
-61.186.32.0/19
-61.186.64.0/18
-61.186.128.0/17
-61.187.0.0/16
-61.188.0.0/14
+61.114.80.0/20
+61.128.0.0/10
61.232.0.0/14
-61.236.0.0/15
+61.237.0.0/16
61.240.0.0/14
62.234.0.0/16
63.140.0.0/24
63.140.3.0/24
+64.188.38.0/23
+64.188.40.0/22
+64.188.44.0/24
66.102.240.0/21
-66.102.248.0/23
-66.102.251.0/24
+66.102.248.0/22
66.102.252.0/24
66.102.254.0/23
68.79.0.0/18
@@ -991,2127 +665,934 @@
71.132.0.0/18
71.136.64.0/18
71.137.0.0/18
-74.122.26.0/23
+72.163.240.0/23
+72.163.248.0/22
+74.114.51.0/24
+74.214.161.0/24
+77.73.8.0/24
+81.23.208.0/20
81.68.0.0/14
81.173.18.0/23
81.173.20.0/22
81.173.28.0/24
82.156.0.0/15
+87.232.115.0/24
+87.254.207.0/24
+93.183.14.0/24
+93.183.18.0/24
94.191.0.0/17
-101.0.0.0/22
101.1.0.0/22
101.2.172.0/22
101.4.0.0/14
101.16.0.0/12
101.33.128.0/17
101.34.0.0/15
-101.36.0.0/18
101.36.64.0/20
-101.36.82.0/23
-101.36.84.0/22
-101.36.88.0/21
101.36.128.0/17
101.37.0.0/16
-101.38.0.0/15
-101.40.0.0/14
-101.48.0.0/15
+101.39.0.0/16
+101.40.0.0/16
+101.42.0.0/15
+101.49.148.0/23
+101.49.206.0/23
+101.49.208.0/24
+101.49.212.0/24
101.50.8.0/21
101.50.56.0/22
-101.52.0.0/16
+101.52.4.0/24
+101.52.6.0/24
+101.52.68.0/23
+101.52.112.0/21
+101.52.124.0/22
+101.52.128.0/20
+101.52.204.0/22
+101.52.212.0/22
+101.52.216.0/21
+101.52.232.0/23
+101.52.236.0/22
+101.52.240.0/20
101.53.100.0/22
-101.54.0.0/16
-101.55.224.0/21
101.64.0.0/13
101.72.0.0/14
101.76.0.0/15
101.78.0.0/22
-101.78.32.0/19
101.80.0.0/12
-101.96.0.0/21
-101.96.8.0/22
-101.96.16.0/20
-101.96.128.0/17
-101.99.96.0/19
-101.101.64.0/19
-101.101.100.0/24
-101.101.102.0/23
-101.101.104.0/21
-101.101.112.0/20
-101.102.64.0/19
-101.102.100.0/23
-101.102.102.0/24
-101.102.104.0/21
-101.102.112.0/20
-101.104.0.0/14
-101.110.64.0/19
-101.110.96.0/20
-101.110.116.0/22
-101.110.120.0/21
-101.120.0.0/14
-101.124.0.0/15
-101.126.0.0/16
+101.96.10.0/23
+101.96.128.0/23
+101.96.130.0/24
+101.96.132.0/23
+101.96.134.0/24
+101.96.142.0/23
+101.96.144.0/20
+101.96.192.0/18
+101.104.144.0/20
+101.104.160.0/20
+101.106.0.0/19
+101.124.0.0/20
+101.124.19.0/24
+101.124.22.0/24
+101.124.62.0/24
+101.125.0.0/22
+101.125.4.0/23
+101.125.6.0/24
+101.125.130.0/24
+101.125.250.0/23
+101.125.252.0/22
+101.126.0.0/18
+101.126.64.0/19
+101.126.96.0/20
+101.126.128.0/19
+101.126.172.0/22
+101.126.176.0/20
+101.126.192.0/19
+101.126.228.0/22
+101.126.232.0/21
+101.126.240.0/20
101.128.0.0/22
-101.128.8.0/21
-101.128.16.0/20
-101.128.32.0/19
101.129.0.0/16
-101.130.0.0/15
-101.132.0.0/14
-101.144.0.0/12
-101.192.0.0/18
-101.192.68.0/22
-101.192.84.0/22
-101.192.88.0/21
-101.192.132.0/22
-101.192.164.0/22
-101.192.168.0/21
-101.192.176.0/20
-101.192.192.0/19
-101.193.0.0/18
-101.193.100.0/22
-101.193.108.0/22
-101.193.112.0/22
-101.193.120.0/21
-101.193.132.0/22
-101.193.164.0/22
-101.193.168.0/21
-101.193.176.0/20
-101.193.192.0/19
-101.194.0.0/15
-101.196.0.0/14
+101.132.0.0/15
+101.198.0.0/22
+101.198.4.0/24
+101.198.196.0/22
+101.199.48.0/20
+101.199.112.0/24
+101.199.128.0/23
+101.199.196.0/22
+101.199.252.0/22
101.200.0.0/15
-101.203.128.0/19
-101.203.160.0/21
101.203.172.0/22
-101.203.176.0/20
101.204.0.0/14
101.224.0.0/13
-101.232.0.0/17
-101.232.128.0/18
-101.232.200.0/21
-101.232.212.0/22
-101.232.220.0/22
-101.232.224.0/22
-101.232.232.0/21
-101.232.240.0/22
-101.233.0.0/16
-101.234.64.0/21
101.234.76.0/22
-101.234.80.0/20
-101.234.96.0/19
-101.236.0.0/16
-101.237.0.0/17
-101.237.128.0/18
-101.237.192.0/19
-101.237.224.0/22
-101.237.228.0/24
-101.237.230.0/23
-101.237.243.0/24
-101.237.244.0/23
-101.237.246.0/24
-101.237.250.0/24
-101.237.253.0/24
-101.238.0.0/15
-101.240.0.0/13
+101.236.0.0/18
+101.236.64.0/20
+101.236.128.0/17
+101.237.0.0/19
+101.237.33.0/24
+101.237.34.0/23
+101.237.36.0/22
+101.237.40.0/24
+101.237.128.0/20
+101.240.0.0/14
+101.245.0.0/17
+101.245.128.0/20
+101.245.144.0/22
+101.245.152.0/21
+101.245.160.0/20
+101.246.172.0/22
+101.246.176.0/20
101.248.0.0/15
101.251.0.0/22
-101.251.8.0/21
-101.251.16.0/20
-101.251.32.0/19
-101.251.64.0/18
-101.251.128.0/17
+101.251.80.0/20
+101.251.128.0/19
+101.251.160.0/20
+101.251.176.0/22
+101.251.192.0/18
101.252.0.0/15
-101.254.0.0/16
+101.254.0.0/20
+101.254.32.0/19
+101.254.64.0/18
+101.254.128.0/17
103.1.8.0/22
103.1.20.0/22
-103.1.24.0/22
-103.1.72.0/22
-103.1.88.0/22
103.1.168.0/22
103.2.108.0/22
-103.2.156.0/22
-103.2.164.0/22
-103.2.188.0/23
-103.2.200.0/21
-103.2.208.0/21
-103.3.84.0/22
-103.3.88.0/21
-103.3.96.0/19
-103.3.128.0/20
-103.3.148.0/22
+103.2.208.0/22
+103.3.96.0/22
+103.3.112.0/20
+103.3.128.0/22
+103.3.136.0/21
103.3.152.0/21
-103.4.56.0/22
-103.4.168.0/22
-103.4.184.0/22
-103.4.224.0/22
-103.5.36.0/22
-103.5.52.0/22
-103.5.56.0/22
-103.5.152.0/22
-103.5.168.0/22
+103.5.52.0/24
103.5.192.0/23
103.5.194.0/24
-103.5.252.0/22
-103.6.76.0/22
103.6.220.0/22
103.7.140.0/22
-103.7.212.0/22
-103.7.216.0/21
-103.8.0.0/21
-103.8.8.0/22
103.8.32.0/22
103.8.52.0/22
103.8.68.0/22
-103.8.108.0/22
-103.8.156.0/22
-103.8.200.0/21
103.8.220.0/22
103.9.8.0/22
-103.9.24.0/22
-103.9.108.0/22
-103.9.152.0/22
-103.9.248.0/21
+103.9.252.0/22
103.10.0.0/22
-103.10.16.0/22
103.10.84.0/22
-103.10.140.0/22
-103.11.16.0/22
-103.11.168.0/22
-103.11.180.0/22
-103.12.32.0/22
-103.12.92.0/22
103.12.98.0/23
-103.12.136.0/22
103.12.184.0/22
103.12.232.0/22
-103.13.12.0/22
-103.13.124.0/22
-103.13.196.0/22
103.13.244.0/22
-103.14.84.0/22
103.14.132.0/22
103.14.136.0/22
-103.14.156.0/22
-103.14.240.0/22
103.15.4.0/22
-103.15.8.0/22
-103.15.16.0/22
-103.15.96.0/22
-103.15.200.0/22
-103.16.52.0/22
-103.16.80.0/21
-103.16.88.0/22
-103.16.108.0/22
103.16.124.0/22
103.17.40.0/22
-103.17.64.0/22
-103.17.120.0/22
-103.17.136.0/22
-103.17.160.0/22
-103.17.204.0/22
103.17.228.0/22
-103.18.186.0/23
-103.18.192.0/22
-103.18.208.0/21
-103.18.224.0/22
-103.19.12.0/22
-103.19.40.0/21
-103.19.64.0/21
-103.19.72.0/22
+103.19.46.0/23
+103.19.64.0/22
103.19.232.0/22
-103.20.12.0/22
-103.20.32.0/24
-103.20.34.0/23
-103.20.46.0/24
-103.20.68.0/22
+103.20.32.0/22
103.20.112.0/22
103.20.128.0/22
103.20.160.0/22
103.20.248.0/22
-103.21.98.0/23
-103.21.102.0/23
-103.21.112.0/21
+103.21.116.0/22
103.21.140.0/22
103.21.176.0/22
-103.22.0.0/18
-103.22.64.0/19
-103.22.100.0/22
-103.22.104.0/21
-103.22.112.0/20
103.22.188.0/22
-103.22.228.0/22
103.22.252.0/22
103.23.8.0/22
-103.23.56.0/22
-103.23.160.0/21
-103.23.176.0/22
-103.23.228.0/22
-103.24.24.0/22
+103.23.160.0/22
103.24.116.0/22
-103.24.128.0/22
-103.24.144.0/22
103.24.176.0/22
-103.24.184.0/22
-103.24.220.0/22
103.24.228.0/22
-103.24.252.0/22
-103.25.9.0/24
+103.24.248.0/22
103.25.20.0/22
-103.25.24.0/21
-103.25.32.0/21
-103.25.40.0/22
-103.25.48.0/22
-103.25.64.0/21
-103.25.148.0/22
-103.25.156.0/22
-103.25.216.0/22
+103.25.24.0/22
+103.25.36.0/22
+103.25.64.0/23
+103.25.156.0/24
103.26.0.0/22
103.26.64.0/22
103.26.76.0/22
-103.26.132.0/22
-103.26.156.0/22
-103.26.160.0/22
-103.26.228.0/22
-103.26.240.0/22
103.27.4.0/22
-103.27.12.0/22
103.27.24.0/22
-103.27.56.0/22
-103.27.96.0/22
-103.27.212.0/22
103.27.240.0/22
-103.28.4.0/22
-103.28.8.0/22
-103.28.184.0/22
+103.28.8.0/24
+103.28.147.0/24
103.28.204.0/22
103.28.212.0/22
103.29.16.0/22
103.29.24.0/23
-103.29.128.0/21
103.29.136.0/22
-103.29.236.0/23
-103.30.20.0/22
-103.30.96.0/22
-103.30.104.0/22
-103.30.148.0/22
-103.30.228.0/22
-103.30.236.0/22
-103.31.0.0/22
-103.31.48.0/20
-103.31.64.0/21
-103.31.148.0/22
-103.31.160.0/22
-103.31.168.0/22
+103.30.51.0/24
+103.30.148.0/24
+103.30.151.0/24
+103.31.48.0/22
103.31.200.0/22
-103.31.242.0/23
-103.32.0.0/15
-103.34.0.0/16
-103.35.0.0/19
-103.35.32.0/20
-103.35.48.0/22
103.35.104.0/22
-103.35.117.0/24
-103.35.119.0/24
-103.35.180.0/23
-103.35.220.0/22
-103.36.28.0/22
+103.35.254.0/24
103.36.36.0/22
-103.36.56.0/21
-103.36.64.0/22
-103.36.72.0/22
+103.36.63.0/24
103.36.96.0/22
103.36.132.0/22
103.36.136.0/22
-103.36.160.0/20
-103.36.192.0/19
-103.36.224.0/20
-103.36.240.0/21
+103.36.165.0/24
+103.36.168.0/24
+103.36.172.0/22
+103.36.192.0/20
+103.36.208.0/22
+103.36.220.0/22
+103.37.4.0/24
103.37.12.0/22
-103.37.16.0/22
-103.37.24.0/22
-103.37.44.0/22
-103.37.52.0/22
-103.37.56.0/22
+103.37.18.0/23
+103.37.44.0/23
+103.37.46.0/24
103.37.72.0/22
103.37.100.0/22
-103.37.104.0/22
103.37.136.0/21
103.37.144.0/20
103.37.160.0/21
103.37.172.0/22
-103.37.176.0/22
-103.37.188.0/22
-103.37.208.0/20
-103.37.252.0/22
-103.38.0.0/22
-103.38.32.0/22
-103.38.40.0/21
-103.38.56.0/22
-103.38.76.0/22
-103.38.84.0/22
-103.38.92.0/22
-103.38.96.0/22
+103.38.40.0/22
+103.38.76.0/24
+103.38.92.0/23
103.38.116.0/22
-103.38.132.0/22
-103.38.140.0/22
-103.38.224.0/21
+103.38.224.0/22
103.38.232.0/22
103.38.252.0/23
103.39.64.0/22
-103.39.88.0/22
-103.39.100.0/22
-103.39.104.0/22
-103.39.160.0/19
103.39.200.0/21
103.39.208.0/20
103.39.224.0/21
103.39.232.0/22
103.40.12.0/22
-103.40.16.0/20
-103.40.32.0/20
-103.40.88.0/22
-103.40.158.0/23
103.40.173.0/24
103.40.174.0/23
103.40.192.0/22
-103.40.212.0/22
-103.40.220.0/22
-103.40.228.0/22
-103.40.232.0/21
+103.40.232.0/22
103.40.240.0/20
103.41.0.0/22
-103.41.52.0/22
103.41.116.0/22
-103.41.140.0/22
-103.41.148.0/22
-103.41.152.0/22
-103.41.160.0/21
-103.41.220.0/22
-103.41.224.0/21
-103.41.232.0/22
-103.42.8.0/22
-103.42.24.0/22
-103.42.32.0/22
-103.42.64.0/21
+103.41.164.0/22
+103.41.232.0/23
103.42.76.0/22
-103.42.232.0/22
-103.43.96.0/21
-103.43.104.0/22
-103.43.124.0/22
-103.43.132.0/22
-103.43.184.0/22
-103.43.192.0/21
-103.43.208.0/22
-103.43.220.0/22
-103.43.224.0/22
-103.43.240.0/22
-103.44.56.0/22
+103.43.134.0/23
+103.43.184.0/21
+103.43.240.0/23
+103.44.58.0/23
103.44.80.0/22
-103.44.120.0/21
103.44.144.0/22
103.44.168.0/22
-103.44.176.0/20
-103.44.192.0/22
-103.44.196.0/23
-103.44.199.0/24
-103.44.200.0/21
-103.44.224.0/22
103.44.236.0/22
103.44.240.0/20
-103.45.0.0/18
103.45.72.0/21
-103.45.80.0/20
-103.45.96.0/19
-103.45.128.0/18
-103.45.192.0/19
-103.45.224.0/22
+103.45.128.0/19
+103.45.160.0/22
+103.45.168.0/23
+103.45.172.0/22
+103.45.176.0/20
103.45.248.0/22
-103.46.0.0/22
103.46.12.0/22
103.46.16.0/20
103.46.32.0/19
103.46.64.0/18
103.46.128.0/21
103.46.136.0/22
-103.46.152.0/21
-103.46.160.0/20
-103.46.176.0/21
-103.46.244.0/22
-103.46.248.0/22
-103.47.4.0/22
-103.47.20.0/22
-103.47.36.0/22
-103.47.40.0/22
+103.46.168.0/22
103.47.48.0/22
103.47.80.0/22
-103.47.96.0/22
-103.47.108.0/22
-103.47.116.0/22
-103.47.120.0/22
-103.47.136.0/21
-103.47.212.0/22
-103.48.52.0/22
-103.48.92.0/22
-103.48.148.0/22
-103.48.152.0/21
-103.48.202.0/23
-103.48.216.0/21
-103.48.224.0/20
-103.48.240.0/21
103.49.12.0/22
-103.49.20.0/22
-103.49.72.0/21
-103.49.96.0/22
103.49.108.0/22
-103.49.176.0/21
-103.49.197.0/24
-103.50.36.0/22
-103.50.44.0/22
-103.50.48.0/20
-103.50.64.0/21
-103.50.72.0/22
-103.50.108.0/22
-103.50.112.0/20
-103.50.132.0/22
-103.50.136.0/21
-103.50.172.0/22
-103.50.176.0/20
-103.50.192.0/21
-103.50.200.0/22
-103.50.220.0/22
-103.50.224.0/20
-103.50.240.0/21
-103.50.248.0/22
-103.52.40.0/22
-103.52.72.0/21
-103.52.80.0/21
-103.52.96.0/21
-103.52.104.0/22
-103.52.160.0/21
+103.49.176.0/24
+103.50.91.0/24
+103.52.100.0/22
103.52.172.0/22
103.52.176.0/22
-103.52.184.0/22
103.52.196.0/22
-103.53.64.0/21
-103.53.92.0/22
-103.53.100.0/22
103.53.124.0/22
-103.53.128.0/20
-103.53.144.0/22
-103.53.180.0/22
-103.53.204.0/22
-103.53.208.0/21
-103.53.236.0/22
-103.53.248.0/22
-103.54.8.0/22
-103.54.48.0/22
-103.54.160.0/21
-103.54.212.0/22
-103.54.240.0/22
-103.55.80.0/22
-103.55.120.0/22
-103.55.152.0/22
+103.53.208.0/24
+103.53.211.0/24
103.55.172.0/22
-103.55.204.0/22
-103.55.208.0/22
103.55.228.0/22
-103.55.236.0/22
-103.56.20.0/22
-103.56.32.0/22
-103.56.56.0/21
-103.56.72.0/21
-103.56.94.0/23
+103.56.60.0/22
+103.56.76.0/22
103.56.100.0/22
103.56.104.0/22
-103.56.140.0/22
103.56.152.0/22
-103.56.184.0/22
-103.56.200.0/22
103.57.12.0/22
-103.57.52.0/22
-103.57.56.0/22
-103.57.76.0/22
-103.57.136.0/22
-103.57.196.0/22
-103.58.24.0/22
-103.59.76.0/22
-103.59.112.0/21
-103.59.120.0/23
+103.57.136.0/23
+103.57.139.0/24
+103.57.203.0/24
+103.59.112.0/22
103.59.124.0/22
-103.59.128.0/22
-103.59.148.0/22
-103.59.164.0/22
+103.59.148.0/23
+103.59.151.0/24
103.59.168.0/23
-103.60.44.0/22
+103.60.32.0/22
103.60.164.0/22
-103.60.228.0/22
+103.60.228.0/23
103.60.236.0/22
103.61.60.0/22
-103.61.104.0/22
-103.61.140.0/22
-103.61.152.0/21
-103.61.160.0/22
-103.61.172.0/22
-103.61.176.0/22
+103.61.104.0/23
+103.61.153.0/24
+103.61.154.0/23
103.61.188.0/22
-103.62.24.0/22
-103.62.53.0/24
-103.62.55.0/24
-103.62.72.0/21
-103.62.80.0/21
-103.62.88.0/22
-103.62.96.0/19
-103.62.128.0/21
-103.62.156.0/22
-103.62.160.0/19
-103.62.192.0/22
-103.62.204.0/22
-103.62.208.0/20
-103.62.224.0/22
-103.63.32.0/19
-103.63.64.0/20
-103.63.80.0/21
-103.63.88.0/22
-103.63.140.0/22
-103.63.144.0/22
-103.63.152.0/22
+103.62.88.0/23
103.63.160.0/20
103.63.176.0/21
-103.63.184.0/22
-103.63.192.0/20
-103.63.208.0/22
-103.63.240.0/20
-103.64.0.0/21
+103.63.244.0/22
103.64.24.0/21
-103.64.32.0/19
-103.64.64.0/18
103.64.140.0/22
103.64.144.0/22
103.64.152.0/21
-103.64.160.0/19
-103.64.192.0/18
-103.65.0.0/20
-103.65.16.0/22
-103.65.48.0/20
-103.65.64.0/19
-103.65.100.0/22
-103.65.104.0/21
-103.65.112.0/22
-103.65.144.0/20
-103.65.160.0/20
-103.65.204.0/22
+103.64.208.0/21
+103.65.8.0/22
103.65.224.0/23
103.66.32.0/22
-103.66.40.0/22
-103.66.108.0/22
-103.66.200.0/22
-103.66.240.0/20
-103.67.0.0/21
-103.67.8.0/22
-103.67.100.0/22
-103.67.104.0/21
-103.67.112.0/20
-103.67.128.0/20
-103.67.144.0/21
-103.67.172.0/22
-103.67.192.0/22
-103.67.212.0/22
-103.67.252.0/22
-103.68.64.0/22
-103.68.88.0/22
-103.68.100.0/22
103.68.128.0/22
103.69.16.0/22
-103.69.62.0/23
103.70.8.0/22
-103.70.14.0/23
-103.70.148.0/22
-103.70.224.0/23
-103.70.227.0/24
-103.70.236.0/22
-103.70.252.0/22
-103.71.0.0/22
103.71.68.0/22
-103.71.72.0/22
-103.71.80.0/21
-103.71.88.0/22
-103.71.120.0/21
-103.71.128.0/22
-103.71.144.0/22
-103.71.196.0/22
-103.71.200.0/22
+103.71.200.0/23
+103.71.202.0/24
103.71.232.0/22
-103.72.12.0/22
-103.72.16.0/20
-103.72.32.0/20
-103.72.48.0/21
-103.72.112.0/21
-103.72.124.0/22
-103.72.128.0/21
-103.72.172.0/22
-103.72.180.0/22
-103.72.224.0/21
-103.72.233.0/24
-103.72.234.0/23
-103.72.236.0/22
-103.72.240.0/20
-103.73.0.0/19
-103.73.48.0/22
+103.72.113.0/24
+103.72.172.0/24
+103.73.48.0/24
103.73.116.0/22
-103.73.120.0/22
-103.73.128.0/20
+103.73.136.0/21
103.73.144.0/22
-103.73.168.0/22
-103.73.176.0/22
103.73.204.0/22
-103.73.208.0/22
-103.73.244.0/22
-103.73.248.0/22
103.74.24.0/21
-103.74.32.0/20
103.74.48.0/22
-103.74.56.0/21
103.74.80.0/22
-103.74.148.0/22
-103.74.152.0/21
-103.74.204.0/22
-103.74.232.0/22
-103.75.82.0/23
-103.75.88.0/21
-103.75.104.0/21
-103.75.112.0/22
-103.75.120.0/22
-103.75.128.0/22
-103.75.144.0/22
+103.75.104.0/22
103.75.152.0/22
103.76.60.0/22
-103.76.64.0/21
-103.76.72.0/22
-103.76.92.0/22
-103.76.216.0/21
+103.76.220.0/22
103.76.224.0/22
103.77.28.0/22
-103.77.52.0/22
-103.77.56.0/22
-103.77.88.0/22
103.77.132.0/22
-103.77.148.0/22
-103.77.220.0/22
-103.78.56.0/21
-103.78.64.0/21
-103.78.124.0/22
-103.78.172.0/22
-103.78.176.0/22
-103.78.196.0/22
+103.78.60.0/22
+103.78.126.0/23
103.78.228.0/22
-103.79.24.0/21
-103.79.36.0/22
-103.79.40.0/21
-103.79.56.0/21
-103.79.64.0/21
-103.79.80.0/21
-103.79.136.0/22
-103.79.188.0/22
-103.79.192.0/20
-103.79.208.0/21
+103.79.24.0/22
+103.79.200.0/22
103.79.228.0/23
-103.80.44.0/22
-103.80.72.0/22
-103.80.176.0/21
-103.80.184.0/22
-103.80.192.0/22
-103.80.200.0/22
-103.80.232.0/22
103.81.4.0/22
-103.81.8.0/22
-103.81.16.0/21
-103.81.44.0/22
103.81.48.0/22
-103.81.96.0/22
-103.81.120.0/22
-103.81.148.0/22
-103.81.164.0/22
-103.81.184.0/23
+103.81.72.0/22
+103.81.123.0/24
103.81.200.0/22
-103.81.232.0/22
-103.82.60.0/22
-103.82.68.0/22
-103.82.84.0/22
-103.82.104.0/22
103.82.224.0/22
-103.82.236.0/22
103.83.44.0/22
-103.83.52.0/22
-103.83.60.0/22
103.83.64.0/22
103.83.72.0/22
-103.83.112.0/22
-103.84.0.0/22
-103.84.12.0/22
-103.84.16.0/20
-103.84.48.0/22
-103.84.64.0/22
-103.84.72.0/22
-103.84.170.0/23
-103.85.44.0/22
-103.85.48.0/22
103.85.84.0/22
-103.85.136.0/22
-103.85.144.0/22
+103.85.147.0/24
103.85.164.0/22
103.85.168.0/21
103.85.176.0/22
-103.85.186.0/23
-103.86.28.0/22
-103.86.32.0/22
-103.86.60.0/22
-103.86.204.0/22
-103.86.208.0/20
-103.86.224.0/19
-103.87.0.0/21
-103.87.20.0/22
-103.87.32.0/22
-103.87.96.0/22
-103.87.132.0/22
103.87.180.0/22
-103.87.224.0/22
-103.88.4.0/22
-103.88.8.0/21
-103.88.16.0/21
103.88.32.0/21
-103.88.60.0/22
103.88.64.0/22
-103.88.72.0/22
103.88.96.0/22
-103.88.164.0/22
-103.88.212.0/22
-103.89.28.0/22
-103.89.96.0/20
-103.89.112.0/21
-103.89.148.0/22
-103.89.172.0/22
103.89.184.0/21
103.89.192.0/19
103.89.224.0/21
-103.90.52.0/22
103.90.56.0/23
103.90.92.0/22
-103.90.100.0/22
-103.90.104.0/21
-103.90.112.0/20
-103.90.128.0/21
103.90.152.0/22
-103.90.168.0/22
103.90.176.0/22
103.90.188.0/22
-103.90.192.0/22
-103.91.36.0/22
-103.91.40.0/22
-103.91.108.0/22
-103.91.112.0/23
-103.91.138.0/23
-103.91.152.0/22
103.91.176.0/22
-103.91.200.0/22
-103.91.208.0/21
-103.91.236.0/22
-103.91.252.0/22
-103.92.0.0/20
-103.92.48.0/20
-103.92.64.0/20
-103.92.80.0/22
-103.92.86.0/24
+103.91.208.0/22
103.92.88.0/22
-103.92.108.0/22
-103.92.124.0/22
-103.92.132.0/22
-103.92.156.0/22
-103.92.164.0/22
-103.92.168.0/21
-103.92.176.0/20
-103.92.192.0/22
-103.92.236.0/22
-103.92.240.0/20
-103.93.0.0/21
-103.93.28.0/22
-103.93.84.0/22
-103.93.142.0/23
-103.93.152.0/22
103.93.180.0/22
103.93.204.0/22
103.94.12.0/22
-103.94.20.0/22
-103.94.32.0/20
-103.94.72.0/22
-103.94.88.0/22
-103.94.116.0/22
-103.94.160.0/22
103.94.200.0/22
-103.95.52.0/22
103.95.68.0/22
-103.95.88.0/21
-103.95.128.0/22
-103.95.136.0/21
-103.95.144.0/22
-103.95.152.0/22
-103.95.216.0/21
-103.95.236.0/22
-103.95.240.0/20
+103.95.252.0/22
103.96.8.0/22
-103.96.124.0/22
-103.96.136.0/22
-103.96.152.0/21
-103.96.160.0/19
-103.96.192.0/20
-103.96.208.0/21
-103.96.216.0/22
+103.96.148.0/22
+103.96.214.0/23
103.96.224.0/23
-103.97.8.0/21
-103.97.16.0/20
-103.97.36.0/22
-103.97.40.0/22
-103.97.56.0/22
-103.97.60.0/23
-103.97.64.0/21
-103.97.72.0/22
-103.97.112.0/21
-103.97.144.0/21
-103.97.188.0/22
-103.97.192.0/22
-103.97.229.0/24
-103.98.0.0/23
-103.98.40.0/21
-103.98.48.0/22
-103.98.56.0/22
-103.98.80.0/22
-103.98.88.0/21
-103.98.96.0/21
-103.98.124.0/22
-103.98.136.0/21
-103.98.144.0/22
-103.98.164.0/22
-103.98.168.0/22
-103.98.180.0/22
-103.98.196.0/22
-103.98.216.0/21
-103.98.224.0/21
-103.98.232.0/22
-103.98.240.0/20
-103.99.53.0/24
-103.99.54.0/23
-103.99.56.0/22
+103.97.60.0/24
+103.97.112.0/23
+103.97.144.0/22
+103.98.44.0/22
+103.98.92.0/22
+103.98.96.0/22
+103.98.125.0/24
+103.98.127.0/24
+103.98.220.0/22
+103.98.248.0/23
+103.98.252.0/22
103.99.104.0/22
-103.99.116.0/22
-103.99.120.0/22
-103.99.152.0/22
-103.99.220.0/22
-103.99.232.0/21
-103.100.0.0/22
-103.100.32.0/22
-103.100.40.0/22
-103.100.48.0/21
-103.100.56.0/22
-103.100.62.0/24
+103.99.178.0/24
103.100.64.0/22
-103.100.88.0/22
-103.100.116.0/22
-103.100.144.0/22
-103.100.236.0/22
-103.100.240.0/22
-103.100.248.0/21
-103.101.8.0/21
-103.101.60.0/22
-103.101.120.0/21
-103.101.144.0/21
+103.101.124.0/23
103.101.180.0/22
-103.101.184.0/22
-103.102.76.0/22
-103.102.80.0/22
-103.102.168.0/21
-103.102.180.0/22
-103.102.184.0/21
-103.102.192.0/21
+103.102.196.0/24
103.102.200.0/22
-103.102.208.0/21
-103.103.12.0/22
-103.103.16.0/22
-103.103.36.0/22
-103.103.72.0/22
-103.103.188.0/22
-103.103.200.0/21
-103.103.220.0/22
-103.103.224.0/21
-103.103.232.0/22
-103.103.248.0/21
-103.104.0.0/21
-103.104.36.0/22
-103.104.40.0/22
-103.104.64.0/22
-103.104.104.0/22
-103.104.152.0/22
-103.104.188.0/22
+103.102.213.0/24
+103.102.214.0/24
+103.103.12.0/24
+103.103.36.0/24
103.104.252.0/22
-103.105.0.0/21
+103.105.0.0/22
103.105.12.0/22
-103.105.16.0/22
103.105.60.0/22
-103.105.116.0/22
-103.105.133.0/24
-103.105.134.0/23
103.105.180.0/22
103.105.184.0/22
-103.105.200.0/21
+103.105.200.0/23
+103.105.202.0/24
103.105.220.0/22
103.106.36.0/22
-103.106.40.0/21
-103.106.60.0/22
-103.106.68.0/22
-103.106.96.0/22
-103.106.120.0/22
-103.106.128.0/21
-103.106.160.0/22
-103.106.196.0/22
-103.106.202.0/24
-103.106.212.0/22
103.106.252.0/22
103.107.0.0/22
-103.107.28.0/22
-103.107.32.0/22
-103.107.44.0/22
-103.107.72.0/22
-103.107.108.0/22
-103.107.164.0/22
-103.107.168.0/22
-103.107.188.0/22
-103.107.192.0/22
-103.107.208.0/20
-103.108.52.0/22
-103.108.160.0/21
-103.108.196.0/22
-103.108.208.0/21
-103.108.224.0/22
-103.108.244.0/22
+103.107.216.0/21
+103.108.244.0/24
+103.108.247.0/24
103.109.20.0/22
-103.109.48.0/22
-103.109.88.0/22
-103.109.248.0/22
-103.110.92.0/22
-103.110.116.0/22
103.110.132.0/22
103.110.136.0/22
-103.110.152.0/21
-103.110.188.0/22
-103.110.204.0/22
-103.111.64.0/22
+103.111.64.0/24
103.111.172.0/22
-103.111.252.0/22
-103.112.72.0/22
-103.112.88.0/21
-103.112.108.0/22
-103.112.112.0/21
-103.112.140.0/22
103.113.4.0/22
-103.113.144.0/22
-103.113.220.0/22
-103.113.232.0/21
-103.114.4.0/22
-103.114.28.0/22
-103.114.68.0/22
103.114.100.0/22
-103.114.148.0/22
-103.114.156.0/23
-103.114.176.0/22
-103.114.212.0/22
+103.114.212.0/23
103.114.236.0/22
-103.114.240.0/22
-103.115.52.0/22
-103.115.68.0/22
103.115.92.0/22
103.115.120.0/22
-103.115.148.0/22
103.115.248.0/22
-103.116.40.0/22
-103.116.76.0/22
+103.116.76.0/23
+103.116.78.0/24
103.116.92.0/22
-103.116.120.0/22
-103.116.128.0/22
+103.116.120.0/23
+103.116.123.0/24
103.116.138.0/23
-103.116.150.0/24
-103.116.184.0/22
-103.116.220.0/22
-103.116.224.0/21
103.117.16.0/22
-103.117.73.0/24
-103.117.74.0/23
-103.117.88.0/22
-103.117.188.0/22
103.117.220.0/22
103.118.52.0/22
-103.118.56.0/21
-103.118.64.0/21
-103.118.72.0/22
-103.118.88.0/22
-103.118.210.0/23
-103.118.212.0/22
-103.118.216.0/22
-103.118.248.0/22
-103.119.28.0/22
-103.119.115.0/24
-103.119.156.0/22
-103.119.180.0/22
-103.119.200.0/22
-103.120.52.0/22
+103.118.60.0/22
+103.118.173.0/24
103.120.72.0/22
103.120.88.0/22
-103.120.96.0/21
-103.120.140.0/22
-103.120.196.0/22
-103.120.224.0/22
103.121.52.0/22
-103.121.160.0/21
+103.121.164.0/23
+103.121.166.0/24
103.121.250.0/24
-103.121.252.0/22
103.122.48.0/22
-103.122.192.0/22
-103.122.240.0/22
-103.123.4.0/22
-103.123.56.0/22
-103.123.88.0/21
-103.123.116.0/22
-103.123.176.0/22
-103.123.200.0/21
-103.123.208.0/21
-103.124.24.0/22
-103.124.48.0/22
-103.124.64.0/22
-103.124.212.0/22
-103.124.216.0/22
-103.125.20.0/22
-103.125.44.0/22
-103.125.132.0/22
-103.125.164.0/22
-103.125.196.0/22
+103.123.4.0/23
103.125.236.0/22
-103.125.249.0/24
-103.125.250.0/23
-103.126.0.0/22
-103.126.16.0/22
-103.126.44.0/22
+103.126.1.0/24
103.126.124.0/22
-103.126.128.0/21
-103.130.132.0/22
-103.130.160.0/22
-103.130.228.0/22
-103.131.20.0/22
-103.131.36.0/22
103.131.138.0/23
103.131.152.0/22
-103.131.168.0/22
-103.131.224.0/21
-103.131.240.0/22
103.132.22.0/23
-103.132.48.0/22
-103.132.60.0/22
-103.132.64.0/20
-103.132.80.0/22
-103.132.104.0/21
-103.132.112.0/21
-103.132.120.0/22
-103.132.161.0/24
-103.132.188.0/22
-103.132.208.0/21
-103.133.12.0/22
-103.133.40.0/22
-103.133.128.0/22
-103.133.232.0/22
-103.134.196.0/22
-103.134.232.0/23
-103.135.80.0/22
-103.135.124.0/22
-103.135.148.0/22
-103.135.156.0/22
-103.135.160.0/21
-103.135.176.0/22
-103.135.184.0/22
-103.135.192.0/21
-103.135.236.0/22
-103.136.128.0/22
-103.136.232.0/22
-103.137.58.0/23
+103.132.212.0/23
+103.133.128.0/23
+103.135.160.0/22
+103.135.164.0/23
+103.135.192.0/23
+103.135.195.0/24
+103.135.196.0/22
103.137.60.0/24
-103.137.76.0/22
-103.137.136.0/23
-103.137.180.0/22
-103.137.236.0/22
-103.138.2.0/23
-103.138.134.0/23
-103.138.208.0/23
-103.138.220.0/23
-103.138.248.0/23
-103.139.22.0/23
-103.139.92.0/23
-103.139.134.0/23
103.139.172.0/23
-103.139.204.0/23
103.139.212.0/23
103.140.14.0/23
-103.140.140.0/23
-103.140.144.0/23
-103.140.192.0/23
103.141.10.0/23
-103.141.58.0/23
-103.141.128.0/23
-103.141.186.0/23
-103.141.242.0/23
-103.142.28.0/23
-103.142.58.0/23
-103.142.82.0/23
103.142.96.0/23
-103.142.122.0/23
-103.142.128.0/23
-103.142.154.0/23
-103.142.156.0/23
-103.142.172.0/23
-103.142.180.0/23
-103.142.186.0/23
103.142.234.0/23
-103.142.238.0/23
-103.142.248.0/23
103.143.16.0/22
-103.143.74.0/23
-103.143.120.0/23
-103.143.124.0/23
-103.143.132.0/22
-103.143.174.0/23
-103.143.228.0/23
-103.144.41.0/24
+103.143.92.0/23
+103.143.230.0/24
103.144.66.0/23
-103.144.70.0/23
-103.144.72.0/23
-103.144.136.0/23
+103.144.70.0/24
103.144.158.0/23
103.145.42.0/23
-103.145.93.0/24
-103.145.98.0/23
-103.145.188.0/23
-103.146.72.0/23
-103.146.91.0/24
103.146.126.0/23
-103.146.138.0/23
-103.146.236.0/23
-103.147.124.0/23
-103.147.206.0/23
-103.148.174.0/23
-103.149.6.0/23
-103.149.17.0/24
-103.149.44.0/23
-103.149.210.0/23
-103.149.214.0/23
-103.149.220.0/23
-103.149.242.0/23
+103.147.124.0/24
+103.149.242.0/24
103.149.244.0/22
-103.150.10.0/23
103.150.24.0/23
-103.150.66.0/23
-103.150.72.0/23
-103.150.122.0/23
-103.150.126.0/23
-103.150.128.0/22
-103.150.146.0/23
+103.150.36.0/23
103.150.164.0/23
-103.150.172.0/23
-103.150.200.0/23
-103.150.216.0/23
-103.150.244.0/23
-103.151.142.0/23
103.151.148.0/23
-103.151.158.0/23
-103.152.28.0/22
+103.152.28.0/23
103.152.56.0/23
103.152.76.0/23
-103.152.120.0/22
-103.152.152.0/23
-103.152.168.0/23
+103.152.150.0/23
103.152.186.0/23
-103.152.192.0/23
-103.152.200.0/23
-103.152.208.0/23
-103.152.224.0/23
-103.152.250.0/23
-103.153.114.0/23
-103.153.122.0/23
-103.153.132.0/23
-103.153.146.0/23
-103.153.160.0/23
-103.154.18.0/23
+103.152.209.0/24
+103.152.224.0/24
103.154.30.0/23
-103.154.32.0/23
-103.154.40.0/23
-103.154.66.0/23
+103.154.41.0/24
103.154.162.0/23
-103.154.164.0/23
-103.154.168.0/23
-103.155.14.0/23
-103.155.34.0/23
-103.155.48.0/23
103.155.76.0/23
-103.155.101.0/24
-103.155.214.0/23
-103.156.28.0/23
103.156.68.0/23
-103.156.104.0/23
-103.156.158.0/23
103.156.174.0/23
103.156.186.0/23
-103.156.228.0/23
-103.157.30.0/23
-103.157.174.0/23
-103.157.212.0/23
-103.157.234.0/23
-103.157.254.0/23
103.158.0.0/23
-103.158.8.0/23
-103.158.16.0/23
-103.158.200.0/23
-103.158.224.0/23
103.159.124.0/23
-103.159.134.0/23
-103.159.142.0/23
-103.160.32.0/22
-103.160.112.0/22
-103.160.244.0/23
-103.160.254.0/23
-103.161.14.0/23
-103.161.102.0/23
-103.161.208.0/23
103.161.220.0/23
103.161.254.0/23
103.162.10.0/23
-103.162.32.0/23
-103.162.116.0/23
-103.163.28.0/23
-103.163.32.0/23
103.163.46.0/23
-103.163.74.0/23
-103.163.180.0/23
-103.164.4.0/23
-103.164.32.0/23
-103.164.40.0/22
-103.164.64.0/23
-103.164.76.0/23
-103.164.178.0/23
-103.165.44.0/23
-103.165.52.0/23
-103.165.82.0/23
+103.163.180.0/24
+103.164.32.0/24
103.165.110.0/23
-103.166.20.0/23
-103.166.50.0/23
-103.166.52.0/22
-103.166.84.0/23
-103.166.138.0/23
-103.167.0.0/23
-103.167.36.0/23
-103.167.100.0/23
-103.168.98.0/23
-103.168.170.0/23
103.169.50.0/23
103.169.62.0/23
-103.169.108.0/23
-103.169.162.0/23
-103.169.202.0/23
-103.169.216.0/24
103.170.4.0/23
-103.170.134.0/23
103.170.212.0/23
-103.171.32.0/23
-103.171.166.0/24
-103.171.214.0/23
-103.172.32.0/23
-103.172.160.0/23
-103.173.102.0/23
-103.173.182.0/23
-103.173.184.0/23
103.174.94.0/23
-103.175.114.0/23
-103.175.118.0/23
-103.175.197.0/24
-103.176.52.0/23
-103.176.222.0/23
-103.176.244.0/23
103.177.28.0/23
-103.177.44.0/23
-103.177.71.0/24
-103.177.162.0/23
-103.178.240.0/23
-103.179.76.0/22
-103.180.108.0/24
-103.180.226.0/23
-103.181.234.0/23
-103.183.26.0/23
+103.179.78.0/23
+103.181.234.0/24
103.183.66.0/23
103.183.122.0/23
103.183.124.0/23
103.184.46.0/23
-103.184.60.0/23
-103.185.78.0/23
-103.185.80.0/23
103.186.4.0/23
103.186.108.0/23
-103.186.162.0/24
-103.186.228.0/23
103.189.92.0/23
-103.189.152.0/22
-103.190.20.0/23
-103.190.71.0/24
-103.190.104.0/23
-103.190.116.0/22
+103.189.154.0/23
+103.190.118.0/23
103.190.122.0/23
-103.191.102.0/23
+103.191.102.0/24
103.191.242.0/23
-103.192.0.0/19
-103.192.48.0/21
-103.192.56.0/22
-103.192.84.0/22
-103.192.88.0/21
-103.192.96.0/20
-103.192.112.0/22
-103.192.128.0/20
-103.192.144.0/22
-103.192.164.0/22
+103.192.0.0/22
+103.192.8.0/21
+103.192.16.0/20
+103.192.132.0/22
103.192.188.0/22
103.192.208.0/21
-103.192.216.0/22
103.192.252.0/22
-103.193.40.0/21
-103.193.120.0/22
-103.193.140.0/22
-103.193.160.0/22
103.193.188.0/22
103.193.192.0/22
-103.193.212.0/22
-103.193.216.0/21
-103.193.224.0/20
-103.194.16.0/22
-103.195.104.0/22
-103.195.112.0/22
-103.195.152.0/22
-103.195.160.0/22
-103.196.64.0/22
-103.196.72.0/22
+103.196.64.0/24
103.196.88.0/21
-103.196.96.0/22
-103.196.168.0/22
103.197.0.0/22
-103.197.180.0/22
103.197.228.0/22
-103.198.20.0/22
103.198.60.0/22
-103.198.64.0/22
-103.198.72.0/22
103.198.124.0/22
-103.198.156.0/22
-103.198.180.0/22
-103.198.196.0/22
-103.198.216.0/21
-103.198.224.0/20
-103.198.240.0/21
-103.199.164.0/22
-103.199.196.0/22
-103.199.228.0/22
-103.199.248.0/21
-103.200.52.0/22
-103.200.64.0/21
103.200.136.0/21
-103.200.144.0/20
-103.200.160.0/19
-103.200.192.0/22
+103.200.144.0/21
103.200.220.0/22
-103.200.224.0/19
-103.201.0.0/20
-103.201.16.0/21
-103.201.28.0/22
-103.201.32.0/19
-103.201.64.0/22
-103.201.76.0/22
-103.201.80.0/20
-103.201.96.0/20
-103.201.112.0/21
-103.201.120.0/22
-103.201.152.0/21
-103.201.160.0/19
-103.201.192.0/18
+103.200.224.0/24
+103.201.192.0/24
+103.201.196.0/24
+103.201.200.0/24
103.202.0.0/19
103.202.32.0/20
-103.202.56.0/22
-103.202.60.0/24
-103.202.62.0/23
-103.202.64.0/22
-103.202.68.0/23
-103.202.72.0/21
-103.202.80.0/20
-103.202.96.0/19
+103.202.92.0/22
+103.202.96.0/20
+103.202.112.0/22
+103.202.120.0/21
103.202.128.0/20
103.202.144.0/22
-103.202.152.0/24
-103.202.154.0/23
-103.202.156.0/22
-103.202.160.0/19
-103.202.192.0/20
-103.202.212.0/22
-103.202.228.0/22
-103.202.236.0/22
-103.202.240.0/20
-103.203.0.0/19
-103.203.32.0/22
-103.203.96.0/19
-103.203.128.0/22
+103.203.96.0/22
103.203.140.0/22
-103.203.164.0/22
-103.203.168.0/22
-103.203.192.0/22
-103.203.200.0/22
-103.203.212.0/22
103.203.216.0/22
-103.204.24.0/22
103.204.72.0/22
-103.204.88.0/22
-103.204.112.0/22
-103.204.136.0/21
-103.204.144.0/21
-103.204.152.0/22
-103.204.196.0/22
-103.204.216.0/23
-103.204.232.0/21
103.205.4.0/22
-103.205.40.0/21
-103.205.52.0/22
-103.205.108.0/22
-103.205.116.0/22
-103.205.136.0/22
-103.205.162.0/24
103.205.188.0/22
-103.205.192.0/21
-103.205.200.0/22
-103.205.236.0/22
-103.205.248.0/21
-103.206.0.0/22
-103.206.44.0/22
-103.206.148.0/22
-103.207.104.0/22
-103.207.184.0/21
-103.207.192.0/20
-103.207.208.0/21
-103.207.220.0/22
+103.205.192.0/22
+103.205.252.0/22
103.207.228.0/22
-103.207.232.0/22
103.208.12.0/22
-103.208.16.0/22
-103.208.28.0/22
-103.208.40.0/21
103.208.48.0/22
103.209.112.0/22
103.209.136.0/22
-103.209.200.0/22
-103.209.208.0/22
-103.209.216.0/22
-103.210.96.0/22
-103.210.156.0/22
-103.210.160.0/19
-103.210.216.0/22
+103.210.160.0/22
+103.210.170.0/23
103.211.44.0/22
-103.211.96.0/22
-103.211.156.0/22
-103.211.164.0/22
103.211.220.0/22
-103.211.224.0/22
-103.211.248.0/22
-103.212.0.0/20
-103.212.44.0/22
-103.212.48.0/22
-103.212.84.0/22
-103.212.100.0/22
-103.212.108.0/22
-103.212.148.0/22
-103.212.164.0/22
-103.212.196.0/22
-103.212.200.0/22
-103.212.252.0/22
-103.213.40.0/21
-103.213.48.0/20
+103.212.1.0/24
+103.212.2.0/24
+103.212.4.0/22
+103.212.12.0/22
+103.212.48.0/23
+103.212.109.0/24
+103.213.49.0/24
+103.213.50.0/23
+103.213.52.0/22
+103.213.56.0/21
103.213.64.0/19
103.213.96.0/22
103.213.132.0/22
-103.213.136.0/21
-103.213.144.0/20
+103.213.144.0/23
+103.213.148.0/22
103.213.160.0/19
-103.213.196.0/22
-103.213.226.0/23
-103.213.232.0/23
103.214.48.0/22
-103.214.84.0/22
-103.214.212.0/22
-103.214.240.0/21
-103.215.28.0/22
-103.215.32.0/21
-103.215.44.0/22
-103.215.100.0/22
-103.215.108.0/22
-103.215.116.0/22
-103.215.120.0/22
+103.215.36.0/22
+103.215.44.0/24
103.215.140.0/22
-103.216.4.0/22
-103.216.8.0/21
-103.216.16.0/20
-103.216.32.0/20
-103.216.64.0/22
-103.216.108.0/22
103.216.136.0/22
103.216.152.0/22
-103.216.156.0/23
-103.216.224.0/22
-103.216.240.0/20
-103.217.0.0/18
-103.217.168.0/22
-103.217.180.0/22
+103.216.252.0/24
103.217.184.0/21
103.217.192.0/20
-103.218.8.0/21
-103.218.16.0/21
-103.218.28.0/22
-103.218.32.0/19
-103.218.64.0/19
-103.218.178.0/23
-103.218.192.0/20
-103.218.208.0/21
103.218.216.0/22
-103.219.24.0/21
+103.219.28.0/22
103.219.32.0/21
-103.219.64.0/22
-103.219.84.0/22
-103.219.88.0/21
-103.219.96.0/21
+103.219.92.0/24
+103.219.100.0/23
103.219.176.0/22
103.219.184.0/22
-103.220.48.0/20
+103.220.52.0/22
+103.220.56.0/22
103.220.64.0/22
103.220.92.0/22
-103.220.96.0/20
-103.220.116.0/22
-103.220.120.0/21
-103.220.128.0/20
-103.220.144.0/21
-103.220.152.0/22
-103.220.160.0/19
-103.220.192.0/21
-103.220.200.0/22
-103.220.240.0/21
-103.221.88.0/22
-103.221.96.0/19
-103.221.128.0/18
-103.221.192.0/20
-103.222.0.0/20
-103.222.16.0/22
-103.222.24.0/21
-103.222.32.0/19
-103.222.64.0/18
-103.222.128.0/18
-103.222.192.0/19
-103.222.224.0/21
-103.222.232.0/22
-103.222.240.0/21
-103.223.16.0/20
-103.223.32.0/19
-103.223.64.0/19
-103.223.96.0/20
-103.223.112.0/21
-103.223.124.0/22
-103.223.128.0/21
-103.223.140.0/22
+103.220.124.0/22
+103.220.128.0/19
+103.220.160.0/21
+103.220.240.0/22
+103.221.140.0/22
+103.222.33.0/24
+103.222.40.0/22
+103.222.176.0/21
+103.222.184.0/22
+103.222.216.0/22
+103.223.132.0/22
103.223.144.0/20
-103.223.160.0/20
-103.223.176.0/21
-103.223.188.0/22
-103.223.192.0/18
-103.224.0.0/22
-103.224.40.0/21
-103.224.60.0/22
-103.224.220.0/22
-103.224.224.0/21
103.224.232.0/22
-103.225.18.0/24
-103.226.16.0/22
-103.226.40.0/22
103.226.57.0/24
-103.226.58.0/23
-103.226.60.0/22
-103.226.80.0/22
-103.226.116.0/23
-103.226.132.0/22
-103.226.156.0/22
-103.226.180.0/22
-103.226.196.0/22
-103.227.48.0/22
-103.227.72.0/21
+103.227.76.0/22
103.227.80.0/22
-103.227.100.0/22
103.227.120.0/22
-103.227.132.0/22
103.227.136.0/22
-103.227.196.0/22
-103.227.204.0/22
-103.227.212.0/22
103.227.228.0/22
-103.228.12.0/22
-103.228.88.0/22
103.228.136.0/22
103.228.160.0/22
-103.228.176.0/22
-103.228.204.0/22
+103.228.204.0/23
103.228.208.0/22
103.228.228.0/22
-103.228.232.0/22
-103.229.20.0/22
-103.229.136.0/22
103.229.148.0/22
103.229.172.0/22
103.229.212.0/22
103.229.216.0/21
-103.229.228.0/22
103.229.236.0/22
-103.229.240.0/22
-103.230.0.0/22
-103.230.28.0/22
-103.230.44.0/22
-103.230.96.0/22
103.230.110.0/23
-103.230.196.0/22
-103.230.200.0/21
+103.230.200.0/22
103.230.212.0/22
103.230.236.0/22
-103.231.16.0/21
+103.231.16.0/24
103.231.64.0/21
-103.231.180.0/22
-103.231.185.0/24
-103.231.186.0/23
-103.231.244.0/22
-103.232.4.0/22
103.232.144.0/22
103.232.166.0/23
-103.232.188.0/22
103.233.4.0/22
-103.233.44.0/22
103.233.52.0/22
-103.233.104.0/22
103.233.128.0/22
-103.233.136.0/22
+103.233.138.0/24
103.233.162.0/23
-103.233.178.0/24
-103.233.228.0/22
-103.234.0.0/22
103.234.20.0/22
103.234.56.0/22
-103.234.128.0/22
-103.234.172.0/22
-103.234.180.0/22
-103.234.244.0/22
-103.235.48.0/22
-103.235.56.0/21
-103.235.80.0/22
-103.235.85.0/24
-103.235.87.0/24
-103.235.100.0/22
-103.235.132.0/22
-103.235.136.0/21
-103.235.144.0/21
-103.235.184.0/22
-103.235.192.0/22
-103.235.200.0/22
+103.234.128.0/23
+103.234.131.0/24
+103.235.102.0/23
+103.235.136.0/22
+103.235.144.0/24
103.235.220.0/22
-103.235.224.0/19
-103.236.0.0/18
+103.235.224.0/20
+103.235.244.0/22
+103.235.248.0/21
+103.236.52.0/22
+103.236.56.0/21
103.236.64.0/19
103.236.96.0/22
-103.236.116.0/23
103.236.120.0/22
-103.236.184.0/22
-103.236.220.0/22
-103.236.232.0/22
-103.236.240.0/21
-103.236.248.0/23
-103.236.250.0/24
-103.236.252.0/22
-103.237.0.0/20
-103.237.24.0/21
-103.237.68.0/22
-103.237.88.0/22
-103.237.152.0/22
+103.236.244.0/22
+103.236.248.0/21
+103.237.8.0/22
+103.237.28.0/23
103.237.176.0/20
-103.237.192.0/18
+103.237.192.0/19
+103.237.224.0/20
+103.237.240.0/21
+103.237.248.0/23
103.238.0.0/21
-103.238.18.0/23
-103.238.20.0/22
-103.238.24.0/21
-103.238.32.0/21
-103.238.40.0/22
-103.238.46.0/23
-103.238.48.0/21
-103.238.56.0/22
-103.238.88.0/21
-103.238.96.0/22
+103.238.16.0/22
+103.238.48.0/24
+103.238.52.0/22
+103.238.96.0/23
+103.238.98.0/24
103.238.132.0/22
103.238.140.0/22
103.238.144.0/22
-103.238.152.0/23
-103.238.160.0/19
-103.238.196.0/22
+103.238.160.0/22
+103.238.184.0/24
+103.238.186.0/23
+103.238.188.0/22
103.238.204.0/22
-103.238.252.0/22
-103.239.44.0/22
103.239.68.0/22
-103.239.152.0/21
-103.239.180.0/22
+103.239.152.0/22
103.239.184.0/22
-103.239.192.0/21
-103.239.204.0/22
-103.239.208.0/22
+103.239.192.0/22
103.239.224.0/22
103.239.244.0/22
103.240.16.0/22
103.240.36.0/22
-103.240.42.0/23
-103.240.72.0/22
103.240.84.0/22
103.240.124.0/22
-103.240.172.0/22
-103.240.188.0/22
-103.240.201.0/24
-103.240.202.0/23
103.240.244.0/22
-103.241.12.0/22
-103.241.92.0/22
-103.241.96.0/22
-103.241.160.0/22
-103.241.172.0/23
-103.241.184.0/21
-103.241.220.0/22
-103.242.64.0/22
-103.242.128.0/22
-103.242.160.0/22
-103.242.168.0/21
-103.242.176.0/22
-103.242.200.0/22
+103.241.95.0/24
+103.242.168.0/23
+103.242.172.0/22
103.242.212.0/22
-103.242.220.0/22
-103.242.240.0/22
103.243.136.0/22
103.243.252.0/22
-103.244.16.0/22
-103.244.26.0/23
-103.244.58.0/23
-103.244.60.0/22
-103.244.64.0/20
-103.244.80.0/21
-103.244.119.0/24
-103.244.164.0/22
+103.244.59.0/24
+103.244.64.0/22
+103.244.80.0/22
103.244.232.0/22
-103.244.252.0/22
-103.245.23.0/24
-103.245.52.0/22
-103.245.60.0/22
-103.245.80.0/22
-103.245.124.0/22
103.245.128.0/22
-103.246.8.0/21
-103.246.120.0/21
-103.246.132.0/22
103.246.152.0/22
-103.247.168.0/21
+103.247.168.0/22
103.247.176.0/22
103.247.191.0/24
-103.247.200.0/22
-103.247.212.0/22
-103.248.0.0/23
-103.248.100.0/22
-103.248.124.0/22
103.248.152.0/22
-103.248.168.0/22
-103.248.192.0/22
-103.248.212.0/22
103.248.224.0/22
-103.249.8.0/21
-103.249.52.0/22
-103.249.128.0/22
-103.249.136.0/22
-103.249.144.0/22
-103.249.164.0/22
-103.249.168.0/21
-103.249.176.0/22
-103.249.188.0/22
-103.249.192.0/22
+103.249.136.0/24
103.249.244.0/22
103.249.252.0/22
103.250.32.0/22
103.250.104.0/22
103.250.124.0/22
-103.250.180.0/22
103.250.192.0/22
103.250.216.0/22
-103.250.224.0/22
-103.250.236.0/22
103.250.248.0/21
103.251.32.0/22
103.251.84.0/22
103.251.96.0/22
103.251.124.0/22
-103.251.129.0/24
-103.251.131.0/24
103.251.160.0/22
-103.251.192.0/22
-103.251.204.0/22
+103.251.204.0/24
+103.251.207.0/24
103.251.240.0/22
-103.252.28.0/22
-103.252.36.0/22
-103.252.64.0/22
-103.252.96.0/22
-103.252.104.0/22
+103.252.36.0/24
103.252.172.0/22
-103.252.204.0/22
-103.252.208.0/22
-103.252.232.0/22
103.252.248.0/22
-103.253.4.0/22
103.253.60.0/22
103.253.204.0/22
-103.253.220.0/22
-103.253.224.0/22
-103.253.232.0/22
-103.254.8.0/22
-103.254.20.0/22
-103.254.64.0/21
+103.254.68.0/22
103.254.76.0/22
103.254.112.0/22
-103.254.176.0/22
103.254.188.0/22
103.255.68.0/22
-103.255.88.0/21
-103.255.136.0/21
-103.255.184.0/22
+103.255.92.0/22
+103.255.140.0/22
103.255.200.0/22
-103.255.212.0/22
-103.255.228.0/22
-104.192.108.0/23
-104.192.110.0/24
-106.0.0.0/24
-106.0.2.0/23
106.0.4.0/22
-106.0.8.0/21
-106.0.16.0/20
-106.0.44.0/22
-106.0.64.0/18
-106.2.0.0/17
-106.2.128.0/20
-106.2.144.0/21
-106.2.152.0/22
-106.2.156.0/23
-106.2.160.0/19
-106.2.192.0/18
-106.3.0.0/18
-106.3.64.0/20
+106.2.37.0/24
+106.2.40.0/23
+106.2.42.0/24
+106.2.45.0/24
+106.2.46.0/23
+106.2.48.0/23
+106.2.51.0/24
+106.2.52.0/22
+106.2.56.0/22
+106.2.62.0/23
+106.2.64.0/20
+106.2.81.0/24
+106.2.82.0/23
+106.2.89.0/24
+106.2.92.0/22
+106.2.96.0/24
+106.2.100.0/22
+106.2.104.0/21
+106.2.112.0/21
+106.2.124.0/22
+106.2.128.0/19
+106.3.0.0/19
+106.3.32.0/20
106.3.80.0/22
106.3.88.0/21
-106.3.96.0/19
-106.3.128.0/17
+106.3.128.0/20
+106.3.144.0/22
+106.3.148.0/23
+106.3.151.0/24
+106.3.152.0/21
+106.3.192.0/20
+106.3.208.0/21
+106.3.224.0/21
106.4.0.0/14
106.8.0.0/15
106.11.0.0/16
-106.12.0.0/14
-106.16.0.0/12
+106.12.0.0/17
+106.12.128.0/18
+106.12.192.0/19
+106.12.224.0/20
+106.12.240.0/21
+106.12.250.0/23
+106.12.252.0/23
+106.12.254.0/24
+106.13.0.0/16
+106.14.0.0/15
+106.16.0.0/14
106.32.0.0/12
-106.48.64.0/18
-106.50.0.0/16
+106.48.16.0/21
106.52.0.0/14
-106.56.0.0/13
+106.56.0.0/14
+106.60.0.0/15
+106.62.0.0/16
+106.63.0.0/17
106.74.0.0/16
106.75.0.0/17
106.75.128.0/18
-106.75.200.0/21
106.75.208.0/20
106.75.224.0/19
-106.80.0.0/12
+106.80.0.0/13
+106.88.0.0/14
+106.92.0.0/16
106.108.0.0/14
106.112.0.0/12
-106.224.0.0/12
+106.224.0.0/14
+106.228.0.0/15
+106.230.0.0/16
+107.151.212.0/24
+107.190.229.0/24
+108.186.72.0/24
109.244.0.0/16
110.6.0.0/15
110.16.0.0/14
-110.34.40.0/21
-110.40.0.0/14
-110.44.12.0/22
-110.44.144.0/20
-110.48.0.0/16
+110.40.0.0/24
+110.40.13.0/24
+110.40.14.0/23
+110.40.16.0/24
+110.40.128.0/17
+110.41.0.0/17
+110.41.128.0/18
+110.41.192.0/20
+110.41.208.0/23
+110.41.211.0/24
+110.41.212.0/22
+110.41.216.0/21
+110.41.224.0/19
+110.42.0.0/15
110.51.0.0/16
110.52.0.0/15
-110.56.0.0/13
+110.56.0.0/16
110.64.0.0/15
110.72.0.0/15
110.75.0.0/16
110.76.0.0/18
-110.76.132.0/22
110.76.156.0/22
110.76.184.0/22
110.76.192.0/18
110.77.0.0/17
+110.79.78.0/24
110.80.0.0/13
110.88.0.0/14
-110.92.68.0/22
-110.93.32.0/19
-110.94.0.0/15
-110.96.0.0/15
-110.98.0.0/16
-110.100.0.0/14
-110.104.0.0/13
-110.112.0.0/13
+110.94.0.0/17
+110.96.0.0/16
+110.100.0.0/16
+110.113.0.0/16
+110.114.0.0/16
+110.116.0.0/16
110.120.0.0/16
-110.121.0.0/22
-110.121.8.0/21
-110.121.16.0/20
-110.121.32.0/19
-110.121.64.0/18
-110.121.128.0/17
-110.122.0.0/15
-110.124.0.0/14
110.152.0.0/14
110.156.0.0/15
-110.165.32.0/19
110.166.0.0/15
-110.172.192.0/18
-110.173.0.0/19
+110.173.8.0/21
+110.173.16.0/20
110.173.32.0/20
-110.173.64.0/18
110.173.192.0/19
110.176.0.0/12
-110.192.0.0/11
+110.199.0.0/16
+110.203.0.0/23
+110.211.0.0/16
+110.218.0.0/15
110.228.0.0/14
-110.232.32.0/19
110.236.0.0/15
110.240.0.0/12
111.0.0.0/10
-111.66.0.0/21
-111.66.12.0/22
-111.66.16.0/22
-111.66.28.0/22
-111.66.32.0/21
-111.66.44.0/22
-111.66.52.0/22
-111.66.60.0/22
-111.66.64.0/18
-111.66.128.0/19
-111.66.160.0/20
-111.66.176.0/23
-111.66.178.0/24
-111.66.180.0/22
-111.66.184.0/21
-111.67.192.0/20
-111.68.64.0/19
111.72.0.0/13
111.85.0.0/16
-111.92.248.0/21
111.112.0.0/14
111.116.0.0/15
111.118.200.0/21
-111.119.64.0/18
-111.119.128.0/19
111.120.0.0/14
111.124.0.0/16
111.126.0.0/15
-111.128.0.0/11
+111.132.0.0/16
+111.148.0.0/16
+111.149.0.0/24
111.160.0.0/13
111.170.0.0/16
111.172.0.0/14
111.176.0.0/13
111.186.0.0/15
111.192.0.0/12
-111.208.0.0/13
+111.208.121.0/24
+111.208.254.0/24
+111.210.0.0/20
+111.210.16.0/24
+111.211.192.0/18
+111.212.0.0/14
111.221.28.0/24
111.221.128.0/17
111.222.0.0/16
-111.223.4.0/22
-111.223.12.0/22
-111.223.16.0/22
-111.223.240.0/22
-111.223.248.0/22
-111.224.0.0/13
-111.235.96.0/19
+111.223.8.0/21
+111.224.0.0/14
+111.228.0.0/18
+111.229.0.0/16
+111.230.0.0/15
111.235.156.0/22
-111.235.160.0/19
+111.235.160.0/22
+111.235.164.0/23
+111.235.168.0/22
+111.235.172.0/23
+111.235.174.0/24
+111.235.178.0/23
+111.235.180.0/23
+111.235.182.0/24
112.0.0.0/10
112.64.0.0/14
-112.73.66.0/24
-112.73.68.0/24
-112.73.70.0/24
-112.73.74.0/24
-112.73.76.0/24
-112.73.79.0/24
-112.73.92.0/24
-112.73.97.0/24
-112.73.98.0/23
-112.73.100.0/22
-112.73.106.0/23
-112.73.108.0/24
-112.73.110.0/24
-112.73.112.0/23
-112.73.115.0/24
-112.73.116.0/24
-112.73.120.0/24
-112.73.122.0/24
-112.73.124.0/23
-112.73.127.0/24
-112.73.128.0/23
-112.73.130.0/24
-112.73.132.0/23
-112.73.136.0/24
-112.73.139.0/24
-112.73.140.0/24
-112.73.143.0/24
-112.73.145.0/24
-112.73.146.0/23
-112.73.148.0/22
-112.73.152.0/22
-112.73.157.0/24
-112.73.158.0/23
-112.73.160.0/24
-112.73.163.0/24
-112.73.166.0/23
-112.73.168.0/24
-112.73.170.0/24
-112.73.173.0/24
-112.73.174.0/24
-112.73.178.0/24
-112.73.181.0/24
-112.73.182.0/24
-112.73.190.0/24
-112.73.192.0/23
-112.73.196.0/24
-112.73.199.0/24
-112.73.200.0/23
-112.73.205.0/24
-112.73.207.0/24
-112.73.209.0/24
-112.73.210.0/24
-112.73.213.0/24
-112.73.218.0/24
-112.73.224.0/24
-112.73.228.0/24
-112.73.231.0/24
-112.73.232.0/23
-112.73.235.0/24
-112.73.238.0/24
-112.73.242.0/23
-112.73.244.0/23
-112.73.247.0/24
-112.73.250.0/23
-112.73.254.0/24
-112.74.0.0/15
+112.74.0.0/16
112.80.0.0/12
112.96.0.0/13
112.109.128.0/17
@@ -3120,24 +1601,48 @@
112.116.0.0/15
112.122.0.0/15
112.124.0.0/14
-112.128.0.0/14
112.132.0.0/16
-112.137.48.0/21
112.192.0.0/14
112.224.0.0/11
113.0.0.0/13
113.8.0.0/15
-113.11.192.0/19
113.12.0.0/14
113.16.0.0/15
113.18.0.0/16
113.21.232.0/21
113.24.0.0/14
-113.31.0.0/16
-113.44.0.0/14
-113.48.0.0/14
-113.52.160.0/19
-113.52.228.0/22
+113.31.96.0/19
+113.31.144.0/20
+113.31.160.0/19
+113.44.0.0/16
+113.45.0.0/18
+113.45.64.0/19
+113.45.96.0/22
+113.45.102.0/23
+113.45.104.0/21
+113.45.112.0/22
+113.45.120.0/22
+113.45.128.0/17
+113.46.0.0/16
+113.47.0.0/18
+113.47.64.0/19
+113.47.96.0/21
+113.47.104.0/22
+113.47.110.0/24
+113.47.112.0/20
+113.47.128.0/18
+113.47.200.0/21
+113.47.216.0/21
+113.47.232.0/21
+113.47.240.0/20
+113.48.48.0/20
+113.48.127.0/24
+113.48.224.0/20
+113.49.0.0/19
+113.50.0.0/20
+113.50.32.0/24
+113.50.48.0/20
+113.50.64.0/20
113.54.0.0/15
113.56.0.0/15
113.58.0.0/16
@@ -3150,203 +1655,265 @@
113.130.112.0/21
113.132.0.0/14
113.136.0.0/13
-113.192.40.0/23
+113.164.25.0/24
113.194.0.0/15
-113.197.100.0/22
+113.197.101.0/24
+113.197.103.0/24
113.200.0.0/15
-113.202.0.0/16
113.204.0.0/14
-113.208.96.0/19
-113.208.128.0/17
-113.209.0.0/16
-113.212.0.0/18
-113.212.100.0/22
-113.212.184.0/21
-113.213.0.0/17
+113.208.112.0/21
+113.209.128.0/17
+113.213.0.0/18
+113.213.64.0/19
+113.213.96.0/20
113.214.0.0/15
113.218.0.0/15
113.220.0.0/14
113.224.0.0/12
113.240.0.0/13
113.248.0.0/14
-114.28.0.0/17
+114.28.68.0/22
+114.28.72.0/21
114.28.128.0/18
-114.28.193.0/24
-114.28.194.0/24
-114.28.197.0/24
-114.28.198.0/23
-114.28.201.0/24
-114.28.203.0/24
-114.28.205.0/24
-114.28.206.0/23
-114.28.208.0/23
-114.28.210.0/24
-114.28.216.0/23
-114.28.220.0/22
-114.28.225.0/24
-114.28.230.0/24
-114.28.232.0/24
-114.28.235.0/24
-114.28.236.0/23
-114.28.239.0/24
-114.28.240.0/20
-114.31.64.0/21
-114.54.0.0/15
+114.28.248.0/21
+114.55.0.0/16
114.60.0.0/14
-114.64.0.0/15
-114.66.0.0/17
-114.66.224.0/22
+114.64.0.0/16
+114.66.0.0/18
+114.66.72.0/21
+114.66.81.0/24
114.66.236.0/22
114.66.240.0/20
-114.67.0.0/16
-114.68.0.0/16
-114.79.64.0/18
+114.67.16.0/21
+114.67.48.0/24
+114.67.57.0/24
+114.67.58.0/24
+114.67.60.0/23
+114.67.62.0/24
+114.67.64.0/18
+114.67.131.0/24
+114.67.136.0/24
+114.67.150.0/24
+114.67.152.0/22
+114.67.156.0/24
+114.67.159.0/24
+114.67.160.0/19
+114.67.192.0/18
114.80.0.0/12
114.96.0.0/13
114.104.0.0/14
114.110.0.0/20
-114.110.64.0/18
-114.111.0.0/19
-114.111.160.0/20
-114.111.176.0/22
-114.111.190.0/23
-114.112.4.0/22
-114.112.8.0/22
-114.112.12.0/23
-114.112.16.0/23
-114.112.20.0/22
+114.110.96.0/22
+114.111.0.0/23
+114.111.16.0/20
+114.111.191.0/24
+114.112.4.0/23
114.112.24.0/21
114.112.32.0/19
-114.112.64.0/18
-114.112.128.0/18
-114.112.192.0/19
-114.112.224.0/22
-114.112.228.0/24
-114.112.230.0/23
-114.112.234.0/23
-114.112.240.0/21
-114.112.248.0/22
-114.112.252.0/23
-114.112.255.0/24
-114.113.0.0/17
-114.113.128.0/21
-114.113.140.0/22
+114.112.64.0/24
+114.112.66.0/24
+114.112.70.0/24
+114.112.72.0/21
+114.112.81.0/24
+114.112.82.0/24
+114.112.85.0/24
+114.112.86.0/24
+114.112.88.0/24
+114.112.91.0/24
+114.112.94.0/23
+114.112.96.0/21
+114.112.104.0/22
+114.112.136.0/21
+114.112.144.0/21
+114.112.200.0/21
+114.112.208.0/20
+114.113.63.0/24
+114.113.65.0/24
+114.113.66.0/24
+114.113.80.0/22
+114.113.84.0/24
+114.113.88.0/21
+114.113.96.0/19
114.113.144.0/20
-114.113.160.0/19
-114.113.192.0/19
+114.113.196.0/22
+114.113.200.0/24
+114.113.203.0/24
+114.113.208.0/21
+114.113.221.0/24
+114.113.223.0/24
114.113.224.0/20
-114.113.242.0/24
-114.113.246.0/23
-114.113.248.0/21
-114.114.0.0/15
+114.114.112.0/21
+114.115.0.0/16
114.116.0.0/15
-114.118.0.0/16
-114.119.0.0/17
-114.119.192.0/21
-114.119.204.0/22
-114.119.208.0/20
-114.119.224.0/19
+114.118.0.0/18
+114.118.64.0/19
+114.118.96.0/21
+114.119.10.0/24
+114.119.32.0/24
+114.119.117.0/24
+114.119.119.0/24
114.132.0.0/16
114.135.0.0/16
114.138.0.0/15
-114.141.64.0/21
-114.141.80.0/21
114.141.128.0/18
-114.142.136.0/21
114.196.0.0/15
-114.198.248.0/21
-114.208.0.0/12
+114.212.0.0/14
+114.216.0.0/13
114.224.0.0/11
115.24.0.0/14
115.28.0.0/15
-115.31.64.0/20
-115.32.0.0/14
-115.42.56.0/22
-115.44.0.0/14
+115.31.64.0/22
+115.32.0.0/19
+115.32.32.0/20
+115.32.52.0/22
+115.32.56.0/21
+115.32.64.0/19
+115.32.104.0/21
+115.32.120.0/21
+115.32.128.0/19
+115.33.0.0/19
+115.33.64.0/18
+115.33.128.0/20
+115.44.0.0/15
+115.46.0.0/16
115.48.0.0/12
-115.69.64.0/20
115.84.0.0/18
115.85.192.0/18
-115.100.0.0/14
-115.104.0.0/14
-115.120.0.0/14
+115.102.0.0/16
+115.120.0.0/17
+115.120.128.0/20
+115.120.144.0/23
+115.120.148.0/22
+115.120.152.0/21
+115.120.176.0/20
+115.120.192.0/18
115.124.16.0/20
115.148.0.0/14
115.152.0.0/13
-115.166.64.0/19
-115.168.0.0/13
-115.180.0.0/14
-115.187.0.0/20
-115.190.0.0/15
+115.168.0.0/14
+115.172.32.0/21
+115.172.46.0/23
+115.173.0.0/19
+115.175.0.0/18
+115.175.64.0/19
+115.175.96.0/21
+115.175.104.0/22
+115.175.108.0/23
+115.175.110.0/24
+115.175.112.0/20
+115.175.128.0/17
+115.180.0.0/17
+115.182.0.0/15
+115.190.0.0/16
+115.191.0.0/18
+115.191.64.0/20
115.192.0.0/11
115.224.0.0/12
-116.0.8.0/21
-116.0.24.0/21
116.1.0.0/16
116.2.0.0/15
116.4.0.0/14
116.8.0.0/14
116.13.0.0/16
116.16.0.0/12
-116.50.0.0/20
116.52.0.0/14
116.56.0.0/15
-116.58.128.0/20
-116.58.208.0/20
-116.60.0.0/14
-116.66.0.0/17
+116.58.208.0/24
+116.62.0.0/15
+116.66.36.0/24
+116.66.48.0/23
+116.66.50.0/24
+116.66.53.0/24
+116.66.54.0/23
+116.66.98.0/24
+116.66.123.0/24
116.68.136.0/21
116.68.176.0/21
-116.69.0.0/16
-116.70.0.0/17
-116.76.0.0/14
-116.85.0.0/16
-116.89.144.0/20
+116.70.64.0/18
+116.76.0.0/15
+116.78.0.0/16
+116.85.1.0/24
+116.85.2.0/23
+116.85.13.0/24
+116.85.14.0/24
+116.85.16.0/23
+116.85.18.0/24
+116.85.64.0/20
+116.85.240.0/20
116.90.80.0/20
-116.90.184.0/21
+116.90.192.0/20
116.95.0.0/16
116.112.0.0/14
116.116.0.0/15
-116.128.0.0/10
+116.128.128.0/18
+116.128.200.0/21
+116.128.208.0/20
+116.128.224.0/19
+116.129.0.0/16
+116.130.0.0/15
+116.132.0.0/15
+116.135.0.0/16
+116.136.0.0/13
+116.144.0.0/14
+116.148.0.0/15
+116.153.0.0/16
+116.154.0.0/15
+116.162.0.0/16
+116.163.0.0/18
+116.165.0.0/16
+116.167.0.0/16
+116.168.0.0/14
+116.172.64.0/18
+116.172.128.0/17
+116.174.0.0/15
+116.176.0.0/14
+116.181.0.0/16
+116.182.0.0/16
116.192.0.0/16
-116.193.16.0/20
-116.193.32.0/19
-116.193.176.0/21
-116.194.0.0/15
+116.193.16.0/23
+116.193.18.0/24
116.196.0.0/21
116.196.8.0/22
116.196.12.0/23
-116.196.14.0/24
-116.196.16.0/20
-116.196.32.0/19
116.196.64.0/18
-116.196.128.0/17
+116.196.129.0/24
+116.196.130.0/23
+116.196.132.0/22
+116.196.136.0/21
+116.196.144.0/21
+116.196.152.0/22
+116.196.156.0/23
+116.196.176.0/21
+116.196.192.0/21
+116.196.218.0/23
+116.196.220.0/22
116.197.160.0/21
-116.198.0.0/16
+116.198.0.0/18
+116.198.64.0/21
+116.198.72.0/22
+116.198.96.0/19
+116.198.144.0/20
+116.198.160.0/20
+116.198.176.0/21
+116.198.192.0/18
116.199.0.0/17
-116.199.128.0/20
-116.199.144.0/21
116.204.0.0/17
116.205.0.0/16
116.207.0.0/16
116.208.0.0/14
-116.212.160.0/20
-116.213.44.0/24
-116.213.46.0/23
-116.213.64.0/18
-116.213.128.0/17
116.214.32.0/19
-116.214.64.0/20
-116.214.128.0/17
-116.215.0.0/16
-116.216.0.0/14
+116.214.128.0/22
+116.214.132.0/23
+116.214.134.0/24
+116.218.0.0/18
+116.218.64.0/19
+116.218.128.0/20
+116.218.144.0/21
116.224.0.0/12
-116.242.0.0/15
-116.244.0.0/14
+116.242.0.0/16
+116.246.0.0/15
116.248.0.0/15
116.252.0.0/15
116.254.104.0/21
-116.254.128.0/17
116.255.128.0/17
117.8.0.0/13
117.21.0.0/16
@@ -3355,76 +1922,88 @@
117.32.0.0/13
117.40.0.0/14
117.44.0.0/15
-117.48.0.0/15
+117.48.112.0/20
+117.48.128.0/19
+117.48.160.0/20
+117.48.192.0/24
+117.48.195.0/24
+117.48.196.0/22
+117.48.200.0/21
+117.48.216.0/23
+117.48.218.0/24
+117.48.220.0/22
+117.48.224.0/21
+117.48.232.0/23
+117.48.234.0/24
+117.48.236.0/22
117.50.0.0/16
-117.51.128.0/17
-117.53.48.0/20
-117.53.176.0/20
+117.51.128.0/19
+117.51.160.0/23
+117.51.168.0/21
117.57.0.0/16
-117.58.0.0/17
117.59.0.0/16
117.60.0.0/14
117.64.0.0/13
-117.72.0.0/15
-117.74.64.0/19
-117.74.128.0/17
-117.75.0.0/16
-117.76.0.0/14
+117.72.0.0/23
+117.72.8.0/21
+117.72.16.0/23
+117.72.24.0/21
+117.72.32.0/19
+117.72.64.0/18
+117.72.144.0/20
+117.72.160.0/19
+117.72.192.0/19
+117.72.240.0/21
+117.72.255.0/24
+117.73.0.0/20
+117.73.16.0/21
+117.73.252.0/22
+117.74.64.0/20
+117.74.128.0/21
+117.74.136.0/22
+117.78.0.0/18
+117.79.80.0/20
+117.79.128.0/21
+117.79.144.0/20
+117.79.224.0/20
+117.79.241.0/24
+117.79.242.0/24
117.80.0.0/12
-117.100.0.0/15
-117.103.16.0/20
-117.103.40.0/21
-117.103.72.0/21
-117.103.128.0/20
-117.104.168.0/21
117.106.0.0/15
117.112.0.0/13
-117.120.64.0/18
-117.120.148.0/22
-117.120.164.0/22
-117.120.184.0/21
-117.120.208.0/21
-117.120.216.0/22
-117.120.248.0/21
-117.121.0.0/17
-117.121.128.0/18
-117.121.192.0/21
-117.122.128.0/17
-117.124.0.0/14
-117.128.0.0/14
-117.132.0.0/15
-117.134.0.0/17
-117.134.128.0/18
-117.134.205.0/24
-117.134.207.0/24
-117.134.208.0/23
-117.134.212.0/23
-117.134.216.0/21
-117.134.232.0/21
-117.134.240.0/20
-117.135.0.0/16
-117.136.0.0/13
-117.144.0.0/12
-117.160.0.0/11
+117.121.132.0/22
+117.122.192.0/18
+117.124.98.0/24
+117.124.231.0/24
+117.124.232.0/22
+117.124.236.0/23
+117.124.240.0/22
+117.124.244.0/24
+117.124.246.0/24
+117.126.0.0/16
+117.128.0.0/10
118.24.0.0/15
-118.26.0.0/19
-118.26.32.0/22
-118.26.40.0/21
-118.26.48.0/21
-118.26.64.0/19
+118.26.48.0/22
+118.26.64.0/23
+118.26.68.0/23
+118.26.72.0/22
118.26.96.0/21
-118.26.112.0/20
+118.26.116.0/22
118.26.128.0/22
-118.26.133.0/24
-118.26.134.0/23
-118.26.136.0/21
+118.26.136.0/22
118.26.160.0/20
-118.26.188.0/22
-118.26.192.0/18
-118.28.0.0/14
-118.64.0.0/15
-118.66.0.0/16
-118.67.112.0/20
+118.26.192.0/24
+118.26.194.0/23
+118.26.208.0/20
+118.26.240.0/20
+118.31.0.0/16
+118.64.0.0/21
+118.64.248.0/21
+118.65.0.0/21
+118.66.112.0/23
+118.66.184.0/24
+118.66.224.0/20
+118.66.248.0/21
118.72.0.0/13
118.80.0.0/15
118.84.0.0/15
@@ -3432,552 +2011,618 @@
118.88.64.0/18
118.88.128.0/17
118.89.0.0/16
-118.91.240.0/20
118.102.16.0/20
-118.102.32.0/21
118.103.164.0/22
-118.103.168.0/21
-118.103.176.0/22
118.112.0.0/13
118.120.0.0/14
118.124.0.0/15
-118.126.0.0/16
-118.127.128.0/19
+118.126.32.0/19
+118.126.64.0/18
+118.126.140.0/23
+118.126.142.0/24
118.132.0.0/14
-118.144.0.0/14
+118.144.0.0/16
+118.145.0.0/19
+118.145.32.0/20
+118.145.64.0/19
+118.145.96.0/20
+118.145.112.0/21
+118.145.128.0/19
+118.145.160.0/21
+118.145.176.0/20
+118.145.192.0/18
118.178.0.0/16
118.180.0.0/14
-118.184.0.0/16
-118.186.0.0/15
-118.188.0.0/16
-118.190.0.0/15
-118.192.0.0/16
-118.193.0.0/20
-118.193.48.0/21
+118.184.128.0/17
+118.186.0.0/19
+118.186.32.0/24
+118.186.34.0/23
+118.186.36.0/22
+118.186.56.0/21
+118.186.64.0/21
+118.186.80.0/20
+118.186.96.0/20
+118.186.112.0/21
+118.186.160.0/19
+118.186.208.0/21
+118.186.240.0/21
+118.187.0.0/18
+118.187.64.0/19
+118.188.18.0/23
+118.188.20.0/22
+118.188.24.0/23
+118.190.0.0/16
+118.191.0.0/21
+118.191.8.0/22
+118.191.12.0/24
+118.192.20.0/24
+118.192.64.0/23
+118.192.67.0/24
+118.192.68.0/23
+118.192.70.0/24
118.193.96.0/19
-118.193.128.0/17
-118.194.0.0/17
-118.194.128.0/18
-118.194.192.0/19
-118.194.227.0/24
+118.194.32.0/19
+118.194.134.0/23
118.194.240.0/21
-118.195.0.0/16
-118.196.0.0/14
+118.195.128.0/17
+118.196.0.0/16
+118.197.0.0/18
+118.197.64.0/19
118.202.0.0/15
-118.204.0.0/14
+118.204.0.0/17
118.212.0.0/15
-118.215.192.0/18
-118.224.0.0/14
+118.215.192.0/19
118.228.0.0/15
118.230.0.0/16
118.239.0.0/16
-118.242.0.0/16
-118.244.0.0/14
+118.242.0.0/22
+118.242.16.0/22
+118.242.24.0/22
+118.242.32.0/22
+118.242.40.0/24
+118.244.0.0/21
+118.244.128.0/17
+118.247.0.0/16
118.248.0.0/13
119.0.0.0/15
-119.2.0.0/19
119.2.128.0/17
119.3.0.0/16
119.4.0.0/14
-119.10.0.0/17
-119.15.136.0/21
-119.16.0.0/16
-119.18.192.0/20
+119.15.136.0/23
+119.15.140.0/23
+119.16.0.0/17
+119.16.128.0/18
119.18.208.0/21
-119.18.224.0/19
-119.19.0.0/16
-119.20.0.0/14
-119.27.64.0/18
-119.27.128.0/17
+119.18.224.0/24
+119.18.226.0/24
+119.18.237.0/24
+119.18.239.0/24
+119.23.0.0/16
+119.27.160.0/19
119.28.28.0/24
-119.28.240.0/20
119.29.0.0/16
-119.30.48.0/20
119.31.192.0/19
-119.32.0.0/13
-119.40.0.0/18
+119.32.0.0/15
+119.34.0.0/16
+119.36.0.0/16
+119.37.0.0/23
+119.37.2.0/24
+119.37.12.0/24
+119.37.192.0/21
+119.38.0.0/21
+119.38.192.0/19
+119.39.0.0/16
+119.40.41.0/24
119.40.64.0/20
119.40.128.0/17
119.41.0.0/16
119.42.0.0/19
-119.42.128.0/20
+119.42.136.0/21
119.42.224.0/19
-119.44.0.0/15
+119.44.0.0/22
+119.44.4.0/23
+119.44.7.0/24
+119.44.8.0/22
+119.44.12.0/24
+119.44.16.0/22
+119.44.20.0/23
+119.44.23.0/24
+119.44.24.0/22
+119.44.28.0/23
+119.44.45.0/24
+119.44.46.0/24
+119.44.50.0/23
+119.44.52.0/24
+119.44.56.0/21
+119.44.192.0/24
+119.44.200.0/24
+119.44.205.0/24
+119.44.208.0/22
+119.44.212.0/23
+119.44.214.0/24
+119.44.217.0/24
+119.44.218.0/23
+119.44.220.0/22
+119.44.224.0/20
+119.44.253.0/24
+119.44.254.0/23
+119.45.0.0/16
119.48.0.0/13
-119.57.0.0/16
-119.58.0.0/16
-119.59.128.0/24
-119.59.130.0/24
-119.59.132.0/22
-119.59.136.0/21
-119.59.144.0/20
-119.59.160.0/19
-119.59.192.0/18
+119.57.0.0/21
+119.57.8.0/23
+119.57.12.0/24
+119.57.16.0/21
+119.57.25.0/24
+119.57.28.0/22
+119.57.32.0/21
+119.57.44.0/22
+119.57.51.0/24
+119.57.52.0/22
+119.57.56.0/21
+119.57.64.0/19
+119.57.96.0/22
+119.57.100.0/23
+119.57.102.0/24
+119.57.112.0/20
+119.57.132.0/22
+119.57.136.0/21
+119.57.160.0/20
+119.57.190.0/23
+119.57.246.0/23
+119.57.248.0/21
119.60.0.0/15
119.62.0.0/16
-119.63.32.0/19
119.75.208.0/20
119.78.0.0/15
-119.80.0.0/16
-119.82.208.0/20
+119.80.0.0/21
+119.80.8.0/22
+119.80.160.0/23
+119.80.162.0/24
+119.80.192.0/21
+119.80.200.0/22
+119.80.240.0/22
+119.80.248.0/21
119.84.0.0/14
-119.88.0.0/14
+119.88.128.0/17
+119.91.0.0/16
119.96.0.0/13
119.108.0.0/15
119.112.0.0/12
119.128.0.0/12
119.144.0.0/14
-119.148.160.0/19
-119.151.192.0/18
-119.160.200.0/21
-119.161.120.0/21
-119.161.128.0/21
-119.161.144.0/21
-119.161.152.0/23
-119.161.160.0/19
-119.161.192.0/18
+119.148.160.0/20
+119.161.120.0/22
+119.161.124.0/24
119.162.0.0/15
119.164.0.0/14
119.176.0.0/12
-119.232.0.0/15
-119.235.128.0/18
+119.233.128.0/17
+119.235.128.0/24
+119.235.130.0/24
+119.235.136.0/24
+119.235.138.0/24
+119.235.143.0/24
+119.235.144.0/23
+119.235.151.0/24
+119.235.160.0/23
+119.235.167.0/24
+119.235.185.0/24
119.248.0.0/14
-119.252.96.0/21
-119.252.240.0/21
-119.252.248.0/23
-119.252.250.0/24
-119.252.252.0/23
-119.252.255.0/24
-119.253.0.0/16
-119.254.0.0/15
+119.253.0.0/20
+119.253.32.0/19
+119.253.64.0/19
+119.254.0.0/16
+119.255.128.0/17
120.0.0.0/12
120.24.0.0/14
-120.30.0.0/15
+120.31.66.0/23
+120.31.68.0/22
+120.31.128.0/20
120.32.0.0/12
-120.48.0.0/15
-120.52.0.0/14
-120.64.0.0/13
+120.48.0.0/16
+120.49.0.0/17
+120.49.192.0/18
+120.52.0.0/15
+120.55.0.0/16
+120.65.0.0/16
+120.68.0.0/14
120.72.32.0/19
-120.72.128.0/17
+120.72.160.0/24
+120.72.162.0/23
+120.72.164.0/22
+120.72.168.0/24
+120.72.170.0/23
+120.72.172.0/23
+120.72.174.0/24
+120.72.177.0/24
+120.72.178.0/24
+120.72.180.0/24
+120.72.182.0/23
+120.72.184.0/22
+120.72.188.0/23
+120.72.190.0/24
120.76.0.0/14
120.80.0.0/13
-120.88.8.0/21
-120.90.0.0/15
-120.92.0.0/16
+120.92.0.0/17
+120.92.128.0/18
+120.92.192.0/19
+120.92.224.0/20
120.94.0.0/15
-120.128.0.0/13
+120.130.0.0/18
+120.130.64.0/19
+120.131.0.0/19
+120.131.88.0/21
+120.131.124.0/22
+120.132.0.0/18
+120.132.64.0/19
+120.132.96.0/20
+120.132.112.0/24
+120.132.117.0/24
+120.132.118.0/23
+120.132.120.0/21
+120.132.128.0/17
+120.133.0.0/16
+120.134.0.0/15
120.136.16.0/21
-120.136.128.0/18
-120.137.0.0/17
-120.143.128.0/19
+120.136.128.0/21
+120.136.140.0/22
+120.136.144.0/20
+120.136.160.0/20
+120.136.176.0/21
+120.136.184.0/22
+120.136.188.0/23
+120.136.190.0/24
120.192.0.0/10
-121.0.8.0/21
121.0.16.0/20
121.4.0.0/15
121.8.0.0/13
121.16.0.0/12
-121.32.0.0/13
+121.32.0.0/14
+121.36.0.0/15
+121.39.255.0/24
121.40.0.0/14
-121.46.0.0/18
-121.46.76.0/22
+121.46.0.0/20
+121.46.20.0/22
121.46.128.0/21
121.46.141.0/24
-121.46.160.0/19
-121.46.192.0/18
-121.47.0.0/16
+121.46.192.0/21
+121.46.200.0/22
+121.46.224.0/20
+121.46.244.0/22
+121.46.248.0/22
+121.46.252.0/23
+121.46.254.0/24
121.48.0.0/15
-121.50.8.0/21
121.51.0.0/16
121.52.160.0/19
121.52.208.0/20
121.52.224.0/19
-121.54.176.0/21
121.55.0.0/18
121.56.0.0/15
121.58.0.0/17
-121.58.136.0/21
-121.58.144.0/20
-121.58.160.0/21
-121.59.0.0/19
-121.59.32.0/22
-121.59.36.0/23
-121.59.39.0/24
-121.59.40.0/21
-121.59.48.0/20
-121.59.64.0/19
-121.59.96.0/22
-121.59.101.0/24
-121.59.102.0/23
-121.59.104.0/23
-121.59.107.0/24
-121.59.108.0/24
-121.59.110.0/23
-121.59.112.0/21
-121.59.121.0/24
-121.59.123.0/24
-121.59.125.0/24
-121.59.126.0/23
-121.59.128.0/21
-121.59.136.0/22
-121.59.141.0/24
-121.59.142.0/23
-121.59.144.0/20
-121.59.160.0/19
-121.59.192.0/18
+121.58.156.0/22
+121.59.4.0/22
+121.59.8.0/21
121.60.0.0/14
-121.68.0.0/14
+121.69.0.0/16
+121.70.0.0/17
121.76.0.0/15
-121.79.128.0/18
+121.79.131.0/24
+121.79.132.0/24
+121.79.134.0/23
121.89.0.0/16
121.91.104.0/21
-121.100.128.0/17
-121.101.0.0/18
-121.101.208.0/20
121.192.0.0/13
-121.200.192.0/21
-121.201.0.0/16
+121.201.0.0/17
121.204.0.0/14
121.224.0.0/12
121.248.0.0/14
121.255.0.0/16
122.0.64.0/18
-122.0.128.0/17
122.4.0.0/14
-122.8.52.0/22
-122.8.57.0/24
-122.8.58.0/23
-122.8.60.0/23
-122.8.63.0/24
-122.8.68.0/22
-122.8.76.0/22
-122.8.80.0/23
-122.8.112.0/21
-122.8.124.0/22
-122.8.192.0/18
122.9.0.0/16
-122.10.129.0/24
-122.10.131.0/24
-122.10.132.0/23
+122.10.133.0/24
122.10.136.0/23
-122.10.164.0/22
-122.10.168.0/21
-122.10.176.0/20
-122.10.192.0/22
-122.10.200.0/22
-122.10.205.0/24
-122.10.206.0/23
-122.10.208.0/21
-122.10.216.0/22
-122.10.228.0/22
-122.10.232.0/21
-122.10.240.0/22
-122.11.0.0/17
-122.12.0.0/15
-122.14.0.0/17
-122.14.128.0/20
-122.14.144.0/22
-122.14.148.0/24
-122.14.150.0/23
-122.14.152.0/23
-122.14.155.0/24
-122.14.157.0/24
-122.14.158.0/23
-122.14.160.0/19
+122.11.32.0/19
+122.13.0.0/16
+122.14.44.0/22
+122.14.62.0/24
122.14.192.0/18
122.48.0.0/16
-122.49.0.0/18
+122.49.8.0/21
+122.49.16.0/20
+122.49.32.0/20
122.51.0.0/16
-122.64.0.0/11
+122.70.0.0/15
+122.72.16.0/24
+122.72.38.0/24
+122.94.0.0/16
122.96.0.0/15
-122.102.0.0/20
-122.102.64.0/19
-122.112.0.0/18
-122.112.64.0/19
-122.112.96.0/20
-122.112.112.0/21
-122.112.120.0/23
-122.112.125.0/24
-122.112.126.0/23
-122.112.128.0/17
-122.113.0.0/19
-122.113.32.0/20
-122.113.48.0/23
-122.113.51.0/24
-122.113.52.0/22
-122.113.56.0/21
-122.113.64.0/18
-122.113.128.0/17
+122.102.64.0/20
+122.112.0.0/22
+122.112.32.0/19
+122.112.132.0/22
+122.112.136.0/21
+122.112.144.0/20
+122.112.160.0/19
+122.112.192.0/18
122.114.0.0/16
-122.115.0.0/18
-122.115.64.0/22
-122.115.70.0/23
-122.115.72.0/24
-122.115.74.0/23
-122.115.76.0/22
-122.115.80.0/20
-122.115.96.0/19
-122.115.128.0/17
-122.119.0.0/16
-122.128.100.0/22
-122.128.120.0/21
+122.115.0.0/20
+122.115.32.0/19
+122.115.224.0/20
+122.119.4.0/23
+122.119.12.0/22
+122.119.20.0/22
+122.119.24.0/23
+122.119.26.0/24
+122.119.32.0/24
+122.119.50.0/24
+122.119.73.0/24
+122.119.96.0/23
+122.119.110.0/23
+122.119.112.0/23
+122.119.114.0/24
+122.119.120.0/24
+122.119.122.0/24
+122.119.124.0/23
+122.119.129.0/24
+122.119.147.0/24
+122.119.160.0/23
+122.119.172.0/24
+122.119.180.0/22
+122.119.190.0/24
+122.119.224.0/22
+122.119.232.0/23
+122.119.236.0/24
+122.119.253.0/24
122.136.0.0/13
-122.144.128.0/17
+122.144.128.0/20
+122.144.144.0/23
+122.144.147.0/24
+122.144.152.0/23
+122.144.156.0/23
+122.144.161.0/24
+122.144.164.0/22
+122.144.168.0/22
+122.144.172.0/23
+122.144.178.0/23
+122.144.180.0/22
+122.144.192.0/21
+122.144.200.0/22
+122.144.206.0/23
+122.144.208.0/23
+122.144.211.0/24
+122.144.212.0/22
+122.144.216.0/21
+122.144.232.0/22
+122.144.236.0/23
+122.144.240.0/24
+122.144.248.0/23
122.152.192.0/18
122.156.0.0/14
122.188.0.0/14
122.192.0.0/14
-122.198.0.0/16
122.200.40.0/21
-122.200.64.0/18
-122.201.48.0/20
+122.200.68.0/23
+122.200.78.0/24
+122.200.82.0/24
+122.200.84.0/23
+122.200.86.0/24
+122.200.92.0/23
+122.200.104.0/22
+122.200.120.0/22
+122.200.124.0/24
122.204.0.0/14
122.224.0.0/12
122.240.0.0/13
-122.248.24.0/21
-122.248.48.0/20
-122.255.64.0/21
-123.0.128.0/18
+122.248.48.0/21
+122.248.56.0/22
123.4.0.0/14
123.8.0.0/13
-123.49.128.0/18
123.49.192.0/23
123.49.194.0/24
-123.49.197.0/24
-123.49.198.0/23
-123.49.200.0/21
-123.49.208.0/20
-123.49.224.0/21
-123.49.232.0/22
-123.49.236.0/24
+123.49.231.0/24
123.49.240.0/24
123.49.242.0/23
-123.49.248.0/21
-123.50.160.0/19
123.52.0.0/14
123.56.0.0/15
-123.58.0.0/17
-123.58.128.0/18
+123.58.0.0/19
+123.58.32.0/23
+123.58.34.0/24
+123.58.36.0/24
+123.58.38.0/23
+123.58.40.0/21
+123.58.48.0/24
+123.58.50.0/24
+123.58.53.0/24
+123.58.54.0/23
+123.58.56.0/23
+123.58.59.0/24
+123.58.60.0/22
+123.58.64.0/24
+123.58.96.0/19
+123.58.160.0/20
+123.58.180.0/24
+123.58.182.0/23
+123.58.184.0/24
+123.58.186.0/23
+123.58.188.0/22
123.58.224.0/19
123.59.0.0/16
-123.60.0.0/15
-123.62.0.0/16
-123.64.0.0/11
+123.60.0.0/16
+123.64.0.0/15
+123.66.0.0/16
+123.77.0.0/16
+123.88.0.0/15
+123.90.0.0/16
123.96.0.0/15
-123.98.0.0/21
-123.98.12.0/22
-123.98.24.0/21
-123.98.32.0/19
-123.98.64.0/18
-123.99.128.0/19
-123.99.160.0/22
-123.99.164.0/24
-123.99.166.0/23
-123.99.168.0/21
-123.99.176.0/20
123.99.192.0/18
-123.100.0.0/19
123.101.0.0/16
-123.103.0.0/17
-123.108.88.0/23
-123.108.130.0/23
-123.108.132.0/22
-123.108.136.0/21
-123.108.208.0/20
+123.103.0.0/20
+123.103.16.0/21
+123.103.24.0/22
+123.103.28.0/23
+123.103.30.0/24
+123.103.40.0/21
+123.103.48.0/20
+123.103.64.0/18
+123.108.88.0/24
+123.108.208.0/22
+123.108.212.0/23
+123.108.220.0/22
123.112.0.0/12
123.128.0.0/13
-123.136.88.0/22
-123.137.0.0/16
123.138.0.0/15
123.144.0.0/12
123.160.0.0/12
-123.176.60.0/22
-123.176.80.0/20
123.177.0.0/16
123.178.0.0/15
123.180.0.0/14
123.184.0.0/13
-123.196.0.0/15
-123.199.128.0/17
+123.196.112.0/20
123.206.0.0/15
123.232.0.0/14
-123.242.0.0/17
123.242.192.0/21
123.244.0.0/14
-123.249.0.0/16
-123.253.52.0/23
+123.249.0.0/17
123.254.96.0/21
-124.6.64.0/18
-124.14.0.0/15
+124.14.5.0/24
+124.14.8.0/24
+124.14.12.0/24
+124.14.15.0/24
+124.14.22.0/24
+124.14.64.0/18
+124.14.224.0/19
124.16.0.0/15
-124.20.0.0/16
-124.21.32.0/19
-124.21.64.0/18
-124.21.128.0/17
124.22.0.0/15
124.28.192.0/18
124.29.0.0/17
124.31.0.0/16
-124.40.112.0/20
124.40.128.0/18
-124.40.192.0/19
-124.40.240.0/22
-124.42.0.0/16
+124.42.0.0/17
124.47.0.0/18
124.64.0.0/15
124.66.0.0/17
124.67.0.0/16
-124.68.16.0/20
-124.68.64.0/18
-124.68.176.0/20
-124.68.224.0/20
-124.68.244.0/22
-124.68.248.0/21
-124.69.0.0/16
124.70.0.0/16
124.71.0.0/17
124.71.128.0/18
124.71.192.0/19
124.71.224.0/20
-124.71.240.0/21
-124.71.250.0/23
-124.71.254.0/23
+124.71.250.0/24
124.72.0.0/13
124.88.0.0/13
-124.108.8.0/21
-124.108.40.0/21
-124.109.96.0/21
124.112.0.0/13
124.126.0.0/15
124.128.0.0/13
-124.147.128.0/17
-124.150.137.0/24
124.151.0.0/16
124.152.0.0/16
124.160.0.0/13
124.172.0.0/14
124.192.0.0/15
-124.196.0.0/16
-124.197.56.0/21
-124.200.0.0/13
+124.196.12.0/23
+124.196.25.0/24
+124.196.26.0/23
+124.196.28.0/24
+124.196.30.0/23
+124.196.32.0/23
+124.196.40.0/22
+124.196.48.0/22
+124.196.52.0/23
+124.196.55.0/24
+124.196.56.0/23
+124.196.58.0/24
+124.196.66.0/24
+124.196.72.0/24
+124.196.77.0/24
+124.196.80.0/22
+124.196.84.0/23
+124.200.0.0/16
+124.201.0.0/17
+124.202.0.0/16
+124.203.176.0/20
+124.204.0.0/14
124.220.0.0/14
124.224.0.0/12
124.240.0.0/17
124.240.128.0/18
-124.242.0.0/16
124.243.192.0/18
-124.248.0.0/17
-124.249.0.0/16
+124.248.64.0/18
124.250.0.0/15
124.254.0.0/18
-125.31.192.0/18
125.32.0.0/12
125.58.128.0/17
-125.61.128.0/17
125.62.0.0/18
-125.64.0.0/12
-125.80.0.0/13
-125.88.0.0/14
-125.92.0.0/16
-125.93.0.0/20
-125.93.16.0/21
-125.93.24.0/23
-125.93.26.0/24
-125.93.28.0/22
-125.93.32.0/19
-125.93.64.0/18
-125.93.128.0/17
-125.94.0.0/15
-125.96.0.0/15
-125.98.0.0/16
+125.64.0.0/11
+125.98.122.0/23
+125.98.128.0/17
125.104.0.0/13
125.112.0.0/12
-125.169.0.0/16
125.171.0.0/16
-125.208.0.0/18
+125.208.0.0/19
+125.208.32.0/20
+125.208.49.0/24
125.210.0.0/15
-125.213.0.0/17
+125.213.32.0/20
125.214.96.0/19
-125.215.0.0/18
+125.215.36.0/23
+125.215.40.0/24
+125.215.44.0/23
+125.215.48.0/24
+125.215.52.0/23
+125.215.54.0/24
125.216.0.0/13
-125.254.128.0/17
+125.254.128.0/19
+125.254.168.0/21
+125.254.176.0/21
+128.107.24.0/23
128.108.0.0/16
129.28.0.0/16
129.204.0.0/16
129.211.0.0/16
+130.36.146.0/23
+131.228.96.0/23
132.232.0.0/16
132.237.134.0/24
-134.49.240.0/22
+133.226.32.0/20
134.175.0.0/16
-137.59.59.0/24
-137.59.88.0/22
138.252.72.0/23
-138.252.78.0/23
-138.252.96.0/24
-138.252.118.0/23
-138.252.162.0/23
-139.5.56.0/21
-139.5.80.0/22
-139.5.92.0/22
-139.5.128.0/22
-139.5.160.0/22
-139.5.192.0/22
-139.5.204.0/22
-139.5.212.0/22
-139.5.244.0/22
-139.9.0.0/16
+139.5.60.0/22
+139.9.0.0/18
+139.9.64.0/19
+139.9.96.0/23
+139.9.98.0/24
+139.9.100.0/22
+139.9.104.0/21
+139.9.112.0/20
+139.9.128.0/18
+139.9.192.0/19
+139.9.224.0/20
+139.9.240.0/21
+139.9.248.0/22
139.129.0.0/16
139.148.0.0/16
139.155.0.0/16
139.159.0.0/19
-139.159.32.0/21
-139.159.40.0/22
-139.159.52.0/22
-139.159.56.0/21
-139.159.64.0/19
+139.159.32.0/22
139.159.96.0/20
139.159.112.0/22
-139.159.116.0/23
-139.159.120.0/21
-139.159.128.0/17
+139.159.132.0/22
+139.159.136.0/21
+139.159.144.0/20
+139.159.160.0/19
+139.159.192.0/18
139.170.0.0/16
-139.176.0.0/16
-139.183.0.0/18
-139.183.64.0/19
-139.183.96.0/22
-139.183.101.0/24
-139.183.102.0/23
-139.183.104.0/21
-139.183.112.0/20
-139.183.128.0/18
-139.183.192.0/20
-139.183.208.0/23
-139.183.211.0/24
-139.183.212.0/22
-139.183.216.0/21
-139.183.224.0/19
139.186.0.0/16
-139.189.0.0/18
-139.189.64.0/19
-139.189.96.0/20
-139.189.112.0/21
-139.189.120.0/22
-139.189.124.0/23
-139.189.126.0/24
-139.189.128.0/17
-139.196.0.0/15
-139.198.0.0/18
-139.198.66.0/23
-139.198.68.0/22
-139.198.72.0/21
-139.198.80.0/20
-139.198.96.0/19
-139.198.128.0/17
-139.199.0.0/16
+139.189.0.0/16
+139.196.0.0/16
+139.198.0.0/15
139.200.0.0/13
139.208.0.0/13
139.217.0.0/16
139.219.0.0/16
-139.220.0.0/15
+139.220.192.0/22
+139.220.240.0/22
139.224.0.0/16
139.226.0.0/15
140.75.0.0/16
@@ -3985,14 +2630,30 @@
140.179.0.0/16
140.205.0.0/16
140.206.0.0/15
-140.210.0.0/20
-140.210.16.0/21
-140.210.24.0/22
-140.210.28.0/23
-140.210.30.0/24
-140.210.32.0/19
-140.210.64.0/18
-140.210.128.0/17
+140.210.0.0/24
+140.210.4.0/22
+140.210.8.0/21
+140.210.16.0/20
+140.210.32.0/22
+140.210.65.0/24
+140.210.67.0/24
+140.210.69.0/24
+140.210.70.0/24
+140.210.72.0/23
+140.210.75.0/24
+140.210.77.0/24
+140.210.78.0/23
+140.210.80.0/24
+140.210.83.0/24
+140.210.84.0/24
+140.210.87.0/24
+140.210.88.0/22
+140.210.92.0/24
+140.210.94.0/24
+140.210.96.0/19
+140.210.128.0/19
+140.210.192.0/19
+140.210.224.0/20
140.224.0.0/16
140.237.0.0/16
140.240.0.0/16
@@ -4001,28 +2662,18 @@
140.249.0.0/16
140.250.0.0/16
140.255.0.0/16
-142.86.192.0/18
143.64.0.0/16
144.0.0.0/16
-144.7.0.0/16
+144.7.0.0/17
144.12.0.0/16
-144.36.147.0/24
+144.36.146.0/23
144.48.64.0/22
-144.48.88.0/22
-144.48.156.0/22
-144.48.180.0/22
-144.48.184.0/22
-144.48.204.0/22
-144.48.208.0/21
+144.48.212.0/22
144.52.0.0/16
-144.79.4.0/23
-144.79.10.0/23
-144.79.28.0/23
-144.79.42.0/23
144.79.54.0/23
-144.79.84.0/23
-144.79.148.0/23
144.123.0.0/16
+144.225.109.0/24
+144.225.151.0/24
144.255.0.0/16
145.14.71.0/24
145.14.72.0/22
@@ -4035,57 +2686,31 @@
146.56.192.0/18
146.196.56.0/22
146.196.68.0/22
-146.196.72.0/22
-146.196.92.0/22
146.196.112.0/21
-146.196.124.0/22
146.222.79.0/24
146.222.81.0/24
146.222.94.0/24
-147.78.132.0/24
-147.78.134.0/24
+147.78.132.0/22
148.70.0.0/16
-149.41.0.0/16
-150.0.0.0/16
-150.115.0.0/16
-150.121.0.0/16
-150.122.0.0/16
150.129.136.0/22
150.129.192.0/22
150.129.252.0/22
150.138.0.0/15
150.158.0.0/16
150.223.0.0/16
-150.242.0.0/21
-150.242.8.0/22
-150.242.28.0/22
-150.242.44.0/22
-150.242.48.0/21
150.242.56.0/22
150.242.76.0/22
150.242.80.0/22
-150.242.92.0/22
150.242.96.0/22
-150.242.112.0/21
-150.242.120.0/22
-150.242.152.0/22
150.242.156.0/23
-150.242.160.0/21
150.242.168.0/22
-150.242.184.0/21
-150.242.192.0/22
-150.242.212.0/24
-150.242.215.0/24
-150.242.224.0/22
-150.242.232.0/21
-150.242.240.0/21
+150.242.184.0/22
+150.242.232.0/22
+150.242.238.0/23
+150.242.244.0/22
150.242.248.0/22
-150.248.0.0/16
150.255.0.0/16
-151.158.14.0/23
-151.158.78.0/23
-151.158.80.0/23
-151.158.122.0/23
+151.243.189.0/24
152.104.128.0/17
152.136.0.0/16
153.0.0.0/16
@@ -4095,236 +2720,134 @@
153.99.0.0/16
153.101.0.0/16
153.118.0.0/15
+154.8.48.0/20
154.8.128.0/17
+154.72.42.0/24
154.72.44.0/24
154.72.47.0/24
+154.89.32.0/20
+154.197.128.0/17
155.126.176.0/23
156.107.160.0/23
156.107.170.0/24
156.107.179.0/24
156.107.181.0/24
+156.224.128.0/17
+156.227.239.0/24
+156.232.9.0/24
+156.232.10.0/23
+156.242.5.0/24
157.0.0.0/16
-157.10.34.0/23
-157.10.36.0/23
+157.10.35.0/24
157.10.112.0/23
-157.10.118.0/23
-157.10.130.0/23
-157.10.218.0/23
-157.10.220.0/23
-157.10.246.0/23
-157.15.74.0/23
157.15.94.0/23
-157.15.100.0/22
157.15.104.0/23
157.18.0.0/16
-157.20.136.0/23
-157.20.194.0/23
157.20.246.0/23
157.61.0.0/16
-157.66.42.0/23
-157.66.70.0/23
-157.66.88.0/21
157.66.164.0/23
-157.66.244.0/23
-157.119.8.0/21
-157.119.16.0/22
157.119.28.0/22
-157.119.132.0/22
-157.119.136.0/21
-157.119.144.0/20
-157.119.160.0/21
157.119.172.0/22
-157.119.192.0/21
-157.119.240.0/22
157.119.252.0/22
157.122.0.0/16
157.148.0.0/16
157.156.0.0/16
157.255.0.0/16
-158.60.0.0/16
-158.79.0.0/16
+158.26.192.0/24
+158.26.194.0/24
158.140.252.0/23
158.140.255.0/24
159.27.0.0/16
159.75.0.0/16
159.226.0.0/16
160.19.76.0/23
-160.19.82.0/23
-160.19.208.0/21
-160.19.216.0/22
-160.20.16.0/22
-160.20.48.0/22
-160.20.130.0/23
-160.22.58.0/23
-160.22.82.0/23
-160.22.148.0/23
-160.22.188.0/23
-160.22.224.0/23
-160.22.230.0/23
-160.22.244.0/22
-160.25.10.0/23
-160.25.12.0/23
+160.19.208.0/23
+160.19.210.0/24
+160.20.18.0/23
+160.22.188.0/24
160.25.194.0/23
-160.30.40.0/23
-160.30.194.0/23
-160.30.196.0/22
160.30.230.0/23
160.83.110.0/24
-160.187.223.0/24
-160.187.252.0/22
-160.191.0.0/23
-160.191.104.0/23
-160.191.110.0/23
-160.202.60.0/23
-160.202.62.0/24
-160.202.148.0/22
+160.187.128.0/23
+160.191.0.0/24
+160.191.195.0/24
160.202.152.0/22
160.202.212.0/22
-160.202.216.0/21
160.202.224.0/19
-160.236.78.0/23
-160.236.148.0/23
-160.236.162.0/23
-160.236.235.0/24
-160.236.250.0/23
160.250.14.0/23
-160.250.16.0/22
160.250.84.0/23
-160.250.90.0/23
-160.250.102.0/23
-160.250.104.0/23
-160.250.160.0/23
-160.250.170.0/23
-160.250.214.0/23
-160.250.252.0/23
161.163.0.0/21
161.163.28.0/23
161.189.0.0/16
161.207.0.0/16
-161.248.20.0/23
-161.248.42.0/23
-161.248.92.0/23
-161.248.110.0/23
-161.248.112.0/24
-161.248.136.0/24
-162.4.54.0/23
-162.4.168.0/23
-162.4.198.0/23
-162.4.202.0/23
-162.4.230.0/23
-162.14.0.0/19
-162.14.32.0/21
-162.14.43.0/24
-162.14.44.0/22
-162.14.52.0/22
-162.14.56.0/22
-162.14.64.0/18
-162.14.128.0/17
+162.14.0.0/16
162.105.0.0/16
163.0.0.0/16
163.47.4.0/22
-163.52.28.0/23
-163.52.76.0/23
-163.52.108.0/23
-163.53.0.0/20
-163.53.36.0/22
-163.53.40.0/21
-163.53.48.0/20
-163.53.64.0/22
+163.53.44.0/23
+163.53.60.0/22
163.53.88.0/21
-163.53.96.0/19
-163.53.128.0/21
-163.53.136.0/22
-163.53.160.0/20
-163.53.188.0/22
-163.53.240.0/22
-163.61.63.0/24
+163.53.128.0/22
+163.53.168.0/22
163.61.178.0/23
163.61.202.0/23
163.61.214.0/23
163.125.0.0/16
-163.128.30.0/23
-163.128.152.0/23
-163.128.236.0/23
-163.128.254.0/23
163.142.0.0/16
163.177.0.0/16
163.179.0.0/16
163.204.0.0/16
-163.223.28.0/23
-163.223.32.0/23
-163.223.72.0/23
-163.223.124.0/23
-163.223.217.0/24
-163.223.222.0/23
-163.227.34.0/23
163.227.40.0/23
-163.227.74.0/23
-163.227.76.0/22
-163.227.80.0/23
163.228.0.0/16
163.244.246.0/24
-164.52.5.0/24
-164.52.61.0/24
-164.52.66.0/24
-164.52.75.0/24
-164.52.78.0/24
-164.52.85.0/24
-164.52.99.0/24
-165.101.4.0/23
-165.101.66.0/23
165.101.70.0/24
-165.101.144.0/23
-165.101.170.0/23
165.101.208.0/23
-165.101.244.0/23
166.111.0.0/16
167.139.0.0/16
-167.189.0.0/16
167.220.244.0/22
-168.160.0.0/16
-170.179.0.0/16
+168.160.0.0/17
+168.160.152.0/24
+168.160.158.0/23
+168.160.160.0/21
+168.160.168.0/24
171.8.0.0/13
171.34.0.0/15
171.36.0.0/14
-171.40.0.0/13
+171.40.0.0/14
+171.44.0.0/16
171.80.0.0/12
171.104.0.0/13
171.112.0.0/12
171.208.0.0/12
172.81.192.0/18
+173.39.200.0/23
175.0.0.0/12
175.16.0.0/13
-175.24.0.0/14
+175.24.0.0/15
+175.27.0.0/16
175.30.0.0/15
175.42.0.0/15
175.44.0.0/16
175.46.0.0/15
-175.48.0.0/12
-175.64.0.0/11
-175.102.0.0/16
-175.106.128.0/17
-175.111.144.0/20
-175.111.160.0/20
-175.111.184.0/22
+175.102.0.0/19
+175.102.128.0/21
+175.102.178.0/23
+175.102.180.0/22
+175.102.184.0/24
+175.102.196.0/24
175.146.0.0/15
175.148.0.0/14
175.152.0.0/14
-175.158.96.0/22
+175.158.112.0/20
175.160.0.0/12
-175.176.156.0/22
-175.176.176.0/22
-175.176.188.0/22
175.178.0.0/16
175.184.128.0/18
175.185.0.0/16
175.186.0.0/15
-175.188.0.0/14
-177.201.160.0/19
-177.203.96.0/19
-177.203.224.0/19
-178.236.234.0/24
-179.236.0.0/19
+175.188.188.0/22
+175.190.24.0/21
+175.190.126.0/23
+178.253.252.0/24
180.76.16.0/20
180.76.32.0/19
180.76.64.0/18
@@ -4332,59 +2855,79 @@
180.77.0.0/16
180.78.0.0/15
180.84.0.0/15
-180.86.0.0/16
-180.88.0.0/14
-180.94.56.0/21
-180.94.96.0/20
-180.94.120.0/21
+180.88.96.0/19
+180.88.128.0/18
+180.89.56.0/22
+180.89.60.0/23
+180.89.64.0/19
+180.91.192.0/20
+180.92.176.0/24
180.95.128.0/17
180.96.0.0/11
180.129.128.0/17
180.130.0.0/16
180.136.0.0/13
-180.148.16.0/21
-180.148.152.0/21
-180.148.216.0/21
-180.148.224.0/19
180.149.128.0/19
-180.150.160.0/19
+180.150.176.0/20
180.152.0.0/13
180.160.0.0/12
-180.178.112.0/21
-180.178.192.0/18
-180.184.0.0/14
-180.188.0.0/17
-180.189.148.0/22
+180.178.208.0/20
+180.178.224.0/21
+180.178.232.0/22
+180.178.248.0/21
+180.184.0.0/21
+180.184.8.0/23
+180.184.14.0/24
+180.184.16.0/24
+180.184.24.0/21
+180.184.32.0/19
+180.184.64.0/18
+180.184.128.0/20
+180.184.144.0/21
+180.184.152.0/22
+180.184.160.0/20
+180.184.176.0/21
+180.184.184.0/22
+180.184.190.0/23
+180.184.192.0/18
+180.186.38.0/23
+180.186.40.0/22
+180.186.44.0/24
+180.188.16.0/20
+180.188.32.0/20
180.200.252.0/22
180.201.0.0/16
-180.202.0.0/15
+180.203.0.0/23
+180.203.3.0/24
+180.203.4.0/24
180.208.0.0/15
180.210.212.0/22
180.212.0.0/15
-180.222.224.0/19
180.233.0.0/18
-180.233.64.0/19
-180.233.144.0/22
-180.235.64.0/19
-180.235.112.0/22
-182.16.144.0/21
-182.16.192.0/19
-182.18.0.0/17
-182.23.184.0/21
-182.23.200.0/21
+180.235.64.0/21
+180.235.72.0/23
+182.18.5.0/24
+182.18.32.0/19
+182.18.72.0/21
+182.18.80.0/20
+182.18.96.0/19
182.32.0.0/12
-182.48.96.0/19
-182.49.0.0/16
-182.50.0.0/22
-182.50.6.0/24
+182.48.96.0/20
+182.48.112.0/21
182.50.8.0/21
182.50.112.0/20
-182.51.0.0/16
+182.51.114.0/23
+182.51.116.0/23
+182.51.118.0/24
+182.51.122.0/23
+182.51.124.0/24
182.54.0.0/17
-182.54.244.0/22
-182.61.0.0/17
+182.61.0.0/18
182.61.128.0/19
-182.61.192.0/18
+182.61.192.0/22
+182.61.200.0/21
+182.61.208.0/20
+182.61.224.0/19
182.80.0.0/13
182.88.0.0/14
182.92.0.0/16
@@ -4392,34 +2935,21 @@
182.128.0.0/12
182.144.0.0/13
182.157.0.0/16
-182.160.64.0/19
182.174.0.0/15
182.200.0.0/13
-182.236.128.0/17
-182.237.24.0/21
-182.238.0.0/16
-182.239.0.0/19
182.240.0.0/13
182.254.0.0/16
-182.255.60.0/22
183.0.0.0/10
183.64.0.0/13
-183.78.160.0/21
183.78.180.0/22
-183.81.172.0/24
183.81.180.0/22
183.84.0.0/15
-183.91.37.0/24
183.91.39.0/24
183.91.40.0/21
-183.91.48.0/23
-183.91.50.0/24
-183.91.52.0/22
+183.91.48.0/21
183.91.56.0/24
183.91.61.0/24
183.91.63.0/24
-183.91.128.0/22
-183.91.136.0/21
183.91.144.0/20
183.92.0.0/14
183.128.0.0/11
@@ -4427,42 +2957,28 @@
183.168.0.0/15
183.170.0.0/16
183.172.0.0/14
-183.182.0.0/21
-183.182.8.0/23
-183.182.11.0/24
-183.182.12.0/22
-183.182.16.0/23
-183.182.23.0/24
-183.182.24.0/21
183.184.0.0/13
183.192.0.0/10
-185.2.48.0/24
-185.2.51.0/24
185.75.173.0/24
185.75.174.0/24
-185.192.56.0/22
+185.80.200.0/22
+185.183.84.0/24
+185.194.148.0/24
+185.201.226.0/23
188.131.128.0/17
-192.51.172.0/23
-192.55.46.0/23
-192.55.68.0/22
-192.102.204.0/22
-192.124.154.0/24
-192.140.128.0/21
-192.140.136.0/22
-192.140.156.0/22
+192.6.161.0/24
+192.6.243.0/24
192.140.160.0/19
-192.140.192.0/20
192.140.208.0/21
192.144.128.0/17
192.163.11.0/24
-192.232.34.0/23
-192.232.44.0/22
192.232.97.0/24
+193.9.44.0/24
+193.9.46.0/24
193.112.0.0/16
-193.119.0.0/19
+194.127.229.0/24
194.138.202.0/23
194.138.245.0/24
-198.175.100.0/22
198.208.17.0/24
198.208.19.0/24
198.208.30.0/24
@@ -4472,1140 +2988,179 @@
198.208.112.0/23
199.182.239.0/24
199.244.144.0/24
-202.0.100.0/23
-202.0.122.0/23
-202.0.176.0/23
-202.0.178.0/24
-202.3.128.0/23
+202.1.86.0/23
+202.1.90.0/23
+202.1.110.0/23
+202.1.112.0/23
202.4.128.0/19
202.4.252.0/22
-202.5.208.0/21
-202.5.216.0/22
-202.6.6.0/23
-202.6.66.0/23
-202.6.72.0/23
-202.6.87.0/24
-202.6.88.0/23
-202.6.92.0/23
-202.6.103.0/24
-202.6.108.0/24
-202.6.110.0/23
-202.6.114.0/24
-202.6.176.0/20
202.6.202.0/23
-202.8.0.0/24
-202.8.2.0/23
-202.8.4.0/23
-202.8.12.0/24
-202.8.24.0/24
-202.8.77.0/24
-202.8.128.0/19
-202.8.192.0/20
-202.9.32.0/24
-202.9.34.0/23
-202.9.48.0/23
-202.9.51.0/24
-202.9.52.0/23
-202.9.54.0/24
-202.9.57.0/24
-202.9.58.0/23
-202.10.64.0/20
-202.10.112.0/20
-202.12.1.0/24
-202.12.2.0/24
-202.12.17.0/24
-202.12.18.0/24
-202.12.72.0/24
-202.12.84.0/23
-202.12.96.0/24
-202.12.98.0/23
-202.12.106.0/24
-202.12.111.0/24
-202.12.116.0/24
-202.14.64.0/23
-202.14.69.0/24
-202.14.73.0/24
-202.14.74.0/23
-202.14.76.0/24
-202.14.78.0/23
-202.14.88.0/24
-202.14.97.0/24
-202.14.104.0/23
-202.14.108.0/23
-202.14.111.0/24
-202.14.114.0/23
-202.14.118.0/23
-202.14.124.0/23
-202.14.127.0/24
-202.14.129.0/24
-202.14.135.0/24
-202.14.136.0/24
-202.14.149.0/24
-202.14.151.0/24
-202.14.157.0/24
-202.14.158.0/23
-202.14.169.0/24
-202.14.170.0/23
-202.14.172.0/22
-202.14.176.0/24
-202.14.184.0/23
-202.14.208.0/23
-202.14.213.0/24
-202.14.219.0/24
-202.14.220.0/24
-202.14.222.0/23
-202.14.225.0/24
-202.14.226.0/23
-202.14.231.0/24
202.14.235.0/24
-202.14.236.0/22
-202.14.246.0/24
-202.14.251.0/24
-202.20.66.0/24
-202.20.79.0/24
-202.20.87.0/24
-202.20.88.0/23
-202.20.90.0/24
-202.20.94.0/23
-202.20.114.0/24
-202.20.117.0/24
-202.20.120.0/24
-202.20.125.0/24
-202.20.126.0/23
-202.21.48.0/20
-202.21.131.0/24
-202.21.132.0/24
-202.21.141.0/24
-202.21.142.0/24
-202.21.147.0/24
-202.21.148.0/24
-202.21.150.0/23
-202.21.152.0/23
-202.21.154.0/24
-202.21.156.0/24
-202.22.248.0/21
-202.27.12.0/24
-202.27.14.0/24
-202.27.136.0/23
-202.36.226.0/24
-202.38.0.0/22
+202.14.236.0/23
+202.14.238.0/24
+202.30.124.0/24
202.38.8.0/21
-202.38.48.0/20
202.38.64.0/18
-202.38.128.0/21
-202.38.136.0/23
-202.38.140.0/22
-202.38.146.0/23
-202.38.149.0/24
-202.38.150.0/23
-202.38.152.0/22
-202.38.156.0/24
-202.38.158.0/23
+202.38.128.0/23
+202.38.132.0/23
+202.38.134.0/24
+202.38.140.0/23
+202.38.152.0/23
202.38.164.0/22
-202.38.168.0/23
-202.38.170.0/24
-202.38.176.0/23
202.38.184.0/21
202.38.192.0/18
-202.40.4.0/23
-202.40.7.0/24
-202.40.15.0/24
-202.40.135.0/24
-202.40.136.0/24
-202.40.140.0/24
-202.40.143.0/24
-202.40.144.0/23
-202.40.150.0/24
-202.40.155.0/24
-202.40.156.0/24
-202.40.158.0/23
-202.40.162.0/24
-202.41.8.0/23
-202.41.11.0/24
-202.41.12.0/23
-202.41.128.0/24
-202.41.130.0/23
202.41.152.0/21
-202.41.192.0/24
-202.41.196.0/22
-202.41.200.0/22
202.41.240.0/20
-202.43.76.0/22
-202.43.144.0/20
-202.44.16.0/20
-202.44.48.0/22
-202.44.67.0/24
-202.44.74.0/24
-202.44.97.0/24
-202.44.129.0/24
-202.44.132.0/23
-202.44.146.0/23
-202.45.0.0/23
-202.45.2.0/24
-202.45.15.0/24
-202.45.16.0/20
-202.46.16.0/23
-202.46.18.0/24
-202.46.20.0/23
-202.46.35.0/24
-202.46.36.0/23
-202.46.38.0/24
-202.46.40.0/24
-202.46.43.0/24
-202.46.44.0/24
-202.46.46.0/23
-202.46.128.0/24
-202.46.224.0/20
-202.47.82.0/23
-202.47.96.0/20
-202.47.126.0/24
-202.47.128.0/24
-202.47.130.0/23
-202.52.33.0/24
-202.52.34.0/24
-202.52.47.0/24
-202.52.143.0/24
-202.53.140.0/24
-202.53.143.0/24
-202.55.0.0/23
-202.55.4.0/24
-202.55.18.0/23
-202.55.20.0/22
-202.55.24.0/22
-202.55.28.0/23
-202.55.31.0/24
-202.57.192.0/20
-202.57.212.0/22
-202.57.216.0/22
-202.57.240.0/20
-202.58.0.0/24
-202.58.112.0/22
-202.58.122.0/23
-202.59.0.0/23
-202.59.212.0/22
-202.59.236.0/24
-202.59.240.0/24
-202.60.48.0/21
-202.60.96.0/21
+202.46.224.0/22
+202.46.228.0/23
+202.46.232.0/23
+202.47.104.0/21
+202.51.32.0/20
+202.55.0.0/19
+202.57.192.0/24
+202.57.196.0/22
+202.57.200.0/23
+202.57.204.0/23
+202.59.213.0/24
+202.59.214.0/23
202.60.112.0/20
202.60.132.0/22
-202.60.136.0/21
-202.60.144.0/20
-202.61.68.0/22
-202.61.76.0/22
202.61.88.0/22
-202.61.123.0/24
-202.61.127.0/24
202.62.112.0/22
-202.62.248.0/22
-202.62.252.0/24
-202.62.255.0/24
-202.63.80.0/20
-202.63.160.0/19
-202.63.248.0/22
-202.63.253.0/24
-202.65.0.0/21
-202.65.8.0/23
-202.65.96.0/20
-202.66.169.0/24
-202.66.170.0/23
-202.67.0.0/22
+202.63.160.0/20
+202.65.96.0/24
+202.67.3.0/24
202.69.4.0/23
202.69.16.0/20
-202.70.0.0/19
-202.70.96.0/20
-202.70.192.0/20
-202.71.32.0/20
-202.72.40.0/21
-202.72.80.0/20
202.72.112.0/20
202.73.128.0/22
+202.73.208.0/20
202.73.240.0/20
-202.74.8.0/21
-202.74.36.0/24
-202.74.42.0/24
-202.74.52.0/24
-202.74.80.0/20
-202.74.254.0/23
202.75.208.0/20
-202.75.252.0/22
-202.76.252.0/22
-202.77.80.0/21
-202.77.92.0/22
-202.78.8.0/21
-202.79.224.0/21
-202.79.248.0/22
-202.80.192.0/20
-202.81.0.0/22
+202.75.248.0/22
+202.80.192.0/22
202.81.176.0/20
-202.83.252.0/22
-202.84.0.0/20
-202.84.16.0/23
-202.84.22.0/24
-202.84.24.0/21
+202.84.17.0/24
202.85.208.0/20
-202.86.249.0/24
-202.86.252.0/22
-202.87.80.0/20
-202.88.32.0/22
-202.89.8.0/21
-202.89.96.0/22
-202.89.108.0/22
-202.89.119.0/24
+202.89.96.0/24
202.89.232.0/21
-202.90.16.0/20
-202.90.37.0/24
-202.90.96.0/19
-202.90.193.0/24
-202.90.196.0/24
-202.90.205.0/24
-202.90.224.0/20
-202.91.0.0/22
-202.91.96.0/20
-202.91.176.0/20
-202.91.224.0/19
-202.92.8.0/21
-202.92.48.0/20
-202.92.252.0/22
+202.90.20.0/22
+202.90.96.0/20
+202.91.176.0/21
+202.91.184.0/23
+202.91.186.0/24
+202.91.190.0/23
+202.91.224.0/20
+202.91.240.0/21
+202.91.248.0/22
202.93.252.0/22
-202.94.74.0/24
-202.94.81.0/24
-202.94.92.0/22
-202.95.0.0/24
-202.95.2.0/23
-202.95.24.0/21
-202.95.240.0/21
-202.96.0.0/12
+202.95.0.0/19
+202.96.0.0/13
+202.104.0.0/14
+202.108.0.0/15
+202.110.0.0/16
+202.111.0.0/17
+202.111.128.0/18
+202.111.192.0/19
+202.111.230.0/24
+202.111.240.0/23
+202.111.242.0/24
+202.111.244.0/22
+202.111.248.0/24
202.112.0.0/13
202.120.0.0/15
-202.122.0.0/21
202.122.32.0/21
-202.122.64.0/19
-202.122.112.0/20
-202.122.132.0/24
-202.123.96.0/20
-202.123.116.0/22
-202.123.120.0/22
-202.124.16.0/21
-202.124.24.0/22
-202.125.107.0/24
-202.125.109.0/24
-202.125.112.0/20
+202.122.112.0/21
+202.123.96.0/24
+202.123.98.0/24
+202.123.106.0/23
+202.123.108.0/24
+202.123.110.0/23
202.125.176.0/20
202.127.0.0/21
202.127.12.0/22
202.127.16.0/20
202.127.40.0/21
-202.127.48.0/20
-202.127.112.0/20
-202.127.128.0/19
-202.127.192.0/20
-202.127.212.0/22
-202.127.216.0/21
+202.127.48.0/23
+202.127.144.0/20
+202.127.192.0/24
+202.127.200.0/21
202.127.224.0/19
-202.129.208.0/24
202.130.0.0/19
-202.130.39.0/24
-202.130.224.0/19
-202.131.16.0/21
-202.131.48.0/20
-202.131.208.0/20
-202.133.32.0/20
-202.134.58.0/24
-202.134.128.0/20
-202.134.208.0/20
+202.130.224.0/20
+202.130.240.0/21
202.136.48.0/20
202.136.72.0/23
-202.136.80.0/23
-202.136.208.0/20
-202.136.224.0/20
-202.136.248.0/22
+202.136.208.0/21
+202.136.216.0/23
+202.136.218.0/24
+202.136.220.0/24
+202.136.222.0/23
202.136.255.0/24
-202.137.231.0/24
202.140.140.0/22
-202.140.144.0/20
202.141.160.0/19
202.142.16.0/20
-202.143.4.0/22
-202.143.16.0/20
-202.143.32.0/20
-202.143.56.0/21
+202.143.16.0/23
202.143.100.0/22
-202.143.104.0/22
-202.144.196.0/23
-202.144.198.0/24
-202.146.160.0/20
-202.146.184.0/23
-202.146.186.0/24
-202.146.188.0/22
-202.146.196.0/22
-202.146.200.0/21
-202.147.144.0/20
-202.148.32.0/20
-202.148.64.0/18
-202.149.32.0/19
-202.149.160.0/19
+202.148.96.0/19
202.149.224.0/20
-202.149.240.0/21
-202.149.248.0/22
-202.149.252.0/23
-202.149.255.0/24
202.150.16.0/20
-202.150.32.0/20
-202.150.56.0/22
-202.150.192.0/20
-202.150.224.0/19
-202.151.0.0/22
-202.151.33.0/24
-202.151.128.0/19
-202.152.176.0/20
-202.153.0.0/22
-202.153.7.0/24
202.153.48.0/20
-202.157.192.0/19
202.158.160.0/19
-202.158.242.0/24
-202.160.140.0/23
-202.160.143.0/24
-202.160.156.0/22
-202.162.67.0/24
-202.162.75.0/24
+202.160.140.0/22
202.164.0.0/20
-202.164.96.0/19
-202.165.176.0/20
-202.165.208.0/21
-202.165.239.0/24
-202.165.240.0/23
-202.165.243.0/24
-202.165.245.0/24
-202.165.251.0/24
-202.165.252.0/22
-202.166.224.0/19
-202.168.80.0/22
-202.168.128.0/20
202.168.160.0/19
202.170.128.0/19
202.170.216.0/21
-202.170.224.0/19
-202.171.216.0/21
-202.171.232.0/24
-202.171.235.0/24
-202.172.0.0/22
-202.172.7.0/24
-202.173.0.0/22
-202.173.6.0/24
-202.173.8.0/21
-202.173.112.0/22
+202.173.8.0/22
+202.173.14.0/23
202.173.224.0/19
-202.174.64.0/20
-202.174.124.0/22
-202.176.224.0/19
-202.179.160.0/20
-202.179.240.0/21
-202.180.128.0/19
-202.180.208.0/21
-202.181.8.0/22
-202.181.28.0/22
-202.181.112.0/20
-202.182.32.0/20
-202.182.192.0/19
-202.189.0.0/18
-202.189.80.0/20
-202.189.184.0/21
-202.191.0.0/24
-202.191.68.0/22
-202.191.72.0/21
-202.191.80.0/20
+202.179.240.0/20
+202.181.28.0/24
+202.181.120.0/21
+202.189.3.0/24
+202.189.4.0/22
+202.189.8.0/21
+202.189.16.0/21
202.192.0.0/12
-203.0.4.0/22
-203.0.10.0/23
-203.0.18.0/24
-203.0.24.0/24
-203.0.42.0/23
-203.0.45.0/24
-203.0.46.0/23
-203.0.81.0/24
-203.0.82.0/23
-203.0.90.0/23
-203.0.96.0/23
203.0.104.0/21
-203.0.114.0/23
-203.0.122.0/24
-203.0.128.0/24
-203.0.130.0/23
-203.0.132.0/22
-203.0.137.0/24
-203.0.142.0/24
-203.0.144.0/24
-203.0.146.0/24
-203.0.148.0/24
-203.0.150.0/23
-203.0.152.0/24
-203.0.177.0/24
-203.0.224.0/24
-203.1.4.0/22
-203.1.18.0/24
-203.1.26.0/23
-203.1.65.0/24
-203.1.66.0/23
-203.1.70.0/23
-203.1.76.0/23
-203.1.90.0/24
-203.1.97.0/24
-203.1.98.0/23
-203.1.100.0/22
-203.1.108.0/24
-203.1.253.0/24
-203.1.254.0/24
+203.0.250.0/23
203.2.64.0/21
-203.2.73.0/24
203.2.112.0/21
-203.2.126.0/23
-203.2.140.0/24
-203.2.150.0/24
-203.2.152.0/22
-203.2.156.0/23
203.2.160.0/21
-203.2.180.0/23
-203.2.196.0/23
-203.2.209.0/24
-203.2.214.0/23
-203.2.226.0/23
-203.2.229.0/24
-203.2.236.0/23
-203.3.68.0/24
-203.3.72.0/23
-203.3.75.0/24
203.3.80.0/21
-203.3.96.0/22
-203.3.105.0/24
203.3.112.0/21
-203.3.120.0/24
-203.3.123.0/24
-203.3.135.0/24
-203.3.139.0/24
-203.3.143.0/24
-203.4.132.0/23
-203.4.134.0/24
-203.4.151.0/24
-203.4.152.0/22
-203.4.174.0/23
-203.4.180.0/24
-203.4.186.0/24
-203.4.205.0/24
-203.4.208.0/22
-203.4.227.0/24
-203.4.230.0/23
-203.5.4.0/23
-203.5.7.0/24
-203.5.8.0/23
-203.5.11.0/24
-203.5.21.0/24
-203.5.22.0/24
-203.5.44.0/24
-203.5.46.0/23
-203.5.52.0/22
-203.5.56.0/23
-203.5.60.0/23
-203.5.114.0/23
-203.5.118.0/24
-203.5.120.0/24
-203.5.172.0/24
-203.5.180.0/23
-203.5.182.0/24
-203.5.185.0/24
-203.5.186.0/24
-203.5.188.0/23
-203.5.190.0/24
-203.5.195.0/24
-203.5.214.0/23
-203.5.218.0/23
-203.6.131.0/24
-203.6.136.0/24
-203.6.138.0/23
-203.6.142.0/24
-203.6.150.0/23
-203.6.157.0/24
-203.6.159.0/24
203.6.224.0/20
-203.6.248.0/23
-203.7.129.0/24
-203.7.138.0/23
-203.7.147.0/24
-203.7.150.0/23
-203.7.158.0/24
-203.7.192.0/23
-203.7.200.0/24
-203.8.0.0/24
-203.8.8.0/24
-203.8.23.0/24
203.8.25.0/24
-203.8.70.0/24
-203.8.82.0/24
-203.8.86.0/23
-203.8.91.0/24
-203.8.110.0/23
-203.8.115.0/24
-203.8.166.0/23
-203.8.169.0/24
-203.8.173.0/24
-203.8.184.0/24
-203.8.186.0/23
-203.8.190.0/23
-203.8.192.0/24
-203.8.197.0/24
-203.8.198.0/23
-203.8.203.0/24
-203.8.209.0/24
-203.8.210.0/23
-203.8.212.0/22
-203.8.217.0/24
-203.8.220.0/24
-203.9.32.0/24
-203.9.36.0/23
-203.9.57.0/24
-203.9.63.0/24
-203.9.65.0/24
-203.9.70.0/23
-203.9.72.0/24
-203.9.75.0/24
-203.9.76.0/23
-203.9.96.0/22
-203.9.100.0/23
-203.9.108.0/24
-203.9.158.0/24
-203.10.34.0/24
-203.10.56.0/24
-203.10.74.0/23
-203.10.84.0/22
-203.10.88.0/24
-203.10.95.0/24
-203.10.125.0/24
-203.11.70.0/24
-203.11.76.0/22
-203.11.82.0/24
-203.11.84.0/22
-203.11.100.0/22
-203.11.109.0/24
-203.11.117.0/24
-203.11.122.0/24
-203.11.126.0/24
-203.11.136.0/22
-203.11.141.0/24
-203.11.142.0/23
-203.11.180.0/22
-203.11.208.0/22
-203.12.16.0/24
-203.12.19.0/24
-203.12.24.0/24
-203.12.57.0/24
-203.12.65.0/24
-203.12.66.0/24
-203.12.70.0/23
-203.12.87.0/24
+203.8.30.0/24
203.12.91.0/24
203.12.93.0/24
-203.12.95.0/24
-203.12.100.0/23
-203.12.103.0/24
-203.12.114.0/24
-203.12.118.0/24
-203.12.130.0/24
-203.12.137.0/24
-203.12.196.0/22
-203.12.211.0/24
-203.12.219.0/24
-203.12.226.0/24
-203.12.240.0/22
-203.13.18.0/24
-203.13.24.0/24
-203.13.44.0/23
203.13.81.0/24
-203.13.88.0/23
-203.13.92.0/22
-203.13.173.0/24
-203.13.224.0/23
-203.13.227.0/24
-203.13.233.0/24
-203.14.24.0/22
-203.14.33.0/24
-203.14.56.0/24
-203.14.61.0/24
-203.14.62.0/24
-203.14.104.0/24
-203.14.114.0/23
-203.14.118.0/24
-203.14.162.0/24
-203.14.192.0/24
-203.14.194.0/23
-203.14.214.0/24
-203.14.231.0/24
-203.14.246.0/24
203.15.0.0/20
-203.15.20.0/23
-203.15.22.0/24
-203.15.87.0/24
-203.15.88.0/23
-203.15.105.0/24
-203.15.112.0/24
-203.15.114.0/23
-203.15.119.0/24
-203.15.130.0/23
-203.15.149.0/24
-203.15.151.0/24
-203.15.156.0/22
-203.15.174.0/24
-203.15.227.0/24
-203.15.232.0/21
-203.15.240.0/23
-203.15.246.0/24
-203.16.10.0/24
-203.16.12.0/23
-203.16.16.0/21
-203.16.27.0/24
-203.16.38.0/24
-203.16.49.0/24
-203.16.50.0/23
-203.16.58.0/24
-203.16.63.0/24
-203.16.133.0/24
-203.16.161.0/24
-203.16.162.0/24
-203.16.186.0/23
-203.16.228.0/24
-203.16.238.0/24
-203.16.240.0/24
-203.16.245.0/24
-203.17.2.0/24
-203.17.18.0/24
-203.17.28.0/24
-203.17.39.0/24
-203.17.56.0/24
-203.17.74.0/23
-203.17.88.0/23
-203.17.136.0/24
-203.17.164.0/24
-203.17.187.0/24
-203.17.190.0/23
-203.17.231.0/24
-203.17.233.0/24
-203.17.248.0/23
-203.17.255.0/24
-203.18.2.0/23
-203.18.4.0/24
-203.18.7.0/24
-203.18.31.0/24
-203.18.37.0/24
-203.18.48.0/23
-203.18.52.0/24
-203.18.72.0/22
-203.18.80.0/23
-203.18.87.0/24
-203.18.100.0/23
-203.18.105.0/24
-203.18.107.0/24
-203.18.110.0/24
-203.18.129.0/24
-203.18.131.0/24
-203.18.132.0/23
-203.18.144.0/24
-203.18.153.0/24
-203.18.199.0/24
-203.18.208.0/24
-203.18.211.0/24
-203.18.215.0/24
-203.19.1.0/24
-203.19.18.0/24
-203.19.24.0/24
-203.19.30.0/24
-203.19.36.0/24
-203.19.39.0/24
-203.19.41.0/24
-203.19.44.0/23
-203.19.46.0/24
-203.19.58.0/24
-203.19.60.0/23
-203.19.64.0/24
-203.19.68.0/24
-203.19.72.0/24
-203.19.101.0/24
-203.19.111.0/24
-203.19.131.0/24
-203.19.133.0/24
-203.19.144.0/24
-203.19.147.0/24
-203.19.149.0/24
-203.19.156.0/24
-203.19.176.0/24
-203.19.178.0/23
-203.19.208.0/24
-203.19.228.0/22
-203.19.233.0/24
-203.19.242.0/24
-203.19.248.0/23
-203.19.255.0/24
-203.20.17.0/24
-203.20.40.0/23
-203.20.44.0/24
-203.20.48.0/24
-203.20.61.0/24
-203.20.65.0/24
-203.20.84.0/23
-203.20.89.0/24
-203.20.106.0/23
-203.20.115.0/24
-203.20.117.0/24
-203.20.118.0/23
-203.20.122.0/24
-203.20.126.0/23
-203.20.135.0/24
-203.20.138.0/23
-203.20.150.0/24
-203.20.230.0/24
-203.20.232.0/24
-203.20.236.0/24
-203.21.0.0/23
-203.21.2.0/24
-203.21.8.0/24
-203.21.10.0/24
-203.21.18.0/24
-203.21.33.0/24
-203.21.34.0/24
-203.21.41.0/24
-203.21.44.0/24
-203.21.68.0/24
-203.21.82.0/24
-203.21.96.0/22
-203.21.124.0/24
-203.21.136.0/23
-203.21.145.0/24
-203.21.206.0/24
-203.22.24.0/24
-203.22.28.0/23
-203.22.31.0/24
-203.22.68.0/24
-203.22.76.0/24
-203.22.78.0/24
-203.22.84.0/24
-203.22.87.0/24
-203.22.92.0/22
-203.22.99.0/24
-203.22.106.0/24
-203.22.122.0/23
-203.22.131.0/24
-203.22.163.0/24
-203.22.166.0/24
-203.22.170.0/24
-203.22.176.0/21
-203.22.194.0/24
-203.22.242.0/23
-203.22.245.0/24
-203.22.246.0/24
-203.22.252.0/23
-203.23.0.0/24
-203.23.47.0/24
-203.23.61.0/24
-203.23.62.0/23
-203.23.73.0/24
-203.23.85.0/24
-203.23.92.0/22
-203.23.98.0/24
-203.23.107.0/24
-203.23.112.0/24
-203.23.130.0/24
-203.23.140.0/23
-203.23.172.0/24
-203.23.182.0/24
-203.23.186.0/23
-203.23.192.0/24
-203.23.197.0/24
-203.23.198.0/24
-203.23.204.0/22
-203.23.224.0/24
-203.23.226.0/23
-203.23.228.0/22
-203.23.249.0/24
-203.23.251.0/24
-203.24.13.0/24
-203.24.18.0/24
-203.24.27.0/24
-203.24.43.0/24
-203.24.56.0/24
-203.24.58.0/24
-203.24.67.0/24
-203.24.74.0/24
-203.24.79.0/24
-203.24.80.0/23
-203.24.84.0/23
-203.24.86.0/24
-203.24.90.0/24
-203.24.111.0/24
-203.24.112.0/24
-203.24.116.0/24
-203.24.122.0/23
-203.24.145.0/24
-203.24.152.0/23
-203.24.157.0/24
-203.24.161.0/24
-203.24.167.0/24
-203.24.186.0/23
-203.24.199.0/24
-203.24.202.0/24
-203.24.212.0/23
-203.24.217.0/24
-203.24.219.0/24
-203.24.244.0/24
-203.25.19.0/24
-203.25.20.0/23
-203.25.46.0/24
-203.25.48.0/21
-203.25.64.0/23
-203.25.91.0/24
-203.25.99.0/24
-203.25.100.0/24
-203.25.106.0/24
-203.25.131.0/24
-203.25.135.0/24
-203.25.138.0/24
-203.25.147.0/24
-203.25.153.0/24
-203.25.154.0/23
-203.25.164.0/24
-203.25.166.0/24
-203.25.174.0/23
-203.25.180.0/24
-203.25.182.0/24
-203.25.191.0/24
-203.25.199.0/24
-203.25.200.0/24
-203.25.202.0/23
+203.25.52.0/24
203.25.208.0/20
-203.25.229.0/24
-203.25.235.0/24
-203.25.236.0/24
-203.25.242.0/24
-203.26.12.0/24
-203.26.34.0/24
-203.26.49.0/24
-203.26.50.0/24
-203.26.55.0/24
-203.26.56.0/23
-203.26.60.0/24
-203.26.65.0/24
-203.26.68.0/24
-203.26.76.0/24
-203.26.80.0/24
-203.26.84.0/24
-203.26.97.0/24
-203.26.102.0/23
-203.26.115.0/24
-203.26.116.0/24
-203.26.129.0/24
-203.26.143.0/24
-203.26.144.0/24
-203.26.148.0/23
-203.26.154.0/24
-203.26.158.0/23
-203.26.170.0/24
-203.26.173.0/24
-203.26.176.0/24
-203.26.185.0/24
-203.26.202.0/23
-203.26.210.0/24
-203.26.214.0/24
-203.26.222.0/24
-203.26.224.0/24
-203.26.228.0/24
-203.26.232.0/24
-203.27.0.0/24
-203.27.10.0/24
-203.27.15.0/24
-203.27.16.0/24
-203.27.20.0/24
-203.27.22.0/23
-203.27.40.0/24
-203.27.45.0/24
-203.27.53.0/24
-203.27.65.0/24
-203.27.66.0/24
-203.27.81.0/24
-203.27.88.0/24
-203.27.102.0/24
-203.27.109.0/24
-203.27.117.0/24
-203.27.121.0/24
-203.27.122.0/23
-203.27.125.0/24
-203.27.200.0/24
-203.27.202.0/24
-203.27.233.0/24
-203.27.241.0/24
-203.27.250.0/24
-203.28.10.0/24
-203.28.12.0/24
-203.28.33.0/24
-203.28.34.0/23
-203.28.43.0/24
-203.28.44.0/24
-203.28.54.0/24
-203.28.56.0/24
-203.28.73.0/24
-203.28.74.0/24
-203.28.76.0/24
-203.28.86.0/24
-203.28.88.0/24
-203.28.112.0/24
-203.28.131.0/24
-203.28.136.0/24
-203.28.140.0/24
-203.28.145.0/24
-203.28.165.0/24
-203.28.169.0/24
-203.28.170.0/24
-203.28.178.0/23
-203.28.185.0/24
-203.28.187.0/24
-203.28.196.0/24
-203.28.226.0/23
-203.28.239.0/24
-203.29.2.0/24
-203.29.8.0/23
-203.29.13.0/24
-203.29.14.0/24
-203.29.28.0/24
-203.29.46.0/24
-203.29.57.0/24
-203.29.61.0/24
-203.29.63.0/24
-203.29.69.0/24
-203.29.73.0/24
-203.29.81.0/24
-203.29.90.0/24
-203.29.95.0/24
-203.29.100.0/24
-203.29.103.0/24
-203.29.112.0/24
-203.29.120.0/22
-203.29.182.0/23
-203.29.187.0/24
-203.29.189.0/24
-203.29.190.0/24
-203.29.205.0/24
-203.29.210.0/24
-203.29.217.0/24
-203.29.227.0/24
-203.29.231.0/24
-203.29.233.0/24
-203.29.234.0/24
-203.29.248.0/24
-203.29.254.0/23
-203.30.16.0/23
-203.30.25.0/24
-203.30.27.0/24
-203.30.29.0/24
-203.30.66.0/24
-203.30.81.0/24
-203.30.87.0/24
-203.30.111.0/24
-203.30.121.0/24
-203.30.123.0/24
-203.30.152.0/24
-203.30.156.0/24
-203.30.162.0/24
-203.30.173.0/24
-203.30.175.0/24
-203.30.187.0/24
-203.30.194.0/24
-203.30.217.0/24
-203.30.220.0/24
-203.30.222.0/24
-203.30.232.0/23
-203.30.235.0/24
-203.30.240.0/23
-203.30.246.0/24
-203.30.250.0/23
-203.31.45.0/24
-203.31.46.0/24
-203.31.49.0/24
-203.31.51.0/24
-203.31.54.0/23
-203.31.69.0/24
-203.31.72.0/24
-203.31.80.0/24
-203.31.85.0/24
-203.31.97.0/24
-203.31.105.0/24
-203.31.106.0/24
-203.31.108.0/23
-203.31.124.0/24
-203.31.162.0/24
-203.31.174.0/24
-203.31.177.0/24
-203.31.181.0/24
-203.31.187.0/24
-203.31.189.0/24
-203.31.204.0/24
-203.31.220.0/24
-203.31.222.0/23
-203.31.225.0/24
-203.31.229.0/24
-203.31.248.0/23
-203.31.253.0/24
-203.32.20.0/24
203.32.48.0/23
-203.32.56.0/24
-203.32.60.0/24
-203.32.62.0/24
203.32.68.0/23
-203.32.76.0/24
-203.32.81.0/24
203.32.84.0/23
-203.32.95.0/24
-203.32.102.0/24
-203.32.105.0/24
-203.32.130.0/24
-203.32.133.0/24
-203.32.140.0/24
-203.32.152.0/24
-203.32.186.0/23
-203.32.192.0/24
-203.32.196.0/24
203.32.203.0/24
203.32.204.0/23
203.32.212.0/24
203.33.4.0/24
203.33.7.0/24
-203.33.11.0/24
-203.33.12.0/22
203.33.21.0/24
203.33.26.0/24
203.33.32.0/24
203.33.63.0/24
203.33.64.0/24
203.33.67.0/24
-203.33.68.0/24
-203.33.73.0/24
-203.33.79.0/24
-203.33.100.0/24
-203.33.122.0/24
-203.33.129.0/24
-203.33.131.0/24
203.33.145.0/24
203.33.156.0/24
203.33.158.0/23
203.33.174.0/24
-203.33.185.0/24
-203.33.200.0/24
203.33.202.0/23
-203.33.204.0/24
203.33.206.0/23
203.33.214.0/23
203.33.224.0/23
-203.33.226.0/24
-203.33.233.0/24
-203.33.243.0/24
-203.33.250.0/24
-203.34.4.0/24
203.34.21.0/24
203.34.27.0/24
203.34.39.0/24
@@ -5623,11 +3178,6 @@
203.34.152.0/23
203.34.161.0/24
203.34.162.0/24
-203.34.187.0/24
-203.34.192.0/23
-203.34.195.0/24
-203.34.198.0/24
-203.34.204.0/22
203.34.232.0/24
203.34.240.0/24
203.34.242.0/24
@@ -5659,10 +3209,6 @@
203.56.38.0/24
203.56.40.0/24
203.56.46.0/24
-203.56.48.0/23
-203.56.51.0/24
-203.56.52.0/23
-203.56.54.0/24
203.56.68.0/23
203.56.82.0/23
203.56.84.0/23
@@ -5683,9 +3229,7 @@
203.56.210.0/24
203.56.214.0/24
203.56.216.0/24
-203.56.227.0/24
203.56.228.0/24
-203.56.231.0/24
203.56.232.0/24
203.56.240.0/24
203.56.252.0/24
@@ -5712,472 +3256,687 @@
203.57.206.0/24
203.57.222.0/24
203.57.224.0/20
-203.57.246.0/23
203.57.249.0/24
-203.57.253.0/24
203.57.254.0/23
203.62.2.0/24
203.62.131.0/24
203.62.139.0/24
-203.62.161.0/24
-203.62.197.0/24
-203.62.228.0/22
-203.62.234.0/24
-203.62.246.0/24
203.65.240.0/22
-203.76.160.0/22
-203.76.168.0/22
203.76.208.0/21
203.76.216.0/22
203.76.240.0/22
-203.77.180.0/22
203.78.48.0/20
-203.78.156.0/22
-203.79.0.0/20
-203.80.4.0/23
-203.80.32.0/20
+203.79.0.0/23
203.80.57.0/24
-203.80.129.0/24
-203.80.132.0/22
-203.80.140.0/24
-203.80.142.0/23
203.80.144.0/20
-203.81.1.0/24
-203.81.2.0/24
-203.81.5.0/24
-203.81.16.0/20
-203.81.244.0/22
203.82.0.0/23
-203.82.16.0/24
-203.82.20.0/23
-203.82.22.0/24
-203.82.112.0/20
-203.82.224.0/20
-203.83.0.0/22
-203.83.12.0/22
203.83.56.0/21
203.83.224.0/20
-203.86.0.0/18
+203.86.0.0/19
+203.86.43.0/24
+203.86.44.0/23
+203.86.48.0/23
+203.86.51.0/24
+203.86.52.0/22
+203.86.60.0/23
+203.86.62.0/24
203.86.64.0/19
-203.86.96.0/22
-203.86.100.0/23
-203.86.102.0/24
-203.86.104.0/23
-203.86.107.0/24
-203.86.108.0/24
-203.86.110.0/24
203.86.112.0/24
-203.86.114.0/24
-203.86.116.0/23
-203.86.120.0/24
-203.86.250.0/24
203.86.254.0/23
203.88.32.0/19
203.88.192.0/19
-203.89.8.0/23
-203.89.13.0/24
-203.89.14.0/23
-203.89.133.0/24
-203.89.136.0/22
-203.89.144.0/24
-203.90.8.0/21
203.90.128.0/18
203.90.192.0/19
203.91.32.0/19
-203.91.96.0/20
203.91.120.0/21
-203.92.0.0/22
-203.92.6.0/24
-203.92.160.0/19
-203.93.0.0/16
+203.93.0.0/18
+203.93.64.0/19
+203.93.96.0/20
+203.93.117.0/24
+203.93.120.0/21
+203.93.128.0/19
+203.93.160.0/20
+203.93.208.0/20
+203.93.224.0/19
203.94.0.0/19
-203.95.0.0/21
-203.95.96.0/19
-203.95.128.0/18
-203.95.200.0/21
-203.95.208.0/22
-203.95.224.0/19
-203.99.8.0/23
-203.99.12.0/24
-203.99.14.0/23
-203.99.16.0/23
-203.99.19.0/24
-203.99.20.0/22
-203.99.24.0/21
-203.99.80.0/20
-203.100.32.0/20
-203.100.48.0/22
-203.100.53.0/24
-203.100.55.0/24
-203.100.58.0/24
-203.100.60.0/24
-203.100.63.0/24
-203.100.80.0/20
-203.100.96.0/19
+203.95.0.0/23
+203.95.2.0/24
+203.95.4.0/22
+203.95.128.0/23
+203.99.21.0/24
+203.99.22.0/23
+203.99.26.0/23
+203.99.30.0/23
+203.100.92.0/22
203.100.192.0/20
203.104.32.0/20
-203.105.96.0/19
-203.105.128.0/19
-203.107.0.0/23
+203.107.1.0/24
203.107.2.0/24
-203.107.4.0/22
-203.107.8.0/21
-203.107.16.0/20
+203.107.6.0/24
+203.107.13.0/24
+203.107.20.0/22
+203.107.26.0/23
+203.107.28.0/22
203.107.32.0/19
-203.107.69.0/24
-203.107.70.0/23
203.107.72.0/21
-203.107.80.0/20
-203.107.96.0/19
+203.107.80.0/21
+203.107.96.0/23
+203.107.116.0/22
+203.107.120.0/22
+203.107.124.0/23
203.110.160.0/19
203.110.208.0/20
203.110.232.0/23
-203.110.234.0/24
-203.114.80.0/20
203.114.244.0/22
-203.118.192.0/19
-203.118.241.0/24
203.118.248.0/22
-203.119.24.0/21
-203.119.32.0/22
+203.119.25.0/24
+203.119.26.0/23
+203.119.28.0/22
+203.119.33.0/24
203.119.80.0/24
203.119.83.0/24
-203.119.85.0/24
-203.119.113.0/24
203.119.114.0/23
-203.119.116.0/22
-203.119.121.0/24
-203.119.122.0/23
-203.119.126.0/23
-203.119.128.0/17
-203.123.58.0/24
-203.128.32.0/19
-203.128.96.0/19
-203.128.225.0/24
-203.128.226.0/23
-203.128.228.0/24
-203.128.231.0/24
-203.129.8.0/24
-203.129.10.0/23
+203.119.128.0/19
+203.119.160.0/24
+203.119.168.0/21
+203.119.176.0/20
+203.119.192.0/18
203.129.12.0/22
-203.130.32.0/19
+203.130.40.0/21
203.132.32.0/19
-203.134.240.0/21
+203.133.240.0/21
203.135.96.0/19
-203.135.160.0/20
-203.142.219.0/24
-203.142.224.0/19
-203.144.96.0/22
-203.144.100.0/24
-203.144.102.0/24
-203.144.106.0/23
-203.144.108.0/22
-203.144.112.0/20
-203.145.0.0/19
203.148.0.0/18
203.148.64.0/20
-203.148.80.0/22
203.148.86.0/23
-203.149.92.0/22
203.152.64.0/19
-203.152.128.0/19
-203.153.0.0/22
203.156.192.0/18
-203.158.16.0/21
-203.160.104.0/21
203.160.129.0/24
203.160.192.0/19
-203.161.0.0/22
-203.161.183.0/24
-203.161.192.0/19
-203.166.160.0/19
-203.167.28.0/22
+203.166.160.0/22
+203.166.165.0/24
+203.166.166.0/24
+203.166.172.0/24
+203.166.177.0/24
+203.166.186.0/23
+203.166.188.0/23
+203.166.191.0/24
203.168.0.0/19
203.170.58.0/23
-203.171.0.0/22
-203.171.208.0/24
-203.171.224.0/20
203.174.4.0/24
-203.174.6.0/24
203.174.96.0/19
203.175.128.0/19
-203.175.192.0/18
-203.176.0.0/18
-203.176.64.0/19
-203.176.168.0/21
-203.184.80.0/20
-203.185.189.0/24
+203.176.92.0/22
+203.176.168.0/24
+203.176.170.0/24
203.187.160.0/19
203.189.0.0/23
203.189.6.0/23
-203.189.112.0/22
203.189.192.0/19
203.189.240.0/22
-203.190.96.0/20
-203.190.249.0/24
+203.190.100.0/23
203.191.0.0/23
-203.191.2.0/24
-203.191.5.0/24
-203.191.7.0/24
-203.191.16.0/20
-203.191.64.0/18
-203.191.133.0/24
-203.191.144.0/20
-203.192.0.0/19
+203.191.144.0/21
+203.192.1.0/24
+203.192.2.0/23
+203.192.4.0/22
+203.192.8.0/21
+203.192.16.0/24
+203.192.24.0/23
203.193.224.0/19
-203.194.120.0/21
+203.194.122.0/23
+203.194.124.0/24
203.195.64.0/19
-203.195.112.0/23
+203.195.113.0/24
203.195.114.0/24
-203.195.116.0/22
+203.195.118.0/23
203.195.128.0/17
203.196.0.0/21
-203.196.28.0/22
-203.201.181.0/24
-203.201.182.0/24
-203.202.236.0/22
-203.205.64.0/19
-203.205.130.0/23
-203.205.132.0/23
-203.205.148.0/22
-203.205.152.0/23
-203.205.154.0/24
-203.205.156.0/24
-203.205.158.0/23
-203.205.160.0/20
-203.205.176.0/21
-203.205.184.0/22
-203.205.189.0/24
-203.205.190.0/24
-203.205.200.0/21
-203.205.208.0/21
-203.205.216.0/23
-203.205.225.0/24
-203.205.226.0/23
-203.205.228.0/22
-203.205.240.0/21
-203.207.64.0/18
-203.207.128.0/17
+203.202.236.0/23
+203.205.88.0/23
+203.205.90.0/24
+203.207.64.0/19
+203.207.96.0/21
+203.207.104.0/22
+203.207.112.0/20
+203.207.128.0/18
+203.207.192.0/21
+203.207.200.0/22
+203.207.208.0/20
+203.207.224.0/19
203.208.32.0/19
203.209.224.0/19
-203.212.0.0/20
-203.212.80.0/20
-203.215.232.0/21
-203.217.164.0/22
-203.223.16.0/24
-203.223.21.0/24
-203.223.22.0/23
-206.109.70.0/23
+203.212.0.0/21
+203.212.8.0/22
+203.212.80.0/23
+203.215.232.0/23
+203.215.236.0/24
+203.223.17.0/24
+203.223.19.0/24
+203.223.20.0/23
+204.77.130.0/24
+204.235.241.0/24
+205.198.19.0/24
206.109.75.0/24
-210.2.0.0/19
+210.2.0.0/23
+210.2.4.0/24
210.5.0.0/19
-210.5.56.0/24
-210.5.58.0/23
-210.5.60.0/22
+210.5.56.0/21
210.5.128.0/19
-210.7.56.0/21
-210.12.0.0/15
-210.14.64.0/19
+210.12.0.0/16
+210.13.0.0/17
+210.13.192.0/19
+210.13.224.0/24
+210.13.227.0/24
+210.13.230.0/23
+210.13.232.0/24
+210.13.236.0/23
+210.13.238.0/24
+210.13.240.0/20
+210.14.64.0/20
+210.14.80.0/22
+210.14.84.0/24
+210.14.90.0/23
+210.14.92.0/22
210.14.112.0/20
-210.14.128.0/17
+210.14.128.0/19
+210.14.192.0/18
210.15.0.0/17
-210.15.128.0/18
-210.16.128.0/18
-210.21.0.0/16
-210.22.0.0/16
-210.23.32.0/19
+210.16.160.0/19
+210.21.0.0/17
+210.21.192.0/18
+210.22.0.0/19
+210.22.32.0/22
+210.22.48.0/20
+210.22.64.0/18
+210.22.128.0/17
210.25.0.0/16
210.26.0.0/15
210.28.0.0/14
210.32.0.0/12
+210.48.136.0/21
210.51.0.0/16
210.52.0.0/15
-210.56.192.0/19
-210.72.0.0/14
-210.76.0.0/15
-210.78.0.0/16
-210.79.64.0/18
+210.72.0.0/17
+210.72.128.0/18
+210.72.192.0/19
+210.72.224.0/20
+210.72.240.0/23
+210.72.243.0/24
+210.72.245.0/24
+210.72.246.0/24
+210.73.0.0/17
+210.73.128.0/18
+210.73.192.0/22
+210.73.204.0/24
+210.73.208.0/20
+210.73.224.0/19
+210.74.0.0/20
+210.74.35.0/24
+210.74.36.0/23
+210.74.38.0/24
+210.74.40.0/22
+210.74.44.0/23
+210.74.47.0/24
+210.74.64.0/23
+210.74.107.0/24
+210.74.108.0/23
+210.74.128.0/18
+210.74.224.0/19
+210.75.0.0/18
+210.75.96.0/19
+210.75.192.0/18
+210.76.0.0/18
+210.76.64.0/19
+210.76.160.0/19
+210.76.192.0/19
+210.77.0.0/18
+210.77.64.0/19
+210.77.128.0/19
+210.77.176.0/22
+210.77.180.0/23
+210.77.182.0/24
+210.77.184.0/24
+210.77.189.0/24
+210.77.190.0/23
+210.77.192.0/18
+210.78.128.0/24
+210.78.134.0/23
+210.78.139.0/24
210.79.224.0/19
210.82.0.0/15
-210.87.72.0/23
-210.87.114.0/23
210.87.128.0/18
210.185.192.0/18
-210.192.96.0/19
+210.192.96.0/20
+210.192.116.0/22
+210.192.120.0/21
211.64.0.0/13
-211.80.0.0/12
-211.96.0.0/15
+211.80.0.0/13
+211.88.0.0/16
+211.89.230.0/23
+211.90.0.0/17
+211.90.128.0/18
+211.90.192.0/20
+211.90.216.0/21
+211.90.224.0/19
+211.91.0.0/18
+211.91.64.0/19
+211.91.96.0/20
+211.91.120.0/21
+211.91.128.0/18
+211.91.216.0/21
+211.91.224.0/19
+211.92.0.0/17
+211.92.128.0/18
+211.92.192.0/19
+211.92.224.0/20
+211.92.244.0/22
+211.93.0.0/17
+211.93.128.0/20
+211.93.144.0/21
+211.93.160.0/19
+211.93.192.0/21
+211.93.200.0/23
+211.93.204.0/22
+211.93.211.0/24
+211.93.212.0/23
+211.93.224.0/19
+211.94.37.0/24
+211.94.64.0/18
+211.94.128.0/17
+211.95.0.0/17
+211.95.128.0/19
+211.95.192.0/18
+211.96.0.0/16
+211.97.0.0/17
+211.97.128.0/19
+211.97.160.0/21
+211.97.176.0/20
+211.97.192.0/18
211.98.0.0/16
-211.99.0.0/19
+211.99.8.0/21
+211.99.16.0/23
+211.99.25.0/24
+211.99.26.0/24
+211.99.28.0/22
+211.99.32.0/19
211.99.64.0/18
-211.99.128.0/17
-211.100.0.0/15
-211.102.0.0/17
-211.102.128.0/21
-211.102.144.0/21
-211.102.160.0/20
-211.102.192.0/18
+211.99.128.0/18
+211.99.192.0/19
+211.100.0.0/17
+211.100.192.0/20
+211.100.224.0/19
+211.101.0.0/18
+211.101.192.0/20
+211.101.232.0/21
+211.101.240.0/21
+211.102.80.0/20
+211.102.128.0/18
+211.102.192.0/23
+211.102.208.0/20
+211.102.240.0/21
+211.102.248.0/24
211.103.0.0/16
211.136.0.0/13
-211.144.0.0/14
-211.148.0.0/16
-211.149.0.0/19
-211.149.48.0/21
-211.149.64.0/21
-211.149.80.0/21
-211.149.96.0/19
+211.144.9.0/24
+211.144.10.0/24
+211.144.12.0/22
+211.144.16.0/24
+211.144.18.0/23
+211.144.20.0/24
+211.144.22.0/24
+211.144.24.0/24
+211.144.27.0/24
+211.144.28.0/23
+211.144.32.0/19
+211.144.64.0/19
+211.144.96.0/23
+211.144.100.0/22
+211.144.104.0/22
+211.144.108.0/23
+211.144.110.0/24
+211.144.112.0/24
+211.144.114.0/23
+211.144.118.0/23
+211.144.120.0/21
+211.144.128.0/19
+211.144.192.0/18
+211.145.0.0/18
+211.145.64.0/20
+211.146.0.0/19
+211.146.32.0/21
+211.147.0.0/18
+211.147.64.0/19
+211.147.128.0/19
+211.147.208.0/20
+211.147.224.0/19
+211.148.0.0/18
+211.148.128.0/17
211.149.128.0/17
-211.150.0.0/15
+211.150.0.0/18
+211.150.64.0/19
+211.150.98.0/24
+211.150.100.0/23
+211.150.114.0/23
+211.150.122.0/24
+211.150.124.0/23
+211.150.128.0/24
+211.151.0.0/16
211.152.0.0/17
-211.152.128.0/20
-211.152.144.0/22
-211.152.150.0/23
-211.152.152.0/21
-211.152.160.0/19
-211.152.192.0/18
+211.152.192.0/22
+211.152.196.0/23
+211.152.208.0/20
211.153.0.0/16
-211.154.0.0/16
-211.155.0.0/18
-211.155.66.0/23
-211.155.68.0/22
-211.155.72.0/21
+211.154.0.0/19
+211.154.64.0/19
+211.154.128.0/17
+211.155.16.0/20
+211.155.32.0/19
211.155.80.0/20
211.155.96.0/19
-211.155.128.0/18
-211.155.208.0/20
-211.155.224.0/19
-211.156.0.0/14
-211.160.0.0/14
-211.164.0.0/15
+211.155.128.0/19
+211.155.160.0/20
+211.155.176.0/22
+211.155.184.0/21
+211.155.224.0/21
+211.155.232.0/22
+211.155.236.0/24
+211.155.240.0/20
+211.156.0.0/19
+211.156.128.0/19
+211.156.176.0/20
+211.156.192.0/20
+211.156.208.0/21
+211.156.216.0/22
+211.156.220.0/23
+211.156.223.0/24
+211.157.0.0/19
+211.157.96.0/19
+211.157.128.0/18
+211.157.192.0/20
+211.157.219.0/24
+211.157.222.0/24
+211.157.224.0/19
+211.158.0.0/16
+211.159.64.0/21
+211.159.128.0/17
+211.160.0.0/22
+211.160.4.0/24
+211.160.9.0/24
+211.160.10.0/23
+211.160.14.0/23
+211.160.16.0/24
+211.160.18.0/23
+211.160.20.0/23
+211.160.22.0/24
+211.160.24.0/24
+211.160.27.0/24
+211.160.28.0/23
+211.160.36.0/23
+211.160.46.0/24
+211.160.62.0/24
+211.160.72.0/21
+211.160.80.0/20
+211.160.112.0/23
+211.160.115.0/24
+211.160.120.0/24
+211.160.160.0/19
+211.160.195.0/24
+211.160.196.0/24
+211.160.203.0/24
+211.160.205.0/24
+211.160.244.0/24
+211.160.246.0/23
+211.160.248.0/21
+211.161.0.0/20
+211.161.24.0/22
+211.161.32.0/20
+211.161.60.0/23
+211.161.62.0/24
+211.161.101.0/24
+211.161.102.0/23
+211.161.120.0/21
+211.161.192.0/22
+211.161.203.0/24
+211.161.209.0/24
+211.161.221.0/24
+211.161.224.0/20
+211.162.0.0/21
+211.162.64.0/20
+211.162.119.0/24
+211.162.120.0/21
+211.162.200.0/22
+211.165.0.0/16
211.166.0.0/16
-211.167.0.0/19
211.167.64.0/18
-211.167.128.0/17
+211.167.128.0/19
+211.167.176.0/20
+211.167.224.0/19
212.64.0.0/17
+212.103.62.0/24
212.129.128.0/17
-218.0.0.0/12
-218.16.0.0/13
-218.24.0.0/14
-218.28.0.0/15
-218.30.0.0/19
-218.30.32.0/22
-218.30.36.0/23
-218.30.38.0/24
-218.30.40.0/22
-218.30.45.0/24
-218.30.46.0/23
-218.30.48.0/21
-218.30.56.0/22
-218.30.60.0/23
-218.30.64.0/18
-218.30.128.0/17
-218.31.0.0/16
+218.0.0.0/11
218.56.0.0/13
218.64.0.0/11
-218.96.0.0/16
+218.96.0.0/24
+218.96.64.0/22
+218.96.104.0/22
+218.96.108.0/23
+218.96.126.0/23
+218.96.128.0/24
+218.96.241.0/24
+218.96.244.0/24
+218.96.255.0/24
218.97.0.0/17
218.97.160.0/19
-218.97.192.0/18
-218.98.0.0/15
+218.97.192.0/19
+218.97.240.0/20
+218.98.0.0/18
+218.98.96.0/21
+218.98.104.0/22
+218.98.108.0/23
+218.98.111.0/24
+218.98.112.0/20
+218.98.160.0/24
+218.98.176.0/24
+218.98.192.0/24
218.100.88.0/21
-218.100.96.0/19
-218.100.128.0/17
-218.104.0.0/14
+218.104.0.0/15
+218.106.0.0/16
+218.107.0.0/18
+218.107.128.0/17
218.108.0.0/15
-218.185.192.0/19
-218.185.240.0/24
-218.185.242.0/24
-218.185.244.0/24
-218.185.246.0/23
+218.185.240.0/21
218.192.0.0/12
-218.240.0.0/14
-218.244.0.0/15
-218.246.0.0/16
+218.213.85.0/24
+218.240.0.0/19
+218.240.128.0/19
+218.240.160.0/21
+218.240.168.0/24
+218.240.176.0/20
+218.241.16.0/21
+218.241.96.0/20
+218.241.112.0/22
+218.241.116.0/23
+218.241.118.0/24
+218.241.121.0/24
+218.241.122.0/23
+218.241.124.0/22
+218.241.128.0/17
+218.242.0.0/16
+218.244.0.0/19
+218.244.44.0/22
+218.244.49.0/24
+218.244.52.0/23
+218.244.55.0/24
+218.244.56.0/23
+218.244.58.0/24
+218.244.128.0/18
+218.244.192.0/20
+218.244.224.0/19
+218.245.0.0/17
+218.246.0.0/19
+218.246.32.0/22
+218.246.48.0/22
+218.246.64.0/18
+218.246.160.0/19
+218.246.192.0/19
218.247.0.0/18
-218.247.96.0/19
+218.247.64.0/19
218.247.128.0/17
218.249.0.0/16
+218.252.0.0/17
+218.253.0.0/18
219.72.0.0/16
219.82.0.0/16
-219.83.128.0/17
-219.90.68.0/22
-219.90.72.0/21
-219.128.0.0/11
+219.83.160.0/19
+219.100.148.0/22
+219.117.16.0/20
+219.128.0.0/12
+219.144.0.0/14
+219.148.0.0/15
+219.150.0.0/16
+219.151.0.0/18
+219.151.128.0/17
+219.152.0.0/14
+219.156.0.0/15
+219.158.0.0/19
+219.158.32.0/20
+219.158.58.0/23
+219.158.60.0/22
+219.158.96.0/19
+219.158.128.0/17
+219.159.0.0/16
219.216.0.0/13
219.224.0.0/13
-219.232.0.0/15
-219.234.10.0/23
-219.234.12.0/22
-219.234.32.0/19
-219.234.64.0/18
+219.232.0.0/17
+219.232.144.0/24
+219.232.160.0/19
+219.232.192.0/19
+219.233.0.0/16
+219.234.0.0/21
+219.234.16.0/20
+219.234.80.0/20
+219.234.96.0/19
219.234.128.0/17
-219.235.0.0/16
+219.235.0.0/20
+219.235.32.0/19
+219.235.64.0/18
+219.235.128.0/19
+219.235.192.0/23
+219.235.207.0/24
+219.235.224.0/22
+219.235.228.0/23
+219.235.233.0/24
+219.235.234.0/24
+219.235.237.0/24
+219.235.251.0/24
+219.235.252.0/24
+219.235.255.0/24
219.236.0.0/14
219.242.0.0/15
219.244.0.0/14
-220.101.192.0/18
-220.112.0.0/14
-220.152.128.0/17
-220.154.0.0/15
-220.158.240.0/22
-220.160.0.0/13
-220.168.0.0/14
-220.172.0.0/15
-220.174.0.0/20
-220.174.16.0/21
-220.174.24.0/23
-220.174.28.0/22
-220.174.32.0/19
-220.174.64.0/20
-220.174.80.0/21
-220.174.88.0/22
-220.174.92.0/23
-220.174.96.0/19
-220.174.128.0/17
-220.175.0.0/16
-220.176.0.0/12
-220.192.0.0/12
-220.231.0.0/18
+220.101.192.0/19
+220.112.0.0/22
+220.112.8.0/24
+220.112.40.0/21
+220.112.50.0/23
+220.112.52.0/23
+220.112.54.0/24
+220.112.194.0/24
+220.112.196.0/24
+220.112.200.0/21
+220.113.0.0/19
+220.113.32.0/20
+220.113.96.0/21
+220.113.150.0/23
+220.113.152.0/23
+220.113.154.0/24
+220.114.250.0/23
+220.154.0.0/20
+220.154.16.0/22
+220.154.64.0/20
+220.154.80.0/22
+220.154.128.0/20
+220.154.147.0/24
+220.160.0.0/12
+220.176.0.0/14
+220.180.0.0/16
+220.181.0.0/17
+220.181.128.0/20
+220.181.144.0/24
+220.181.148.0/22
+220.181.152.0/21
+220.181.160.0/19
+220.182.0.0/18
+220.184.0.0/13
+220.192.0.0/16
+220.193.0.0/17
+220.194.0.0/16
+220.195.0.0/17
+220.195.128.0/19
+220.195.192.0/18
+220.196.0.0/16
+220.197.0.0/17
+220.197.160.0/19
+220.197.192.0/18
+220.198.0.0/15
+220.200.0.0/17
+220.200.128.0/20
+220.200.148.0/22
+220.200.152.0/21
+220.200.160.0/19
+220.200.192.0/18
+220.201.0.0/16
+220.202.0.0/16
+220.203.0.0/17
+220.203.128.0/18
+220.203.216.0/23
+220.203.224.0/19
+220.205.0.0/16
+220.206.192.0/22
+220.207.0.0/22
+220.207.80.0/20
+220.207.176.0/22
+220.207.184.0/22
+220.207.254.0/23
+220.231.32.0/20
220.231.128.0/17
220.232.64.0/18
220.234.0.0/16
-220.242.0.0/22
-220.242.4.0/23
-220.242.6.0/24
-220.242.8.0/21
-220.242.16.0/20
-220.242.32.0/19
-220.242.64.0/18
-220.242.128.0/17
-220.243.0.0/16
-220.247.136.0/23
-220.247.142.0/23
-220.248.0.0/14
-220.252.0.0/16
+220.242.180.0/24
+220.243.128.0/20
+220.243.153.0/24
+220.243.154.0/23
+220.243.156.0/23
+220.243.158.0/24
+220.243.176.0/20
+220.248.0.0/16
+220.249.0.0/17
+220.249.128.0/18
+220.249.192.0/19
+220.249.240.0/20
+220.250.0.0/17
221.0.0.0/13
221.8.0.0/14
221.12.0.0/17
221.12.128.0/18
221.13.0.0/16
221.14.0.0/15
-221.122.0.0/15
-221.128.132.0/22
-221.128.136.0/21
-221.128.144.0/20
-221.128.160.0/19
-221.128.192.0/23
-221.128.194.0/24
-221.128.196.0/22
-221.128.200.0/21
-221.128.208.0/20
-221.128.224.0/21
-221.128.232.0/22
-221.128.238.0/23
+221.122.0.0/16
+221.123.0.0/24
+221.123.112.0/20
+221.123.128.0/17
221.129.0.0/16
221.130.0.0/15
-221.133.224.0/19
-221.136.0.0/15
-221.172.0.0/14
+221.133.225.0/24
+221.133.226.0/24
+221.133.228.0/22
+221.133.232.0/23
+221.133.235.0/24
+221.133.244.0/23
+221.137.0.0/16
+221.174.0.0/17
221.176.0.0/13
221.192.0.0/14
221.196.0.0/15
@@ -6190,57 +3949,117 @@
221.208.0.0/12
221.224.0.0/12
222.16.0.0/12
-222.32.0.0/11
+222.35.0.0/16
+222.42.115.0/24
+222.44.0.0/15
+222.49.128.0/17
+222.50.0.0/16
+222.59.128.0/17
222.64.0.0/11
222.125.0.0/16
-222.126.128.0/17
+222.126.128.0/22
+222.126.132.0/23
+222.126.134.0/24
+222.126.138.0/23
+222.126.140.0/22
+222.126.144.0/24
+222.126.146.0/23
+222.126.148.0/22
+222.126.152.0/21
+222.126.160.0/20
+222.126.176.0/21
+222.126.184.0/22
+222.126.188.0/23
+222.126.192.0/22
+222.126.196.0/23
+222.126.200.0/22
+222.126.208.0/23
+222.126.212.0/22
+222.126.216.0/23
+222.126.228.0/23
+222.126.234.0/23
+222.126.236.0/22
+222.126.240.0/20
222.128.0.0/12
222.160.0.0/14
+222.166.96.0/20
+222.166.160.0/20
+222.166.240.0/20
222.168.0.0/13
222.176.0.0/12
222.192.0.0/11
222.240.0.0/13
222.248.0.0/15
-223.0.0.0/12
-223.20.0.0/15
+223.0.1.0/24
+223.0.2.0/24
+223.0.8.0/22
+223.0.12.0/23
+223.0.15.0/24
+223.0.16.0/24
+223.0.30.0/24
+223.0.41.0/24
+223.0.126.0/24
+223.2.0.0/15
+223.4.0.0/14
+223.8.0.0/13
+223.26.0.0/24
223.27.184.0/22
-223.29.208.0/22
-223.29.252.0/24
-223.29.255.0/24
-223.64.0.0/11
-223.96.0.0/12
-223.112.0.0/14
-223.116.0.0/15
-223.121.128.0/17
-223.122.4.0/22
-223.122.12.0/22
-223.122.18.0/23
-223.122.20.0/22
-223.122.26.0/23
-223.122.28.0/22
-223.123.196.0/22
-223.123.204.0/22
-223.123.208.0/20
-223.123.224.0/19
-223.124.0.0/14
+223.64.0.0/10
223.128.0.0/15
223.144.0.0/12
-223.160.0.0/14
+223.160.0.0/20
+223.160.16.0/21
+223.160.112.0/20
+223.160.128.0/22
+223.160.134.0/23
+223.160.136.0/21
+223.160.144.0/20
+223.160.160.0/19
+223.160.192.0/19
+223.160.224.0/21
+223.160.232.0/22
+223.160.236.0/23
+223.161.194.0/23
+223.161.196.0/22
+223.161.200.0/21
+223.161.208.0/20
+223.161.224.0/19
+223.165.10.0/24
+223.165.12.0/24
+223.165.80.0/20
223.166.0.0/15
223.192.0.0/15
223.198.0.0/15
-223.201.0.0/16
-223.202.0.0/15
-223.208.0.0/13
+223.202.0.0/24
+223.202.67.0/24
+223.202.131.0/24
+223.202.132.0/24
+223.202.135.0/24
+223.202.211.0/24
+223.202.212.0/24
+223.203.3.0/24
+223.203.9.0/24
+223.203.96.0/24
+223.203.100.0/24
+223.210.0.0/19
+223.210.48.0/22
+223.212.0.0/14
223.220.0.0/15
223.223.176.0/20
223.223.192.0/20
223.240.0.0/13
223.248.0.0/14
-223.252.128.0/17
-223.254.0.0/17
-223.254.160.0/19
-223.254.192.0/18
-223.255.0.0/17
+223.252.194.0/24
+223.252.196.0/24
+223.252.199.0/24
+223.252.200.0/23
+223.252.202.0/24
+223.252.205.0/24
+223.252.209.0/24
+223.252.210.0/23
+223.252.212.0/24
+223.252.214.0/23
+223.252.221.0/24
+223.252.222.0/24
223.255.236.0/22
223.255.252.0/23
diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver
index 5d7e941a2..0593cbd7b 100644
--- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver
+++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver
@@ -1 +1 @@
-202609130005
+20260704060757
diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt
index 89e8c696c..1b668724e 100644
--- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt
+++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt
@@ -1,7 +1,6 @@
2001:250::/30
-2001:254::/33
-2001:255::/32
-2001:7fa:5::/48
+2001:254::/31
+2001:256:100::/48
2001:c68::/32
2001:cc0::/32
2001:da8::/32
@@ -9,252 +8,38 @@
2001:daa:2::/47
2001:daa:4::/47
2001:daa:6::/48
-2001:daa:9::/48
-2001:dc7::/45
-2001:dc7:9::/48
-2001:dc7:a::/47
-2001:dc7:c::/46
-2001:dc7:10::/44
-2001:dc7:20::/43
-2001:dc7:40::/42
-2001:dc7:80::/41
-2001:dc7:100::/40
-2001:dc7:200::/39
-2001:dc7:400::/38
-2001:dc7:800::/37
-2001:dc7:1000::/36
-2001:dc7:2000::/35
-2001:dc7:4000::/34
-2001:dc7:8000::/33
+2001:dc7::/32
2001:dd8:1::/48
2001:dd9::/48
+2001:df6:40::/48
2001:4510:400::/40
-2001:4510:1480::/41
-2001:4511:1480::/41
-2400:1040::/32
2400:1160::/32
-2400:12c0::/32
-2400:1340::/32
-2400:1380::/32
-2400:15c0::/32
-2400:1640::/32
-2400:16c0::/32
-2400:1740::/32
-2400:17c0::/32
-2400:1840::/32
-2400:18c0::/32
-2400:1940::/32
-2400:19a0::/32
-2400:19c0::/32
-2400:1a40::/32
-2400:1ac0::/32
-2400:1b40::/32
-2400:1cc0::/32
-2400:1d40::/32
-2400:1dc0::/32
-2400:1e40::/32
-2400:1ec0::/32
-2400:1f40::/32
-2400:1fc0::/32
-2400:3040::/32
-2400:3140::/32
-2400:3160::/32
-2400:31c0::/32
2400:3200::/32
-2400:32c0::/32
-2400:3340::/32
-2400:33c0::/32
-2400:3440::/32
-2400:34c0::/32
-2400:3540::/32
-2400:35c0::/32
-2400:3600::/32
-2400:3640::/32
-2400:3660::/32
-2400:36c0::/32
-2400:38c0::/32
-2400:39c0::/32
-2400:3a00::/32
-2400:3a40::/32
-2400:3b40::/32
-2400:3c40::/32
-2400:3cc0::/32
-2400:3e00::/32
-2400:3f40::/32
-2400:3f60::/46
-2400:3f60:5::/48
-2400:3f60:6::/47
-2400:3f60:8::/45
-2400:3f60:13::/48
-2400:3f60:14::/46
-2400:3f60:18::/45
-2400:3f60:20::/43
-2400:3f60:40::/42
-2400:3f60:80::/41
-2400:3f60:100::/40
-2400:3f60:200::/39
-2400:3f60:400::/38
-2400:3f60:800::/37
-2400:3f60:1000::/36
-2400:3f60:2000::/35
-2400:3f60:4000::/34
-2400:3f60:8000::/33
-2400:3fc0::/32
-2400:4440::/32
-2400:44c0::/32
-2400:4540::/32
-2400:4600::/32
-2400:4640::/32
-2400:46c0::/32
-2400:4920::/32
-2400:4bc0::/32
-2400:4e00::/32
-2400:4e40::/32
-2400:5080::/32
-2400:5280:1400::/38
-2400:5280:1c00::/38
-2400:5280:3400::/38
-2400:5280:4c00::/38
-2400:5280:5000::/36
-2400:5280:6000::/35
-2400:5280:8000::/34
-2400:5280:c000::/35
-2400:5280:e000::/36
-2400:5280:f000::/37
-2400:5280:f800::/38
-2400:5400::/32
-2400:5580::/32
-2400:55c0::/32
-2400:55e0::/32
-2400:5600::/32
-2400:5640::/32
-2400:56c0::/32
-2400:57c0::/32
-2400:5840::/32
+2400:5280:f803::/48
2400:5a00::/32
-2400:5a40::/32
-2400:5a60::/41
-2400:5a60:80::/42
-2400:5a60:c0::/43
-2400:5a60:e0::/44
-2400:5a60:f0::/45
-2400:5a60:f8::/46
-2400:5a60:fc::/47
-2400:5a60:fe::/48
-2400:5a60:100::/40
-2400:5a60:200::/39
-2400:5a60:400::/38
-2400:5a60:800::/37
-2400:5a60:1000::/36
-2400:5a60:2000::/35
-2400:5a60:4000::/34
-2400:5a60:8001::/48
-2400:5a60:8002::/47
-2400:5a60:8004::/46
-2400:5a60:8008::/45
-2400:5a60:8010::/44
-2400:5a60:8020::/43
-2400:5a60:8040::/42
-2400:5a60:8080::/41
-2400:5a60:8100::/40
-2400:5a60:8200::/39
-2400:5a60:8400::/38
-2400:5a60:8800::/37
-2400:5a60:9000::/36
-2400:5a60:a000::/35
-2400:5a60:c000::/34
-2400:5ac0::/32
-2400:5b40::/32
-2400:5bc0::/32
-2400:5c40::/32
-2400:5c80::/32
-2400:5cc0::/32
-2400:5e20::/32
-2400:5e80::/32
-2400:5ee0::/32
-2400:5fc0::/32
2400:6000::/32
-2400:6040::/32
-2400:60c0::/32
-2400:61c0::/32
-2400:6200::/32
2400:6600::/32
-2400:6640::/32
-2400:66a0::/32
-2400:66c0::/32
-2400:66e0::/32
-2400:6740::/32
-2400:67a0::/32
-2400:67c0::/32
-2400:6840::/32
-2400:68c0::/32
-2400:6940::/32
-2400:69c0::/32
-2400:6a00::/32
-2400:6a40::/32
-2400:6ac0::/32
-2400:6b40::/32
-2400:6bc0::/32
-2400:6c40::/32
-2400:6cc0::/32
-2400:6d40::/32
-2400:6da0::/32
-2400:6dc0::/32
-2400:6e00::/32
-2400:6e40::/32
-2400:6e60::/32
-2400:6ec0::/32
-2400:6f40::/32
-2400:6f80::/32
-2400:6fc0::/32
-2400:7040::/32
-2400:70a0::/32
-2400:7100::/32
-2400:7140::/32
-2400:71c0::/32
-2400:7200::/32
-2400:7240::/32
-2400:72c0::/32
-2400:7340::/32
-2400:73c0::/32
-2400:73e0::/32
-2400:7440::/32
-2400:74c0::/32
-2400:7540::/32
-2400:75a0::/28
-2400:75c0::/32
-2400:7640::/32
-2400:7680::/32
-2400:76c0::/32
-2400:7740::/32
-2400:77c0::/32
-2400:79c0::/32
-2400:7ae0::/32
-2400:7bc0::/32
-2400:7f80::/32
-2400:7fc0::/32
-2400:8080::/32
-2400:8200::/31
-2400:82c0::/32
-2400:8580::/32
-2400:8600::/32
-2400:86a0::/32
-2400:86e0::/32
-2400:8780::/32
-2400:87c0::/32
-2400:8840::/32
-2400:8920::/32
-2400:8980::/32
-2400:89c0::/32
-2400:8be0::/32
-2400:8ce0::/32
-2400:8e00::/32
-2400:8e60::/32
-2400:8f00::/32
-2400:8f60::/32
+2400:6e60:1301::/48
+2400:75aa::/32
+2400:7fc0::/40
+2400:7fc0:220::/44
+2400:7fc0:240::/44
+2400:7fc0:2a0::/44
+2400:7fc0:2c0::/44
+2400:7fc0:4000::/40
+2400:7fc0:4100::/48
+2400:7fc0:6000::/40
+2400:7fc0:8000::/36
+2400:7fc0:a000::/36
+2400:7fc0:bb00::/40
+2400:7fc0:c000::/36
+2400:8200::/32
+2400:89c0:1010::/44
+2400:89c0:1050::/46
+2400:89c0:1150::/48
+2400:89c0:6000::/48
2400:8fc0::/32
-2400:9020::/32
-2400:9040::/32
+2400:9020:f010::/46
2400:9380:8001::/48
2400:9380:8003::/48
2400:9380:8021::/48
@@ -272,2929 +57,893 @@
2400:9380:90b1::/48
2400:9380:90b2::/47
2400:9380:90b4::/46
-2400:9380:9109::/48
2400:9380:9121::/48
2400:9380:9220::/47
2400:9380:9250::/47
2400:9380:9260::/48
2400:9380:9271::/48
2400:9380:9280::/47
-2400:9380:9282::/48
2400:9380:92b1::/48
2400:9380:92b2::/47
2400:9380:92b4::/46
-2400:93e0::/32
-2400:9520::/32
-2400:9580::/32
-2400:95c0::/32
-2400:95e0::/32
-2400:9600::/32
+2400:95e0::/48
+2400:9600:8800::/48
2400:9620::/32
-2400:98c0::/32
-2400:9960::/32
-2400:99e0::/32
-2400:9a00::/32
-2400:9ca0::/32
-2400:9e00::/32
-2400:a320::/32
-2400:a380::/32
-2400:a420::/32
-2400:a480::/32
-2400:a5a0::/32
-2400:a6a0::/39
-2400:a6a0:300::/40
-2400:a6a0:400::/38
-2400:a6a0:800::/37
-2400:a6a0:1000::/36
-2400:a6a0:2000::/35
-2400:a6a0:4000::/34
-2400:a6a0:8000::/33
-2400:a780::/32
-2400:a860::/32
-2400:a8a0::/32
-2400:a8c0::/32
-2400:a900::/32
+2400:a860:1::/48
+2400:a860:2::/47
+2400:a860:4::/47
+2400:a860:6::/48
2400:a980::/29
-2400:a9a0::/32
-2400:abc0::/32
-2400:ae00::/32
+2400:ae00:1981::/48
2400:b200::/32
-2400:b500::/32
2400:b600::/32
-2400:b620::/32
-2400:b6c0::/32
-2400:b700::/32
-2400:b9a0::/32
-2400:b9c0::/32
-2400:ba00::/32
-2400:be00::/32
-2400:bf00::/32
-2400:c200::/32
-2400:c380::/32
-2400:c840::/32
-2400:c8c0::/32
-2400:c940::/32
-2400:c9c0::/32
-2400:ca40::/32
-2400:cac0::/32
-2400:cb40::/32
-2400:cb80::/33
-2400:cb80:8000::/40
-2400:cb80:8100::/43
-2400:cb80:8120::/44
-2400:cb80:8130::/45
-2400:cb80:8138::/47
-2400:cb80:813a::/48
-2400:cb80:813c::/47
-2400:cb80:813e::/48
-2400:cb80:8140::/42
-2400:cb80:8180::/41
-2400:cb80:8200::/39
-2400:cb80:8400::/38
-2400:cb80:8800::/37
-2400:cb80:9000::/36
-2400:cb80:a000::/35
-2400:cb80:c000::/34
-2400:cbc0::/32
-2400:cc40::/32
-2400:cc80::/32
-2400:ccc0::/32
-2400:cd40::/32
-2400:cda0::/32
-2400:cdc0::/32
-2400:ce00::/32
-2400:ce40::/32
-2400:cf40::/32
-2400:cfc0::/32
-2400:d0a0::/32
-2400:d0c0::/32
-2400:d100::/32
-2400:d160::/32
-2400:d1c0::/32
-2400:d200::/32
-2400:d300::/32
-2400:d440::/32
-2400:d600::/32
-2400:d6a0::/32
-2400:d6c0::/32
-2400:d720::/32
-2400:d780::/32
-2400:d7a0::/32
+2400:b620::/48
+2400:b700::/48
+2400:be00::/48
+2400:cb80:e2e::/47
+2400:cb80:e30::/44
+2400:cb80:e40::/44
2400:da00::/32
-2400:da60::/32
2400:dd00::/28
-2400:dd40::/32
-2400:dda0::/32
-2400:de00::/32
-2400:de80::/32
-2400:dee0::/32
-2400:e0c0::/32
-2400:e680::/32
-2400:e7e0::/32
-2400:e880::/32
-2400:ebc0::/32
-2400:ed60::/32
-2400:eda0::/32
-2400:edc0::/32
-2400:ee00::/32
-2400:eec0::/32
-2400:ef40::/32
-2400:f480::/32
-2400:f5c0::/32
+2400:ee00:ffec::/46
+2400:ee00:fff0::/44
2400:f6e0::/32
2400:f720::/32
-2400:f7c0::/32
-2400:f840::/32
-2400:f860::/32
-2400:f980::/32
-2400:fac0::/32
-2400:fb40::/32
-2400:fb60::/32
-2400:fbc0::/32
-2400:fc40::/32
-2400:fcc0::/32
2400:fe00::/32
-2401:20:100::/40
-2401:20:200::/39
-2401:20:400::/38
-2401:20:800::/37
-2401:20:1000::/39
-2401:20:1200::/40
-2401:20:1300::/43
-2401:20:1320::/44
-2401:20:1334::/46
-2401:20:1338::/45
-2401:20:1340::/42
-2401:20:1380::/41
-2401:20:1400::/38
-2401:20:1800::/37
-2401:20:2000::/40
-2401:20:2100::/46
-2401:20:2108::/45
-2401:20:2110::/44
-2401:20:2120::/43
-2401:20:2140::/42
-2401:20:2180::/41
-2401:20:2200::/39
-2401:20:2400::/38
-2401:20:2800::/37
-2401:20:3000::/36
-2401:20:4000::/34
-2401:20:8000::/33
-2401:60::/32
-2401:80::/32
-2401:140::/32
-2401:1c0::/32
-2401:540::/32
-2401:620::/32
-2401:7c0::/32
2401:800::/32
-2401:9c0::/32
-2401:a00::/32
-2401:a40::/32
-2401:ac0::/32
-2401:b40::/32
-2401:ba0::/32
-2401:bc0::/32
-2401:c40::/32
-2401:cc0::/32
-2401:d40::/32
-2401:e00::/32
-2401:1000::/32
2401:1160::/32
-2401:11c0::/32
-2401:1200::/32
-2401:12c0::/32
2401:1320::/32
-2401:15c0::/32
-2401:18c0::/32
-2401:18e0::/28
-2401:1940::/32
-2401:19c0::/32
-2401:1a40::/32
-2401:1ac0::/32
-2401:1c60::/32
-2401:1ce0::/32
2401:1d40::/32
-2401:1da0::/32
-2401:1dc0::/32
-2401:1de0::/32
-2401:1e00::/32
-2401:1ec0::/32
-2401:1f40::/32
-2401:2040::/32
-2401:2080::/32
-2401:23c0::/32
-2401:2600::/32
-2401:2780::/32
-2401:2980::/32
2401:2a00:f000::/43
-2401:2b40::/32
2401:2e00::/32
-2401:2e20::/32
-2401:3100::/32
-2401:3380::/32
-2401:33c0::/32
-2401:3440::/32
-2401:3480::/32
+2401:3480::/36
+2401:3480:2000::/48
+2401:3480:3000::/36
2401:34a0::/31
-2401:34c0::/32
-2401:3640::/32
-2401:3780::/32
2401:3800::/32
-2401:3880::/32
-2401:3980::/32
-2401:3a00::/32
-2401:3a80::/32
-2401:3b80::/32
-2401:3c20::/32
-2401:3c80::/32
-2401:3d80::/32
-2401:3e80::/32
-2401:3f80::/32
-2401:4080::/32
-2401:4180::/32
-2401:4280::/32
-2401:4380::/32
-2401:4480::/32
-2401:4580::/32
-2401:4680::/32
-2401:4780::/32
-2401:4880::/32
-2401:4a80::/32
-2401:4b00::/32
-2401:4f80::/32
-2401:5680::/32
-2401:58a0::/32
-2401:59c0::/32
-2401:5b40::/32
-2401:5c20::/32
-2401:5c60::/32
-2401:5c80::/32
-2401:5fa0::/32
-2401:70e0::/32
-2401:7180::/32
-2401:71c0::/32
-2401:7240::/32
-2401:7320::/32
-2401:7360::/32
-2401:73a0::/32
-2401:7580::/32
-2401:7660::/32
-2401:7680::/32
-2401:7700::/32
-2401:7780::/32
-2401:77e0::/32
-2401:7820::/32
-2401:7880::/32
-2401:78e0::/32
-2401:7980::/32
-2401:7a00::/32
-2401:7a80::/32
-2401:7b80::/32
-2401:7bc0::/32
-2401:7c80::/32
-2401:7cc0::/32
-2401:7ce0::/32
-2401:7d40::/32
-2401:7d80::/32
+2401:5c20:10::/48
+2401:71c0::/48
+2401:7660::/48
2401:7e00::/32
-2401:7f80::/32
-2401:8200::/32
-2401:82c0::/32
-2401:8380::/32
-2401:8540::/32
-2401:8600::/32
-2401:8680::/34
-2401:8680:4000::/46
-2401:8680:4008::/45
-2401:8680:4010::/44
-2401:8680:4020::/43
-2401:8680:4040::/42
-2401:8680:4080::/41
-2401:8680:4103::/48
-2401:8680:4104::/46
-2401:8680:4108::/45
-2401:8680:4110::/44
-2401:8680:4120::/43
-2401:8680:4140::/42
-2401:8680:4180::/41
-2401:8680:4200::/39
-2401:8680:4400::/38
-2401:8680:4800::/37
-2401:8680:5000::/36
-2401:8680:6000::/35
-2401:8680:8000::/33
-2401:8720::/32
-2401:87e0::/32
-2401:8820::/31
-2401:8840::/32
-2401:8be0::/32
-2401:8d00::/47
-2401:8d00:3::/48
-2401:8d00:4::/46
-2401:8d00:8::/45
-2401:8d00:10::/46
-2401:8d00:17::/48
-2401:8d00:18::/45
-2401:8d00:20::/43
-2401:8d00:40::/42
-2401:8d00:80::/41
-2401:8d00:100::/40
-2401:8d00:200::/39
-2401:8d00:400::/38
-2401:8d00:800::/37
-2401:8d00:1000::/36
-2401:8d00:2000::/35
-2401:8d00:4000::/34
-2401:8d00:8000::/33
-2401:8da0::/32
-2401:8f40::/32
-2401:8fc0::/32
-2401:90a0::/32
-2401:9260::/32
-2401:92a0::/32
-2401:92e0::/32
-2401:9340::/32
-2401:95e0::/32
-2401:9600::/32
-2401:96c0::/32
-2401:96e0::/32
-2401:9720::/32
-2401:9740::/32
-2401:97a0::/32
-2401:98c0::/32
-2401:9a00::/32
-2401:9ac0::/32
-2401:9b20::/31
-2401:9b40::/32
-2401:9b60::/32
-2401:9bc0::/32
-2401:9ca0::/32
-2401:9d20::/32
-2401:9dc0::/32
-2401:9e20::/32
-2401:9e40::/32
-2401:9f80::/32
-2401:9fa0::/32
-2401:a140::/32
-2401:a2e0::/32
-2401:a340::/32
-2401:a3a0::/32
-2401:a3c0::/32
-2401:a4c0::/32
-2401:a4e0::/32
-2401:a540::/32
-2401:a5c0::/32
-2401:a620::/32
-2401:a640::/32
-2401:a6e0::/32
-2401:a720::/32
-2401:a940::/32
-2401:a980::/32
-2401:a9a0::/32
-2401:aa00::/32
-2401:aa20::/32
-2401:aa40::/32
-2401:ab60::/32
-2401:aba0::/32
-2401:acc0::/32
-2401:ad40::/32
-2401:adc0::/32
-2401:afa0::/32
-2401:b040::/32
+2401:8be0::/48
+2401:9a00::/44
+2401:9a00:10::/46
+2401:a140:1::/48
2401:b180::/32
-2401:b220::/32
-2401:b340::/32
-2401:b360::/32
-2401:b400::/32
-2401:b4c0::/32
-2401:b4e0::/32
-2401:b540::/32
-2401:b580::/32
-2401:b5a0::/32
-2401:b600::/32
+2401:b400::/45
+2401:b400:8::/47
+2401:b400:11::/48
+2401:b400:14::/48
+2401:b400:16::/47
+2401:b400:20::/47
2401:b680::/32
-2401:b6c0::/32
-2401:b6e0::/32
-2401:b7c0::/32
-2401:b940::/32
-2401:ba00::/32
-2401:ba40::/32
-2401:bb20::/32
-2401:bc60::/31
-2401:bda0::/32
2401:be00::/32
-2401:bf20::/32
-2401:c020::/32
-2401:c200::/32
-2401:c540::/32
-2401:c600::/32
-2401:c640::/32
-2401:c6c0::/32
-2401:c840::/32
-2401:c8c0::/32
-2401:ca00::/32
-2401:ca20::/32
+2401:c020:6::/48
+2401:c020:8::/47
+2401:c020:14::/48
2401:cb80::/32
-2401:cbe0::/32
2401:cc00::/32
-2401:cc60::/32
2401:ce00::/32
-2401:cf40::/32
-2401:cfc0::/32
-2401:cfe0::/32
-2401:d060::/32
-2401:d0c0::/32
-2401:d0e0::/32
-2401:d140::/32
-2401:d180::/32
-2401:d2c0::/32
-2401:d340::/32
-2401:d420::/32
-2401:d780::/32
-2401:d7e0::/32
-2401:d8e0::/32
-2401:d920::/28
-2401:da00::/32
-2401:dbe0::/32
-2401:dd20::/32
-2401:dd60::/32
+2401:d0e0:3::/48
+2401:d920::/48
2401:de00::/32
-2401:dfe0::/32
-2401:e020::/32
-2401:e080::/32
-2401:e0c0::/32
-2401:e140::/32
-2401:e240::/32
-2401:e2c0::/32
-2401:e340::/32
-2401:e360::/32
-2401:e620::/32
-2401:e840::/32
-2401:e8c0::/32
-2401:e940::/32
-2401:e9c0::/32
2401:ec00::/32
-2401:ec40::/32
-2401:f0a0::/32
-2401:f0e0::/32
-2401:f220::/32
-2401:f300::/32
-2401:f320::/32
-2401:f3e0::/32
-2401:f7c0::/32
-2401:f860::/46
-2401:f860:4::/47
-2401:f860:6::/48
-2401:f860:8::/47
-2401:f860:a::/48
-2401:f860:c::/46
-2401:f860:10::/44
-2401:f860:20::/43
-2401:f860:40::/42
-2401:f860:80::/45
-2401:f860:89::/48
-2401:f860:8a::/47
-2401:f860:8c::/46
-2401:f860:91::/48
-2401:f860:95::/48
-2401:f860:96::/48
-2401:f860:98::/45
-2401:f860:a0::/43
-2401:f860:c0::/43
-2401:f860:e0::/44
-2401:f860:f0::/46
-2401:f860:f4::/47
-2401:f860:f7::/48
-2401:f860:f8::/45
-2401:f860:200::/39
-2401:f860:400::/38
-2401:f860:800::/37
-2401:f860:1000::/36
-2401:f860:2000::/35
-2401:f860:4000::/34
-2401:f860:8000::/33
-2401:fa80::/32
-2401:fb80::/32
-2401:fc60::/32
-2401:fc80::/32
-2401:ffc0::/32
-2402:440::/32
-2402:5c0::/32
-2402:840::/32
-2402:a60::/32
-2402:c20::/32
-2402:c60::/32
-2402:e00::/32
-2402:fc0::/32
-2402:1000::/32
-2402:1160::/32
+2401:fa00:40::/48
+2402:840:d000::/46
+2402:840:e000::/46
+2402:c60::/48
2402:1440::/32
-2402:14c0::/32
-2402:1520::/32
-2402:1600::/32
-2402:16e0::/32
-2402:1740::/32
-2402:18a0::/32
-2402:19c0::/32
-2402:1be0::/32
-2402:1c20::/32
-2402:1f80::/32
2402:2000::/32
-2402:20e0::/33
-2402:20e0:8000::/34
-2402:20e0:c000::/35
-2402:20e0:e000::/36
-2402:20e0:f001::/48
-2402:20e0:f002::/47
-2402:20e0:f004::/46
-2402:20e0:f008::/45
-2402:20e0:f010::/44
-2402:20e0:f020::/43
-2402:20e0:f040::/42
-2402:20e0:f080::/41
-2402:20e0:f100::/40
-2402:20e0:f200::/39
-2402:20e0:f400::/38
-2402:20e0:f800::/37
-2402:2280::/32
-2402:2440::/32
-2402:24c0::/32
-2402:2540::/32
-2402:2620::/32
-2402:2640::/32
-2402:2760::/32
-2402:2a00::/32
-2402:2b80::/32
-2402:2bc0::/32
-2402:2ca0::/32
-2402:2d00::/32
-2402:2d80::/32
-2402:2e60::/32
-2402:2e80::/32
-2402:2f40::/32
-2402:3040::/32
-2402:3140::/32
-2402:3180:4::/46
-2402:3180:8::/45
-2402:3180:10::/44
-2402:3180:20::/43
-2402:3180:40::/42
-2402:3180:80::/41
-2402:3180:100::/40
-2402:3180:200::/39
-2402:3180:400::/38
-2402:3180:800::/37
-2402:3180:1000::/36
-2402:3180:2000::/35
-2402:3180:4000::/34
-2402:31c0::/32
-2402:3240::/32
-2402:32e0::/32
-2402:3320::/32
-2402:33a0::/32
-2402:33c0::/32
-2402:34e0::/32
-2402:36e0::/32
-2402:39c0::/32
-2402:3a40::/32
-2402:3ac0::/32
-2402:3ba0::/32
-2402:3c00::/32
-2402:3d20:2000::/35
-2402:3d20:4000::/34
-2402:3d20:8000::/33
-2402:3de0::/32
-2402:3e00::/32
-2402:3ec0::/32
-2402:3f80::/32
-2402:4060::/32
-2402:4140::/32
-2402:42c0::/32
-2402:4340::/32
-2402:43c0::/32
-2402:4440::/32
-2402:4500::/32
-2402:4540::/32
-2402:4820::/32
-2402:4a00::/32
-2402:4a40::/32
-2402:4a80::/32
-2402:4ac0::/32
+2402:36e0::/44
2402:4b80::/32
-2402:4bc0::/32
-2402:4be0::/32
-2402:4c40::/32
-2402:4d60::/32
-2402:4d80::/32
2402:4e00::/32
-2402:4ec0::/32
-2402:4f80::/32
-2402:50a0::/32
-2402:5180::/32
-2402:51a0::/32
-2402:5340::/32
-2402:5820::/32
-2402:5880::/32
-2402:5920::/32
-2402:5940::/32
-2402:59c0::/32
-2402:5a40::/32
-2402:5b40::/32
-2402:5bc0::/32
-2402:5d00::/32
-2402:5e00::/32
-2402:5e40::/32
2402:5ec0::/32
-2402:5f20::/32
-2402:5f40::/32
-2402:6060::/32
-2402:6280::/32
-2402:6320::/32
-2402:64c0::/32
-2402:66c0::/32
-2402:6740::/32
-2402:67c0::/32
-2402:6960::/32
-2402:6a00::/32
-2402:6b40::/32
-2402:6bc0::/32
-2402:6e00::/32
2402:6e80::/32
-2402:6f40::/32
-2402:6fc0::/32
-2402:7040::/32
-2402:7060::/32
-2402:7080::/32
-2402:70a0::/29
-2402:70c0::/32
-2402:7140::/32
-2402:71c0::/32
-2402:7240::/32
-2402:72a0::/32
-2402:72c0::/32
-2402:73e0::/32
-2402:7540::/32
-2402:75c0::/32
-2402:7740::/32
-2402:7d00::/32
-2402:7d80::/32
-2402:8180::/32
-2402:8300::/32
-2402:8380::/32
-2402:85c0::/32
-2402:8800::/32
-2402:8840::/32
-2402:8900::/32
-2402:8940::/32
-2402:89c0::/32
-2402:8b40::/32
+2402:6f40::/48
+2402:6f40:2::/47
+2402:7d80::/48
+2402:7d80:240::/48
+2402:7d80:8888::/48
2402:8bc0::/32
-2402:8cc0::/32
-2402:8d40::/32
-2402:8f40::/32
-2402:8f80::/32
-2402:9240::/32
-2402:92c0::/32
-2402:93c0::/32
-2402:9440::/32
-2402:9480::/32
-2402:94c0::/32
-2402:9580::/32
-2402:95c0::/32
-2402:9680::/32
-2402:96c0::/32
-2402:9840::/32
-2402:98c0::/32
-2402:9940::/32
+2402:92c0::/48
+2402:93c0::/48
+2402:93c0:20::/48
+2402:93c0:100::/48
2402:9a80::/32
-2402:9b80::/32
-2402:9f80::/32
-2402:9fc0::/32
-2402:a080::/32
-2402:a180::/32
2402:a200::/32
-2402:a240::/32
-2402:a280::/32
-2402:a380::/32
-2402:a640::/32
-2402:a680::/32
-2402:a6c0::/32
-2402:a840::/32
-2402:a880::/32
-2402:aa80::/32
-2402:ab80::/32
-2402:ae00::/32
-2402:ae40::/32
-2402:aec0::/32
-2402:af80::/32
-2402:afc0::/32
-2402:b080::/32
-2402:b200::/32
-2402:b440::/32
-2402:b6c0::/32
-2402:b880::/32
-2402:b8c0::/32
-2402:b940:100::/40
-2402:b940:400::/38
-2402:b940:800::/37
-2402:b940:1000::/36
-2402:b940:2000::/35
-2402:b940:4000::/34
-2402:b940:8000::/33
-2402:b980::/32
-2402:ba80::/32
-2402:bac0::/32
-2402:bbc0::/32
-2402:bf80::/32
-2402:c280::/32
-2402:c3c0::/32
-2402:c5c0::/32
-2402:c9c0::/32
-2402:cc40::/32
-2402:cf00::/32
-2402:cf40::/32
-2402:d040::/32
-2402:d140::/32
-2402:d2c0:3::/48
-2402:d2c0:4::/46
-2402:d2c0:8::/45
-2402:d2c0:10::/44
-2402:d2c0:20::/43
-2402:d2c0:40::/42
-2402:d2c0:80::/41
-2402:d2c0:100::/40
-2402:d2c0:200::/39
-2402:d2c0:400::/38
-2402:d2c0:800::/37
-2402:d2c0:1000::/36
-2402:d2c0:2000::/35
-2402:d2c0:4000::/34
-2402:d2c0:8000::/33
-2402:d300::/32
+2402:b8c0:6::/48
+2402:b8c0:86::/48
+2402:b8c0:106::/48
+2402:b8c0:186::/48
2402:d340::/32
-2402:d380::/32
-2402:d5c0::/32
-2402:d6c0::/32
-2402:d740::/32
-2402:d780::/32
-2402:d880::/32
-2402:d980::/32
-2402:da40::/32
-2402:db40::/34
-2402:db40:4000::/36
-2402:db40:5000::/37
-2402:db40:5800::/40
-2402:db40:5901::/48
-2402:db40:5902::/47
-2402:db40:5904::/46
-2402:db40:5908::/45
-2402:db40:5910::/44
-2402:db40:5920::/43
-2402:db40:5940::/42
-2402:db40:5980::/41
-2402:db40:5a00::/39
-2402:db40:5c00::/38
-2402:db40:6000::/35
-2402:db40:8000::/33
-2402:dcc0::/32
-2402:de40::/32
-2402:dec0::/32
-2402:df40::/32
-2402:dfc0::/32
-2402:e040::/32
-2402:e0c0::/32
-2402:e140::/32
-2402:e2c0::/32
-2402:e3c0::/32
+2402:db40:5100::/48
+2402:db40:5f00::/46
+2402:dfc0::/44
+2402:dfc0:50::/44
2402:e480::/32
-2402:e540::/32
-2402:e680::/32
2402:e740::/32
-2402:e780::/32
-2402:e7c0::/37
-2402:e7c0:800::/38
-2402:e7c0:1000::/36
-2402:e7c0:2000::/35
-2402:e7c0:4000::/34
-2402:e7c0:8000::/33
-2402:e880::/32
-2402:e980::/32
-2402:eb80::/32
-2402:ec80::/32
-2402:ed80::/32
+2402:e7c0::/32
+2402:e880::/48
2402:ef40::/32
-2402:ef80::/32
2402:f000::/32
-2402:f140::/32
-2402:f480::/32
-2402:f540::/32
-2402:f580::/32
-2402:f780::/32
-2402:f8c0::/32
-2402:f980::/32
-2402:f9c0::/32
-2402:fac0::/32
-2402:fcc0::/32
-2402:ff40::/32
-2402:ffc0::/32
+2402:f140:ff00::/46
+2402:f140:ff04::/48
+2402:f140:ff10::/46
+2402:f140:ff14::/48
+2402:f8c0::/42
2403:600::/32
-2403:700::/32
-2403:7c0::/32
-2403:800::/31
-2403:980::/32
-2403:a80::/32
-2403:b80::/32
2403:c80::/32
-2403:d80::/32
-2403:e80::/32
-2403:f00::/32
-2403:f80::/32
-2403:fc0:400::/38
-2403:fc0:c00::/38
-2403:fc0:1000::/36
-2403:fc0:2000::/35
-2403:fc0:4000::/34
-2403:fc0:8000::/33
-2403:1180::/32
-2403:1340::/32
-2403:1440::/32
-2403:1580::/32
-2403:16c0::/32
-2403:17c0::/32
-2403:1980::/32
-2403:1b80::/32
-2403:1c80::/32
-2403:1d80::/32
-2403:1dc0::/32
-2403:1e80::/32
-2403:1ec0::/36
-2403:1ec0:1000::/37
-2403:1ec0:1800::/40
-2403:1ec0:1901::/48
-2403:1ec0:1902::/47
-2403:1ec0:1904::/46
-2403:1ec0:1908::/45
-2403:1ec0:1950::/44
-2403:1ec0:1960::/43
-2403:1ec0:1980::/41
-2403:1ec0:1a00::/39
-2403:1ec0:1c00::/38
-2403:1ec0:2000::/35
-2403:1ec0:4000::/34
-2403:1ec0:8000::/33
-2403:1f80::/32
-2403:2040::/32
-2403:2080::/32
-2403:2180::/32
-2403:2240::/32
-2403:2280::/32
-2403:2380::/32
-2403:2440::/32
-2403:24c0::/32
-2403:2580::/32
-2403:25c0::/32
-2403:2680::/32
-2403:2740::/32
-2403:2780::/32
-2403:28c0::/32
-2403:2940::/32
-2403:2a00::/32
-2403:2a40::/32
-2403:2ac0::/32
+2403:1b80::/48
+2403:1ec0:1200::/48
+2403:1ec0:1400::/48
+2403:1ec0:1600::/48
+2403:1ec0:1610::/48
+2403:2040::/48
2403:2b40::/32
-2403:2bc0::/32
-2403:2cc0::/32
-2403:2f40::/32
-2403:2fc0::/32
-2403:3040::/32
-2403:30c0::/32
2403:3140::/32
-2403:3280::/32
-2403:32c0::/32
-2403:3380::/32
-2403:3480::/32
-2403:3580::/32
-2403:3640::/32
-2403:3680::/32
-2403:36c0::/32
-2403:3740::/32
-2403:3780::/32
-2403:37c0::/32
-2403:3840::/32
-2403:3880::/32
-2403:38c0::/32
-2403:3940::/32
-2403:3980::/32
-2403:39c0::/32
-2403:3b80::/32
-2403:3c40::/32
-2403:3c80::/32
-2403:3cc0::/32
-2403:3d40::/32
-2403:3d80::/32
-2403:3dc0::/32
-2403:3e80::/32
-2403:3ec0::/32
-2403:3f80::/32
-2403:4080::/32
-2403:4180::/32
-2403:4280::/32
+2403:4280::/47
2403:4300::/32
-2403:4380::/32
-2403:4580::/32
-2403:4680::/32
-2403:4780::/32
-2403:4840::/32
-2403:4880::/32
-2403:4980::/32
-2403:4a40::/32
-2403:4a80::/32
-2403:4b40::/32
-2403:4b80::/32
-2403:4c80::/32
-2403:4cc0::/32
-2403:4d80::/32
-2403:4ec0::/32
-2403:5040::/32
-2403:5080::/32
-2403:5280::/32
-2403:5380::/32
-2403:54c0::/32
-2403:5540::/32
-2403:5580::/32
-2403:5640::/32
-2403:5780::/32
-2403:5980::/32
-2403:5a80::/32
-2403:5b40::/32
-2403:5b80::/32
-2403:5c80::/32
-2403:5d80::/32
-2403:5e40::/32
-2403:5e80::/32
-2403:5ec0::/32
-2403:5f80::/32
-2403:5fc0::/32
-2403:6080::/32
-2403:6180::/32
-2403:6280::/32
-2403:62c0::/32
-2403:6380::/42
-2403:6380:41::/48
-2403:6380:43::/48
-2403:6380:44::/46
-2403:6380:48::/45
-2403:6380:50::/44
-2403:6380:60::/43
-2403:6380:80::/41
-2403:6380:100::/40
-2403:6380:200::/39
-2403:6380:400::/38
-2403:6380:800::/37
-2403:6380:1000::/36
-2403:6380:2000::/35
-2403:6380:4000::/34
-2403:6380:8000::/33
-2403:6580::/32
-2403:6680::/32
-2403:6740::/32
-2403:6780::/32
-2403:6880::/32
-2403:6980::/32
+2403:4c80::/48
+2403:5c80::/48
+2403:6740::/48
2403:6a00::/32
-2403:6c80::/32
-2403:6d40::/32
-2403:6d80::/32
-2403:6e80::/32
-2403:6f40::/32
-2403:6fc0::/32
-2403:7040::/32
-2403:7080::/32
-2403:7180::/32
-2403:7280::/32
-2403:7380::/32
-2403:7480::/32
-2403:7540::/32
2403:7580::/32
-2403:76c0::/32
-2403:7700::/32
-2403:78c0::/32
-2403:7a80::/32
-2403:7b00::/32
-2403:7d80::/32
-2403:7e80::/32
-2403:7f80::/32
-2403:8080::/32
-2403:8180::/32
-2403:8280::/32
-2403:8380::/32
-2403:83c0::/32
-2403:8480::/32
-2403:8580::/32
-2403:8880::/32
-2403:8900::/32
-2403:8980::/32
-2403:8a40::/32
-2403:8a80::/32
-2403:8b00::/32
-2403:8b80::/32
+2403:8080:101::/48
2403:8c00::/32
-2403:8c80::/32
-2403:8d00::/32
-2403:8d80::/32
-2403:9080::/32
-2403:9180::/32
-2403:9280::/32
-2403:9380::/32
-2403:9480::/32
-2403:9580::/32
-2403:9680::/32
-2403:9780::/32
-2403:9880::/32
-2403:9a80::/32
-2403:9ac0::/32
-2403:9b00::/32
-2403:9b40::/32
-2403:9b80::/32
-2403:9c80::/32
-2403:9d00::/32
-2403:9d80::/32
-2403:9e40::/32
-2403:9e80::/32
-2403:9ec0::/32
-2403:9f80::/32
-2403:a100::/32
-2403:a140::/32
+2403:9b00:2400::/48
+2403:9b00:6000::/48
+2403:a100::/48
+2403:a140:10::/48
+2403:a140:100::/40
2403:a200::/32
-2403:a300::/32
-2403:a480::/32
-2403:a580::/32
-2403:a680::/32
-2403:a6c0::/32
-2403:a780::/32
-2403:a880::/32
-2403:a940::/32
-2403:a980::/32
-2403:a9c0::/32
-2403:aa40::/32
-2403:aa80::/32
-2403:ab80::/32
2403:ac00::/32
-2403:af80::/32
-2403:b080::/32
-2403:b180::/32
-2403:b280::/32
-2403:b380::/32
2403:b400::/32
-2403:b480::/32
-2403:b580::/32
-2403:b680::/32
-2403:b780::/32
-2403:b880::/32
-2403:b980::/32
-2403:ba40::/32
-2403:c040::/32
-2403:c080::/32
-2403:c100::/32
-2403:c140::/32
-2403:c180::/32
-2403:c3c0::/32
-2403:c440::/32
-2403:c480::/32
-2403:c4c0::/32
2403:c980::/32
-2403:cdc0::/32
-2403:cf80::/32
-2403:d080::/32
-2403:d180::/32
-2403:d280::/32
-2403:d2c0::/32
-2403:d380::/32
2403:d400::/32
-2403:d440::/32
-2403:d480::/32
-2403:d580::/32
-2403:d680::/32
-2403:d780::/32
-2403:d7c0::/32
-2403:d880::/32
-2403:d980::/32
-2403:d9c0::/32
-2403:da80::/32
-2403:dac0::/32
-2403:db00::/32
-2403:db80::/32
-2403:dc80::/32
-2403:dd80::/32
-2403:de80::/32
-2403:df80::/32
-2403:e080::/32
-2403:e180::/32
-2403:e280::/32
-2403:e300::/32
-2403:e480::/32
-2403:e500::/32
-2403:e580::/32
-2403:e640::/32
-2403:e680::/32
-2403:e700::/32
-2403:e780::/32
-2403:e7c0::/32
-2403:e880::/32
-2403:e980::/32
-2403:ea80::/32
-2403:eac0::/32
-2403:eb80::/32
-2403:ec80::/32
-2403:ed00::/32
-2403:ed40::/32
-2403:ed80::/32
-2403:ee80::/32
-2403:ef80::/32
-2403:f080::/32
-2403:f100::/32
-2403:f180::/32
-2403:f240::/32
-2403:f280::/32
-2403:f300::/32
-2403:f380::/32
-2403:f4c0::/32
-2403:f580::/32
-2403:f740::/32
-2403:f8c0::/32
-2403:f980::/32
-2403:fb00::/32
-2403:fb80::/32
-2403:fc40::/32
-2403:fe40::/32
-2403:fe80::/32
-2403:fec0::/32
-2403:ff80::/32
-2403:ffc0::/31
-2404:100::/32
-2404:158::/32
-2404:240::/32
-2404:280::/32
-2404:440::/32
-2404:480::/32
-2404:680::/32
-2404:a80::/32
-2404:b80::/32
-2404:bc0::/32
-2404:c40::/32
-2404:d80::/32
-2404:f00::/32
-2404:f80::/32
-2404:1080::/32
-2404:10c0::/32
-2404:1180::/32
-2404:14c0::/32
-2404:1880::/32
+2403:e7c0:3::/48
+2403:f4c0::/48
+2403:ffc0:1100::/40
+2403:ffc0:1200::/39
+2404:bc0:1::/48
+2404:bc0:4000::/43
+2404:bc0:4100::/43
+2404:bc0:4200::/43
+2404:bc0:4300::/44
+2404:bc0:4400::/43
+2404:bc0:4500::/43
+2404:bc0:4620::/44
+2404:bc0:4f00::/43
2404:1c80::/32
-2404:1cc0::/32
-2404:1d80::/39
-2404:1d80:200::/44
-2404:1d80:210::/47
-2404:1d80:212::/48
-2404:1d80:214::/46
-2404:1d80:218::/45
-2404:1d80:220::/43
-2404:1d80:240::/42
-2404:1d80:280::/41
-2404:1d80:300::/40
-2404:1d80:400::/38
-2404:1d80:800::/37
-2404:1d80:1000::/36
-2404:1d80:2000::/35
-2404:1d80:4000::/34
-2404:1d80:8000::/33
-2404:1e80::/32
-2404:1f40::/32
-2404:21c0::/32
-2404:30c0::/32
-2404:3140::/32
-2404:31c0::/32
-2404:3240::/32
-2404:32c0::/32
-2404:3300::/32
-2404:3340::/32
-2404:3480::/32
-2404:35c0::/32
-2404:3640::/32
-2404:36c0::/32
-2404:3700::/32
-2404:3740::/32
-2404:37c0::/32
-2404:3840::/32
-2404:3940::/32
-2404:3f40::/32
-2404:41c0::/32
-2404:4540::/32
-2404:4740::/32
-2404:4d00::/32
+2404:3700::/48
2404:4dc0::/32
-2404:51c0::/32
-2404:5640::/32
-2404:5a80::/32
-2404:5b00::/32
-2404:5d00::/32
-2404:6000::/32
-2404:6100::/32
-2404:6380::/32
-2404:6500::/32
-2404:65c0::/32
-2404:6a40::/32
-2404:6f80::/32
-2404:7100::/32
-2404:7180::/32
-2404:71c0::/32
-2404:7240::/32
-2404:74c0::/32
+2404:6380::/48
+2404:6380:1000::/48
+2404:6380:8001::/48
+2404:6500:dcb3::/48
+2404:7180:a000::/48
+2404:7180:a010::/48
+2404:7180:aa00::/48
+2404:7180:aa10::/48
+2404:7180:b001::/48
+2404:7180:b002::/48
+2404:7180:b010::/48
+2404:7180:c001::/48
+2404:7180:c002::/48
+2404:7180:c011::/48
+2404:7180:c012::/48
+2404:7180:f000::/48
+2404:7180:f010::/48
+2404:7240::/33
2404:7600::/32
-2404:7740::/32
2404:7940::/32
-2404:7d00::/32
-2404:8040::/32
-2404:80c0::/32
-2404:8140::/32
-2404:81c0::/32
-2404:8480::/32
-2404:8580::/32
-2404:8700::/32
-2404:8880::/32
-2404:8a80::/32
-2404:8dc0::/32
-2404:9340::/32
-2404:9b80::/32
-2404:9c80::/32
-2404:a000::/32
-2404:a080::/32
-2404:a0c0::/32
-2404:a180::/32
-2404:a240::/32
-2404:a740::/32
-2404:b100::/32
-2404:b340::/32
-2404:b3c0::/32
-2404:b440::/32
-2404:b4c0::/32
-2404:b900::/32
-2404:bbc0::/32
-2404:bc40::/32
-2404:c1c0::/32
-2404:c240::/32
-2404:c2c0::/32
+2404:c2c0::/40
+2404:c2c0:240::/44
+2404:c2c0:280::/44
+2404:c2c0:2c0::/44
+2404:c2c0:501::/48
+2404:c2c0:4000::/40
+2404:c2c0:4100::/48
+2404:c2c0:6000::/40
+2404:c2c0:8000::/36
+2404:c2c0:bb00::/40
+2404:c2c0:c000::/36
2404:c300::/32
-2404:c3c0::/32
-2404:c440::/32
-2404:c4c0::/32
-2404:c540::/32
-2404:c5c0::/32
-2404:c940::/32
-2404:c9c0::/32
-2404:cd00::/32
-2404:d040::/32
-2404:d080::/32
-2404:d140::/32
-2404:d280::/32
-2404:d3c0::/32
-2404:d640::/32
-2404:d6c0::/32
-2404:d7c0::/32
-2404:d840::/32
-2404:dd80::/32
-2404:df00::/32
-2404:e280::/32
-2404:e540::/32
-2404:e780::/32
-2404:e880::/32
+2404:c940::/48
+2404:e280::/47
2404:e8c0::/32
-2404:eb80::/32
-2404:ec40::/32
-2404:ecc0::/32
-2404:edc0::/32
-2404:f040::/32
-2404:f4c0:f000::/44
-2404:f7c0::/32
-2405:80::/32
-2405:480::/32
-2405:580::/32
-2405:680::/32
-2405:6c0:2::/47
-2405:6c0:4::/46
-2405:6c0:8::/45
-2405:6c0:10::/44
-2405:6c0:20::/43
-2405:6c0:40::/42
-2405:6c0:80::/41
-2405:6c0:100::/40
-2405:6c0:200::/39
-2405:6c0:400::/38
-2405:6c0:800::/37
-2405:6c0:1000::/36
-2405:6c0:2000::/35
-2405:6c0:4000::/34
-2405:6c0:8000::/33
-2405:780::/32
-2405:880::/32
-2405:940::/32
-2405:980::/32
-2405:9c0::/32
-2405:a80::/32
-2405:b80::/32
-2405:c80::/32
-2405:d80::/32
-2405:e80::/32
-2405:f80::/32
-2405:1080::/32
-2405:1180::/32
-2405:1280::/32
-2405:1380::/32
-2405:1480::/32
-2405:1580::/32
-2405:1680::/32
-2405:18c0::/32
-2405:1c80::/32
-2405:1d80::/32
-2405:1e80::/32
-2405:1f80::/32
-2405:1fc0::/32
-2405:2080::/32
-2405:2180::/32
-2405:2280::/32
-2405:2340::/32
-2405:2380::/32
-2405:2480::/32
-2405:24c0::/32
-2405:2580::/32
-2405:2680::/32
-2405:2780::/32
-2405:2880::/32
-2405:2980::/32
-2405:2a80::/32
-2405:2b80::/32
-2405:2bc0::/32
-2405:2c80::/32
-2405:2d80::/32
-2405:2e80::/32
-2405:2ec0::/32
-2405:2f40::/32
-2405:2f80::/32
-2405:3140::/32
-2405:31c0::/32
-2405:37c0::/32
-2405:3880::/32
-2405:3980::/32
-2405:39c0::/32
-2405:3a80::/32
-2405:3ac0::/32
-2405:3b00::/32
-2405:3b80::/32
-2405:3bc0::/32
-2405:3c40::/32
-2405:3c80::/32
-2405:3d80::/32
-2405:3e80::/32
-2405:3f40::/32
-2405:3f80::/32
-2405:4080::/32
-2405:4140::/32
-2405:4180::/32
-2405:41c0::/32
-2405:4280::/32
-2405:4380::/32
-2405:4480::/32
-2405:44c0::/32
-2405:4540::/32
-2405:4580::/32
-2405:4680::/32
-2405:4780::/32
-2405:4880::/32
-2405:4980::/32
-2405:4a80::/32
-2405:4b80::/32
-2405:4d40::/32
-2405:4e80::/32
-2405:4f80::/32
-2405:5080::/32
-2405:5180::/32
-2405:5240:400::/38
-2405:5240:c00::/38
-2405:5240:1000::/36
-2405:5240:2000::/35
-2405:5240:4000::/34
-2405:5240:8000::/33
-2405:5280::/32
-2405:52c0::/32
-2405:5380::/32
-2405:5480::/32
-2405:5580::/32
-2405:5680::/32
-2405:5780::/32
-2405:57c0::/32
-2405:5880::/32
-2405:5980::/32
-2405:5a80::/32
-2405:5b80::/32
-2405:5c80::/32
-2405:5cc0::/32
-2405:5d40::/32
-2405:5d80::/32
-2405:5dc0::/32
-2405:5e80::/32
-2405:5f80::/32
-2405:6080::/32
-2405:6180::/32
-2405:6200::/32
-2405:6880::/32
-2405:68c0::/32
-2405:6940::/32
-2405:69c0::/32
-2405:6a80::/32
-2405:6b80::/32
-2405:6c80::/32
-2405:6d80::/32
-2405:6e80::/32
-2405:6f00::/32
-2405:6f80::/32
-2405:7040::/32
-2405:7080::/32
-2405:7180::/32
-2405:7280::/32
-2405:7380::/32
-2405:7480::/32
-2405:7580::/32
-2405:7680::/32
-2405:7780::/32
-2405:7880::/32
-2405:78c0::/32
-2405:7980::/32
-2405:79c0::/32
-2405:7a80::/32
-2405:7b80::/32
-2405:7c80::/32
-2405:7d40::/32
-2405:7f40::/32
-2405:7fc0::/32
-2405:8280::/32
-2405:8480::/32
-2405:84c0::/34
-2405:84c0:4000::/35
-2405:84c0:6000::/37
-2405:84c0:6800::/38
-2405:84c0:6c00::/39
-2405:84c0:6e00::/40
-2405:84c0:7000::/36
-2405:84c0:8000::/48
-2405:84c0:8002::/48
-2405:84c0:8006::/48
-2405:84c0:8008::/45
-2405:84c0:8010::/48
-2405:84c0:8019::/48
-2405:84c0:801c::/46
-2405:84c0:8020::/47
-2405:84c0:8036::/47
-2405:84c0:8038::/46
-2405:84c0:803c::/47
-2405:84c0:803e::/48
-2405:84c0:8041::/48
-2405:84c0:8042::/47
-2405:84c0:8044::/47
-2405:84c0:8048::/46
-2405:84c0:804c::/47
-2405:84c0:804e::/48
-2405:84c0:8050::/48
-2405:84c0:8053::/48
-2405:84c0:8058::/45
-2405:84c0:8060::/43
-2405:84c0:8080::/41
-2405:84c0:8100::/40
-2405:84c0:8200::/39
-2405:84c0:8400::/38
-2405:84c0:8800::/37
-2405:84c0:9000::/36
-2405:84c0:a000::/40
-2405:84c0:a101::/48
-2405:84c0:a102::/47
-2405:84c0:a104::/46
-2405:84c0:a108::/45
-2405:84c0:a110::/44
-2405:84c0:a120::/43
-2405:84c0:a140::/42
-2405:84c0:a180::/41
-2405:84c0:a200::/39
-2405:84c0:a400::/38
-2405:84c0:a800::/37
-2405:84c0:b000::/36
-2405:84c0:c000::/34
-2405:8580::/32
-2405:8680::/32
-2405:8780::/32
-2405:8880::/32
-2405:8980::/32
+2405:80:10::/48
+2405:80:13::/48
+2405:6c0:2::/48
+2405:6c0:4::/48
+2405:1480:1000::/48
+2405:1480:2000::/48
+2405:1480:3000::/47
+2405:3140:11::/48
+2405:3140:21::/48
+2405:3140:31::/48
+2405:3140:3a::/48
+2405:68c0:21::/48
+2405:6940::/48
+2405:6f00:c101::/48
+2405:6f00:c102::/48
+2405:6f00:c170::/47
+2405:6f00:c602::/48
+2405:7040:6000::/47
+2405:78c0:6e00::/43
2405:8a40::/32
-2405:8a80::/32
-2405:8ac0::/32
-2405:8b80::/32
-2405:8c80::/32
-2405:8d80::/32
-2405:8e80::/32
-2405:8f80::/32
-2405:9080::/32
-2405:9180::/32
-2405:9280::/32
-2405:9300::/32
-2405:9340::/32
-2405:9380::/32
-2405:93c0::/32
-2405:9480::/32
-2405:94c0::/32
-2405:9580::/32
-2405:9680::/32
-2405:9700::/32
-2405:9780::/32
-2405:97c0::/32
-2405:9880::/32
-2405:9900::/32
-2405:9980::/32
-2405:99c0::/32
-2405:9a80::/32
-2405:9b00::/32
-2405:9b80::/32
-2405:9bc0::/32
-2405:9e00::/32
-2405:a240::/32
-2405:a500::/32
-2405:a680::/32
-2405:a900::/32
-2405:a980::/32
-2405:aa80::/32
-2405:ab00::/32
+2405:a900:ffee::/48
2405:ad00::/32
-2405:af00::/32
-2405:b100::/32
-2405:b300::/32
2405:b7c0::/32
-2405:b880::/32
-2405:b980::/32
-2405:bb00::/32
-2405:bd00::/32
-2405:bd80::/32
-2405:bdc0::/32
-2405:be80::/32
-2405:bf00::/32
-2405:c040::/32
-2405:c280::/32
-2405:c380::/32
-2405:c480::/32
-2405:c500::/32
-2405:c580::/32
-2405:c680::/32
-2405:c780::/32
-2405:c880::/32
-2405:c980::/32
-2405:ca80::/32
-2405:cb80::/32
-2405:cc80::/32
-2405:cd80::/32
-2405:ce80::/32
-2405:d280::/32
-2405:d4c0::/32
-2405:d700::/32
2405:d900::/32
-2405:df40::/32
2405:e000::/32
-2405:e040::/32
-2405:e1c0::/32
-2405:e600::/32
-2405:ef40::/30
-2405:f340::/32
-2405:f6c0::/32
2405:f940::/32
-2405:fdc0::/32
-2406:40::/32
-2406:80::/32
-2406:c0::/32
-2406:140:400::/38
-2406:140:c00::/38
-2406:140:1000::/36
-2406:140:2000::/35
-2406:140:4000::/34
-2406:140:8000::/33
2406:280::/32
-2406:440::/32
-2406:4c0::/32
-2406:840::/48
-2406:840:3::/48
-2406:840:4::/46
-2406:840:8::/45
-2406:840:18::/45
-2406:840:21::/48
-2406:840:22::/47
-2406:840:24::/46
-2406:840:28::/45
-2406:840:30::/44
-2406:840:40::/46
-2406:840:45::/48
-2406:840:47::/48
-2406:840:48::/45
-2406:840:50::/44
-2406:840:60::/44
-2406:840:70::/45
-2406:840:7a::/47
-2406:840:7c::/46
-2406:840:82::/47
-2406:840:84::/46
-2406:840:88::/45
-2406:840:91::/48
-2406:840:92::/47
-2406:840:94::/46
-2406:840:98::/45
-2406:840:a0::/43
-2406:840:c0::/42
-2406:840:102::/48
-2406:840:104::/46
-2406:840:108::/45
-2406:840:111::/48
-2406:840:112::/47
-2406:840:114::/46
-2406:840:118::/45
-2406:840:120::/43
-2406:840:140::/42
-2406:840:181::/48
-2406:840:182::/47
-2406:840:184::/46
-2406:840:188::/45
-2406:840:190::/44
-2406:840:1a0::/43
-2406:840:1c0::/42
-2406:840:201::/48
-2406:840:202::/47
-2406:840:204::/46
-2406:840:208::/45
-2406:840:210::/44
-2406:840:220::/43
-2406:840:240::/42
-2406:840:280::/42
-2406:840:2c0::/43
-2406:840:2e1::/48
-2406:840:2e2::/47
-2406:840:2e4::/46
-2406:840:2e8::/45
-2406:840:2f0::/44
-2406:840:300::/41
-2406:840:382::/47
-2406:840:384::/46
-2406:840:388::/45
-2406:840:390::/44
-2406:840:3a0::/43
-2406:840:3c0::/47
-2406:840:3c3::/48
-2406:840:3c4::/46
-2406:840:3c8::/45
-2406:840:3d0::/44
-2406:840:3e1::/48
-2406:840:3e2::/47
-2406:840:3e4::/46
-2406:840:3e8::/45
-2406:840:3f0::/44
-2406:840:400::/44
-2406:840:412::/47
-2406:840:414::/46
-2406:840:418::/45
-2406:840:421::/48
-2406:840:422::/47
-2406:840:424::/46
-2406:840:428::/45
-2406:840:430::/44
-2406:840:440::/42
-2406:840:481::/48
-2406:840:482::/47
-2406:840:484::/46
-2406:840:488::/45
-2406:840:490::/44
-2406:840:4a0::/43
-2406:840:4c0::/42
-2406:840:500::/42
-2406:840:541::/48
-2406:840:542::/47
-2406:840:544::/46
-2406:840:548::/45
-2406:840:550::/44
-2406:840:560::/43
-2406:840:580::/41
-2406:840:600::/41
-2406:840:681::/48
-2406:840:682::/47
-2406:840:684::/46
-2406:840:688::/45
-2406:840:690::/44
-2406:840:6a0::/43
-2406:840:6c0::/48
-2406:840:6c2::/47
-2406:840:6c4::/46
-2406:840:6c8::/45
-2406:840:6d0::/44
-2406:840:6e0::/43
-2406:840:700::/44
-2406:840:711::/48
-2406:840:712::/47
-2406:840:714::/46
-2406:840:718::/45
-2406:840:720::/43
-2406:840:740::/42
-2406:840:780::/41
-2406:840:804::/47
-2406:840:807::/48
-2406:840:808::/45
-2406:840:810::/44
-2406:840:820::/43
-2406:840:840::/48
-2406:840:843::/48
-2406:840:844::/46
-2406:840:848::/45
-2406:840:850::/44
-2406:840:861::/48
-2406:840:862::/47
-2406:840:864::/46
-2406:840:868::/45
-2406:840:870::/44
-2406:840:884::/46
-2406:840:888::/45
-2406:840:890::/44
-2406:840:8a0::/43
-2406:840:8c0::/42
-2406:840:900::/40
-2406:840:a00::/44
-2406:840:a12::/47
-2406:840:a14::/46
-2406:840:a18::/45
-2406:840:a20::/44
-2406:840:a30::/48
-2406:840:a33::/48
-2406:840:a34::/46
-2406:840:a38::/45
-2406:840:a40::/42
-2406:840:a80::/41
-2406:840:b00::/40
-2406:840:c00::/47
-2406:840:c03::/48
-2406:840:c04::/46
-2406:840:c08::/45
-2406:840:c10::/44
-2406:840:c20::/43
-2406:840:c40::/43
-2406:840:c61::/48
-2406:840:c62::/47
-2406:840:c64::/46
-2406:840:c68::/45
-2406:840:c70::/44
-2406:840:c80::/43
-2406:840:ca0::/44
-2406:840:cb0::/45
-2406:840:cb9::/48
-2406:840:cba::/47
-2406:840:cbc::/46
-2406:840:cc0::/47
-2406:840:cc3::/48
-2406:840:cc4::/46
-2406:840:cc8::/45
-2406:840:cd0::/44
-2406:840:ce0::/43
-2406:840:d00::/40
-2406:840:e00::/39
-2406:840:1000::/48
-2406:840:1002::/47
-2406:840:1004::/46
-2406:840:1008::/45
-2406:840:1010::/44
-2406:840:1020::/43
-2406:840:1040::/42
-2406:840:1080::/41
-2406:840:1100::/40
-2406:840:1200::/39
-2406:840:1400::/38
-2406:840:1801::/48
-2406:840:1802::/47
-2406:840:1804::/46
-2406:840:1808::/45
-2406:840:1810::/44
-2406:840:1820::/43
-2406:840:1840::/42
-2406:840:1880::/41
-2406:840:1900::/40
-2406:840:1a00::/39
-2406:840:1c00::/38
-2406:840:2000::/39
-2406:840:2200::/40
-2406:840:2300::/41
-2406:840:2381::/48
-2406:840:2382::/47
-2406:840:2384::/46
-2406:840:2388::/45
-2406:840:2390::/44
-2406:840:23a0::/43
-2406:840:23c0::/42
-2406:840:2400::/38
-2406:840:2801::/48
-2406:840:2802::/47
-2406:840:2804::/46
-2406:840:2808::/45
-2406:840:2810::/44
-2406:840:2820::/43
-2406:840:2840::/42
-2406:840:2880::/48
-2406:840:2882::/47
-2406:840:2884::/46
-2406:840:2888::/45
-2406:840:2890::/44
-2406:840:28a0::/43
-2406:840:28c0::/42
-2406:840:2900::/40
-2406:840:2a00::/39
-2406:840:2c00::/38
-2406:840:3000::/37
-2406:840:3801::/48
-2406:840:3802::/47
-2406:840:3804::/46
-2406:840:3808::/45
-2406:840:3810::/44
-2406:840:3820::/43
-2406:840:3840::/42
-2406:840:3880::/41
-2406:840:3900::/40
-2406:840:3a00::/39
-2406:840:3c00::/38
-2406:840:4000::/40
-2406:840:4102::/47
-2406:840:4104::/46
-2406:840:4108::/45
-2406:840:4110::/44
-2406:840:4120::/43
-2406:840:4140::/42
-2406:840:4180::/41
-2406:840:4200::/40
-2406:840:4300::/41
-2406:840:4380::/42
-2406:840:43c0::/43
-2406:840:43e2::/47
-2406:840:43e4::/46
-2406:840:43e8::/45
-2406:840:43f0::/44
-2406:840:4400::/38
-2406:840:4802::/47
-2406:840:4804::/46
-2406:840:4808::/45
-2406:840:4810::/44
-2406:840:4820::/43
-2406:840:4840::/42
-2406:840:4882::/47
-2406:840:4884::/46
-2406:840:4888::/45
-2406:840:4890::/44
-2406:840:48a0::/43
-2406:840:48c0::/42
-2406:840:4900::/40
-2406:840:4a00::/39
-2406:840:4c00::/38
-2406:840:5000::/40
-2406:840:5102::/47
-2406:840:5104::/46
-2406:840:5108::/45
-2406:840:5110::/44
-2406:840:5120::/43
-2406:840:5140::/42
-2406:840:5180::/41
-2406:840:5200::/39
-2406:840:5400::/38
-2406:840:5802::/47
-2406:840:5804::/46
-2406:840:5808::/45
-2406:840:5810::/44
-2406:840:5820::/43
-2406:840:5840::/43
-2406:840:5862::/47
-2406:840:5864::/46
-2406:840:5868::/45
-2406:840:5870::/44
-2406:840:5882::/47
-2406:840:5884::/46
-2406:840:5888::/45
-2406:840:5890::/44
-2406:840:58a0::/43
-2406:840:58c0::/42
-2406:840:5900::/40
-2406:840:5a00::/39
-2406:840:5c02::/47
-2406:840:5c04::/46
-2406:840:5c08::/45
-2406:840:5c10::/44
-2406:840:5c20::/43
-2406:840:5c40::/42
-2406:840:5c80::/41
-2406:840:5d00::/40
-2406:840:5e00::/39
-2406:840:6000::/35
-2406:840:8000::/40
-2406:840:8200::/39
-2406:840:8400::/38
-2406:840:8800::/37
-2406:840:9010::/44
-2406:840:9020::/43
-2406:840:9040::/42
-2406:840:9080::/41
-2406:840:9101::/48
-2406:840:9103::/48
-2406:840:9104::/46
-2406:840:9108::/45
-2406:840:9110::/44
-2406:840:9120::/43
-2406:840:9140::/43
-2406:840:9160::/44
-2406:840:9170::/45
-2406:840:9179::/48
-2406:840:917a::/47
-2406:840:917c::/46
-2406:840:9180::/41
-2406:840:9300::/40
-2406:840:9400::/39
-2406:840:9610::/44
-2406:840:9630::/44
-2406:840:9640::/43
-2406:840:9660::/46
-2406:840:9664::/47
-2406:840:9667::/48
-2406:840:9668::/45
-2406:840:9670::/44
-2406:840:9680::/41
-2406:840:9800::/46
-2406:840:9808::/45
-2406:840:9810::/45
-2406:840:9818::/47
-2406:840:981b::/48
-2406:840:9820::/43
-2406:840:9850::/44
-2406:840:9860::/47
-2406:840:9865::/48
-2406:840:9866::/47
-2406:840:9868::/45
-2406:840:9870::/44
-2406:840:9880::/41
-2406:840:9900::/42
-2406:840:9940::/43
-2406:840:9960::/47
-2406:840:9965::/48
-2406:840:9968::/46
-2406:840:996d::/48
-2406:840:996e::/47
-2406:840:9981::/48
-2406:840:9982::/47
-2406:840:9984::/46
-2406:840:9988::/45
-2406:840:99a0::/43
-2406:840:99c0::/42
-2406:840:9a00::/39
-2406:840:9c00::/39
-2406:840:9e00::/41
-2406:840:9e80::/42
-2406:840:9ec0::/43
-2406:840:9ee0::/44
-2406:840:9f00::/41
-2406:840:9f80::/42
-2406:840:9fc0::/43
-2406:840:9fe0::/44
-2406:840:a000::/35
-2406:840:c000::/36
-2406:840:e000::/41
-2406:840:e090::/44
-2406:840:e0a0::/43
-2406:840:e0c0::/45
-2406:840:e0c8::/46
-2406:840:e0cc::/47
-2406:840:e0ce::/48
-2406:840:e0d0::/44
-2406:840:e0e4::/46
-2406:840:e0e9::/48
-2406:840:e0ea::/47
-2406:840:e0ec::/46
-2406:840:e0f0::/44
-2406:840:e100::/45
-2406:840:e108::/46
-2406:840:e10c::/47
-2406:840:e10e::/48
-2406:840:e110::/44
-2406:840:e120::/43
-2406:840:e140::/45
-2406:840:e148::/46
-2406:840:e14c::/47
-2406:840:e14e::/48
-2406:840:e150::/44
-2406:840:e160::/43
-2406:840:e190::/44
-2406:840:e1a0::/43
-2406:840:e1c0::/42
-2406:840:e210::/44
-2406:840:e220::/43
-2406:840:e240::/43
-2406:840:e260::/44
-2406:840:e271::/48
-2406:840:e272::/47
-2406:840:e274::/46
-2406:840:e278::/46
-2406:840:e27c::/47
-2406:840:e27e::/48
-2406:840:e290::/44
-2406:840:e2a0::/43
-2406:840:e2c0::/42
-2406:840:e300::/48
-2406:840:e305::/48
-2406:840:e307::/48
-2406:840:e308::/45
-2406:840:e310::/44
-2406:840:e320::/44
-2406:840:e340::/44
-2406:840:e350::/48
-2406:840:e352::/47
-2406:840:e355::/48
-2406:840:e356::/47
-2406:840:e358::/46
-2406:840:e35c::/48
-2406:840:e35e::/47
-2406:840:e360::/43
-2406:840:e380::/41
-2406:840:e400::/40
-2406:840:e500::/42
-2406:840:e540::/43
-2406:840:e560::/44
-2406:840:e570::/45
-2406:840:e578::/46
-2406:840:e57c::/47
-2406:840:e57f::/48
-2406:840:e580::/41
-2406:840:e610::/44
-2406:840:e622::/47
-2406:840:e624::/46
-2406:840:e628::/45
-2406:840:e630::/44
-2406:840:e640::/43
-2406:840:e660::/46
-2406:840:e664::/47
-2406:840:e668::/45
-2406:840:e670::/44
-2406:840:e680::/41
-2406:840:e700::/43
-2406:840:e730::/44
-2406:840:e740::/42
-2406:840:e780::/41
-2406:840:e800::/45
-2406:840:e808::/46
-2406:840:e80c::/47
-2406:840:e80e::/48
-2406:840:e810::/44
-2406:840:e820::/43
-2406:840:e840::/45
-2406:840:e848::/46
-2406:840:e84c::/47
-2406:840:e84e::/48
-2406:840:e850::/44
-2406:840:e860::/43
-2406:840:e880::/41
-2406:840:e900::/40
-2406:840:ea00::/40
-2406:840:eb06::/48
-2406:840:eb09::/48
-2406:840:eb0a::/48
-2406:840:eb0c::/47
-2406:840:eb0e::/48
-2406:840:eb10::/44
-2406:840:eb20::/43
-2406:840:eb40::/42
-2406:840:ebc0::/42
-2406:840:ec00::/41
-2406:840:ec80::/42
-2406:840:ecc0::/43
-2406:840:ecf0::/44
-2406:840:ed00::/40
-2406:840:ee00::/42
-2406:840:ee42::/47
-2406:840:ee45::/48
-2406:840:ee46::/47
-2406:840:ee48::/47
-2406:840:ee4a::/48
-2406:840:ee4c::/48
-2406:840:ee4e::/47
-2406:840:ee50::/44
-2406:840:ee60::/43
-2406:840:ee80::/43
-2406:840:eea0::/44
-2406:840:eeb0::/48
-2406:840:eeb3::/48
-2406:840:eeb4::/46
-2406:840:eeb8::/45
-2406:840:eec0::/43
-2406:840:eee0::/46
-2406:840:eee4::/48
-2406:840:eee6::/47
-2406:840:eee8::/45
-2406:840:eef0::/44
-2406:840:ef00::/41
-2406:840:ef80::/42
-2406:840:efc0::/43
-2406:840:efe0::/44
-2406:840:f000::/41
-2406:840:f080::/43
-2406:840:f0a0::/48
-2406:840:f0a2::/47
-2406:840:f0a4::/46
-2406:840:f0a8::/47
-2406:840:f0ab::/48
-2406:840:f0ac::/46
-2406:840:f0b0::/44
-2406:840:f0c0::/42
-2406:840:f102::/47
-2406:840:f104::/46
-2406:840:f108::/45
-2406:840:f110::/44
-2406:840:f120::/43
-2406:840:f140::/42
-2406:840:f180::/41
-2406:840:f200::/40
-2406:840:f300::/43
-2406:840:f320::/44
-2406:840:f330::/46
-2406:840:f334::/47
-2406:840:f336::/48
-2406:840:f338::/45
-2406:840:f340::/42
-2406:840:f390::/44
-2406:840:f3a0::/43
-2406:840:f3c0::/42
-2406:840:f400::/48
-2406:840:f403::/48
-2406:840:f404::/46
-2406:840:f408::/45
-2406:840:f410::/44
-2406:840:f420::/43
-2406:840:f440::/45
-2406:840:f448::/46
-2406:840:f44c::/47
-2406:840:f44e::/48
-2406:840:f450::/44
-2406:840:f460::/43
-2406:840:f480::/41
-2406:840:f500::/40
-2406:840:f600::/42
-2406:840:f640::/43
-2406:840:f670::/44
-2406:840:f680::/47
-2406:840:f682::/48
-2406:840:f684::/46
-2406:840:f688::/45
-2406:840:f690::/44
-2406:840:f6a0::/43
-2406:840:f6c0::/42
-2406:840:f700::/40
-2406:840:f800::/42
-2406:840:f840::/43
-2406:840:f864::/46
-2406:840:f86a::/47
-2406:840:f86d::/48
-2406:840:f86e::/47
-2406:840:f870::/44
-2406:840:f880::/45
-2406:840:f888::/48
-2406:840:f88a::/47
-2406:840:f88c::/46
-2406:840:f890::/44
-2406:840:f8a0::/43
-2406:840:f8c0::/42
-2406:840:f900::/41
-2406:840:f980::/44
-2406:840:f9a0::/43
-2406:840:f9c0::/42
-2406:840:fa00::/48
-2406:840:fa02::/47
-2406:840:fa04::/46
-2406:840:fa08::/45
-2406:840:fa10::/44
-2406:840:fa20::/43
-2406:840:fa41::/48
-2406:840:fa42::/47
-2406:840:fa44::/46
-2406:840:fa48::/45
-2406:840:fa50::/44
-2406:840:fa70::/44
-2406:840:fa81::/48
-2406:840:fa82::/47
-2406:840:fa84::/46
-2406:840:fa88::/45
-2406:840:fa90::/44
-2406:840:faa0::/43
-2406:840:fac0::/42
-2406:840:fb00::/40
-2406:840:fc14::/46
-2406:840:fc18::/45
-2406:840:fc24::/46
-2406:840:fc28::/45
-2406:840:fc34::/46
-2406:840:fc38::/45
-2406:840:fc44::/46
-2406:840:fc48::/45
-2406:840:fc54::/46
-2406:840:fc58::/45
-2406:840:fc64::/46
-2406:840:fc68::/45
-2406:840:fc74::/46
-2406:840:fc78::/45
-2406:840:fc80::/44
-2406:840:fc94::/46
-2406:840:fc98::/45
-2406:840:fca4::/46
-2406:840:fca8::/45
-2406:840:fcb4::/46
-2406:840:fcb8::/45
-2406:840:fcc0::/44
-2406:840:fcd1::/48
-2406:840:fcd2::/47
-2406:840:fcd4::/46
-2406:840:fcd8::/45
-2406:840:fce0::/44
-2406:840:fcf6::/47
-2406:840:fcf8::/45
-2406:840:fd00::/43
-2406:840:fd20::/44
-2406:840:fd31::/48
-2406:840:fd32::/47
-2406:840:fd34::/46
-2406:840:fd38::/45
-2406:840:fd41::/48
-2406:840:fd42::/47
-2406:840:fd44::/48
-2406:840:fd47::/48
-2406:840:fd4a::/47
-2406:840:fd4c::/46
-2406:840:fd51::/48
-2406:840:fd52::/47
-2406:840:fd54::/48
-2406:840:fd57::/48
-2406:840:fd5a::/47
-2406:840:fd5c::/46
-2406:840:fd61::/48
-2406:840:fd62::/47
-2406:840:fd64::/48
-2406:840:fd67::/48
-2406:840:fd6a::/47
-2406:840:fd6c::/46
-2406:840:fd71::/48
-2406:840:fd72::/47
-2406:840:fd74::/48
-2406:840:fd77::/48
-2406:840:fd7a::/47
-2406:840:fd7c::/46
-2406:840:fd81::/48
-2406:840:fd82::/47
-2406:840:fd84::/48
-2406:840:fd87::/48
-2406:840:fd8a::/47
-2406:840:fd8c::/46
-2406:840:fd94::/46
-2406:840:fd98::/46
-2406:840:fd9c::/47
-2406:840:fd9e::/48
-2406:840:fda1::/48
-2406:840:fda2::/47
-2406:840:fda4::/46
-2406:840:fda8::/45
-2406:840:fdb1::/48
-2406:840:fdb2::/47
-2406:840:fdb4::/46
-2406:840:fdb8::/45
-2406:840:fdc1::/48
-2406:840:fdc2::/47
-2406:840:fdc4::/46
-2406:840:fdc8::/45
-2406:840:fdd0::/44
-2406:840:fde0::/43
-2406:840:fe00::/43
-2406:840:fe20::/46
-2406:840:fe24::/47
-2406:840:fe26::/48
-2406:840:fe28::/45
-2406:840:fe30::/44
-2406:840:fe40::/44
-2406:840:fe52::/47
-2406:840:fe54::/46
-2406:840:fe58::/45
-2406:840:fe60::/43
-2406:840:fe80::/44
-2406:840:fe95::/48
-2406:840:fe9c::/48
-2406:840:fe9f::/48
-2406:840:fea0::/48
-2406:840:fea9::/48
-2406:840:feb0::/47
-2406:840:feb2::/48
-2406:840:feb4::/46
-2406:840:feb8::/45
-2406:840:fec1::/48
-2406:840:fec6::/47
-2406:840:fec8::/47
-2406:840:fed0::/48
-2406:840:fed2::/48
-2406:840:fed5::/48
-2406:840:fed6::/48
-2406:840:fed9::/48
-2406:840:feda::/48
-2406:840:fede::/48
-2406:840:fee0::/45
-2406:840:fee8::/46
-2406:840:feec::/48
-2406:840:feee::/47
-2406:840:fef1::/48
-2406:840:ff00::/40
-2406:880::/32
-2406:8c0::/32
-2406:d80::/32
-2406:e80::/32
-2406:f80::/32
-2406:1080::/32
-2406:1100::/32
-2406:1180::/32
-2406:1280::/32
-2406:1380::/32
-2406:1480::/32
-2406:1580::/32
-2406:15c0::/32
-2406:1680::/32
-2406:1780::/32
-2406:1880::/32
-2406:1980::/32
-2406:1a80::/32
-2406:1b80::/32
-2406:1c80::/32
-2406:1d80::/32
-2406:1e40::/32
-2406:1e80::/32
-2406:1f80::/32
-2406:2080::/32
-2406:2640::/32
+2406:840:9680::/44
+2406:840:f889::/48
+2406:1080::/48
2406:2700::/32
-2406:2780::/32
-2406:2880::/32
-2406:2980::/32
-2406:2a80::/32
-2406:2b80::/32
-2406:2c40::/32
-2406:2c80::/32
-2406:2d80::/32
-2406:2e80::/32
-2406:2f80::/32
-2406:3080::/32
-2406:3180::/32
-2406:31c0::/32
-2406:3280::/32
-2406:3300::/32
2406:3340::/32
-2406:3380::/32
-2406:3480::/32
-2406:34c0::/32
-2406:3580::/32
-2406:3640::/32
-2406:3680::/32
-2406:3700::/32
-2406:3780::/32
-2406:3880::/32
-2406:3980::/32
-2406:39c0::/32
-2406:3ac0::/32
-2406:3e80::/32
-2406:3f80::/32
-2406:4080::/32
-2406:40c0::/32
-2406:4180::/32
-2406:4280::/32
-2406:42c0::/32
-2406:4340::/32
-2406:4380::/32
-2406:43c0::/32
-2406:4480::/32
-2406:4500::/32
-2406:4680::/32
-2406:4b80::/32
-2406:4c80::/32
-2406:4d00::/32
-2406:4d80::/32
-2406:4e80::/32
-2406:4f00::/32
-2406:4f80::/32
-2406:5080::/32
-2406:50c0::/32
-2406:5180::/32
-2406:5280::/32
+2406:4d00::/48
2406:52c0::/32
-2406:5340::/32
-2406:5380::/32
-2406:5480::/32
-2406:5580::/32
-2406:5680::/32
-2406:5780::/32
-2406:5840::/31
-2406:5940::/32
-2406:5980::/32
-2406:5a40::/32
-2406:5ac0::/32
-2406:5b40::/32
-2406:5d80::/32
-2406:5e80::/32
-2406:5f80::/32
-2406:6080::/32
+2406:5340:6666::/48
+2406:5340:8888::/48
2406:6100::/32
-2406:6180::/32
-2406:61c0::/29
-2406:6280::/32
-2406:6300::/32
-2406:6340::/32
-2406:6380::/32
-2406:6480::/32
-2406:6500::/32
-2406:6580::/32
-2406:65c0::/32
-2406:6640::/32
-2406:6680::/32
-2406:6780::/32
-2406:6880::/32
-2406:6980::/32
-2406:6a80::/32
-2406:6b80::/32
-2406:6bc0::/32
-2406:6c80::/32
-2406:6d80::/32
-2406:6e80::/32
-2406:6f80::/32
-2406:7080::/32
-2406:7280::/32
-2406:7380::/32
-2406:7480::/32
-2406:7580::/32
-2406:7680::/32
-2406:7780::/32
-2406:7880::/32
-2406:7980::/32
-2406:7a80::/32
-2406:7b80::/32
-2406:7c80::/32
-2406:7d00::/32
-2406:7d80::/32
-2406:7e80::/32
-2406:7f80::/32
-2406:7fc0::/32
-2406:8080::/32
-2406:8180::/32
-2406:8280::/32
-2406:8380::/32
-2406:8480::/32
-2406:8500::/32
-2406:8580::/32
-2406:8780::/32
-2406:8880::/32
-2406:8980::/32
-2406:8a80::/32
-2406:8b80::/32
-2406:8c80::/32
-2406:8d80::/32
-2406:8e80::/32
-2406:8f40::/32
-2406:8f80::/32
-2406:9200::/32
-2406:9380::/32
-2406:9480::/32
-2406:94c0::/32
-2406:9780::/32
-2406:9d80::/32
-2406:9e80::/32
-2406:9f80::/32
-2406:a080::/32
-2406:a180::/32
-2406:a280::/32
-2406:a380::/32
-2406:a480::/32
-2406:a580::/32
-2406:a680::/32
-2406:a780::/32
-2406:a7c0::/32
-2406:a880::/32
-2406:a8c0::/32
-2406:a980::/32
-2406:aa80::/32
-2406:aac0::/32
-2406:ab80::/32
-2406:ac80::/32
-2406:acc0::/32
-2406:ad40::/32
-2406:ad80::/32
-2406:ae80::/32
-2406:af80::/32
-2406:b080::/32
-2406:b640::/32
-2406:b880::/32
-2406:b980::/32
-2406:ba80::/32
-2406:bb80::/32
-2406:bc80::/32
-2406:bd40::/32
-2406:bd80::/32
-2406:bdc0::/32
-2406:be80::/32
-2406:bf80::/32
-2406:c080::/32
-2406:c180::/32
-2406:c280::/32
-2406:c340::/32
-2406:c480::/32
-2406:c580::/32
-2406:c680::/32
-2406:c780::/32
-2406:c880::/32
-2406:c900::/32
-2406:c980::/32
-2406:ca80::/32
-2406:cac0::/32
-2406:cb80::/32
-2406:cc80::/32
-2406:cd80::/32
-2406:ce80::/32
-2406:cf00::/30
-2406:cf80::/32
-2406:d080::/32
-2406:d140::/33
-2406:d140:c000::/34
-2406:d180::/32
-2406:d280::/32
-2406:d2c0::/32
-2406:d380::/32
-2406:d440::/32
-2406:d480::/32
-2406:d580::/32
-2406:d680::/32
-2406:d780::/32
-2406:d880::/32
-2406:d980::/32
-2406:db80::/32
-2406:dc80::/32
-2406:dd00::/32
-2406:dd80:400::/38
-2406:dd80:c00::/38
-2406:dd80:1000::/36
-2406:dd80:2000::/35
-2406:dd80:4000::/34
-2406:dd80:8000::/33
-2406:de80::/32
-2406:df80::/32
-2406:e080::/32
-2406:e180::/32
-2406:e2c0::/32
-2406:e380::/32
+2406:b640:100::/48
+2406:b640:4100::/48
+2406:cac0::/40
+2406:cac0:200::/40
+2406:cf00::/48
+2406:cf00:1000::/43
+2406:d440:100::/43
+2406:d440:200::/43
+2406:d440:300::/43
+2406:d440:ff00::/48
+2406:d440:ffff::/48
2406:e3c0::/32
-2406:e500::/32
-2406:e580::/32
-2406:e680::/32
-2406:e780::/32
-2406:e8c0::/32
-2406:ea40::/28
-2406:f280::/33
-2406:f300::/32
-2406:f4c0::/32
-2406:f7c0::/32
-2406:f980::/32
-2406:fc80::/32
-2406:fd80::/32
-2406:fe80::/32
-2406:ff00::/32
-2407:480::/32
-2407:580::/32
-2407:cc0::/32
-2407:f40::/32
-2407:17c0::/32
-2407:1900::/32
-2407:1d00::/32
-2407:2280::/32
-2407:2380::/32
-2407:23c0::/32
-2407:2780::/32
-2407:2840::/32
-2407:2ac0::/32
-2407:31c0::/32
-2407:3340::/32
-2407:3540::/32
-2407:3700::/32
-2407:3740::/32
+2406:e500::/33
+2407:23c0::/48
+2407:2840::/48
2407:37c0::/32
-2407:3900::/32
-2407:3f40::/32
-2407:43c0::/32
-2407:4440::/32
-2407:4580::/32
-2407:4680::/32
-2407:4740::/32
-2407:4880::/32
-2407:4980::/32
-2407:4a80::/32
-2407:4c80::/32
-2407:4d80::/32
-2407:4e80::/32
-2407:4f00::/32
2407:5380::/32
-2407:53c0::/32
-2407:5500::/32
-2407:5780::/32
-2407:5840::/32
-2407:6040::/32
-2407:6580::/32
-2407:6c40::/32
-2407:7680::/32
-2407:7780::/32
-2407:7880::/32
-2407:7980::/32
-2407:7c80::/32
-2407:7d00::/32
-2407:7d80::/32
-2407:7e80::/32
-2407:8880::/32
-2407:8b80::/32
-2407:8f40::/32
-2407:9080::/32
-2407:9180::/32
-2407:94c0::/32
-2407:9680::/32
-2407:9980::/32
-2407:9b40::/32
-2407:9bc0::/32
+2407:6c40:1100::/48
+2407:6c40:1210::/48
+2407:6c40:1500::/48
+2407:6c40:1600::/40
+2407:7d00:1::/48
+2407:8f40:2::/48
2407:9f00::/32
-2407:9f80::/32
-2407:a040::/32
-2407:a640::/32
-2407:a7c0::/32
-2407:a880::/32
-2407:a940::/32
2407:ad80::/32
2407:ae80::/32
-2407:af80::/32
-2407:b080::/32
-2407:b180::/32
-2407:b280::/32
-2407:b380::/32
-2407:b580::/32
-2407:b680::/32
-2407:b780::/32
-2407:b880::/32
-2407:b980::/32
-2407:ba00::/32
-2407:ba80::/32
-2407:bb80::/32
+2407:b380:8000::/48
2407:bc00::/32
-2407:bc80::/32
-2407:bd80::/32
-2407:bdc0::/32
-2407:be80::/32
-2407:bf80::/32
-2407:c080::/32
-2407:c380::/32
-2407:c400::/32
-2407:c480::/32
-2407:c580::/32
-2407:c680::/32
-2407:c780::/32
-2407:c880::/32
-2407:c900::/32
-2407:c980::/32
-2407:cb80::/32
-2407:cc80::/32
-2407:cd80::/32
-2407:ce80::/32
-2407:cf80::/32
-2407:d480::/32
-2407:d580::/32
-2407:d680::/32
-2407:d780::/32
-2407:d7c0::/32
-2407:d880::/32
-2407:d8c0::/32
-2407:d980::/32
+2407:c080::/35
+2407:c080:4000::/37
+2407:c080:5000::/37
+2407:c080:6000::/36
+2407:c080:8000::/36
2407:d9c0::/32
-2407:da80::/32
-2407:db80::/32
-2407:dc80::/32
-2407:dd80::/32
-2407:de80::/32
-2407:df80::/32
-2407:dfc0::/32
-2407:e080::/32
-2407:e180::/32
-2407:e280::/32
-2407:e380::/32
-2407:e480::/32
-2407:e580::/32
-2407:e680::/32
-2407:e780::/32
-2407:e800::/32
-2407:ea80::/32
-2407:eb80::/32
-2407:ec40::/32
-2407:ec80::/32
-2407:ecc0::/32
-2407:ed80::/32
-2407:ee80::/32
-2407:ef80::/32
-2407:f080::/32
-2407:f180::/32
-2407:f280::/32
-2407:f380::/32
-2407:f480::/32
-2407:f580::/32
-2407:f680::/32
-2407:f780::/32
-2407:f880::/32
-2407:f980::/32
-2407:fa80::/32
-2407:fb80::/32
-2407:fc80::/32
-2407:fd80::/32
-2408:4000::/40
-2408:4000:100::/47
-2408:4000:103::/48
-2408:4000:104::/46
-2408:4000:108::/45
-2408:4000:110::/44
-2408:4000:120::/43
-2408:4000:140::/42
-2408:4000:180::/41
-2408:4000:200::/39
-2408:4000:400::/38
-2408:4000:800::/37
-2408:4000:1000::/36
-2408:4000:2000::/35
-2408:4000:4000::/34
-2408:4000:8000::/33
-2408:4001::/32
-2408:4002::/31
-2408:4004::/30
-2408:4008::/29
-2408:4010::/30
-2408:4014::/31
-2408:4016:2::/47
-2408:4016:4::/46
-2408:4016:8::/45
-2408:4016:10::/44
-2408:4016:20::/43
-2408:4016:40::/42
-2408:4016:80::/41
-2408:4016:100::/40
-2408:4016:200::/39
-2408:4016:400::/38
-2408:4016:800::/37
-2408:4016:1000::/36
-2408:4016:2000::/35
-2408:4016:4000::/34
-2408:4016:8000::/33
-2408:4017::/32
-2408:4018::/29
-2408:4020::/27
-2408:4040::/26
-2408:4080::/25
-2408:4100::/24
-2408:4200::/23
-2408:6000::/24
-2408:8000::/20
-2409:1000::/20
-2409:2000::/21
-2409:6000::/20
-2409:8000::/21
-2409:8800::/22
-2409:8c00::/25
-2409:8c80::/30
-2409:8c84::/32
-2409:8c85::/34
-2409:8c85:4000::/36
-2409:8c85:5000::/38
-2409:8c85:5400::/43
-2409:8c85:5420::/44
-2409:8c85:5430::/47
-2409:8c85:5433::/48
-2409:8c85:5434::/46
-2409:8c85:5438::/45
-2409:8c85:5440::/42
-2409:8c85:5480::/41
-2409:8c85:5500::/40
-2409:8c85:5600::/39
-2409:8c85:5800::/37
-2409:8c85:6000::/35
-2409:8c85:8000::/33
-2409:8c86::/31
-2409:8c88::/29
-2409:8c90::/28
-2409:8ca0::/27
-2409:8cc0::/26
-2409:8d00::/24
-2409:8e00::/23
-240a:2000::/24
-240a:4000::/21
-240a:6000::/24
-240a:8000::/21
+2408:4000::/22
+2408:8000::/48
+2408:8000:2::/47
+2408:8000:1000::/36
+2408:8000:2000::/35
+2408:8000:4000::/34
+2408:8000:8000::/33
+2408:8001::/32
+2408:8024:8000::/33
+2408:8025::/32
+2408:8026::/32
+2408:802a:8000::/33
+2408:802c::/32
+2408:803e::/32
+2408:8056::/32
+2408:80c2::/33
+2408:80c5::/33
+2408:80e0:4000::/36
+2408:80e2::/33
+2408:80e9:4000::/34
+2408:80f0:4000::/36
+2408:80f1::/42
+2408:80f1:40::/43
+2408:80f1:70::/44
+2408:80f1:80::/41
+2408:80f1:100::/43
+2408:80f1:120::/44
+2408:80f1:160::/43
+2408:80f1:180::/43
+2408:80f1:1b0::/44
+2408:80f1:1c0::/43
+2408:80f1:1e0::/44
+2408:80f1:200::/40
+2408:80f5:4000::/34
+2408:80f9:4000::/34
+2408:8120:1::/48
+2408:8120:2::/48
+2408:8120:7000::/36
+2408:8140:2000::/48
+2408:815f:e000::/35
+2408:8181::/40
+2408:8181:6000::/40
+2408:8181:8000::/40
+2408:8181:a000::/40
+2408:8181:a220::/44
+2408:8181:e000::/40
+2408:8182:6000::/40
+2408:8182:c000::/40
+2408:8183:4000::/40
+2408:8183:8000::/40
+2408:81a2:2000::/35
+2408:81a2:4000::/35
+2408:81a3:6000::/35
+2408:81a3:c800::/48
+2408:81a3:ca66::/48
+2408:8206::/31
+2408:8208::/29
+2408:8210::/30
+2408:8214::/31
+2408:821a::/31
+2408:8220::/31
+2408:8226::/32
+2408:822a::/31
+2408:822e::/31
+2408:8230::/29
+2408:8238::/31
+2408:823c::/31
+2408:8240::/32
+2408:8244::/30
+2408:8248::/30
+2408:824c::/32
+2408:824e::/31
+2408:8250::/30
+2408:8254::/32
+2408:8256::/31
+2408:8258::/30
+2408:825c::/31
+2408:825f::/32
+2408:8260::/32
+2408:8262::/31
+2408:8264::/31
+2408:8266::/32
+2408:826a::/32
+2408:826c::/30
+2408:8270::/32
+2408:8274::/30
+2408:8278::/31
+2408:827a::/32
+2408:8306::/31
+2408:8308::/30
+2408:8310::/30
+2408:832a::/32
+2408:832e::/31
+2408:8330::/30
+2408:8338::/32
+2408:8340::/32
+2408:8344::/30
+2408:8348::/30
+2408:834e::/31
+2408:8350::/30
+2408:8354::/32
+2408:8356::/31
+2408:8358::/30
+2408:8360::/30
+2408:8364::/31
+2408:836c::/30
+2408:8374::/30
+2408:8378::/31
+2408:837a::/32
+2408:8406:100::/41
+2408:8406:180::/42
+2408:8406:d00::/41
+2408:8406:d80::/42
+2408:8406:1900::/41
+2408:8406:1980::/42
+2408:8406:2500::/41
+2408:8406:2580::/42
+2408:8406:3100::/41
+2408:8406:3180::/42
+2408:8406:3d00::/41
+2408:8406:3d80::/42
+2408:8406:4900::/41
+2408:8406:4980::/42
+2408:8406:5500::/41
+2408:8406:5580::/42
+2408:8406:6100::/41
+2408:8406:6180::/42
+2408:8406:6d00::/41
+2408:8406:6d80::/42
+2408:8406:7900::/41
+2408:8406:7980::/42
+2408:8406:8500::/41
+2408:8406:8580::/42
+2408:8406:9100::/41
+2408:8406:9180::/42
+2408:8406:9d00::/41
+2408:8406:9d80::/42
+2408:8406:a900::/41
+2408:8406:a980::/42
+2408:8406:b500::/41
+2408:8406:b580::/42
+2408:8407:500::/42
+2408:8409::/40
+2408:8409:100::/41
+2408:8409:1a0::/43
+2408:8409:1c0::/42
+2408:8409:200::/42
+2408:8409:c00::/40
+2408:8409:d00::/41
+2408:8409:da0::/43
+2408:8409:dc0::/42
+2408:8409:e00::/42
+2408:8409:1800::/40
+2408:8409:1900::/41
+2408:8409:19a0::/43
+2408:8409:19c0::/42
+2408:8409:1a00::/42
+2408:8409:2400::/40
+2408:8409:2500::/41
+2408:8409:25a0::/43
+2408:8409:25c0::/42
+2408:8409:2600::/42
+2408:8409:3000::/40
+2408:8409:3100::/41
+2408:8409:31a0::/43
+2408:8409:31c0::/42
+2408:8409:3200::/42
+2408:8409:3c00::/40
+2408:8409:3d00::/41
+2408:8409:3da0::/43
+2408:8409:3dc0::/42
+2408:8409:3e00::/42
+2408:8409:4800::/40
+2408:8409:4900::/41
+2408:8409:49a0::/43
+2408:8409:49c0::/42
+2408:8409:4a00::/42
+2408:8409:5400::/40
+2408:8409:5500::/41
+2408:8409:55a0::/43
+2408:8409:55c0::/42
+2408:8409:5600::/42
+2408:8409:6000::/40
+2408:8409:6100::/41
+2408:8409:61a0::/43
+2408:8409:61c0::/42
+2408:8409:6200::/42
+2408:8409:6c00::/40
+2408:8409:6d00::/41
+2408:8409:6da0::/43
+2408:8409:6dc0::/42
+2408:8409:6e00::/42
+2408:8409:7800::/40
+2408:8409:7900::/41
+2408:8409:79a0::/43
+2408:8409:79c0::/42
+2408:8409:7a00::/42
+2408:8409:8400::/40
+2408:8409:8500::/41
+2408:8409:85a0::/43
+2408:8409:85c0::/42
+2408:8409:8600::/42
+2408:8409:9000::/40
+2408:8409:9100::/41
+2408:8409:91a0::/43
+2408:8409:91c0::/42
+2408:8409:9200::/42
+2408:8409:9c00::/40
+2408:8409:9d00::/41
+2408:8409:9da0::/43
+2408:8409:9dc0::/42
+2408:8409:9e00::/42
+2408:8409:a800::/40
+2408:8409:a900::/41
+2408:8409:a9a0::/43
+2408:8409:a9c0::/42
+2408:8409:aa00::/42
+2408:8409:b400::/40
+2408:8409:b500::/41
+2408:8409:b5a0::/43
+2408:8409:b5c0::/42
+2408:8409:b600::/42
+2408:840c::/40
+2408:840c:200::/40
+2408:840c:d00::/40
+2408:840c:f00::/40
+2408:840c:1a00::/40
+2408:840c:1c00::/40
+2408:840c:2700::/40
+2408:840c:2900::/40
+2408:840c:3400::/40
+2408:840c:3600::/40
+2408:840c:4e00::/40
+2408:840c:5000::/40
+2408:840c:5b00::/40
+2408:840c:5d00::/40
+2408:840c:6800::/40
+2408:840c:6a00::/40
+2408:840c:7500::/40
+2408:840c:7700::/40
+2408:840c:8200::/40
+2408:840c:8400::/40
+2408:840c:8f00::/40
+2408:840c:9100::/40
+2408:840c:9c00::/40
+2408:840c:9e00::/40
+2408:840c:a900::/40
+2408:840c:ab00::/40
+2408:840c:b600::/40
+2408:840c:b800::/40
+2408:840c:c300::/40
+2408:840c:c500::/40
+2408:840c:d000::/40
+2408:840c:d200::/40
+2408:840c:dd00::/40
+2408:840c:de00::/40
+2408:840d::/42
+2408:840d:40::/43
+2408:840d:200::/42
+2408:840d:400::/42
+2408:840d:440::/43
+2408:840d:600::/42
+2408:840d:d00::/42
+2408:840d:d40::/43
+2408:840d:f00::/42
+2408:840d:1100::/42
+2408:840d:1140::/43
+2408:840d:1300::/42
+2408:840d:1a00::/42
+2408:840d:1a40::/43
+2408:840d:1c00::/42
+2408:840d:1e00::/42
+2408:840d:1e40::/43
+2408:840d:2000::/42
+2408:840d:2700::/42
+2408:840d:2740::/43
+2408:840d:2900::/42
+2408:840d:2b00::/42
+2408:840d:2b40::/43
+2408:840d:2d00::/42
+2408:840d:3400::/42
+2408:840d:3440::/43
+2408:840d:3600::/42
+2408:840d:3800::/42
+2408:840d:3840::/43
+2408:840d:3a00::/42
+2408:840d:4e00::/42
+2408:840d:4e40::/43
+2408:840d:5000::/42
+2408:840d:5200::/42
+2408:840d:5240::/43
+2408:840d:5400::/42
+2408:840d:5b00::/42
+2408:840d:5b40::/43
+2408:840d:5d00::/42
+2408:840d:5f00::/42
+2408:840d:5f40::/43
+2408:840d:6100::/42
+2408:840d:6800::/42
+2408:840d:6840::/43
+2408:840d:6a00::/42
+2408:840d:6c00::/42
+2408:840d:6c40::/43
+2408:840d:6e00::/42
+2408:840d:7500::/42
+2408:840d:7540::/43
+2408:840d:7700::/42
+2408:840d:7900::/42
+2408:840d:7940::/43
+2408:840d:7b00::/42
+2408:840d:8200::/42
+2408:840d:8240::/43
+2408:840d:8400::/42
+2408:840d:8600::/42
+2408:840d:8640::/43
+2408:840d:8800::/42
+2408:840d:8f00::/42
+2408:840d:8f40::/43
+2408:840d:9100::/42
+2408:840d:9300::/42
+2408:840d:9340::/43
+2408:840d:9500::/42
+2408:840d:9c00::/42
+2408:840d:9c40::/43
+2408:840d:9e00::/42
+2408:840d:a000::/42
+2408:840d:a040::/43
+2408:840d:a200::/42
+2408:840d:a900::/42
+2408:840d:a940::/43
+2408:840d:ab00::/42
+2408:840d:ad00::/42
+2408:840d:ad40::/43
+2408:840d:af00::/42
+2408:840d:b600::/42
+2408:840d:b640::/43
+2408:840d:b800::/42
+2408:840d:ba00::/42
+2408:840d:ba40::/43
+2408:840d:bc00::/42
+2408:840d:c300::/42
+2408:840d:c340::/43
+2408:840d:c500::/42
+2408:840d:c700::/42
+2408:840d:c740::/43
+2408:840d:c900::/42
+2408:840d:d000::/42
+2408:840d:d040::/43
+2408:840d:d200::/42
+2408:840d:d400::/42
+2408:840d:d440::/43
+2408:840d:d600::/42
+2408:840d:dd00::/42
+2408:840d:dd40::/43
+2408:840d:de00::/42
+2408:840e:dd00::/40
+2408:840e:de00::/40
+2408:840f:1e0::/46
+2408:840f:1e4::/47
+2408:8410::/30
+2408:8414::/31
+2408:8417::/32
+2408:8418::/32
+2408:841a::/31
+2408:841c::/31
+2408:841e::/32
+2408:8420::/31
+2408:8422::/32
+2408:8426::/31
+2408:842a::/31
+2408:842c::/32
+2408:842e::/32
+2408:8430::/31
+2408:8434::/30
+2408:8438::/31
+2408:843c::/30
+2408:8440::/31
+2408:8444::/30
+2408:8448::/32
+2408:844b::/32
+2408:844c::/30
+2408:8452::/31
+2408:8454::/32
+2408:8456::/31
+2408:8458::/30
+2408:845c::/31
+2408:8460::/30
+2408:8464::/31
+2408:8466::/32
+2408:8469::/32
+2408:846a::/31
+2408:846c::/30
+2408:8470::/31
+2408:8474::/30
+2408:8478::/31
+2408:847a::/32
+2408:84e1::/32
+2408:84e2::/31
+2408:84e4::/30
+2408:84e9::/32
+2408:84eb::/32
+2408:84ec::/30
+2408:84f0::/28
+2408:856c::/31
+2408:8606::/31
+2408:8608::/29
+2408:8610::/30
+2408:8614::/31
+2408:861a::/31
+2408:861c::/32
+2408:8620::/31
+2408:8624::/31
+2408:8626::/32
+2408:862a::/31
+2408:862d::/32
+2408:862e::/31
+2408:8630::/29
+2408:8638::/31
+2408:863c::/31
+2408:8640::/32
+2408:8642::/32
+2408:8644::/30
+2408:8648::/31
+2408:864c::/32
+2408:864e::/31
+2408:8650::/30
+2408:8656::/31
+2408:8658::/30
+2408:865c::/31
+2408:865f::/32
+2408:8660::/32
+2408:8662::/31
+2408:8664::/31
+2408:8666::/32
+2408:866a::/31
+2408:866c::/30
+2408:8670::/32
+2408:8674::/30
+2408:8678::/31
+2408:867a::/32
+2408:8706::/31
+2408:8708::/29
+2408:8710::/30
+2408:8719::/32
+2408:871a::/31
+2408:8720::/30
+2408:8726::/32
+2408:872b::/32
+2408:872f::/32
+2408:8730::/30
+2408:8734::/31
+2408:8736::/32
+2408:8738::/32
+2408:873c::/31
+2408:8740::/32
+2408:8742::/32
+2408:8744::/30
+2408:8748::/29
+2408:8752::/32
+2408:8756::/31
+2408:8758::/30
+2408:875c::/32
+2408:8760::/32
+2408:8762::/31
+2408:8764::/31
+2408:8766::/32
+2408:8768::/32
+2408:876a::/32
+2408:876c::/30
+2408:8770::/32
+2408:8772::/31
+2408:8774::/32
+2408:8776::/31
+2408:8778::/31
+2408:877a::/32
+2408:877c::/30
+2408:8806::/42
+2408:8806:40::/43
+2408:880c::/30
+2408:8810::/30
+2408:8814::/31
+2408:8818::/31
+2408:882c::/32
+2408:883a::/32
+2408:8844::/43
+2408:8856::/31
+2408:8858::/30
+2408:8862::/31
+2408:8864::/31
+2408:8866::/32
+2408:886e::/31
+2408:8872::/32
+2408:8878::/31
+2408:887e::/32
+2408:8906:20::/44
+2408:8906:40::/43
+2408:8907:9000::/44
+2408:890c::/31
+2408:8912::/31
+2408:8914::/30
+2408:891c::/32
+2408:8920::/32
+2408:8924::/32
+2408:892c::/32
+2408:8936::/32
+2408:893a::/32
+2408:8940::/32
+2408:8948::/32
+2408:894c::/32
+2408:894e::/32
+2408:8956::/31
+2408:8958::/30
+2408:8962::/31
+2408:8964::/31
+2408:8966::/32
+2408:896c::/32
+2408:896e::/31
+2408:8972::/32
+2408:8978::/30
+2408:897e::/32
+2408:8a00:c000::/36
+2408:8a00:d000::/37
+2408:8a00:e000::/35
+2408:8a01::/36
+2408:8a02:b110::/44
+2408:8a02:b120::/44
+2408:8a04:8000::/36
+2408:8a04:e000::/40
+2408:8a05:6000::/35
+2408:8a05:8000::/36
+2408:8a06::/47
+2408:8a06:100::/47
+2408:8a07::/40
+2408:8a21:4000::/35
+2408:8a22::/35
+2408:8a23:4000::/34
+2408:8a24:4000::/34
+2408:8a26:c000::/34
+2408:8a27:4000::/35
+2409:2000::/31
+2409:2002::/32
+2409:2003::/47
+2409:27fa::/48
+2409:27fa:f000::/48
+2409:27fb::/48
+2409:27fc::/48
+2409:27fe::/33
+2409:6100::/44
+2409:8000::/20
+240a:2000::/40
+240a:2001:100::/40
+240a:2001:1000::/36
+240a:4020:83a::/48
+240a:4020:883a::/48
+240a:4021:83a::/48
+240a:4021:883a::/48
+240a:4090:50::/48
+240a:4090:120::/48
+240a:4090:250::/48
+240a:4090:1000::/39
+240a:4090:1200::/40
+240a:4090:2010::/48
+240a:4090:2041::/48
+240a:4090:2061::/48
+240a:4090:3000::/39
+240a:4090:3200::/40
+240a:4090:5000::/39
+240a:4090:5200::/40
+240a:4090:7000::/39
+240a:4090:7200::/40
+240a:40b0:83a::/48
+240a:40b0:283a::/48
+240a:40b0:483a::/48
+240a:40b0:683a::/48
+240a:40c0:8000::/43
+240a:40c0:a000::/43
+240a:40c0:c000::/43
+240a:40c0:e000::/43
+240a:40c1::/43
+240a:40c1:2000::/43
+240a:40c1:4000::/43
+240a:40c1:6000::/43
+240a:40c1:8000::/43
+240a:40c1:a000::/43
+240a:40c1:c000::/43
+240a:40c1:e000::/43
+240a:40c2::/43
+240a:40c2:2000::/43
+240a:40c2:4000::/43
+240a:40c2:6000::/43
+240a:40c2:8000::/43
+240a:40c2:a000::/43
+240a:40c2:c000::/43
+240a:40c2:e000::/43
+240a:40c3::/43
+240a:40c3:2000::/43
+240a:40c3:4000::/43
+240a:40c3:6000::/43
+240a:40c3:8000::/43
+240a:40c3:a000::/43
+240a:40c3:c000::/43
+240a:40c3:e000::/43
+240a:40c4::/43
+240a:40c4:2000::/43
+240a:40c4:4000::/43
+240a:4280::/26
+240a:42c0::/27
+240a:42e0::/28
+240a:42f0::/29
+240a:42f8::/30
+240a:6001::/48
240a:a000::/20
240a:c000::/20
-240b:2000::/22
-240b:6000::/20
-240b:8000::/21
-240b:a000::/25
-240b:e000::/26
-240c:0:1::/48
-240c:0:2::/47
-240c:0:4::/46
-240c:0:8::/45
-240c:0:10::/44
-240c:0:20::/43
-240c:0:40::/42
-240c:0:80::/41
-240c:0:100::/40
-240c:0:200::/39
-240c:0:400::/38
-240c:0:800::/37
-240c:0:1000::/36
-240c:0:2000::/35
-240c:0:4000::/34
-240c:0:8000::/33
-240c:6:2::/48
-240c:6:4::/46
-240c:6:8::/45
-240c:6:10::/44
-240c:6:20::/43
-240c:6:40::/42
-240c:6:80::/41
-240c:6:100::/40
-240c:6:200::/39
-240c:6:400::/38
-240c:6:800::/37
-240c:6:1000::/36
-240c:6:2000::/35
-240c:6:4000::/34
-240c:6:8000::/33
-240c:f::/48
-240c:f:2::/47
-240c:f:4::/46
-240c:f:8::/45
-240c:f:10::/44
-240c:f:20::/43
-240c:f:40::/42
-240c:f:80::/41
-240c:f:100::/40
-240c:f:200::/39
-240c:f:400::/38
-240c:f:800::/37
-240c:f:1000::/36
-240c:f:2000::/35
-240c:f:4000::/34
-240c:f:8000::/33
+240b:e001::/32
+240b:e002::/31
+240b:e004::/30
+240b:e008::/29
+240b:e010::/32
240c:4000::/22
-240c:8000::/21
240c:c000::/20
240d:4000::/21
-240d:8000::/24
-240e::/21
-240e:800::/24
-240e:900::/26
-240e:940::/27
-240e:960::/28
-240e:970::/29
-240e:978::/30
-240e:97c::/32
-240e:97d::/33
-240e:97d:8001::/48
-240e:97d:8002::/47
-240e:97d:8004::/46
-240e:97d:8008::/45
-240e:97d:8010::/44
-240e:97d:8020::/43
-240e:97d:8040::/42
-240e:97d:8080::/41
-240e:97d:8100::/40
-240e:97d:8200::/39
-240e:97d:8400::/38
-240e:97d:8800::/37
-240e:97d:9000::/36
-240e:97d:a000::/35
-240e:97d:c000::/34
-240e:97e::/31
-240e:980::/25
-240e:a00::/23
-240e:c00::/22
-240e:1000::/20
-240e:2000::/19
-240f:4000::/24
-240f:8000::/24
-240f:c000::/24
-2602:f70d::/36
+240e::/20
2605:9d80:8001::/48
2605:9d80:8011::/48
2605:9d80:8021::/48
@@ -3208,8 +957,8 @@
2605:9d80:9042::/48
2605:9d80:9071::/48
2605:9d80:9092::/48
+2804:1e48:9001::/48
2804:1e48:9002::/48
-2a03:f900::/29
2a04:3e00:1002::/48
2a04:f580:8010::/47
2a04:f580:8090::/48
@@ -3234,162 +983,26 @@
2a04:f580:9270::/48
2a04:f580:9280::/48
2a04:f580:9290::/48
-2a05:1085::/32
-2a0a:2840::/29
-2a0a:d680::/37
-2a0a:d680:800::/39
-2a0a:d680:a00::/43
-2a0a:d680:a20::/44
-2a0a:d680:a30::/48
-2a0a:d680:a32::/47
-2a0a:d680:a34::/46
-2a0a:d680:a38::/45
-2a0a:d680:a40::/42
-2a0a:d680:a80::/41
-2a0a:d680:b00::/40
-2a0a:d680:c00::/38
-2a0a:d680:1000::/36
-2a0a:d680:2000::/35
-2a0a:d680:4000::/34
-2a0a:d680:8000::/40
-2a0a:d680:8102::/47
-2a0a:d680:8104::/46
-2a0a:d680:8108::/45
-2a0a:d680:8110::/44
-2a0a:d680:8120::/43
-2a0a:d680:8140::/42
-2a0a:d680:8180::/41
-2a0a:d680:8200::/39
-2a0a:d680:8400::/38
-2a0a:d680:8800::/37
-2a0a:d680:9000::/36
-2a0a:d680:a000::/35
-2a0a:d680:c000::/34
-2a0a:d681::/33
-2a0a:d681:8000::/34
-2a0a:d681:c000::/35
-2a0a:d681:e100::/40
-2a0a:d681:e200::/39
-2a0a:d681:e400::/38
-2a0a:d681:e800::/37
-2a0a:d681:f000::/36
-2a0a:d682::/33
-2a0a:d682:8000::/34
-2a0a:d682:c000::/36
-2a0a:d683::/32
-2a0a:d684::/32
-2a0a:d685::/40
-2a0a:d685:100::/41
-2a0a:d685:180::/42
-2a0a:d685:1c0::/43
-2a0a:d685:1e2::/47
-2a0a:d685:1e4::/46
-2a0a:d685:1e8::/45
-2a0a:d685:1f0::/45
-2a0a:d685:1f8::/47
-2a0a:d685:1fa::/48
-2a0a:d685:202::/47
-2a0a:d685:204::/46
-2a0a:d685:208::/45
-2a0a:d685:210::/44
-2a0a:d685:220::/43
-2a0a:d685:240::/42
-2a0a:d685:280::/41
-2a0a:d685:400::/38
-2a0a:d685:800::/37
-2a0a:d685:1000::/36
-2a0a:d685:2000::/35
-2a0a:d685:4000::/34
-2a0a:d685:8000::/33
-2a0a:d686::/32
-2a0a:d687::/33
-2a0a:d687:8000::/34
-2a0a:d687:c000::/35
-2a0a:d687:e000::/36
-2a0a:d687:f000::/48
-2a0a:d687:f002::/47
-2a0a:d687:f006::/48
-2a0a:d687:f009::/48
-2a0a:d687:f00a::/47
-2a0a:d687:f00c::/46
-2a0a:d687:f010::/44
-2a0a:d687:f020::/43
-2a0a:d687:f040::/42
-2a0a:d687:f080::/41
-2a0a:d687:f100::/40
-2a0a:d687:f200::/39
-2a0a:d687:f400::/38
-2a0a:d687:f800::/37
-2a0c:b641:573::/48
-2a0e:7580::/32
-2a0e:7582::/31
-2a0e:7584::/30
+2a0a:d685:1ff::/48
+2a0a:d685:300::/40
+2a0b:4340:90::/48
+2a0b:4340:97::/48
+2a0d:c7c7:400::/38
2a0e:aa06:49f::/48
2a0e:b107:740::/44
-2a13:1800:1::/48
-2a13:1800:2::/47
-2a13:1800:4::/46
-2a13:1800:8::/45
-2a13:1800:11::/48
-2a13:1800:12::/47
-2a13:1800:14::/46
-2a13:1800:18::/45
-2a13:1800:20::/43
-2a13:1800:40::/42
-2a13:1800:90::/44
-2a13:1800:a0::/43
-2a13:1800:c0::/42
-2a13:1800:100::/40
-2a13:1800:200::/40
-2a13:1800:310::/44
-2a13:1800:320::/43
-2a13:1800:340::/42
-2a13:1800:380::/41
-2a13:1800:400::/38
-2a13:1800:800::/37
-2a13:1800:1000::/36
-2a13:1800:2000::/35
-2a13:1800:4000::/34
-2a13:1800:8000::/33
-2a13:1801::/40
-2a13:1801:100::/41
-2a13:1801:1a0::/43
-2a13:1801:1c0::/42
-2a13:1801:210::/44
-2a13:1801:220::/43
-2a13:1801:240::/42
-2a13:1801:280::/41
-2a13:1801:300::/40
-2a13:1801:400::/38
-2a13:1801:800::/37
-2a13:1801:1000::/36
-2a13:1801:2000::/35
-2a13:1801:4000::/34
-2a13:1801:8000::/33
-2a13:1802:20::/43
-2a13:1802:40::/42
-2a13:1802:80::/41
-2a13:1802:100::/40
-2a13:1802:200::/39
-2a13:1802:400::/38
-2a13:1802:800::/37
-2a13:1802:1000::/36
-2a13:1802:2000::/35
-2a13:1802:4000::/34
-2a13:1802:8000::/34
-2a13:1802:c000::/44
-2a13:1802:c020::/43
-2a13:1802:c040::/42
-2a13:1802:c080::/41
-2a13:1802:c100::/40
-2a13:1802:c200::/39
-2a13:1802:c400::/38
-2a13:1802:c800::/37
-2a13:1802:d000::/36
-2a13:1802:e000::/35
-2a13:1803::/32
-2a13:1804::/30
-2a13:8b40::/29
+2a0e:b107:2440::/44
+2a0f:1cc5:1600::/44
+2a0f:1cc5:4700::/40
+2a12:cb41:1200::/44
+2a12:cb41:1300::/43
+2a12:cb41:13f0::/44
+2a13:1801:180::/43
+2a13:a5c3:f000::/40
+2a14:7580:d00::/43
+2a14:7580:d20::/46
+2a14:7580:d41::/48
+2a14:7580:d42::/47
+2a14:7580:dff::/48
2c0f:f7a8:8011::/48
2c0f:f7a8:8050::/48
2c0f:f7a8:805f::/48
diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver
index 5d7e941a2..0593cbd7b 100644
--- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver
+++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver
@@ -1 +1 @@
-202609130005
+20260704060757
diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt b/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt
index b9af2b38a..0ab202270 100644
--- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt
+++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt
@@ -1,561 +1,9 @@
-2mdn-cn.net
-2mdn.net
-a1.mzstatic.com
-a2.mzstatic.com
-a3.mzstatic.com
-a4.mzstatic.com
-a5.mzstatic.com
-account-cn.alibabacloud.com
-activate.activation-v2.kaspersky.com
-activation-v2.geo.kaspersky.com
-activation-v2.kaspersky.com
-adcdownload.apple.com
-adcdownload.apple.com.akadns.net
-admob-cn.com
-adservice.google.com
-ai.zhaomi.cn
-alibaba.cdn.steampipe.steamcontent.com
-amp-api-edge-lb-cn.itunes-apple.com.akadns.net
-amp-api-edge-lb.itunes-apple.com.akadns.net
-amp-api-edge.apps.apple.com
-amp-api-edge.music.apple.com
-amp-api-search-edge.apps.apple.com
-amp-api-updates.apps.apple.com
-amp-api.apps.apple.com
-amp-api.media.apple.com
-amp-api.music.apple.com
-amp-api.podcasts.apple.com
-aod-ssl.itunes.apple.com
-aod.itunes.apple.com
-api-edge.apps.apple.com
-api.alibabacloud.com
-api.blipsandchitz.me
-app-analytics-services.com
-app-measurement-cn.com
-app-measurement.com
-app-site-association.cdn-apple.com
-appldnld.apple.com
-appldnld.g.aaplimg.com
-appleid.cdn-apple.com
-apps.mzstatic.com
-apps5.oingo.com
-apptrailers.itunes.apple.com
-avail.googleflights.net
-azuremigrate.download.prss.microsoft.com
-azuremigratetest.download.prss.microsoft.com
-azurestackhub.download.prss.microsoft.com
-azurestackhubuat.download.prss.microsoft.com
-b.c2r.ts.cdn.office.net
-bag-cdn.itunes-apple.com.akadns.net
-bag.itunes.apple.com
-beacons.gcp.gvt2.com
-beacons.gvt2.com
-beacons2.gvt2.com
-beacons3.gvt2.com
-bj1.api.bing.com
-bookkeeper.itunes.apple.com
-c.admob.com
-c.android.clients.google.com
-c.pki.goog
-cache-management-prod.google.com
-cache.pack.google.com
-cbdstest.download.prss.microsoft.com
-cdn-cn.apple-mapkit.com
-cdn-cn1.apple-mapkit.com
-cdn-cn2.apple-mapkit.com
-cdn-cn3.apple-mapkit.com
-cdn-cn4.apple-mapkit.com
-cdn.ampproject.org
-cdn.apple-mapkit.com
-cdn.globalsigncdn.com.cdn.cloudflare.net
-cdn1.apple-mapkit.com
-cdn2.apple-mapkit.com
-cdn3.apple-mapkit.com
-cdn4.apple-mapkit.com
-cds-cdn.v.aaplimg.com
-cds.apple.com
-cds.apple.com.akadns.net
-cdsassets.apple.com
-certs-lb.apple.com.akadns.net
-certs.apple.com
-checkin.gstatic.com
-cl1-cdn.origin-apple.com.akadns.net
-cl1.apple.com
-cl2-cdn.origin-apple.com.akadns.net
-cl2-cn.apple.com
-cl2.apple.com
-cl2.apple.com.edgekey.net.globalredir.akadns.net
-cl3-cdn.origin-apple.com.akadns.net
-cl3.apple.com
-cl4-cdn.origin-apple.com.akadns.net
-cl4-cn.apple.com
-cl4.apple.com
-cl5-cdn.origin-apple.com.akadns.net
-cl5.apple.com
-clickserve.cc-dt.com
-clickserve.dartsearch.net
-clickserver.googleads.com
-client-api.itunes.apple.com
-clientflow.apple.com
-clientflow.apple.com.akadns.net
-clientservices.googleapis.com
-cma.itunes.apple.com
-cn-smp-paymentservices.apple.com
-cn.alibabacloud.com
-cn.download.nvidia.com
-cn.widevine.com
-cn.windowssearch.com
-collaborate.download.prss.microsoft.com
-collaborateppe.download.prss.microsoft.com
-communities.apple.com
-configuration.apple.com
-configuration.apple.com.akadns.net
-connectivitycheck.gstatic.com
-crashlyticsreports-pa.googleapis.com
-crl-lb.apple.com.akadns.net
-crl.apple.com
-crl.globalsign.net
-crl.kaspersky.com
-crl.pki.goog
-crls.pki.goog
-csi.gstatic.com
-cstat.apple.com
-cstat.cdn-apple.com
-ctdsb.clouddiffuse.xyz
-ctldl.windowsupdate.com
-cueme-api.quark.cn
-dartsearch-cn.net
-dc1-cert.ksn.kaspersky-labs.com
-dc1-file.ksn.kaspersky-labs.com
-dc1-pp.ksn.kaspersky-labs.com
-dc1-st.ksn.kaspersky-labs.com
-dc1.ksn.kaspersky-labs.com
-dd-cdn.origin-apple.com.akadns.net
-dejavu.apple.com
-developer.microsoft.com
-devimages-cdn.apple.com
-devstreaming-cdn.apple.com
-dg-meta.video.google.com
-discussionschinese.apple.com
-dl.google.com
-dl.l.google.com
-dnl-00.geo.kaspersky.com
-dnl-01.geo.kaspersky.com
-dnl-02.geo.kaspersky.com
-dnl-03.geo.kaspersky.com
-dnl-04.geo.kaspersky.com
-dnl-05.geo.kaspersky.com
-dnl-06.geo.kaspersky.com
-dnl-07.geo.kaspersky.com
-dnl-08.geo.kaspersky.com
-dnl-09.geo.kaspersky.com
-dnl-10.geo.kaspersky.com
-dnl-11.geo.kaspersky.com
-dnl-12.geo.kaspersky.com
-dnl-13.geo.kaspersky.com
-dnl-14.geo.kaspersky.com
-dnl-15.geo.kaspersky.com
-dnl-16.geo.kaspersky.com
-dnl-17.geo.kaspersky.com
-dnl-18.geo.kaspersky.com
-dnl-19.geo.kaspersky.com
-doubleclick-cn.net
-doubleclick.net
-download.developer.apple.com
-download.microsoft.com
-download.mlcc.google.com
-download.tensorflow.google.com
-download.visualstudio.microsoft.com
-downloaddispatch.itunes.apple.com
-dreamspark.download.prss.microsoft.com
-dreamsparkuat.download.prss.microsoft.com
-edge.geo.kaspersky.com
-end-api.shallow.ink
-end.shallow.ink
-entitlements-edge.itunes.apple.com
-experiments.apple.com
-f.c2r.ts.cdn.office.net
-fides-pol.apple.com
-firebase-settings.crashlytics.com
-fontfiles.googleapis.com
-fonts.googleapis.com
-fonts.gstatic.com
-fpinit.itunes.apple.com
-g0.gstatic.com
-g1.gstatic.com
-g2.gstatic.com
-g3.gstatic.com
-geetest.datasink.sensorsdata.cn
-gog.qtlglb.com
-gonglchuangl.net
-gongyichuangyi.net
-google-analytics-cn.com
-google-analytics.com
-googleadservices-cn.com
-googleadservices.com
-googleanalytics.com
-googleapis-cn.com
-googleapps-cn.com
-googleflights-cn.net
-googleoptimize-cn.com
-googleoptimize.com
-googlesyndication-cn.com
-googlesyndication.com
-googletagmanager-cn.com
-googletagmanager.com
-googletagservices-cn.com
-googletagservices.com
-googletraveladservices-cn.com
-googletraveladservices.com
-googlevads-cn.com
-gs-loc-cn.apple.com
-gs-loc.apple.com
-gsp10-ssl-cn.ls.apple.com
-gsp11-cn.ls.apple.com
-gsp12-cn.ls.apple.com
-gsp13-cn.ls.apple.com
-gsp4-cn.ls.apple.com
-gsp4-cn.ls.apple.com.edgekey.net.globalredir.akadns.net
-gsp5-cn.ls.apple.com
-gsp85-cn-ssl.ls.apple.com
-gspe11-2-cn-ssl.ls.apple.com
-gspe12-cn-ssl.ls.apple.com
-gspe19-2-cn-ssl.ls-apple.com.akadns.net
-gspe19-2-cn-ssl.ls.apple.com
-gspe19-cn-ssl.ls.apple.com
-gspe19-cn.ls-apple.com.akadns.net
-gspe19-cn.ls.apple.com
-gspe21-ssl.ls.apple.com
-gspe35-ssl.ls.apple.com
-gspe79-cn-ssl.ls.apple.com
-gspe85-cn-ssl.ls.apple.com
-gstatic-cn.com
-gstaticadssl.l.google.com
-gtm.oasisfeng.com
-guzzoni-apple-com.v.aaplimg.com
-guzzoni.apple.com
-guzzoni.smoot.apple.com
-hellofontpreview.oss-cn-beijing.aliyuncs.com
-hellowebfonts.oss-cn-beijing.aliyuncs.com
-hospital.pku.edu.cn
-i.pki.goog
-images-cn-8.ssl-images-amazon.com
-images-cn.ssl-images-amazon.com
-images.apple.com.edgekey.net.globalredir.akadns.net
-imasdk.googleapis.com
-inappcheck-cn.itunes-apple.com.akadns.net
-inappcheck-lb.itunes-apple.com.akadns.net
-inappcheck.itunes.apple.com
-init-kt.apple.com
-init-p01md-lb.push-apple.com.akadns.net
-init-p01md.apple.com
-init-p01st-lb.push-apple.com.akadns.net
-init-p01st.push.apple.com
-init-s01st-lb.push-apple.com.akadns.net
-init-s01st.push.apple.com
-init.ess.apple.com
-init.gc-lb.apple.com.akadns.net
-init.gc.apple.com
-init.itunes.apple.com
-iosapps.itunes.apple.com
-iosapps.itunes.g.aaplimg.com
-ipcdn.apple.com
-iphone-ld.apple.com
-iphone-ld.origin-apple.com.akadns.net
-is-ssl.mzstatic.com-cn-lb.itunes-apple.com.akadns.net
-is1-ssl.mzstatic.com
-is1.mzstatic.com
-is2-ssl.mzstatic.com
-is2.mzstatic.com
-is3-ssl.mzstatic.com
-is3.mzstatic.com
-is4-ssl.mzstatic.com
-is4.mzstatic.com
-is5-ssl.mzstatic.com
-is5.mzstatic.com
-itacademy.download.prss.microsoft.com
-itacademyuat.download.prss.microsoft.com
-itunes-apple.com.akadns.net
-itunes.apple.com
-itunesconnect.apple.com
-izattime.qcomgeo2.com
-js-cdn.music.apple.com
-km.support.apple.com
-ksn-cinfo-geo.kaspersky-labs.com
-ksn-cinfo.geoksn.kaspersky.com
-ksn-crypto-info-geo.kaspersky-labs.com
-ksn-crypto-kas-geo.kaspersky-labs.com
-ksn-crypto-tcert-geo.kaspersky-labs.com
-ksn-crypto-url-geo.kaspersky-labs.com
-ksn-crypto-verdict-geo.kaspersky-labs.com
-ksn-crypto-wifiplus-geo.kaspersky-labs.com
-ksn-crypto-wifiplus.geoksn.kaspersky.com
-ksn-dc1-cert.geoksn.kaspersky.com
-ksn-dc1-file.geoksn.kaspersky.com
-ksn-dc1.geoksn.kaspersky.com
-ksn-file-geo.kaspersky-labs.com
-ksn-file.geoksn.kaspersky.com
-ksn-info-geo.kaspersky-labs.com
-ksn-info.geoksn.kaspersky.com
-ksn-kas.geoksn.kaspersky.com
-ksn-mdr.geoksn.kaspersky.com
-ksn-tcert-geo.kaspersky-labs.com
-ksn-tcert.geoksn.kaspersky.com
-ksn-url-geo.kaspersky-labs.com
-ksn-url.geoksn.kaspersky.com
-ksn-verdict-geo.kaspersky-labs.com
-ksn-verdict.geoksn.kaspersky.com
-lex.download.prss.microsoft.com
-lexuat.download.prss.microsoft.com
-lv.queniujq.cn
-maps.apple.com
-mbs.download.prss.microsoft.com
-mdr.ksn.kaspersky-labs.com
-mensura.cdn-apple.com
-mesu-cdn.apple.com.akadns.net
-mesu-china.apple.com.akadns.net
-mesu.apple.com
-misc-assets.itunes.apple.com
-ml.cdn-apple.com
-moocs.unipus.cn
-mpnbenefits.download.prss.microsoft.com
-mpnbenefitsrtl.download.prss.microsoft.com
-mpnbenefitsrtluat.download.prss.microsoft.com
-msdn.download.prss.microsoft.com
-msdprod-ad.download.prss.microsoft.com
-msproduct.download.prss.microsoft.com
-music.apple.com
-musicstatus.music.apple.com
-mvod.itunes.apple.com
-myapp.itunes.apple.com
-myvs.download.prss.microsoft.com
-np-edge.itunes.apple.com
-ntp.aliyun.com
-ntp.tencent.com
-ntp1.aliyun.com
-ntp1.tencent.com
-ntp2.aliyun.com
-ntp2.tencent.com
-ntp3.aliyun.com
-ntp3.tencent.com
-ntp4.aliyun.com
-ntp4.tencent.com
-ntp5.aliyun.com
-ntp5.tencent.com
-ntp6.aliyun.com
-ntp7.aliyun.com
-o.pki.goog
-ocsp.apple.com
-ocsp.pki.goog
-ocsp2.apple.com
-oemsoc.download.prss.microsoft.com
-oemsocuat.download.prss.microsoft.com
-officecdn.microsoft.com
-officemkt.download.prss.microsoft.com
-officemktuat.download.prss.microsoft.com
-opencourse.pku.edu.cn
-oscdn.apple.com
-oscdn.origin-apple.com.akadns.net
-osrelease.download.prss.microsoft.com
-osxapps.itunes.apple.com
-osxapps.itunes.g.aaplimg.com
-p00.upd.kaspersky.com
-p01.upd.kaspersky.com
-p02.upd.kaspersky.com
-p03.upd.kaspersky.com
-p04.upd.kaspersky.com
-p05.upd.kaspersky.com
-p06.upd.kaspersky.com
-p07.upd.kaspersky.com
-p08.upd.kaspersky.com
-p09.upd.kaspersky.com
-p1-juejin.byteimg.com
-p10.upd.kaspersky.com
-p11.upd.kaspersky.com
-p12.upd.kaspersky.com
-p13.upd.kaspersky.com
-p14.upd.kaspersky.com
-p15.upd.kaspersky.com
-p16.upd.kaspersky.com
-p17.upd.kaspersky.com
-p18.upd.kaspersky.com
-p19.upd.kaspersky.com
-p2-juejin.byteimg.com
-p3-juejin.byteimg.com
-p3-novel.byteimg.com
-p4-juejin.byteimg.com
-p5-juejin.byteimg.com
-p6-juejin.byteimg.com
-p6-novel.byteimg.com
-p7-juejin.byteimg.com
-p8-juejin.byteimg.com
-p9-juejin.byteimg.com
-pagead-googlehosted.l.google.com
-pancake.apple.com
-pba0.apple.com
-pd-nk.itunes.apple.com
-pd.itunes.apple.com
-performanceparameters.googleapis.com
-pki-goog.l.google.com
-play-edge.itunes.apple.com
-play.itunes.apple.com
-play.music.apple.com
-podcasts.apple.com
-podcasts.itunes.apple.com
-probe.siri.apple.com
-prod-controlbe.floonet.goog
-prod-databe.floonet.goog
-prod-support.apple-support.akadns.net
-prod.databe.floonet.goog
-publicassets.cdn-apple.com
-qiao-cn.com
-qpx.googleflights.net
-recaptcha-cn.net
-recaptcha.net
-redirector.bdn.dev
-redirector.c.chat.google.com
-redirector.c.mail.google.com
-redirector.c.pack.google.com
-redirector.c.play.google.com
-redirector.c.youtubeeducation.com
-redirector.gcpcdn.gvt1.com
-redirector.gvt1.com
-redirector.offline-maps.gvt1.com
-redirector.snap.gvt1.com
-redirector.xn--ngstr-lra8j.com
-refresh-bkg.activation-v2.kaspersky.com
-rsm.download.prss.microsoft.com
-s.mzstatic.com
-s00.upd.kaspersky.com
-s01.upd.kaspersky.com
-s02.upd.kaspersky.com
-s03.upd.kaspersky.com
-s04.upd.kaspersky.com
-s05.upd.kaspersky.com
-s06.upd.kaspersky.com
-s07.upd.kaspersky.com
-s08.upd.kaspersky.com
-s09.upd.kaspersky.com
-s1.mzstatic.com
-s10.upd.kaspersky.com
-s11.upd.kaspersky.com
-s12.upd.kaspersky.com
-s13.upd.kaspersky.com
-s14.upd.kaspersky.com
-s15.upd.kaspersky.com
-s16.upd.kaspersky.com
-s17.upd.kaspersky.com
-s18.upd.kaspersky.com
-s19.upd.kaspersky.com
-s2.mzstatic.com
-s3.mzstatic.com
-s4.mzstatic.com
-s5.mzstatic.com
-safebrowsing-cache.google.com
-safebrowsing.googleapis.com
-sdx.microsoft.com
-se-edge.itunes.apple.com
-se2.itunes.apple.com
-search.itunes.apple.com
-seed-sequoia.siri.apple.com
-seed-swallow.siri.apple.com
-seed.siri.apple.com
-sequoia.apple.com
-service.urchin.com
-sf-api-token-service.itunes.apple.com
-sh-pod2-smp-device.apple.com
-shazam-insights.cdn-apple.com
-shell.cdn.office.net
-smp-device-content.apple.com
-software.download.prss.microsoft.com
-sp.itunes.apple.com
-speedysub.music.apple.com
-ss.bjmu.edu.cn
-ssl-google-analytics.l.google.com
-ssl.gstatic.com
-staging-controlbe.floonet.goog
-staging-databe.floonet.goog
-staging.databe.floonet.goog
-static.gc.apple.com
-statics.teams.cdn.office.net
-status.alibabacloud.com
-stocks-sparkline-lb.apple.com.akadns.net
-stocks-sparkline.apple.com
-store.apple.com
-store.apple.com.edgekey.net
-store.apple.com.edgekey.net.globalredir.akadns.net
-store.storeimages.apple.com.akadns.net
-store.storeimages.cdn-apple.com
-storecorefulfillment.download.prss.microsoft.com
-storeedge.microsoft.com
-storeedgefd.dsx.mp.microsoft.com
-streamingaudio.itunes.apple.com
-study.163.com
-su.itunes.apple.com
-support-china.apple-support.akadns.net
-support.apple.com
-surface.download.prss.microsoft.com
-surface.downloads.prss.microsoft.com
-swallow-apple-com.v.aaplimg.com
-swallow.apple.com
-swcatalog-cdn.apple.com.akadns.net
-swcatalog.apple.com
-swcdn.apple.com
-swcdn.g.aaplimg.com
-swdist.apple.com
-swdist.apple.com.akadns.net
-swscan-cdn.apple.com.akadns.net
-swscan.apple.com
-sylvan.apple.com
-sync.itunes.apple.com
-tac.googleapis.com
-tf-feedback.itunes.apple.com
-time.amazonaws.cn
-time.izatcloud.net
-time.xtracloud.net
-tj-pod1-smp-device.apple.com
-tj-pod2-smp-device.apple.com
-tj-pod3-smp-device.apple.com
-tools.google.com
-universal-activity-service.itunes.apple.com
-update.crashlytics.com
-update.googleapis.com
-updates-http.cdn-apple.com
-updates-http.cdn-apple.com.akadns.net
-updates.cdn-apple.com
-upp.itunes.apple.com
-valid.apple.com
-valid.origin-apple.com.akadns.net
-vlportal.download.prss.microsoft.com
-volic.download.prss.microsoft.com
-vscode.download.prss.microsoft.com
-vz.download.prss.microsoft.com
-wear.googleapis.com
-weather-data.apple.com
-weather-data.apple.com.akadns.net
-weather-map.apple.com
-weather-map2.apple.com
-weatherkit.apple.com
-windbg.download.prss.microsoft.com
-www-google-analytics.l.google.com
-www-googletagmanager.l.google.com
-www.apple.com
-www.apple.com.edgekey.net.globalredir.akadns.net
-www.destinationurl.com
-www.entrust.cn
-www.gstatic.com
-www.pxcc.com
-www.recaptcha-cn.net
-www.recaptcha.net
-www.support.apple.com
-xp.apple.com
-xtratime.qcomgeo2.com
-xz.pphimalayanrt.com
0.zone
00.net
000.link
000000.net
0000001.xin
+00000qpqp00000.com
0000550xtz2.shop
0000552bb0.shop
0000552bb1.shop
@@ -567,6 +15,7 @@ xz.pphimalayanrt.com
0001.xin
000114.com
00012023.com
+0001700.xin
0002.xin
0003399xtz1.shop
0003399xtz2.shop
@@ -632,10 +81,10 @@ xz.pphimalayanrt.com
0044696.com
004678.com
004837963.xyz
-0049.com
0056.com
00563.com
0058.com
+00615.net
0066.com
00665ba1f014ee0e.com
007.pub
@@ -652,11 +101,11 @@ xz.pphimalayanrt.com
008.bet
00817.com
00847.xin
+0086l.com
0086org.com
008n0l12145.xin
008sport.com
009.xin
-009513.xyz
009y.com
00bx.com
00cdn.com
@@ -666,14 +115,19 @@ xz.pphimalayanrt.com
00ef6bce51ccd47d.com
00fkh408382.xin
00hh.com
+00i1xg5s3s.xin
00ic.com
00it.net
00lfoo16454.xin
00o5nm18258.xin
+00plri7b.xin
+00r9fexyub.xin
00shu.com
00shu.la
00tera.com
00tu.com
+00ukkgtc5.xin
+00ve1bg9.xin
00wv.com
00xu.com
01-cf.com
@@ -681,6 +135,8 @@ xz.pphimalayanrt.com
010123456.com
010155.net
0101cdn.com
+0101e.com
+0101game.online
0101semi.com
0101ssd.com
010203.com
@@ -706,6 +162,7 @@ xz.pphimalayanrt.com
011.xin
011a4460e391a7f4.com
0123.xin
+0123401234.com
0123456789.com
0123f.xin
0127.xin
@@ -727,7 +184,9 @@ xz.pphimalayanrt.com
018.xin
019.xin
01975cf969f20191.com
+019jb0sc.xin
01a7d69861013.beer
+01be6bfabbd3024a.com
01bzw.us
01bzw.xyz
01caijing.com
@@ -742,6 +201,7 @@ xz.pphimalayanrt.com
01isp.net
01jinhua.com
01jzw.com
+01p.com
01p6xc08451.xin
01pxzw0737.xin
01rv.com
@@ -749,6 +209,7 @@ xz.pphimalayanrt.com
01studio.cc
01teacher.com
01wb.com
+01x13k30.xin
01yo.com
01yuanma.com
01yun.com
@@ -801,6 +262,7 @@ xz.pphimalayanrt.com
021tk.com
021van.com
021wfz.com
+021ye.com
021yongzhuo.com
021zhuang.com
021zsb.com
@@ -810,11 +272,13 @@ xz.pphimalayanrt.com
022china.com
022meishu.com
022s.com
+022shui.com
022sunny.com
022v.com
023086.com
023bc5v99h.xin
023cj.com
+023cq.cc
023dir.com
023dns.com
023fyy.com
@@ -854,6 +318,7 @@ xz.pphimalayanrt.com
025tuanjian.com
025xl.com
025zp.com
+0264032a252fcf53.com
026hao.com
026idc.com
0270.cc
@@ -900,6 +365,7 @@ xz.pphimalayanrt.com
028office.com
028px.com
028pxw.com
+028sh.com
028sjkj.com
028yyyy.com
029200.com
@@ -914,6 +380,7 @@ xz.pphimalayanrt.com
029xxw.com
029zp.com
02b5c31e511032.beer
+02bjmbzoat.xin
02d.com
02fb56599d46ae7d.com
02hm.com
@@ -922,12 +389,14 @@ xz.pphimalayanrt.com
02lu.com
02shu.com
02tf6d18201.xin
+02u21a0lka.xin
02wan.com
02wq.com
02yc.com
02z97426404.xin
030.xin
030303.com
+030hag5r91.xin
030mall.com
030yo.xin
0310it.com
@@ -977,6 +446,8 @@ xz.pphimalayanrt.com
037lcq08115.xin
038d0addd10241.beer
0391fc.com
+03964.com
+039r93jevs.xin
03b2ef6fe1960045.com
03bcyh2069.xin
03cl.xin
@@ -985,7 +456,9 @@ xz.pphimalayanrt.com
03dq.com
03f99b91610271.beer
03fcw.com
+03fugu.xin
03k.org
+03m7pa17g.xin
03supin.com
03tc.com
03u.com
@@ -1014,8 +487,10 @@ xz.pphimalayanrt.com
0434.cc
0437.com
043j8118366.xin
+0444.xin
0452e.com
0453.com
+0453bc39456389ff.com
0454.cc
0455tv.com
0455zd.com
@@ -1026,10 +501,13 @@ xz.pphimalayanrt.com
0472.com
0476vip.com
048.xin
+048o9ml5x3.xin
049.com
049.xin
04a1to24453.xin
04adca98c1022.beer
+04apr5bl.xin
+04be22jjkv.xin
04c01e0ad4c891d7.com
04db11e1ea504cf2.com
04ip.com
@@ -1087,6 +565,7 @@ xz.pphimalayanrt.com
0535-0411.com
0535cp.com
0535you.com
+05366196.com
0536job.net
0536qz.com
0536weixin.com
@@ -1096,6 +575,7 @@ xz.pphimalayanrt.com
053c.com
0543bbs.com
054400.com
+0545.xin
0546fdc.com
0550.com
055110.com
@@ -1132,6 +612,7 @@ xz.pphimalayanrt.com
0574bbs.com
0574nbjg.com
0575.host
+057555.com
0575bbs.com
0575jb.com
0575life.com
@@ -1182,8 +663,11 @@ xz.pphimalayanrt.com
05idc.com
05info.com
05ja1g16464.xin
+05n2azbp.xin
05p9uj1253.xin
+05rjxqsp5i.xin
05sun.com
+05vauwva3.xin
05vm.com
05wan.com
05wang.com
@@ -1192,7 +676,9 @@ xz.pphimalayanrt.com
0605.com
0609.com
061.xin
+0616a9dbe68fac9c.com
0618.com
+062wfly8z.xin
063108.com
0631rc.com
0632idc.com
@@ -1213,13 +699,17 @@ xz.pphimalayanrt.com
06681.com
0668gz.com
067555.com
+068rolbmiz.xin
069.xin
0693f784d1023.beer
06abc.com
+06b8ziwxjf.xin
06climate.com
06ee1860c1015.beer
06game.com
+06ik7744n.xin
06ps.com
+06z8mzlma.xin
07.cc
07.la
070725.xyz
@@ -1227,6 +717,7 @@ xz.pphimalayanrt.com
07073h5.com
07073vr.com
0708.com
+0712f.com
0712fang.com
0714.com
0714110.xin
@@ -1242,6 +733,7 @@ xz.pphimalayanrt.com
0722fc.com
0724c.com
0725.com
+0728f.com
0730188.com
0730news.com
073122.com
@@ -1295,12 +787,14 @@ xz.pphimalayanrt.com
0755cts.com
0755fm.com
0755hao.com
+0755haoyu.com
0755hj.com
0755hz.com
0755jz.net
0755rc.com
0755sszx.net
0755yf.net
+0755zb.com
0756fang.com
0756idc.com
0756tong.com
@@ -1331,6 +825,8 @@ xz.pphimalayanrt.com
0769sx.com
0769web.net
076lvo.xyz
+076t0uhtl9.xin
+077.xin
0771.tv
07712008.com
07715555555.com
@@ -1340,6 +836,7 @@ xz.pphimalayanrt.com
0772fang.com
0772job.com
07743988888.com
+07752267777.com
07754255555.com
0775fcw.com
0775jzw.com
@@ -1372,12 +869,16 @@ xz.pphimalayanrt.com
07bmss01426.xin
07cn.com
07cn.net
+07e12xs2io.xin
07f0798569af4d70.com
07fe8668211012.beer
07fea775dffd96d4.com
07jfrv01301.xin
07k6np0378.xin
07kacm20339.xin
+07net01.com
+07ozikk8w3.xin
+07ren.com
07sh.com
07swz.com
07u82t16391.xin
@@ -1396,6 +897,7 @@ xz.pphimalayanrt.com
0817tv.com
0818tuan.com
082.xin
+0820.xin
0827ug.com
0831.app
0831home.com
@@ -1408,7 +910,6 @@ xz.pphimalayanrt.com
08424b74011032.beer
0843d5944883e752.com
085.com
-085432.cfd
0857job.com
0859qp.com
0859sy.com
@@ -1435,6 +936,7 @@ xz.pphimalayanrt.com
08zf.com
0904.cool
090expo.com
+0912158.com
0912app.com
0912fdj.com
0913ss.com
@@ -1481,25 +983,38 @@ xz.pphimalayanrt.com
09e12x16370.xin
09ea354bd9542ba7.com
09game.com
-09izf.com
+09iatm1z.xin
09lc5d12399.xin
+09mhncdop.xin
+09pj75gs09.xin
09pzq024240.xin
+09rrqh7s62.xin
09shijue.com
+09vvme1l.xin
09xx5a24352.xin
+09z7wy3k.xin
+0a0fx7vz1l.xin
0a2d.com
0a2g5a04175.xin
0a32mt201.xin
0a64qa16273.xin
0a6ri001390.xin
+0a8a112e8bb5045e.com
+0acrdtuhed.xin
0ag8kg01470.xin
0ape4t08268.xin
+0aq4hxqs.xin
+0ax2rjo3od.xin
0axoa626262.xin
0b145c21210e933c.com
0b4xq91061.xin
0b6e0659811021.beer
0b8ky116130.xin
+0barrfplp.xin
+0bb261a6a46d766a.com
0bb875c361022.beer
0bbd0e535194e7f7.com
+0bddiq9a0q.xin
0bdfe52341114.beer
0bef0493410272.beer
0bjasw18181.xin
@@ -1515,10 +1030,12 @@ xz.pphimalayanrt.com
0car0.com
0cname.com
0cokid18352.xin
+0cq9hzrz.xin
0cqpj504251.xin
0d.work
0d06e627dbe6654a.com
0d263788316151cb.com
+0d3lnlkylu.xin
0d49f571e1017.beer
0daily.com
0ddvic16247.xin
@@ -1538,37 +1055,58 @@ xz.pphimalayanrt.com
0e76427381016.beer
0e7o6216306.xin
0easy.com
+0ecff3e99dce5b33.com
0ee18d4c192243b3.com
0efef58c41014.beer
0egh661666.xin
0eghje0112.xin
0ek4sg08401.xin
0emvvs04229.xin
+0en6hz2u.xin
+0ew4p6fb1.xin
0f0lj908444.xin
0f602h26461.xin
0f63e6089d80dffe.com
+0fbcjwr4x2.xin
+0fbs03i1i.xin
+0fc45y3sbr.xin
0fe5d43561011.beer
0fe7e0a941011.beer
+0fep69v3.xin
0fj5qx12422.xin
0fl1j80347.xin
0flnis04328.xin
+0fnkjai21b.xin
+0g13wzk4pj.xin
0g1s.com
+0g5q5hrcbo.xin
+0g9l08zbsc.xin
+0ggt51agn0.xin
0ggw7u16311.xin
+0gklqj5hal.xin
+0gmu6zwf87.xin
+0gps2ppnu9.xin
+0gtsz9jw.xin
0gyyc924408.xin
0h3lfj12415.xin
-0hax7.app
+0hbgmcs5gb.xin
0hgame.com
+0hl5ntdm0i.xin
+0hq7006r07.xin
0hzxwa2471.xin
0i-i0.com
0i6js716143.xin
+0i71r4qg.xin
0im9f31630.xin
0iq8q8163.xin
0iwgt324206.xin
0j1oul247.xin
0j3h9616299.xin
+0j4wdc8bs8.xin
0j783008494.xin
0jb520030.xin
0jl3h724403.xin
+0k2u4didtd.xin
0k6dm96.xin
0ka.com
0kee.com
@@ -1581,37 +1119,60 @@ xz.pphimalayanrt.com
0l7mqk1284.xin
0leb5s268.xin
0lircg1235.xin
+0lw1ib2sa.xin
+0lzamwtu.xin
0m7eaq04292.xin
0mbvyf1437.xin
0me14c18373.xin
+0mfbac1gsj.xin
0mfqi124198.xin
0mk9ht2449.xin
0moju716460.xin
0mrzee12192.xin
+0ms65u0s8t.xin
+0mu4f8xw0k.xin
0n469e12312.xin
+0n5hylf79s.xin
+0n663xtw.xin
0nc13z04356.xin
+0nelddmoha.xin
+0nk5dhsp.xin
+0nnk3nxyu3.xin
+0npkjexon.xin
+0nqxhrpw30.xin
0nw2sq2622.xin
+0nzk4t3lrn.xin
0o1djo20199.xin
0o6wqk24113.xin
0o8lgn20118.xin
0obhhr12439.xin
0okm1a12139.xin
0olgbi04133.xin
+0olut8.com
0oo70c26213.xin
0or1h40327.xin
-0p.ink
0p21iz0729.xin
+0p2wrugphn.xin
0p4ips24224.xin
+0p5i7dxr6y.xin
+0p901yay.xin
0plpxp1898.xin
0poho720169.xin
0ptf4g04404.xin
+0pxrom71q8.xin
0q5stv04123.xin
0q9y3z18365.xin
+0qd9dnzon9.xin
0qm88r0891.xin
+0qqczcn8l8.xin
+0r8ag0y7di.xin
+0range5.xin
0rg.xin
0rgojh0146.xin
+0rgu7ha3p.xin
0rl.cc
0rljmz01274.xin
+0rz.ltd
0s73o26p67.com
0s8s.com
0sm.com
@@ -1626,6 +1187,7 @@ xz.pphimalayanrt.com
0xffff.one
0xffffff.org
0xiao.com
+0xjqlun2.work
0xsky.com
0xue.com
0z.gs
@@ -1652,6 +1214,7 @@ xz.pphimalayanrt.com
10000shequ.com
10000yao.com
10001wan.com
+100024.xyz
1000360.com
10006.info
1000coco.com
@@ -1704,6 +1267,7 @@ xz.pphimalayanrt.com
100credit.com
100cup.com
100d3.com
+100data.com
100du.com
100e.com
100eby.com
@@ -1754,9 +1318,11 @@ xz.pphimalayanrt.com
100tv.com
100txy.com
100vr.com
+100wa.com
100web.store
100weidu.com
100wsanguo.com
+100xgj.com
100xhs.com
100xiao.com
100xin.com
@@ -1770,6 +1336,7 @@ xz.pphimalayanrt.com
100zp.com
101.com
10100.com
+10100000.com
10101111.com
10101111cdn.com
1010gamer.com
@@ -1778,7 +1345,6 @@ xz.pphimalayanrt.com
1010pic.com
1010sh.com
1010t.com
-101212.com
101505.com
10155.com
1015600.com
@@ -1788,6 +1354,7 @@ xz.pphimalayanrt.com
101jiajiao.com
101weiqi.com
101yx.com
+1024.ink
1024fuli.com
1024g.com
1024ie.com
@@ -1839,6 +1406,7 @@ xz.pphimalayanrt.com
10sea.com
10soo.com
10tianqi.com
+10urzr3jk.icu
10yan.com
110.com
11000011.com
@@ -1936,6 +1504,7 @@ xz.pphimalayanrt.com
115meta.com
115vod.com
115wg.com
+115zb.com
1163.com
1166.com
1168.tv
@@ -2017,7 +1586,7 @@ xz.pphimalayanrt.com
120spd.com
120sun.com
120x.net
-121034.com
+120ym.com
121121.net
1212.com
12120.net
@@ -2058,7 +1627,6 @@ xz.pphimalayanrt.com
123278.com
123294.com
123295.com
-123312.com
12333.com
12333.org
12333si.com
@@ -2096,7 +1664,6 @@ xz.pphimalayanrt.com
123684.com
12369zb.com
123773.com
-123795.com
123842.com
123860.com
123865.com
@@ -2109,8 +1676,6 @@ xz.pphimalayanrt.com
123baofeng.com
123bo.com
123boligang.com
-123clouddisk.com
-123clouddrive.net
123du.cc
123ems.com
123fc.com
@@ -2131,6 +1696,7 @@ xz.pphimalayanrt.com
123ox.com
123pan.com
123panpay.com
+123pans.com
123qibu.com
123qy.com
123shopee.com
@@ -2241,8 +1807,10 @@ xz.pphimalayanrt.com
1360.com
136136.com
13636.com
+1366.com
13667703999.com
136bet.app
+136fc.com
136pic.com
13707.net
137139.com
@@ -2250,7 +1818,6 @@ xz.pphimalayanrt.com
13726936178.com
137365.com
1374.com
-137542.club
1377.com
13793085458.com
13793277711.com
@@ -2263,6 +1830,7 @@ xz.pphimalayanrt.com
1380898.com
138379.com
138job.com
+138pet.com
138top.com
138vps.com
139.com
@@ -2297,6 +1865,7 @@ xz.pphimalayanrt.com
13xiaoshuo.com
13yx.com
140414.com
+1404c4ce1d63a0d7.com
1415926.com
1415926.mobi
141799c86c1ba267.com
@@ -2309,9 +1878,8 @@ xz.pphimalayanrt.com
146368.com
14776ac8e1022.beer
148-law.com
-148353.vip
+1488.com
148com.com
-149.com
14f99ce2609c0071.com
14hj.com
14play.net
@@ -2363,6 +1931,7 @@ xz.pphimalayanrt.com
15gg.com
15gift.com
15hr.com
+15hr.net
15job.com
15kuaixiu.com
15lu.com
@@ -2404,16 +1973,20 @@ xz.pphimalayanrt.com
163888.net
1639f577b1022.beer
163adl.com
+163cdn.com
163cms.com
163cn.link
163cn.tv
163cp.com
163cs.com
163fen.com
+163guangdong.com
163guoqi.com
163gz.com
+163henan.com
163hot.net
163hubei.com
+163hunan.com
163img.com
163jiasu.com
163k.cc
@@ -2431,7 +2004,6 @@ xz.pphimalayanrt.com
163qikanlunwen.com
163qiyukf.com
163wh.com
-163you.net
163yu.com
163yun.com
164580.com
@@ -2457,12 +2029,10 @@ xz.pphimalayanrt.com
166dns.com
16757.com
16768.com
-168.com
16816.com
168267xz.com
168338.com
16838.com
-1685188.com
1686888.com
1688.com
16885.com
@@ -2477,6 +2047,7 @@ xz.pphimalayanrt.com
1688s.com
1688tsw.com
1688zhuce.com
+16899168.com
168ad.cc
168auto.com
168chaogu.com
@@ -2487,6 +2058,7 @@ xz.pphimalayanrt.com
168job.com
168kaifu.com
168kk.com
+168kn.com
168lyq.com
168mlj.com
168moliao.com
@@ -2518,9 +2090,9 @@ xz.pphimalayanrt.com
16first.com
16game.net
16hyt.com
-16ik.com
16lao.com
16p.com
+16pic.com
16rd.com
16sucai.com
16type.com
@@ -2564,7 +2136,6 @@ xz.pphimalayanrt.com
173.com
173.hk
173.tv
-173183.com
1732.com
1732.net
17345.com
@@ -2651,6 +2222,7 @@ xz.pphimalayanrt.com
17bt.com
17byh.com
17c13ae4a36b8862.com
+17c8d205dbcbc534.com
17cdn.com
17ce.com
17chacha.com
@@ -2661,6 +2233,7 @@ xz.pphimalayanrt.com
17dawan.com
17dc.com
17ditu.com
+17dm.com
17donor.com
17dp.com
17duu.com
@@ -2685,6 +2258,7 @@ xz.pphimalayanrt.com
17gouwuba.com
17guagua.com
17gwx.com
+17haibao.com
17hc.com
17house.com
17hpl.com
@@ -2709,6 +2283,7 @@ xz.pphimalayanrt.com
17kss.com
17kuxun.com
17kxgame.com
+17kzy.com
17lai.site
17lewan.net
17lht.com
@@ -2822,7 +2397,6 @@ xz.pphimalayanrt.com
18023.com
18095.com
180disk.com
-180k.com
180qt.com
180yy.com
1811d2af81022.beer
@@ -2836,7 +2410,6 @@ xz.pphimalayanrt.com
181b5f7e71011.beer
181ps.com
181ue.com
-182.net
18251.org
18263.vip
182682.xyz
@@ -2868,6 +2441,7 @@ xz.pphimalayanrt.com
18856.com
188628.com
1888.com.mo
+18888.com
188api.com
188bifen.com
188bio.com
@@ -2882,6 +2456,7 @@ xz.pphimalayanrt.com
1892139.com
18937777777.com
18999666.xyz
+189cha.com
189che.com
189cube.com
189ebuy.com
@@ -2919,6 +2494,7 @@ xz.pphimalayanrt.com
18snf.com
18touch.com
18wk.com
+18yl.com
18zhongyao.com
18zhuanqian.com
18zp.com
@@ -2940,6 +2516,7 @@ xz.pphimalayanrt.com
191game.com
192ly.com
192sm.com
+1931.com
1934xjzy.com
1937china.com
1937cn.com
@@ -2951,7 +2528,6 @@ xz.pphimalayanrt.com
194nb.com
195155.com
195268032591463.icu
-1958xy.com
195idc.com
196b7adb23969e39.com
196g.com
@@ -2963,7 +2539,6 @@ xz.pphimalayanrt.com
19789.com
197924.com
19799.com
-198274.com
198358.com
19840423.com
198434.com
@@ -2983,7 +2558,6 @@ xz.pphimalayanrt.com
199508.com
199604.com
1997sty.com
-1998998.net
1998mall.com
1998r.com
1999year.com
@@ -3020,6 +2594,7 @@ xz.pphimalayanrt.com
1b0y8tocaz24.com
1b17.com
1b1tech.com
+1b22e3a337fe5542.com
1b3e11b2e88c6129.com
1baf107ed1014.beer
1boshu1.com
@@ -3039,7 +2614,6 @@ xz.pphimalayanrt.com
1chong.com
1cloudsp.com
1cno.com
-1cxb.com
1d0b8b3d1800debe.com
1d1d100.com
1d21653941c21219.com
@@ -3060,9 +2634,9 @@ xz.pphimalayanrt.com
1f6cd3ca611032.beer
1f71060e75b35349.com
1fangchan.com
-1fly.fun
1foo.com
1fooai.com
+1g31.com
1gaifang.com
1gbru.com
1gcat.com
@@ -3086,13 +2660,13 @@ xz.pphimalayanrt.com
1j1x.com
1jbest.com
1jiesong.com
+1jkbie336689.com
1ju.com
1juhao.com
1juzi.com
1k100.com
1k2k.com
1ka123.com
-1kanshu.cc
1kapp.com
1kcx.hk
1ke.net
@@ -3112,8 +2686,10 @@ xz.pphimalayanrt.com
1lou.com
1lzs.com
1m.net
+1m3d.com
1m85.com
1mall.com
+1maoshua.com
1mdoutian.com
1menjin.com
1mfg.com
@@ -3121,6 +2697,7 @@ xz.pphimalayanrt.com
1mishu.com
1mit.com
1mjz.com
+1mmbie336689.com
1mmed.com
1more.com
1mpi.com
@@ -3142,6 +2719,7 @@ xz.pphimalayanrt.com
1plas.com
1pm2.com
1ppt.com
+1pxs.com
1q2q.com
1qfa.com
1qia.com
@@ -3169,18 +2747,19 @@ xz.pphimalayanrt.com
1stchip.com
1styan.com
1szq.com
+1t.gs
1t1t.com
1tai.com
1tdw.com
1textile.com
-1tim.com
1ting.com
1tong.com
+1toon.com
1tu-design.com
1tu.com
+1uo9djbnsr.com
1uuc.com
1wang.com
-1wxyun.com
1x3x.com
1xinzulin.com
1xmb.com
@@ -3189,6 +2768,7 @@ xz.pphimalayanrt.com
1y2y.com
1yabc.com
1yangai.com
+1yaoda.com
1yb.co
1ycdn.com
1yd.me
@@ -3204,7 +2784,6 @@ xz.pphimalayanrt.com
1zhe.com
1zhengji.com
1zhixue.com
-1zidc.com
1zj.com
1zjob.com
1zu.com
@@ -3226,6 +2805,7 @@ xz.pphimalayanrt.com
2006q.com
20087.com
2008php.com
+2008red.com
2008zwe.com
20091222.com
200call.com
@@ -3253,9 +2833,9 @@ xz.pphimalayanrt.com
202014.xyz
202030.com
2022.work
+202271.xyz
2023.com
2023game.com
-20240828.xyz
2024qq.com
2025.net
202m.com
@@ -3269,7 +2849,12 @@ xz.pphimalayanrt.com
2080ly.com
2093hd.com
2099xs.com
+20e2554096acf2c6.com
20fl.com
+20images10.com
+20images21.com
+20images25.com
+20images7.com
20ju.com
20kf.com
20on.com
@@ -3279,6 +2864,7 @@ xz.pphimalayanrt.com
20xs.org
20xue.com
20xy.cc
+20yy.com
20z.com
21-sun.com
210189.com
@@ -3330,6 +2916,7 @@ xz.pphimalayanrt.com
21bowu.com
21bx.com
21cake.com
+21cbr.com
21cccc.com
21ccnn.com
21cd.com
@@ -3448,11 +3035,11 @@ xz.pphimalayanrt.com
226500.com
226531.com
226969.xyz
+226yzy.com
2280.com
2281wa.ren
2288.org
2288116ab4.shop
-2288job.com
228job.com
228tuchuang.com
229.com
@@ -3542,6 +3129,7 @@ xz.pphimalayanrt.com
23dns.com
23do.com
23du.com
+23e489f9600657c1.com
23e4cb2581013.beer
23img.com
23job.net
@@ -3550,6 +3138,7 @@ xz.pphimalayanrt.com
23luke.com
23mofang.com
23qb.com
+23qb.net
23qcw.com
23sk.com
23txt.com
@@ -3566,7 +3155,6 @@ xz.pphimalayanrt.com
23yy.com
23zw.com
24198ef3f855c8ff.com
-2424ph.com
24331.org
24335.org
246546.com
@@ -3574,10 +3162,11 @@ xz.pphimalayanrt.com
246ys.com
248.com
2481e.com
-248ker.com
248xyx.com
249m.com
+24av.com
24bb0cd0c3b8480d.com
+24dab50b3223e582.com
24geban.com
24haowan.com
24hmb.com
@@ -3587,12 +3176,13 @@ xz.pphimalayanrt.com
24maker.com
24money.com
24om.com
-24pay.sbs
+24shi.cc
24th.com
24timemap.com
24u7tos.com
250.cc
2500.tv
+25000li.com
2500city.com
2500sz.com
250340.com
@@ -3610,7 +3200,6 @@ xz.pphimalayanrt.com
254game.com
2551aa29811031.beer
255616.com
-25565.net
2559e5f081017.beer
25662zubo23739.com
256app.com
@@ -3622,8 +3211,8 @@ xz.pphimalayanrt.com
258ch.com
258en.com
258fuwu.com
-258jrs.com
258sd.com
+258weishi.com
258zw.com
25992.com
25az.com
@@ -3633,7 +3222,6 @@ xz.pphimalayanrt.com
25fe391eb68e3f9c.com
25game.com
25ku.com
-25mao.com
25nc.com
25pp.com
25q7ekcc67.com
@@ -3676,6 +3264,7 @@ xz.pphimalayanrt.com
266.la
266fbded61019.beer
266wan.com
+2671111.net
2677dl.com
2678.com
26785.org
@@ -3710,10 +3299,12 @@ xz.pphimalayanrt.com
277t.com
27813000.com
2789a91661019.beer
+278wan.com
279love.com
279tt.com
27al.com
27cat.com
+27d7c9e9b3a34696.com
27daili.com
27l.com
27tj.com
@@ -3736,6 +3327,7 @@ xz.pphimalayanrt.com
28715.vip
288idc.com
289.com
+2896.ro
2898.com
28ce6d14004bae01.com
28d4cc3671024.beer
@@ -3743,6 +3335,7 @@ xz.pphimalayanrt.com
28e4cd79f1023.beer
28eb96ed4da91317.com
28gl.com
+28gua.com
28ka.com
28khy.com
28qp.com
@@ -3776,6 +3369,7 @@ xz.pphimalayanrt.com
2a965464310251.beer
2agi.net
2ai2.com
+2amok.com
2apzhfa.xyz
2av7.com
2b079fbcd1009.beer
@@ -3785,6 +3379,7 @@ xz.pphimalayanrt.com
2bkw.com
2broear.com
2bulu.com
+2c5bf25c11b8dc3e.com
2c71b194031fc683.com
2c883aeffbeef6c7.com
2caipiao.com
@@ -3808,6 +3403,7 @@ xz.pphimalayanrt.com
2db3d5c761abe51b.com
2dcode.biz
2df.me
+2dffbc61dea7ca0a.com
2dfire.com
2dfire.info
2dmaker.com
@@ -3826,11 +3422,11 @@ xz.pphimalayanrt.com
2emai.com
2f.com
2f24ad2dc10261.beer
-2fa.vip
2facb31bb10272.beer
2fda37d4c10292.beer
2gdt.com
2gei.com
+2girls1finger.org
2google.com
2haha.com
2haitao.com
@@ -3868,17 +3464,16 @@ xz.pphimalayanrt.com
2mjob.com
2mould.com
2muslim.com
+2o.cx
2or3m.com
2p.biz
2p.com
2pcdn.com
-2ppt.com
2q10.com
2qsc.com
2qupu.com
2r3r.com
2rich.net
-2scdn.com
2sey.com
2sjc.com
2sonar.com
@@ -3892,20 +3487,23 @@ xz.pphimalayanrt.com
2umj.com
2urch0.info
2urg1y.info
+2urk3j.shop
2uroz.info
2v8d.com
2v9t3xf9z2.com
+2vfun.com
2w.com
2w.ma
2weima.com
-2weradf.xyz
2xiazai.com
2y9y.com
2ychem.com
2yq.org
+2yuanyy.com
2yup.com
2yx8.com
2zhan.com
+2zhk.com
2zimu.com
2zzt.com
3-3.me
@@ -3940,13 +3538,14 @@ xz.pphimalayanrt.com
3062d65271020.beer
306t.com
3072ccba588e48d0.com
+308.app
308.tv
+30888.com
3099.net
30aitool.com
30c.org
30cgy.com
30daydo.com
-30ds.com
30fun.com
30gaokao.com
30ka.com
@@ -3964,7 +3563,6 @@ xz.pphimalayanrt.com
310win.com
311.biz
311100.com
-311faka.com
311wan.com
312000.net
31260939.com
@@ -3972,7 +3570,6 @@ xz.pphimalayanrt.com
312green.com
313033.com
313515.com
-31423.com
314pay.com
315008.com
3150315.com
@@ -4073,6 +3670,7 @@ xz.pphimalayanrt.com
3269.org
32768k.net
327aa34f510311.beer
+3280.com
32800.com
3283773e9dc5cde5.com
3286.cc
@@ -4186,6 +3784,7 @@ xz.pphimalayanrt.com
33app.net
33bus.com
33erwo.com
+33fang.com
33ip.com
33iq.com
33lc.com
@@ -4203,6 +3802,7 @@ xz.pphimalayanrt.com
3419e2cbf10261.beer
341d88b04156e9d3.com
342200.com
+342jinbo.com
34347.com
345123.xyz
3454.com
@@ -4304,6 +3904,7 @@ xz.pphimalayanrt.com
360byd.com
360bzl.com
360caifu.com
+360cdn.com
360changshi.com
360che.com
360chezhan.com
@@ -4380,7 +3981,6 @@ xz.pphimalayanrt.com
360qyaq.com
360safe.com
360safedns.com
-360scdn.com
360shouji.com
360shouzhuan.com
360shuke.com
@@ -4407,6 +4007,7 @@ xz.pphimalayanrt.com
360tpcdn.com
360tres.com
360tuan.com
+360u9.com
360underwear.com
360uu.com
360vcloud.com
@@ -4457,9 +4058,9 @@ xz.pphimalayanrt.com
363322014.com
3636.tech
363635.com
-363faka.com
363u.com
364000.com
+365.com
365.hk
36500.com
36500.net
@@ -4544,16 +4145,17 @@ xz.pphimalayanrt.com
365vip.com
365world.com
365xiazai.com
+365xs.la
365xuet.com
365yarn.com
365yg.com
-365ym.com
365you.com
365yyf.com
365zhaopin.com
365zhuanrang.com
365zmw.com
365zsw.net
+3660bf60ab32baab.com
36612345.com
3663.com
366300.com
@@ -4594,14 +4196,12 @@ xz.pphimalayanrt.com
36kr.net
36krcdn.com
36krcnd.com
-36linkr.com
36pnes36t0qs.com
36qp.com
36rv3j3.shop
36ve.net
36yc.com
36zpp.com
-37.cc
37.com
37021.com
370fd.com
@@ -4631,6 +4231,7 @@ xz.pphimalayanrt.com
3761.com
3768.org
377466.com
+3774cd2332503d45.com
379.com
37937.com
3794b0fa67e5f83b.com
@@ -4648,6 +4249,7 @@ xz.pphimalayanrt.com
37game2.com
37gjw.com
37gogo.com
+37gowan.com
37hr.com
37k.com
37kx1.com
@@ -4674,6 +4276,7 @@ xz.pphimalayanrt.com
380871.com
38109222.com
3816.net
+3817.com
38198.org
381pk.com
3822edf4d1022.beer
@@ -4696,6 +4299,7 @@ xz.pphimalayanrt.com
38711.cc
38735.vip
388g.com
+3892222.com
38999h.vip
38a9018e44a7da0f.com
38b06119b10271.beer
@@ -4720,6 +4324,7 @@ xz.pphimalayanrt.com
393.com
3937.com
3939339.com
+394394.com
3949006e510272.beer
394afb34a1020.beer
39507037133f.icu
@@ -4736,6 +4341,7 @@ xz.pphimalayanrt.com
39amjs.com
39ask.net
39b86269e11031.beer
+39b8fe8f4c6f9dee.com
39bfe802d10292.beer
39center.com
39clean.com
@@ -4761,6 +4367,7 @@ xz.pphimalayanrt.com
3a2dc2bd21023.beer
3a2studio.com
3a4.net
+3a4b5c.com
3afbda6f11015.beer
3ait.com
3alv.com
@@ -4772,8 +4379,10 @@ xz.pphimalayanrt.com
3b1bm3f.shop
3b1bvrwc.info
3b1fcl.info
+3b1xgp.shop
3b2479faf10301.beer
3b2o.com
+3bag.ru
3bf.cc
3bfc4d6861010.beer
3bu.com
@@ -4785,6 +4394,7 @@ xz.pphimalayanrt.com
3c5a7b25910281.beer
3c6a1a5d01015.beer
3c9035c3bd9e7599.com
+3cb106206b814b15.com
3cf6c871511032.beer
3chongmen.com
3conline.com
@@ -4797,6 +4407,7 @@ xz.pphimalayanrt.com
3d-stereovision.com
3d2000.com
3d2848f7811042.beer
+3d503a99384e0d4c.com
3d66.com
3d7ce8a16c0f8781.com
3d9r.com
@@ -4838,6 +4449,7 @@ xz.pphimalayanrt.com
3dwhere.com
3dwwwgame.com
3dxt.com
+3dzyw.com
3e.net
3e089a2bd1011.beer
3e1f90ccd1016.beer
@@ -4863,7 +4475,9 @@ xz.pphimalayanrt.com
3fantizi.com
3fb762d23d09f297.com
3fc5960c0be056ce.com
+3fcl8.net
3fda.com
+3feb063cbf96bd40.com
3fzipper.com
3g-edu.org
3g368.com
@@ -4893,6 +4507,7 @@ xz.pphimalayanrt.com
3ins.net
3j3f.com
3jdh.com
+3jhuyu.com
3jidi.com
3jlm.com
3jrx.com
@@ -4906,6 +4521,7 @@ xz.pphimalayanrt.com
3kk.com
3kmq.com
3ko.com
+3kr.com
3kyi.com
3kzhushou.com
3labtest.com
@@ -4961,14 +4577,18 @@ xz.pphimalayanrt.com
3stl.com
3sunway.com
3swg.com
+3t3.org
3thiku.com
3tilabs.com
3tinkers.com
3tmall.com
3treesgroup.com
+3tstore.com
3u.com
+3ukkht3yn3.work
3unshine.com
3uol.com
+3us.com
3uww.cc
3uww.com
3v.do
@@ -4983,6 +4603,7 @@ xz.pphimalayanrt.com
3wyk.com
3x7.com
3xgd.com
+3xiaoniao.com
3xiazai.com
3xinhome.com
3y1.com
@@ -5029,6 +4650,7 @@ xz.pphimalayanrt.com
400332.com
40035.com
400388.com
+4006055885.com
4006216888.com
4006300457.com
4006339177.com
@@ -5064,7 +4686,6 @@ xz.pphimalayanrt.com
4008885818.com
4009.com
4009515151.com
-400980.com
4009991000.com
4009997658.com
400cx.com
@@ -5079,10 +4700,8 @@ xz.pphimalayanrt.com
400vv.com
400web.com
4020.la
-402faka.com
40407.com
404886.com
-404k.vip
404mzk.com
404wan.com
404youxi.com
@@ -5091,6 +4710,7 @@ xz.pphimalayanrt.com
4080517.com
408399.com
408399.net
+4087b09ee4632bb5.com
408cf42720d8be86.com
408ec542b10281.beer
409a1957110311.beer
@@ -5123,7 +4743,6 @@ xz.pphimalayanrt.com
41wan.com
41xt.com
420d586841024.beer
-4213.com
42144.com
421db96b91011.beer
42224b3c51016.beer
@@ -5146,6 +4765,7 @@ xz.pphimalayanrt.com
42how.com
42trip.com
42verse.shop
+430d6eba715dabb4.com
4311.com
432.com
432520.com
@@ -5166,6 +4786,7 @@ xz.pphimalayanrt.com
43803a8c410261.beer
4393ce88a10272.beer
4395e6c8b10291.beer
+4399-xyx.com
4399.com
4399.net
43999yx.com
@@ -5182,7 +4803,6 @@ xz.pphimalayanrt.com
4399inc.com
4399j.com
4399mail.com
-4399om.com
4399pk.com
4399sj.com
4399swf.com
@@ -5227,7 +4847,6 @@ xz.pphimalayanrt.com
44ff56d11fa53a9a.com
44h.co
44jj.com
-44nc.com
44pq.cc
44vs.com
4502512122531.icu
@@ -5263,11 +4882,13 @@ xz.pphimalayanrt.com
45yx.com
461000.net
462.com
+46245fb7d43c13a3.com
46412.com
46644.com
46721.org
46771313.com
46809.org
+46940.vip
46ab3da510d4ccaf.com
46cdn.vip
46d7940171014.beer
@@ -5320,14 +4941,11 @@ xz.pphimalayanrt.com
48cdn.vip
48hao.net
48log.com
-4901.com
-490186.com
491.com
4916a68576d64a34.com
492288.com
492f2622e64c138e.com
4930.com
-4933.com
49358.com
49363.com
4937711.com
@@ -5340,7 +4958,6 @@ xz.pphimalayanrt.com
497.com
498.net
499-img.com
-499333.xyz
499n.com
499youxi.com
49app.com
@@ -5371,7 +4988,6 @@ xz.pphimalayanrt.com
4c28539c4f10ad16.com
4c37ebc131010.beer
4c43edd99cd8bb40.com
-4c44.com
4c4866d8179d6f70.com
4c55033b91010.beer
4c645708fabd0e13.com
@@ -5398,7 +5014,9 @@ xz.pphimalayanrt.com
4f0b987b410311.beer
4f411973f14e0f10.com
4f61.com
+4f68340f5b6c21a9.com
4f89.com
+4f9bf1e673931484.com
4fang.net
4fd4969ff1022.beer
4fe55e9f6c893405.com
@@ -5422,6 +5040,7 @@ xz.pphimalayanrt.com
4kgood.com
4kgou.com
4kya.com
+4l.hk
4lzr.com
4ndwc.com
4o.org
@@ -5481,12 +5100,12 @@ xz.pphimalayanrt.com
5011.net
501h.com
501wan.com
-502.ai
50257e08d1015.beer
-502fakw.com
503118.com
50331.net
5033333.com
+503b2f379abaf979.com
+503error.com
505035.com
5054399.com
5054399.net
@@ -5494,7 +5113,6 @@ xz.pphimalayanrt.com
5066.com
506u5nf5j5.com
507c7d240b2eae97.com
-508.im
5087.com
508hdsys.com
508mallsys.com
@@ -5513,11 +5131,11 @@ xz.pphimalayanrt.com
50yu.com
50zera.com
50zw.co
-50zw.com
50zw.net
51-cf.com
51-jia.com
51-visa.com
+51.am
51.com
51.la
51.net
@@ -5612,6 +5230,7 @@ xz.pphimalayanrt.com
51802.com
5184.com
5184pass.com
+5185.cc
51864.com
51870.com
5188.com
@@ -5727,6 +5346,7 @@ xz.pphimalayanrt.com
51drv.com
51dugou.com
51dz.com
+51dzrc.com
51dzt.com
51dzw.com
51ean.com
@@ -5757,6 +5377,7 @@ xz.pphimalayanrt.com
51feitu.com
51feiyu.com
51fiber.net
+51finace.com
51findwork.com
51fl.com
51fpg.com
@@ -5765,6 +5386,7 @@ xz.pphimalayanrt.com
51fucai.com
51fund.com
51fxkj.com
+51fxzq.com
51fytx.com
51g3.com
51g3.net
@@ -5784,6 +5406,7 @@ xz.pphimalayanrt.com
51goods.vip
51google.com
51gouke.com
+51gowan.com
51gpt.com
51gran.com
51grb.com
@@ -5841,10 +5464,12 @@ xz.pphimalayanrt.com
51ixuejiao.com
51jb.com
51jiabo.com
+51jiang.com
51jianxie.com
51jiaoxi.com
51jiemeng.com
51jingying.com
+51jinkang.com
51jishu.com
51jiuhuo.com
51job.com
@@ -5859,18 +5484,20 @@ xz.pphimalayanrt.com
51julebu.com
51junde.com
51junshi.com
-51kandianshi.com
51kanmanhua.com
51kanong.com
51kaola.net
51kaowang.com
+51kaxun.com
51kehui.com
+51kf100.com
51kids.com
51kik.com
51kim.com
51kshen.com
51kt.com
51kuaizhuan.com
+51kupin.com
51kywang.com
51la.ink
51la.net
@@ -5887,7 +5514,6 @@ xz.pphimalayanrt.com
51lingji.com
51link.com
51liucheng.com
-51livetv.com
51losangeles.com
51lxrc.com
51lzr.com
@@ -5914,7 +5540,6 @@ xz.pphimalayanrt.com
51mokao.com
51mole.com
51moot.net
-51mowan.com
51mpa.net
51mrp.com
51msc.com
@@ -5935,12 +5560,12 @@ xz.pphimalayanrt.com
51photo.vip
51php.com
51piao.com
+51piaohua.com
51pibu.com
51pigai.com
51ping.com
51pinwei.com
51pla.com
-51poca.com
51pocket.com
51pocket.net
51poll.com
@@ -5949,6 +5574,7 @@ xz.pphimalayanrt.com
51poweron.com
51pptmoban.com
51psj.com
+51puer.com
51qc.com
51qc.net
51qianguo.com
@@ -6063,7 +5689,6 @@ xz.pphimalayanrt.com
51u.co
51uc.com
51ukf.com
-51usz.com
51vhost.net
51vimeo.com
51vip.biz
@@ -6071,7 +5696,6 @@ xz.pphimalayanrt.com
51vv.net
51vv2.com
51w.co
-51wan.com
51wangming.com
51wangpi.com
51wanquan.com
@@ -6144,6 +5768,7 @@ xz.pphimalayanrt.com
51ytg.com
51yuansu.com
51yuepin.com
+51yueqian.com
51yugou.com
51yund.com
51yundong.me
@@ -6160,6 +5785,7 @@ xz.pphimalayanrt.com
51zhi.com
51zhishang.com
51zhizhao.com
+51zhucai.com
51zjedu.com
51zjxm.com
51zmt.net
@@ -6179,7 +5805,6 @@ xz.pphimalayanrt.com
52.vip
520.com
520.net
-520.skin
520101.com
520520520520520.com
520730.com
@@ -6190,6 +5815,7 @@ xz.pphimalayanrt.com
520chs.com
520code.net
520diandu.com
+520gexing.com
520hello.com
520hhht.com
520homo.com
@@ -6213,7 +5839,6 @@ xz.pphimalayanrt.com
520yidui.com
520zc.com
520zg.net
-521000.com
5210601.com
52112.com
5211game.com
@@ -6258,6 +5883,7 @@ xz.pphimalayanrt.com
5277.com
527fgame.com
527ice.com
+527meeting.com
527ss.com
528045.com
5281.net
@@ -6294,6 +5920,7 @@ xz.pphimalayanrt.com
52cik.com
52ckd.com
52click.net
+52cmajor.com
52cnp.com
52cnw.net
52code.store
@@ -6311,7 +5938,10 @@ xz.pphimalayanrt.com
52dsy.com
52dtv.com
52dus.com
+52duzhe.com
+52dy.tv
52dyy.com
+52dzxy.com
52edns.com
52edy.com
52enku.com
@@ -6350,12 +5980,14 @@ xz.pphimalayanrt.com
52jiaozhou.com
52jiawei.com
52jingsai.com
+52jinhu.com
52jisu.com
52jj.net
52jrjy.com
52js8.com
52jscn.com
52jubensha.com
+52jxrc.com
52jxt.com
52kanxiaoshuo.com
52kd.com
@@ -6387,6 +6019,7 @@ xz.pphimalayanrt.com
52mvp.com
52nantong.net
52niuka.com
+52njl.com
52nyg.com
52pcfree.com
52photo.com
@@ -6404,6 +6037,7 @@ xz.pphimalayanrt.com
52qmct.com
52queji.com
52qumao.com
+52qupu.com
52ra3.com
52ranwen.net
52rd.com
@@ -6416,7 +6050,6 @@ xz.pphimalayanrt.com
52shici.com
52shipping.com
52shuw.cc
-52shuwang.com
52shuxue.com
52solution.com
52songshu.com
@@ -6465,9 +6098,9 @@ xz.pphimalayanrt.com
52yitian.com
52ykjob.com
52youbian.com
+52youju.com
52youpiao.com
52youtu.com
-52youzai.com
52yq.com
52yushi.com
52yuwan.com
@@ -6484,7 +6117,6 @@ xz.pphimalayanrt.com
52zy.com
5306.com
53155.vip
-53164836.com
531pool.com
532106.com
53233.org
@@ -6505,6 +6137,8 @@ xz.pphimalayanrt.com
537300.com
53797.vip
5385s.com
+538618.com
+538a9b8b890bff34.com
53920.net
539831.vip
5399.com
@@ -6515,7 +6149,6 @@ xz.pphimalayanrt.com
53dns.org
53ee.com
53info.com
-53inside.com
53iq.com
53kf.com
53miji.com
@@ -6543,6 +6176,7 @@ xz.pphimalayanrt.com
54268.com
5433.com
54391.com
+54406c82bf7d5705.com
5442.com
544521.xyz
544e5adac11012.beer
@@ -6561,6 +6195,7 @@ xz.pphimalayanrt.com
54doctor.net
54doctors.net
54dr.com
+54hcz.com
54heb.com
54im.com
54jkw.com
@@ -6598,7 +6233,6 @@ xz.pphimalayanrt.com
5525game.com
553356.com
55344.com
-5535678.xyz
554030cc.com
554488.com
554baad62c869a7b.com
@@ -6606,6 +6240,7 @@ xz.pphimalayanrt.com
55555.io
55555432.com
55555558.com
+5555622ab0.shop
5559000ab0.shop
5559000ab7.shop
555edu.net
@@ -6635,13 +6270,13 @@ xz.pphimalayanrt.com
5577937.com
5577943.com
5577956.com
-5577game.com
558.com
5588.tv
5588294.com
5588492.com
5588bet.com
558idc.com
+559.cc
55935.vip
5595.cc
5599.com
@@ -6704,6 +6339,7 @@ xz.pphimalayanrt.com
56711.com
567idc.com
568.com
+5684.com
5684t.net
56851.net
56885.net
@@ -6753,7 +6389,6 @@ xz.pphimalayanrt.com
56tim.com
56tj.com
56tv.org
-56tvc.com
56uu.com
56xiniao.com
56ye.net
@@ -6781,6 +6416,7 @@ xz.pphimalayanrt.com
57875.vip
579idc.com
57auto.com
+57bm.com
57class.net
57df3696bffd3eb4.com
57dp.com
@@ -6819,6 +6455,7 @@ xz.pphimalayanrt.com
58416.org
5858.com
5858xs.com
+58611.net
58620888.com
5866.com
5867yh.com
@@ -6833,7 +6470,6 @@ xz.pphimalayanrt.com
588tao.com
588yw.com
588z.com
-58976ghg.com
5898yun.com
58antenna.com
58auv.com
@@ -6889,6 +6525,7 @@ xz.pphimalayanrt.com
58wuji.com
58xinghuo.com
58xinrui.com
+58xs.com
58xs.la
58xueche.com
58xuexi.com
@@ -6896,6 +6533,7 @@ xz.pphimalayanrt.com
58youtui.com
58youxi.com
58yuesao.com
+58z.net
59.com
5909.net
590m.com
@@ -6910,7 +6548,6 @@ xz.pphimalayanrt.com
591adb.com
591con.com
591hx.com
-591ll.com
591master.com
591moto.com
591moto.net
@@ -6928,7 +6565,6 @@ xz.pphimalayanrt.com
5945i.com
595.bet
595.cc
-5950380.cc
59519.com
595818.com
5959.vip
@@ -6958,6 +6594,7 @@ xz.pphimalayanrt.com
59dead1ce10301.beer
59dun.com
59f086f4910311.beer
+59f35373bf3f8e7d.com
59ff599661017.beer
59hi.com
59iedu.com
@@ -6965,6 +6602,7 @@ xz.pphimalayanrt.com
59jt.com
59med.com
59ni.com
+59pk.net
59rj.com
59store.com
59w.net
@@ -6977,6 +6615,7 @@ xz.pphimalayanrt.com
5a828d12510272.beer
5a8878b99c8f9160.com
5a8a3d1d111021.beer
+5a9bf3726d2b09fa.com
5aa212657a354b3e.com
5aaa.com
5acbd.com
@@ -7008,8 +6647,10 @@ xz.pphimalayanrt.com
5ce.com
5ce08adc68995a7a.com
5ceimg.com
+5cgo.com
5cpod.com
5d.ink
+5d116d676087d0e8.com
5d170bdbce0cbe9b.com
5d2ede2.com
5d6d.com
@@ -7044,6 +6685,7 @@ xz.pphimalayanrt.com
5f36b4f39ba574b7.com
5f52903c110251.beer
5f69826526db4f44.com
+5f9e6b1603f69b9b.com
5fa26ed6d1024.beer
5fen.com
5fun.com
@@ -7054,7 +6696,6 @@ xz.pphimalayanrt.com
5gjoy.com
5guanjianci.com
5gwan.com
-5gxcx.net
5gxsd.com
5gxt.com
5gy.com
@@ -7116,6 +6757,7 @@ xz.pphimalayanrt.com
5iucn.com
5iweix.com
5iximai.com
+5ixuexiwang.com
5iyoule.com
5iyq.com
5iyuyan.com
@@ -7130,9 +6772,11 @@ xz.pphimalayanrt.com
5k5m.com
5kaixin.net
5kbox.com
+5kcrm.com
5kcrm.net
5kda.com
5khouse.com
+5kmw.com
5kwuke.com
5lanren.com
5lu.com
@@ -7143,6 +6787,8 @@ xz.pphimalayanrt.com
5nnj.com
5o.com
5ooq.com
+5opzl.com
+5opzl.net
5pao.com
5pb.net
5pk.com
@@ -7155,6 +6801,7 @@ xz.pphimalayanrt.com
5radar.com
5rc.com
5read.com
+5rfh44h5.cc
5ring.com
5ritt.com
5rs.me
@@ -7188,6 +6835,7 @@ xz.pphimalayanrt.com
5v13.com
5w123.com
5w5.com
+5w52.com
5w5w.com
5waihui.com
5wapp.com
@@ -7236,7 +6884,6 @@ xz.pphimalayanrt.com
602ab6ff810251.beer
602img.com
60301c31eca86940.com
-60353595.com
603603b.com
603603d.com
603966.com
@@ -7270,6 +6917,7 @@ xz.pphimalayanrt.com
610115.com
610213.net
61029.com
+6103g.com
6104.tv
6112.com
61165.com
@@ -7296,6 +6944,7 @@ xz.pphimalayanrt.com
618bg.com
618cj.com
618day.com
+618hr.com
618ky.com
618tech.com
618waihui.com
@@ -7333,6 +6982,7 @@ xz.pphimalayanrt.com
6266.cc
62669.com
626x.com
+628.com
6285s.com
62923.vip
629973.com
@@ -7341,6 +6991,7 @@ xz.pphimalayanrt.com
62ddccc8810301.beer
62dns.com
62game.com
+62l.net
62wy.com
6300.net
630book.cc
@@ -7354,6 +7005,7 @@ xz.pphimalayanrt.com
632news.com
6333.tv
6334x.com
+633586c05c8f4543.com
634.ag
634d.com
634image.com
@@ -7369,8 +7021,10 @@ xz.pphimalayanrt.com
639311.com
63936b71f3e4ab6a.com
6397869a4eb51a13.com
+63a795836312c99d.com
63b4ff1aeff2818d.com
63cj.com
+63fl.com
63pe.com
63u.net
63yx.com
@@ -7382,11 +7036,12 @@ xz.pphimalayanrt.com
64365.com
644446.com
64504.com
+645250.net
6453.net
64538.net
-645ajm.com
646000.com
6463.com
+64644444.com
64783333.com
648sy.com
64dns.com
@@ -7403,7 +7058,6 @@ xz.pphimalayanrt.com
654320.com
6543210.com
654321wan.com
-655hfe.com
655u.com
655yx.com
65601111.com
@@ -7417,6 +7071,7 @@ xz.pphimalayanrt.com
65b01705c10261.beer
65bb2d6d81010.beer
65box.com
+65dataranking.com
65ec0ea7f04562ad.com
65liuxue.com
65mhxy.com
@@ -7432,10 +7087,12 @@ xz.pphimalayanrt.com
6617.com
66173yx.com
662city.com
+662p.com
66301cc.com
6633102.com
6633488.com
6633696.com
+663661.com
6636yy.com
66378.com
66388.net
@@ -7472,6 +7129,7 @@ xz.pphimalayanrt.com
666kuaishou.net
666pic.com
666post.com
+666scly.com
666shuwu.com
666wan.com
666wan.net
@@ -7496,11 +7154,11 @@ xz.pphimalayanrt.com
668lw.com
668map.com
668wan.com
+669167d4fc316421.com
66930909.com
669322.com
6695.com
66988.tv
-66990000.xyz
6699129.com
6699301.com
6699343.com
@@ -7516,6 +7174,7 @@ xz.pphimalayanrt.com
6699873.com
669cd3a3ea61d96f.com
669pic.com
+669play.com
669ye.com
669zw.com
66brl.com
@@ -7529,11 +7188,13 @@ xz.pphimalayanrt.com
66ika.com
66in.net
66l.cc
+66laws.com
66mi.com
66mobi.com
66money.com
66n.co
66nao.com
+66nh.com
66park.net
66perfect.com
66play.com
@@ -7576,6 +7237,7 @@ xz.pphimalayanrt.com
677.vip
6771112.com
678119.com
+6786666.com
6787.com
67876.com
6788888.net
@@ -7611,6 +7273,7 @@ xz.pphimalayanrt.com
6822.com
68287zubo85737.com
682ff8a9c89d5d88.com
+6832123.com
6840011.com
6844.com
685462.com
@@ -7624,6 +7287,7 @@ xz.pphimalayanrt.com
6887cc57c10251.beer
6888.tv
688dns.com
+688mob.com
688wz.net
68955.com
68978.net
@@ -7632,6 +7296,7 @@ xz.pphimalayanrt.com
68bbq.com
68china.net
68design.net
+68e5fc2c1344afb8.com
68ecshop.com
68gainian.com
68h5.com
@@ -7650,6 +7315,7 @@ xz.pphimalayanrt.com
69090.com
6912s.com
6917.com
+69260.com
692657.com
693.com
6934.net
@@ -7675,6 +7341,7 @@ xz.pphimalayanrt.com
699pic.com
69fd4a3dbd02f66c.com
69g.com
+69hr.com
69mok.com
69shu.org
69shuba.cc
@@ -7696,8 +7363,11 @@ xz.pphimalayanrt.com
6apt.com
6b1813f5210261.beer
6b3b.com
+6b3cfa277bae3b4b.com
+6b786q3e.work
6bac9d15d10271.beer
6bdns.com
+6c0f63385ed13b89.com
6c6c.com
6c7ccba3e11031.beer
6cit.com
@@ -7705,6 +7375,7 @@ xz.pphimalayanrt.com
6cnzz.com
6d4d5.com
6d4g.com
+6d576388add270c5.com
6d63d3.com
6d7d.com
6dan.com
@@ -7714,7 +7385,6 @@ xz.pphimalayanrt.com
6dfefa7039812445.com
6diy.com
6ds.me
-6dsdcms.com
6du.in
6duoyu.com
6e212121910292.beer
@@ -7725,6 +7395,7 @@ xz.pphimalayanrt.com
6ef102d0210261.beer
6f25df38a10291.beer
6f7b51b741014.beer
+6f8b82f9fbb439db.com
6fast.com
6fcsj.com
6fe7c9d291017.beer
@@ -7733,6 +7404,7 @@ xz.pphimalayanrt.com
6g5fd1a.com
6gh4.com
6ght.com
+6glz.com
6h979.com
6hd0hoc.com
6hgame.com
@@ -7743,9 +7415,9 @@ xz.pphimalayanrt.com
6ie6.com
6ifang.com
6juzi.com
+6jyi7mzae.com
6jz.com
6k11.com
-6kai.cc
6ke.com
6kw.com
6kwan.com
@@ -7790,6 +7462,7 @@ xz.pphimalayanrt.com
6uudy.com
6v.com
6v6.work
+6vdyg.com
6wan.com
6wtx.com
6wwww.com
@@ -7808,13 +7481,13 @@ xz.pphimalayanrt.com
6yyy7.com
6z6z.com
6ze.net
-6zhentan.com
6ziz.com
6zu.com
7-11bj.com
7-che.com
7-meeting.com
7-mi.net
+7-vk.com
7-wx.com
70.cc
700618.com
@@ -7828,7 +7501,6 @@ xz.pphimalayanrt.com
70392.org
70524.com
706net.com
-707.com
707598.xyz
707e518c610291.beer
7080edu.com
@@ -7841,10 +7513,10 @@ xz.pphimalayanrt.com
70jj.com
70ka.com
70ppt.com
+70soft.com
70ym.com
70yx.com
71.net
-710hf.com
7114.com
7116.com
7116dns.com
@@ -7866,7 +7538,6 @@ xz.pphimalayanrt.com
7176.com
717c.com
717down.com
-7181.com
71908.com
7192.com
719400.com
@@ -7894,9 +7565,9 @@ xz.pphimalayanrt.com
71tech.com
71txt.com
71wl.com
+71wx.net
71xe.com
71xk.com
-72.chat
72.com
72017.net
720582.com
@@ -7937,6 +7608,7 @@ xz.pphimalayanrt.com
72crm.com
72crm.net
72crm.org
+72d3bb672f4a6997.com
72dj.com
72dns.com
72dns.net
@@ -7985,7 +7657,6 @@ xz.pphimalayanrt.com
7415.com
741b0fca410271.beer
7428.net
-743bvw.com
743forever.com
7441a334d13a0000.com
74478fd3b9cca85f.com
@@ -7994,6 +7665,7 @@ xz.pphimalayanrt.com
74615ee887a99dd7.com
7474.com
7477.com
+747wan.com
749333.xyz
74955.net
74966.net
@@ -8004,6 +7676,7 @@ xz.pphimalayanrt.com
74dns.com
74f11ac633122c20.com
74hao.com
+75.team
75111.com
75111.net
75122d9a05f7a5a7.com
@@ -8028,16 +7701,16 @@ xz.pphimalayanrt.com
75ll.com
75n474.com
75pk.com
-75txt.com
75ww.com
76120.org
7618.com
7631.com
+7633sqw.com
76474cf781f10d61.com
7651.com
766.com
7663.com
-76642464.cfd
+76676.com
766899d4f1011.beer
766er.com
766vd.com
@@ -8075,7 +7748,6 @@ xz.pphimalayanrt.com
77304.com
77304y.com
77313.com
-7733249.com
7733320.com
7733352.com
7733577.com
@@ -8133,6 +7805,7 @@ xz.pphimalayanrt.com
77bh.com
77bike.com
77bx.com
+77dd23.com
77dushu.com
77dyy.net
77ebooks.com
@@ -8200,20 +7873,22 @@ xz.pphimalayanrt.com
78yx.net
79.biz
790.com
+79008500.xyz
790a8f76c10301.beer
7928a82f311032.beer
793360.com
793688.com
79432.com
7951ee2a510281.beer
+79521.cc
7979u.com
-797rs.com
797sun.com
7988.com
798com.com
798edu.com
798zb.tv
799.net
+79979.loan
7997v.com
7999.tv
79999.net
@@ -8247,7 +7922,6 @@ xz.pphimalayanrt.com
7cdfad1816def43d.com
7chacha.com
7ci.com
-7cj2-x5r9vqm.vip
7cname.com
7cnv.com
7cxk.com
@@ -8276,6 +7950,7 @@ xz.pphimalayanrt.com
7f416cfd411012.beer
7f86a2a17fcd5a5d.com
7fa19203510241.beer
+7fa973f8c7bdcddb.com
7fei.com
7fff5701c5415d77.com
7fgame.com
@@ -8302,7 +7977,6 @@ xz.pphimalayanrt.com
7jk.com
7juju.com
7k35.com
-7k6k.com
7k7k.com
7k8k.com
7ka.co
@@ -8326,14 +8000,13 @@ xz.pphimalayanrt.com
7oh.net
7pa.com
7paiqun.com
+7piq.com
7po.com
7q5.com
7qile.com
7quw.com
-7r.fit
7r7z.com
7rdao.com
-7risha.com
7road.com
7road.net
7ronggame.com
@@ -8345,7 +8018,6 @@ xz.pphimalayanrt.com
7soyo.com
7su.com
7syc.com
-7syun.com
7t9.com
7tenet.net
7tgame.com
@@ -8356,7 +8028,6 @@ xz.pphimalayanrt.com
7ugl.com
7usa.net
7uv.com
-7vip.com
7wan.com
7wate.com
7wee.com
@@ -8392,13 +8063,13 @@ xz.pphimalayanrt.com
8.xyz
80.hk
80000.cc
-8000yi.com
800423.com
800507.com
8006506.com
8006511.com
8006tu.com
800820.net
+8008202191.com
8008205555.com
800app.com
800bamboo.com
@@ -8549,6 +8220,7 @@ xz.pphimalayanrt.com
822ef055f1017.beer
823238fa910271.beer
82335966.com
+8243d76487f3a834.com
8246.net
8254ce48211021.beer
8264.com
@@ -8565,11 +8237,13 @@ xz.pphimalayanrt.com
8295099d311031.beer
8295dc6e7e797638.com
82987977.com
+829e30d07853f4fd.com
82d5d0e4f10291.beer
82e0dd98d1edbbb1.com
82flex.com
82ip.com
82ky.com
+82l.net
82pk.com
8303.org
83124.com
@@ -8579,13 +8253,14 @@ xz.pphimalayanrt.com
8325.com
8329607.com
833006.net
-83335888.com
+8333dhz.com
8336.com
834834002.com
834834009.com
834834vip4.com
835444.cc
835images83.com
+83661111.net
83666.com
83692.com
83753751.com
@@ -8631,6 +8306,7 @@ xz.pphimalayanrt.com
85679999.com
85791df5e89bcda6.com
8579s.com
+857yx.com
857zb1.tv
85814.com
85880234.com
@@ -8640,6 +8316,7 @@ xz.pphimalayanrt.com
85jk.com
85kf.com
85sc.com
+85wp.com
85xt.com
86-import.com
86.cc
@@ -8665,12 +8342,14 @@ xz.pphimalayanrt.com
866ds.com
8671099.com
86754.org
+867867jh.com
8682.cc
8686c.com
8688g.com
86933.com
869d.com
869v.com
+86a92644807597fa.com
86amsdy.com
86bdada6e1019.beer
86bus.com
@@ -8686,7 +8365,6 @@ xz.pphimalayanrt.com
86hh.com
86hk.vip
86hr.com
-86huoche.com
86jg.com
86joy.com
86kang.com
@@ -8699,7 +8377,6 @@ xz.pphimalayanrt.com
86office.com
86pla.com
86pm25.com
-86ps.com
86ps.net
86sb.com
86tec.com
@@ -8719,6 +8396,7 @@ xz.pphimalayanrt.com
87131.vip
87161.vip
87188718.com
+872.cc
872872.com
8732365.com
8733777251212.icu
@@ -8731,6 +8409,7 @@ xz.pphimalayanrt.com
8769d53.com
876dns.com
8770000.com
+87739b0fc18fe40a.com
8775.com
87753.net
877771.xyz
@@ -8744,6 +8423,7 @@ xz.pphimalayanrt.com
8799.com
87a37933611021.beer
87b041a2019314d7.com
+87bc16a2fc6c4036.com
87e1ed649c57575b.com
87g.com
87money.com
@@ -8755,6 +8435,8 @@ xz.pphimalayanrt.com
880.net
8800.org
880022.com
+8801.net
+880303.xyz
880331.net
88077777.com
88090.com
@@ -8799,6 +8481,7 @@ xz.pphimalayanrt.com
886966.com
886abc.com
886cdead210292.beer
+886vps.com
887367.com
88765.com
887777.com
@@ -8815,8 +8498,6 @@ xz.pphimalayanrt.com
8889997777.com
888ban.com
888chem.com
-888fk.cc
-888lm01.com
888pic.com
888ppt.com
888rj.com
@@ -8852,6 +8533,7 @@ xz.pphimalayanrt.com
88lan.com
88laser.com
88lot.com
+88mf.com
88ming.net
88order.com
88pets.com
@@ -8863,12 +8545,12 @@ xz.pphimalayanrt.com
88ttv.com
88wbet.me
88xiaoshuo.com
-88xtu.com
88y5.com
88ysg.com
88zha.com
88zjzy.com
89006006.com
+890bf715220716f3.com
8910.io
89178.com
8926174358102.icu
@@ -8894,6 +8576,7 @@ xz.pphimalayanrt.com
8999.cc
89b12b5e3ff8085c.com
89dj.com
+89doc.com
89ds.com
89f0e4a1603d3372.com
89f9ee46410292.beer
@@ -8935,6 +8618,7 @@ xz.pphimalayanrt.com
8dn.com
8dol.com
8dou.com
+8dp.net
8dt.com
8dudata.com
8dus.com
@@ -9008,8 +8692,6 @@ xz.pphimalayanrt.com
8win.net
8wq.com
8wss.com
-8x.fit
-8x14khzwmi.com
8x5vviy4r2.com
8x6x.com
8xs.org
@@ -9040,6 +8722,7 @@ xz.pphimalayanrt.com
900ppt.com
900yi.com
90123.com
+9018.net
90231611e4973cbb.com
90370.com
904e0d2ba10241.beer
@@ -9058,6 +8741,7 @@ xz.pphimalayanrt.com
90lhd.com
90qh.com
90sheji.com
+90sjimg.com
90tank.com
90vm.com
90wmoyu.com
@@ -9088,6 +8772,7 @@ xz.pphimalayanrt.com
9133.com
91360.com
91378.com
+913aefac85f5bf8f.com
913pc.com
913vr.com
913you.com
@@ -9102,6 +8787,7 @@ xz.pphimalayanrt.com
915d.tv
916360.net
9166yx.com
+916m.com
917.com
9170.com
917st.com
@@ -9111,7 +8797,6 @@ xz.pphimalayanrt.com
9188.com
9188.work
918canyin.com
-918fkw.com
918ka.cc
918rc.com
919.com
@@ -9135,7 +8820,6 @@ xz.pphimalayanrt.com
91bushou.com
91carnet.com
91cdkey.com
-91cdncdn.com
91cha.com
91changxie.com
91chengguo.com
@@ -9152,7 +8836,6 @@ xz.pphimalayanrt.com
91dbq.com
91ddcc.com
91ddedu.com
-91ddos.com
91dict.com
91dnso.com
91doujin.com
@@ -9164,8 +8847,6 @@ xz.pphimalayanrt.com
91exiu.com
91facts.com
91fangan.com
-91fangyu.com
-91fengwan.com
91fifa.com
91fyt.com
91game.com
@@ -9250,8 +8931,10 @@ xz.pphimalayanrt.com
91sph.com
91sst.com
91student.com
+91suan.com
91suke.com
91switch.com
+91syun.com
91taojin.com
91taoke.com
91ting.net
@@ -9270,10 +8953,12 @@ xz.pphimalayanrt.com
91wangyx.com
91way.com
91weimai.com
+91wenwen.net
91wllm.com
91wujia.com
91wutong.com
91wzg.com
+91x.org
91xch.com
91xcm.com
91xfw.com
@@ -9291,6 +8976,7 @@ xz.pphimalayanrt.com
91yk.com
91yong.com
91you.com
+91youchai.com
91youxi.com
91yoyo.net
91yu.com
@@ -9306,8 +8992,6 @@ xz.pphimalayanrt.com
920uc.com
921.com
9211.com
-9212c21.com
-9212c7.com
9217fdb98dcc13a8.com
9217web.com
92220556.com
@@ -9318,7 +9002,6 @@ xz.pphimalayanrt.com
92220760.com
92224s.com
922997xtz2.shop
-923578.xyz
923f92a4e1df1753.com
924747.com
925g.com
@@ -9328,9 +9011,11 @@ xz.pphimalayanrt.com
927953.com
927game.com
928.sale
+928vbi.com
92913.com
929825.com
92987.com
+9299.net
929g.com
929vip.shop
92anycall.com
@@ -9347,6 +9032,7 @@ xz.pphimalayanrt.com
92fox.com
92gyw.com
92hidc.net
+92jzh.com
92kaifa.com
92kk.com
92le.com
@@ -9375,8 +9061,10 @@ xz.pphimalayanrt.com
9312.net
93126.org
93135.com
+931931jh.com
933.moe
933332.xyz
+934dsw.com
934hd.com
93636.com
93692zubo66936.com
@@ -9385,6 +9073,7 @@ xz.pphimalayanrt.com
937791.com
9377a.com
9377d.com
+9377df.com
9377j.com
9377ja.com
9377os.com
@@ -9430,6 +9119,7 @@ xz.pphimalayanrt.com
946000.com
9466.com
947fd9a0011042.beer
+94831.com
9486483.com
948hj.com
9495.com
@@ -9472,6 +9162,7 @@ xz.pphimalayanrt.com
95105555.com
95105888.com
95105899.com
+9512.net
951280.com
951368.com
95158.com
@@ -9489,6 +9180,7 @@ xz.pphimalayanrt.com
9533.org
95408.com
9540f8f83e1e7a8c.com
+95447.com
95504.net
95504test.com
95508.com
@@ -9527,7 +9219,6 @@ xz.pphimalayanrt.com
95en.com
95epay.com
95fenapp.com
-95fk.net
95ib.com
95ip.com
95jizhang.com
@@ -9575,6 +9266,7 @@ xz.pphimalayanrt.com
96519.org
96528.com
96533.com
+965373.com
96558.com
9655bcfbe1022.beer
96567.com
@@ -9586,11 +9278,11 @@ xz.pphimalayanrt.com
9666sr.com
9669.com
966zlnfjuza4oloh2bk.app
-9670.net
96804.com
96811.com
96811.net
96822.com
+968550.com
96856.org
9686000.com
96877.net
@@ -9600,7 +9292,6 @@ xz.pphimalayanrt.com
969368.com
96966.com
969g.com
-969mak.com
96ac893dd11011.beer
96caifu.com
96cc09c581022.beer
@@ -9618,7 +9309,6 @@ xz.pphimalayanrt.com
96sdk.com
96sir.com
96weixin.com
-96xz.com
96yx.com
96zxue.com
97.biz
@@ -9651,7 +9341,11 @@ xz.pphimalayanrt.com
97973399.com
97975508.com
97976608.com
+9797cp2.com
9797ly.com
+9797x4.com
+9797x7.com
+9799.com
9799251212480.icu
97a12bb360b26d1c.com
97add.com
@@ -9680,7 +9374,6 @@ xz.pphimalayanrt.com
97zm.com
98.com
98.ma
-980.ag
9800.com
980512.com
980cje.com
@@ -9690,6 +9383,7 @@ xz.pphimalayanrt.com
985.so
985900.com
985dh.com
+985hezi.com
985ks.com
985ks.net
985sy.com
@@ -9704,8 +9398,8 @@ xz.pphimalayanrt.com
987you.com
98809.com
988848a9d1013.beer
+988878.com
98892.com
-988dns.com
988sl.com
9891.com
9891760ee2389285.com
@@ -9729,6 +9423,7 @@ xz.pphimalayanrt.com
98du.com
98e774f505d78b1a.com
98eye.com
+98lm.com
98mc.cc
98mp.com
98nice.com
@@ -9750,7 +9445,6 @@ xz.pphimalayanrt.com
9911yx.com
99166.com
9917.com
-9917wan.com
9918.tv
99193.com
991fd1ce91009.beer
@@ -9765,12 +9459,14 @@ xz.pphimalayanrt.com
9942.org
99442.com
9944wb.com
+99469.com
994wan.com
9950air.com
9951.cc
995120.net
99520.love
996.com
+996007.icu
9963.org
996404.xyz
9965dns.com
@@ -9831,6 +9527,7 @@ xz.pphimalayanrt.com
99cha.com
99cloud.net
99corley.com
+99count.com
99danji.com
99ddd.com
99dingding.com
@@ -9914,9 +9611,11 @@ xz.pphimalayanrt.com
9b37f3cc81011.beer
9bb4cf93e10261.beer
9bianli.com
+9c0c0433602d188a.com
9c67282f22796ac6.com
9c941a3b41021.beer
9ca4b8eca1019.beer
+9cao9.com
9ccapital.com
9ce69ea6b10272.beer
9cfa10ad910291.beer
@@ -9927,6 +9626,7 @@ xz.pphimalayanrt.com
9d47e2c251009.beer
9d87bc4302122ef4.com
9damao.com
+9damao.net
9db.cc
9ddm.com
9de3c7ffb10291.beer
@@ -9999,6 +9699,7 @@ xz.pphimalayanrt.com
9kcs.com
9kd.com
9kff.com
+9kkk.xyz
9kus.com
9laidu.net
9linux.com
@@ -10048,7 +9749,6 @@ xz.pphimalayanrt.com
9wad.com
9wee.com
9wee.net
-9wtd.com
9wuli.com
9wwx.com
9xdb.com
@@ -10065,7 +9765,6 @@ xz.pphimalayanrt.com
9ya.net
9yao.com
9yaocn.com
-9yaoyao.com
9yc.com
9ye.com
9yiban.com
@@ -10099,6 +9798,7 @@ a0770.com
a0bi.com
a0c77.com
a0d73230f9d52dfb.com
+a0fca7a55be096ef.com
a135.net
a142b5e7511011.beer
a1789.com
@@ -10116,6 +9816,7 @@ a335cb802c120705.com
a33a8c8c81011.beer
a3p4.net
a40dc409e2ea86b1.com
+a42c6d113874e1f3.com
a44aeaeac1016.beer
a45e4f5fd10272.beer
a465a95641016.beer
@@ -10124,6 +9825,7 @@ a4da96ae511032.beer
a4s6.com
a4xvv2g18l.com
a5.net
+a5089302099a537e.com
a5380a8e41016.beer
a5399.com
a549543886.asia
@@ -10135,9 +9837,9 @@ a5idc.net
a5j.cc
a5lt.com
a5xiazai.com
+a5y.net
a61cee76f4df41b1.com
a6562752811032.beer
-a6api.com
a6h8.com
a6ksw.net
a700in.ren
@@ -10147,13 +9849,13 @@ a756716251017.beer
a75d755806b1095d.com
a7647e3f151b4a5d.com
a766.com
-a777998.com
a789.org
a7a13fde51022.beer
a7c6e291d10292.beer
a7d4bd3ce10281.beer
a7dcb6d9011032.beer
a8.com
+a83c8524b88a06ae.com
a87807b4811031.beer
a87f34a60cf36893.com
a88b9f894719c3d8.com
@@ -10188,7 +9890,7 @@ aaareplicawatch.com
aaawz.cc
aaayu.com
aaayun.com
-aabb.com
+aabooo.com
aabqn.com
aac3442de07869c0.com
aacoptics.com
@@ -10198,6 +9900,9 @@ aadcloud.com
aads-cng.net
aafanke.cc
aafxw.com
+aai07251mu.com
+aai07260mu.com
+aai07280mu.com
aakss.com
aaltosemi.com
aamets.com
@@ -10223,9 +9928,9 @@ aayun.icu
ab-sm.com
ab126.com
ab365.com
+ab839c2562b8ae05.com
abaa.cc
abacaipu.com
-abachem.com
abackup.com
abaizx.com
abaoge.com
@@ -10244,6 +9949,8 @@ abc151.com
abc188.com
abc369.net
abc4game.com
+abc56692388.com
+abc59783718.com
abc7722.com
abcache.com
abcbank.shop
@@ -10266,14 +9973,12 @@ abcpost.com.au
abcs8.com
abcsbank.com
abctime.com
-abctougu.com
abcve.com
abcxyzkk.xyz
abcydia.com
abd007.com
abddn.com
abdf002.com
-abdqn.com
abe-sz.com
abe-tech.com
abeacon.com
@@ -10316,6 +10021,7 @@ abslw.com
absoloop.com
abtd.net
abtnetworks.com
+abtpaper.com
abtt266.com
abublue.com
abundancen.com
@@ -10332,6 +10038,7 @@ ac268.com
ac3ba49731016.beer
ac57.com
ac6891953e265977.com
+ac78416978de6213.com
acabridge.net
acachina.com
academygkusa.com
@@ -10356,7 +10063,6 @@ accessicp.com
accessoft.com
accesspath.com
accgame.com
-accio-ai.com
accio.ai
accio.com
acclb.com
@@ -10387,6 +10093,7 @@ acetace.com
acetaffy.club
acetar.com
acewill.net
+acexpress.org
acfechina.org
acflow.com
acftu.org
@@ -10404,7 +10111,6 @@ acg18s.com
acg4.com
acg6.com
acgdb.com
-acgdraw.com
acggit.com
acgist.com
acglivefan.com
@@ -10506,7 +10212,6 @@ ad7.com
ad77.com
ad778.com
ada-post.com
-adacpp.com
adamahf.com
adamcdn.com
adamcoder.com
@@ -10519,7 +10224,6 @@ adas.com
adbgz.com
adbiding.com
adbkwai.com
-adbrkwai.com
adbvllc.cfd
adbxb.com
adcdn.com
@@ -10549,16 +10253,15 @@ adfaith.com
adfortest.com
adfunlink.com
adfuns.com
+adfyt.com
adg-dental.com
-adglim.com
adgomob.com
-adgooda.com
adguardprivate.com
adhei.com
adhimalayandi.com
-adhuanxiao.com
adhubbj.xyz
adhudong.com
+adi-whatsepp.com
adianshi.com
adiexpress.com
adiic.com
@@ -10566,6 +10269,7 @@ adinall.com
adipman.net
adjdds.com
adjucai.com
+adjuz.com
adjwl.com
adjyc.com
adkjpx.com
@@ -10603,18 +10307,17 @@ admqr.com
admsger.com
admsidea.com
admtvs.com
+admunan.com
adnineplus.com
adnrhy.com
adnyg.com
adobe-tool.com
-adobeacp.com
adobeae.com
adobeedu.com
adoebike.com
adonest.com
adongyu.com
adoregeek.com
-adosmo.com
adoutu.com
adparticle.com
adpchina.com
@@ -10666,6 +10369,7 @@ adutou.com
adutp.com
advanced-microsemi.com
advanced-pneumatics.com
+adventsoft.org
advertcn.com
advich.com
adview.com
@@ -10710,6 +10414,7 @@ adzshd.com
ae-inbr.xin
ae0f9d6cf11021.beer
ae1234.com
+ae224e62eb93c42a.com
ae256.com
ae3a6d6e09359c15.com
ae58c58c051aacd9.com
@@ -10779,6 +10484,7 @@ afdian.com
afdian.net
afdiancdn.com
afdvr.com
+afe-whatsepp.com
afea4f9221023.beer
afeica.com
afengblog.com
@@ -10819,9 +10525,7 @@ agel-tech.com
agelocer.com
agenge.com
agenow.com
-agentscope.io
agentyun.com
-agentzh.org
aggresmart.com
aghcdn.com
agi360.xyz
@@ -10901,6 +10605,7 @@ ahczwater.com
ahdaer.com
ahdahda.com
ahdbsst.com
+ahdci.com
ahdf56.com
ahdfjt.com
ahdhf.com
@@ -10932,7 +10637,6 @@ ahhaoze.com
ahhbxh.com
ahhcbiotech.com
ahhdb.com
-ahhfangde.com
ahhkedu.com
ahhnsz.net
ahhome.com
@@ -10969,14 +10673,12 @@ ahkemi.com
ahkende.com
ahkjksw.com
ahkjwx.com
-ahkjxww.com
ahkxsoft.com
ahlca.org
ahlib.com
ahlife.com
ahljnews.com
ahlqgs.com
-ahlt10010.com
ahltgroup.com
ahluqiao.com
ahlxb.com
@@ -11028,11 +10730,9 @@ ahsz.tv
ahszbx.com
ahteacher.com
ahtelit.com
-ahtkg.com
ahtlbyby.com
ahtongyuan.com
ahtrq.com
-ahtxxh.com
ahtxyyjt.com
ahtypg.com
ahubbs.com
@@ -11061,6 +10761,7 @@ ahyouchengedu.com
ahyouth.com
ahyqx.com
ahysxh.com
+ahyuning.com
ahyx.cc
ahyx.net
ahyyxh.com
@@ -11069,6 +10770,7 @@ ahzcw.cc
ahzs10000.com
ahzssw.com
ahztsh.com
+ahzyw.com
ai-abc.com
ai-anchor.com
ai-augmented.com
@@ -11078,9 +10780,7 @@ ai-classes.com
ai-cool.com
ai-daxue.com
ai-factory.com
-ai-guardrail.com
ai-indestry.com
-ai-kaleidoscope.com
ai-qingchang.com
ai-rtc.com
ai-start.com
@@ -11163,6 +10863,7 @@ aiclicash.com
aiclk.com
aicloud.com
aicoauto.com
+aicode.cc
aicoinstorge.com
aiconn.com
aicsemi.com
@@ -11181,6 +10882,7 @@ aidaily.com
aidaiz.com
aidalan.com
aidanji.com
+aidapeid.com
aidaxing.com
aidaxue.com
aidcgroup.net
@@ -11189,6 +10891,7 @@ aideep.com
aidenleong.com
aidianji.net
aidiao.com
+aidien.fun
aidigong.com
aidimedia.com
aidjyun.com
@@ -11205,7 +10908,6 @@ aidpaper.com
aidream.website
aidrive.com
aidugame.com
-aidunwaf.com
aiduoka.com
aidusk.com
aidusk.org
@@ -11246,7 +10948,6 @@ aifengjie.com
aifengkeji.com
aifenlei.com
aifooler.com
-aifortmix.com
aifoxtech.com
aifu10.com
aifu360.com
@@ -11264,7 +10965,6 @@ aigccdn.com
aigclsp.com
aigcxm.com
aige010.com
-aigefurniture.com
aigei.com
aigewc.com
aigexing.com
@@ -11283,6 +10983,7 @@ aihaisi.com
aihala.com
aihanfu.com
aihanfu.net
+aihangtian.com
aihao.org
aihecong.com
aihehuo.com
@@ -11298,7 +10999,6 @@ aihuajia.com
aihuaju.com
aihuau.com
aihuazhou.com
-aihubo.com
aihubs.net
aihuhua.com
aihuishou.com
@@ -11335,6 +11035,7 @@ aiketour.com
aikf.com
aikonchem.com
aikucun.com
+ail-online.moe
ailaba.com
ailabs.xin
ailai6.com
@@ -11371,7 +11072,6 @@ aimeideni.com
aimeifen.vip
aimeike.tv
aimeilid.com
-aimeizhi.net
aimengang.com
aimergroup.com
aimeter.com
@@ -11388,7 +11088,9 @@ aimoeart.com
aimoneshoes.com
aimoon.com
aimsen.com
+aimu-app.com
aimx333.com
+ainas.cc
ainb01010zh.com
ainb12251zh.com
ainiankj.com
@@ -11399,6 +11101,7 @@ ainiu.net
ainixing.com
ainm.cc
ainol.com
+ainuoedu.com
ainyi.com
aioclinic.com
aioexpress.com
@@ -11470,7 +11173,6 @@ airenche.com
airepay.net
airfex.net
airguilin.com
-airizu.com
airj.website
airjd.com
airkunming.com
@@ -11510,6 +11212,7 @@ aishangba.org
aishangyangyu.com
aisharenet.com
aishengji.com
+aishenhua.com
aishenqi.net
aishuge.cc
aishuge.la
@@ -11573,6 +11276,7 @@ aiuxian.com
aiuxstudio.com
aiv5.cc
aivaylaco.com
+aiveola.com
aivivo.com
aiviy.com
aiviysoft.com
@@ -11585,6 +11289,7 @@ aiwebsec.com
aiwei365.net
aiweibang.com
aiweibk.com
+aiweline.com
aiwenyi.com
aiwisland.com
aiworkspace.com
@@ -11612,7 +11317,6 @@ aixinwechat.com
aixinwu.org
aixiu.net
aixiuyingyu.com
-aixq.cc
aixq.com
aixs.info
aixs.org
@@ -11626,7 +11330,6 @@ aixuetang.com
aixuexi.com
aixyy.com
aixzu.com
-aixzzs.com
aiya.live
aiya8.com
aiyamax.com
@@ -11635,7 +11338,6 @@ aiyanqing.com
aiyaopai.com
aiyecdn.com
aiyewjc.com
-aiyfhdns.com
aiyichuan.com
aiyidu.com
aiyinghun.com
@@ -11649,7 +11351,6 @@ aiykj.com
aiyo99.com
aiyong.work
aiyongaiwan.com
-aiyoubucuo.com
aiyoumi.com
aiyouxi.com
aiyouzj.com
@@ -11705,12 +11406,10 @@ ak-medical.net
ak-v.tripcdn.com
ak.cc
ak0.tw
-ak005.com
ak1ak1.com
ak47ids.com
aka700.com
aka700.net
-aka815.net
akadns88.net
akadns99.net
akaifa.com
@@ -11740,6 +11439,7 @@ aki-game2.com
aki-game2.net
akile.net
akkogear.com
+aklyw.com
akng.net
akniu.com
akoeva.com
@@ -11796,11 +11496,13 @@ alexhaohao.com
alexinea.com
alexpad.fun
alexyan.cc
+alfachemar.com
alfafull.com
alfingfuda.com
algkfd.com
algogear.com
algorithmart.com
+alhug.com
alhywj.com
ali-api-test.net
ali-cdn.com
@@ -11866,7 +11568,6 @@ alidayu.com
aliddmall.com
alidns.com
alidns.net
-alidnsv122.com
alidnsv4.com
alidnsv5.com
aliedge.com
@@ -11915,6 +11616,7 @@ alipay.com
alipay.hk
alipay.net
alipayauto.com
+alipaycs.com
alipaydesign.com
alipaydev.com
alipaydns.com
@@ -11996,7 +11698,6 @@ aliyunddos0024.com
aliyunddos0025.com
aliyunddos0026.com
aliyunddos0027.com
-aliyunddos0028.com
aliyunddos0029.com
aliyunddos0030.com
aliyunddos1001.com
@@ -12147,6 +11848,7 @@ allinpaygx.com
allinpayhb.com
allinpaysz.com
allinso.com
+alllget.com
alllook.tv
allmaga.net
allmed-china.com
@@ -12175,7 +11877,6 @@ alltobid.com
alltosun.com
alltuu.cc
alltuu.com
-alltuu.site
allvalue.com
allwellsports.com
allweyes.com
@@ -12193,6 +11894,7 @@ alnan.com
alo7.com
aloha-ukulele.com
alonemonkey.com
+along96.com
alongsky.com
alookweb.com
alpha-browser.com
@@ -12262,6 +11964,7 @@ ameisx.com
amemv.com
amemv.net
ameow.xyz
+americachineselife.com
amethystum.com
amexpressnetwork.com
ameya360.com
@@ -12278,6 +11981,7 @@ amijiaoyu.com
amindbox.com
aminglinux.com
amishii.com
+amishow.com
amivian.com
amiyabot.com
amo-solar.com
@@ -12304,6 +12008,7 @@ amssro.net
amswater.com
amtbbs.org
amtf18.com
+amtjt.com
amtron-ic.com
amuletj.com
amuletor.com
@@ -12330,7 +12035,6 @@ an2.net
an68.com
analog.com
analogfoundries.com
-analyscloud1.com
analysysdata.com
anan123.vip
anan666.com
@@ -12346,6 +12050,8 @@ anbaool.com
anbokeji.net
ancbk.com
ancda.com
+ancdwqob.asia
+ancesours.com
anchnet.com
ancii.com
ancun.com
@@ -12382,6 +12088,7 @@ andygcj.com
andyx.net
ane56.com
aneasystone.com
+anei.tv
anestcang.com
anetuo.com
anf-z.com
@@ -12396,6 +12103,7 @@ angeeks.com
angel-game.net
angel-hospital.com
angel-medical.net
+angelakillian.com
angelarabbit.com
angelcrunch.com
angelhome.org
@@ -12449,6 +12157,7 @@ anicoga.com
anictdns.click
anictdns.store
anijue.com
+anileyehospital.org
animalchina.com
animate.art
animationcritics.com
@@ -12578,7 +12287,6 @@ anshuntech.ltd
ansiding.com
ansimeter.com
ansky.com
-ansroot.com
ansteelgroup.com
ansucai.com
ansuner.com
@@ -12641,7 +12349,6 @@ antutu.net
antvr.com
antwork.link
antyikangih.com
-anvnjmc.com
anw.red
anweilan.com
anweishi.com
@@ -12672,6 +12379,7 @@ anxiu.com
anxiw.com
anxjm.com
anxunli.com
+anxunshihui.com
any8.com
anyan.com
anyang100.com
@@ -12693,6 +12401,7 @@ anyihua.com
anyimai.com
anyizn.com
anyka.com
+anyknew.com
anyline.org
anymcu.com
anymetre.com
@@ -12704,7 +12413,9 @@ anyrtc.io
anyrui.win
anysafer.com
anyscdn.com
+anyskygame.com
anysql.net
+anystandards.com
anytesting.com
anytocopy.com
anyun100.com
@@ -12766,6 +12477,7 @@ aofeida.com
aofenghuanjing.com
aofenglu.com
aofs.vip
+aogocorp.com
aograph.com
aoguan.com
aoguansteel.com
@@ -12786,6 +12498,7 @@ aolai.com
aolaigo.com
aolijsj.com
aolinjy.com
+aolinpharma.com
aoliongame.com
aolvyou.com
aolylcd.com
@@ -12831,6 +12544,7 @@ aowenmarketing.com
aoxiang100.com
aoxingrelang.com
aoxintong.com
+aoy-power.com
aoya-hk.com
aoyanchang.com
aoyangzg.com
@@ -12839,6 +12553,7 @@ aoye.com
aoyige.com
aoyiluoad.com
aoyor.com
+aoyotech.com
aoyou.cc
aoyou.com
aoyou365.com
@@ -12849,8 +12564,8 @@ aoyunque.com
aozare-acemak.com
aozare-avernai.com
aozhanls.com
+aozhougoufang.com
ap-china.com
-ap-leasing.com
ap1983.com
ap88.com
ap8888.com
@@ -12920,6 +12635,7 @@ apitutu.com
apiunion.com
apiview.com
apizl.com
+apizza.cc
apizza.net
apjingsi.com
apk3.com
@@ -13016,6 +12732,7 @@ apple17.club
apple4.us
apple523.club
apple886.com
+appleadstech.com
applebl.com
applejp.cloud
applemei.com
@@ -13036,7 +12753,6 @@ appol.com
appollochina.com
appotronics.com
appqv.com
-appracle.com
approvebook.com
apps121.com
appscan.io
@@ -13063,6 +12779,7 @@ appwuhan.com
appwuhan.net
appxzz.com
appyao.com
+appying.com
appykt.com
appyouni.com
appzhonghua.com
@@ -13073,6 +12790,7 @@ apsfon.com
apsgo.com
apsoto.com
apspharm.com
+aptchina.com
aptchip.com
aptdn.net
aptenon.com
@@ -13108,7 +12826,6 @@ aqsiqauto.com
aqtd.com
aqtowngas.com
aqtwpc.com
-aqtwwx.net
aqtwwxemail.com
aqtxt.net
aqua-worth.com
@@ -13142,7 +12859,6 @@ aray1981.com
arayzou.com
arbays.com
arc-uds.com
-arcadesos.com
arcas-da.com
arcdmi.com
archaeuscapital.com
@@ -13156,6 +12872,7 @@ archgrid.xyz
archi-motive.com
archiant.com
archina.com
+archiname.com
archio.pro
archiposition.com
architbang.com
@@ -13180,8 +12897,10 @@ arenabreakoutcn.com
arerberte.com
areweloongyet.com
arextecn.com
+arglasses.work
argylehotels.com
arhoo.com
+ariacraft.net
aridge.com
arielcosmetic.com
arin-elec.com
@@ -13191,11 +12910,10 @@ ark301.com
arkfeng.xyz
arkfwq.com
arkid.cc
-arknightsframeassistant.com
+arkntools.app
arkoo.com
arkrdigital.com
arkread.com
-arkrog.com
arks.red
arksz.com
arliki.com
@@ -13227,7 +12945,6 @@ arrowceramic.com
arrowos.net
arrowwardrobe.com
ars-china.com
-arshow.com
arswp.com
art-ba-ba.com
art-child.com
@@ -13304,6 +13021,7 @@ asa-asia.com
asasd.online
asatiles.com
asattitude.com
+asbazainville.org
asc-events.org
asc-wines.com
ascend-bio.com
@@ -13318,10 +13036,12 @@ asczwa.com
asczxcefsv.com
asd.red
asd868.com
+asdbfjoiug.com
asdeshan.com
asdf-bj.net
asdf010.com
asdlkjf.com
+asdx.io
asean-china-center.org
aseann.com
aseanparts.com
@@ -13330,11 +13050,13 @@ asemi99.net
asen-pharm.com
aseoc.com
aseoe.com
+asf4asgfrxc.com
asgezhi.com
ashan.org
ashidc.com
ashining.com
ashoucang.com
+ashqgpxy.com
ashsilent.com
ashvsash.net
asi-midea.com
@@ -13378,6 +13100,7 @@ asimi8.com
asinking.com
asit.cc
asjnu.com
+ask.amd.com
askci.com
askdd.org
askdiandian.com
@@ -13398,6 +13121,7 @@ asm64.com
asmasm.com
asmlc.com
asmr.gay
+asmr.red
asnlab.com
asnlab.org
asnowsz.com
@@ -13428,6 +13152,7 @@ asr-cn.com
asrmicro.com
assassinscreedcodenamejade.com
assemblydragon.com
+assets-global.viveport.com
assrt.net
assyrb.com
astbbs.com
@@ -13437,6 +13162,7 @@ astfc.com
asthis.net
astipaint.com
astra-biotech.com
+astraintel.com
astral-vector.com
astroai-in.com
astroaio.com
@@ -13446,6 +13172,7 @@ astropulsion.com
astrostanleystudio.com
asty664.com
asujp.com
+asurada.zone
asussmart.com
asusw.net
asvm.net
@@ -13467,7 +13194,6 @@ ata-edu.com
ata-test.net
atacchina.com
atanyu.com
-ataokeji.com
atatech.org
atats.shop
atb.so
@@ -13532,6 +13258,7 @@ attomotion.com
attop.com
attri.mobi
attribuly.com
+atukjhesk.com
atuoyi.com
atwbz.com
atyomi.com
@@ -13569,11 +13296,11 @@ auditcn.com
audlabs.com
audtools.com
aufewb.com
-aufit-air.com
augix.me
augsky.com
augurit.com
augustcn.com
+auiou.com
aukcl.win
aulacn.com
auldey.com
@@ -13589,6 +13316,7 @@ aura-el.com
auroapi.com
aurogon.com
auromcs.com
+aurora-jy.com
aurora-oa.com
aurorauo.com
aus.cc
@@ -13623,7 +13351,6 @@ auto-mooc.com
auto-purify.com
auto-testing.net
auto-union.net
-auto-validation.com
auto-wo.com
auto1768.com
auto18.com
@@ -13671,7 +13398,6 @@ autopartsdk.com
autopeitao.com
autophagy.net
autoqingdao.com
-autosemo.com
autosey.com
autoshafa.com
autoshanghai.org
@@ -13686,17 +13412,16 @@ autowise.ai
autozi.com
autumndesires.com
auwincmc.com
-aux-global.com
aux-home.com
-auxair.com
-auxcss.com
auxgroup.com
-auxshop.com
-auxsmart.com
-auxsol.com
-auxsolcloud.com
-auxtelecom.com
-auxyl.com
+auy07161km.com
+auy07170km.com
+auy07180km.com
+auy07190km.com
+auy07200km.com
+auy07201km.com
+auy07211km.com
+auy07230km.com
auyou.com
av-ic.com
av199.com
@@ -13989,8 +13714,6 @@ ayrc.net
ayrmt.com
ayrq.com
aysbxxh.com
-ayseyy.com
-ayshl.com
ayshq.com
aysjyjjh.com
ayump.com
@@ -13998,8 +13721,6 @@ ayunlian.com
ayuren.com
ayuyun.com
ayw.ink
-ayx.com
-ayx.net
ayxz.com
ayzzxx.com
az009.com
@@ -14025,11 +13746,9 @@ azchcdnq.com
azchcdnr.com
azchcdns.com
azf010.com
-azhai.de
azhimalayanvh.com
azhituo.com
azhubaby.com
-azjjlb.com
azmcode.com
azonete.com
azooo.com
@@ -14049,6 +13768,7 @@ azuremigratetest.download.prss.microsoft.com
azurestackhub.download.prss.microsoft.com
azurestackhubuat.download.prss.microsoft.com
azuretouch.net
+azurew.com
azureyun.com
azxdiy.com
azy288.com
@@ -14065,12 +13785,14 @@ b-raymedia.com
b.biz
b.c2r.ts.cdn.office.net
b01.net
+b02f0d7f3745ba7c.com
b041e427810281.beer
b07cceaf011012.beer
b08.com
b082392de1024.beer
b13bc577fd.run
b18e55f8a1010.beer
+b19a352d2336941a.com
b1bj.com
b1n.net
b214bd8861009.beer
@@ -14080,6 +13802,7 @@ b23.tv
b230756fa1114.beer
b230ed9d61010.beer
b262a49751023.beer
+b27ceaa1053.skin
b287f400810291.beer
b29f45a5b10271.beer
b29gj.com
@@ -14114,12 +13837,15 @@ b3log.org
b3logfile.com
b40e80b301022.beer
b44fd0fd51014.beer
+b4ca25f717d58cac.com
+b5.com
b510qh.shop
b5232b4da6e285b2.com
b53358ed31009.beer
b555b.com
b5669d7a0a.vip
b5a3f14042830b91.com
+b5b6.com
b5b6308ab4859018.com
b5csgo.plus
b5esports.me
@@ -14140,9 +13866,10 @@ b75c5da009ac3871.com
b76ad11181024.beer
b7e314d4810241.beer
b7eeeb26810241.beer
-b7f3192.com
+b812824ed173a8c0.com
b83d11444463a621.com
b883481331023.beer
+b8b4ix7bj.com
b8e4d120a10271.beer
b8kk.com
b8yx.com
@@ -14154,7 +13881,7 @@ b9a3e87f01023.beer
b9ad.com
b9bdc7d62dfb0e5e.com
b9noqayb1s.work
-ba-hospital.com
+ba08e2f96f675d22.com
ba1400.com
ba20db47708bc51f.com
ba7jcm.live
@@ -14196,6 +13923,7 @@ babyqiming.com
babytree.com
babytreeimg.com
bacaizi.com
+bacaola.com
bacaoo.com
bacaosh.com
bacic5i5j.com
@@ -14203,6 +13931,7 @@ backaudio.com
backdata.net
backmany.com
backupdesktopcloud.com
+bacninhlocalguide.com
bacocis.com
bacts.com
bacyfzjt.com
@@ -14231,6 +13960,7 @@ bagsnet.com
bagstory.net
bagtree.com
baguilingyun.com
+bagxs.com
bahealpharma.com
bahecloud.com
bahens.com
@@ -14245,7 +13975,7 @@ baibo8.com
baibomedia.com
baibu.com
baic-group.com
-baicaf.com
+baicai.asia
baicai.com
baicaijie09.com
baicaio.com
@@ -14337,9 +14067,11 @@ baiduyundns.com
baiduyundns.net
baiduyunsousou.com
baiduyunwaf.com
+baiduzjn.com
baieryk.com
baifae.com
baifang.in
+baifangdianqi.com
baifangzh.com
baifeiyue.com
baifendian.com
@@ -14378,7 +14110,6 @@ baijia.com
baijiacloud.com
baijiahulian.com
baijiantest.com
-baijiao.org
baijiasheping.com
baijiaxingwang.com
baijiayun.com
@@ -14412,7 +14143,6 @@ baikezh.com
bailb.com
bailepin.com
bailiaijia.com
-bailiana.com
bailiangroup.com
bailiann.com
bailiban.com
@@ -14497,7 +14227,6 @@ baisihan.com
baisiterzh.com
baisiweiting.com
baisu.cc
-baisui100.com
baisuifc.shop
baisuizhixiang.com
baitahe.net
@@ -14505,6 +14234,7 @@ baitaihuge.com
baitanheichang.com
baitdu.com
baite666.com
+baithu.com
baitianinfo.com
baitiao.com
baitomould.com
@@ -14526,6 +14256,7 @@ baiwutong.com
baiwv.com
baixiangfood.com
baixiaosheng.net
+baixiaoxs.com
baixihuang.com
baixing.com
baixing.net
@@ -14561,12 +14292,10 @@ baizengtech.com
baizhan.net
baizhanke.com
baizhanlive.com
-baizhi.cloud
baizhouniao.com
baizhu.cc
baizlink.com
bajasaechina.com
-bajie.la
bajie1.com
bajiexinxi.net
bajintech.com
@@ -14608,6 +14337,7 @@ bamaying.com
bamboofactorychina.com
bambooolab.com
bambu-lab.com
+bambulab.com
bamengame.com
bamensq.com
bamenzhushou.com
@@ -14621,6 +14351,7 @@ bananaumbrella.com
bananaunder.com
banban.work
banbang.com
+banbanjia8.com
banbao22.com
banbijiang.com
bancai.com
@@ -14740,6 +14471,7 @@ bannei.com
banner668.com.hk
banniuyun.com
banqumusic.com
+bansha.com
banshier.com
bantangapp.com
bantouyan.com
@@ -14815,6 +14547,7 @@ baogaoku.com
baogaoting.com
baoge.net
baoguangtai.com
+baoguogroup.com
baohanghr.com
baohebao.com
baohongbao.net
@@ -14902,6 +14635,7 @@ baoxiaobar.com
baoxiaohe.com
baoxiaoke.com
baoxinchewang.com
+baoxingmuye.com
baoxinleasing.com
baoxins.com
baoxiu.com
@@ -14932,6 +14666,7 @@ baozhilin.com
baozhuang.biz
baozhuangren.com
baozi.fun
+baozi178.com
baozijishu.com
baozipu.com
baozou.com
@@ -14943,13 +14678,13 @@ baozy.com
baping.com
baqi28.com
baqiu.com
+barhuta.com
barjiang.com
barlosi.com
barman.vip
baron-bj.com
baronyhotels.com
barretlee.com
-bartender-cn.com
bartender.cc
bartymedical.com
basechem.org
@@ -14959,6 +14694,7 @@ baseopendev.com
basequan.com
basestonedata.com
bashan.com
+bashenghuo.com
bashuhuapai.com
bashuku.com
basiccat.org
@@ -14983,7 +14719,6 @@ battle-fsd.com
battlecare.net
battleofballs.com
batupian.net
-baudashiner.com
baufortune.com
bauschlombchina.com
bawagon.com
@@ -15028,6 +14763,7 @@ bb-hy.com
bb-pco.com
bb06.com
bb361a58c1015.beer
+bb39977653.com
bb3a14ca57af4d81.com
bb52e27c75560d3f.com
bb730b04b6cc8c57.com
@@ -15195,7 +14931,6 @@ bcvbw.com
bcwangluo.net
bcxgame.com
bcxgps.com
-bcxuetang.net
bcxww.com
bcy.net
bcyimg.com
@@ -15212,7 +14947,6 @@ bd689.com
bd7kzs.site
bdactivity.com
bdaenviro.com
-bdagh.com
bdajob.com
bdall.com
bdapark.com
@@ -15220,9 +14954,7 @@ bdatu.com
bdbae.com
bdc-rays.com
bdcb.cc
-bdcglb.com
bdcgslb.com
-bdcgtm.com
bdcgz.com
bdchangtujs.com
bdchina.com
@@ -15234,12 +14966,11 @@ bddlm.com
bde5fc098b5291bf.com
bdebid.com
bdeceimg.com
-bdeglb.com
bdegnine.com
-bdegslb.com
-bdegtm.com
bdf2.com
bdfczx.com
+bdfyy999.com
+bdfzkyy.com
bdg-brain.com
bdgamelive.com
bdgp.cc
@@ -15282,6 +15013,7 @@ bdsimg.com
bdsj.net
bdspacetime.com
bdstar.com
+bdstatic.cc
bdstatic.com
bdsytime.com
bdszh.vip
@@ -15293,7 +15025,9 @@ bduapp.com
bdurl.net
bdvending.com
bdwater.com
+bdwhyscjh.com
bdwkxz.com
+bdwm.net
bdwork.com
bdxc.com
bdxdgs.com
@@ -15320,6 +15054,7 @@ be-xx.com
be1775.com
be1dbb20578c1b79.com
be20e436e111e1f7.com
+be30d71aea370488.com
be7076f2b2ff2953.com
be79d8d36f962bd6.com
be84433f5ce02a66.com
@@ -15347,7 +15082,6 @@ beautifulzzzz.com
beaverbio.com
beb688d9cad7d208.com
bebhmongb.com
-bebox.net
bechangedt.com
becker-china.com
beckwai.com
@@ -15358,7 +15092,6 @@ becominggroup.com
becukwai.com
beduu.com
bee-core.com
-bee-link.com
bee-net.com
bee-station.com
bee3d.com
@@ -15367,7 +15100,6 @@ beecook.com
beedancing.com
beeeeego.com
beeflower-cn.com
-beefungames.com
beegoedu.com
beejoygames.com
beelink.com
@@ -15394,6 +15126,7 @@ bei1688.com
beiamp.net
beianw.com
beibaobang.com
+beibaozq.com
beibei.com
beibenkc.com
beicaiyuan.com
@@ -15425,6 +15158,7 @@ beifeng.com
beifuni.com
beigangyouxuan.com
beigedi.com
+beigonggroup.com
beiguorc.com
beihai365.com
beihai97.com
@@ -15455,6 +15189,7 @@ beijing-office.com
beijing-time.org
beijing-tokyo.com
beijing101.com
+beijing120.com
beijing518.com
beijingaierfei.com
beijingbang.com
@@ -15476,7 +15211,6 @@ beijingnorthstar.com
beijingrc.com
beijingrc.net
beijingtaixie.com
-beijingtianqi114.com
beijingtrucks.com
beijingwatch.com
beijingxiantour.com
@@ -15487,12 +15221,13 @@ beijingzc.com
beijingzoo.com
beijinxuetang.com
beijiu.ink
-beijqunan.com
beijzc.com
beikeba.com
beikeiot.com
beikongyun.com
+beilayl.com
beileike.com
+beileimaoedu.com
beiletoys.com
beilianjd.com
beilile.com
@@ -15503,11 +15238,10 @@ beimai.com
beimeihongfeng.com
beimeizhijia.com
beimeizhiying.com
-beimokj.com
beinglab.com
beingmate.com
beipenggroup.com
-beiqian.fun
+beipy.com
beiqujy.com
beirangroup.com
beiren-tech.com
@@ -15524,6 +15258,7 @@ beisenyl.com
beismei.com
beitaguoguo.com
beitaichufang.com
+beitao8.com
beitown.com
beitre.com
beiwaiclass.com
@@ -15552,7 +15287,6 @@ beliefbiomed.com
beliefy.com
belimked.com
belle8.com
-belleintl.com
belletrip.com
bellinlaser.com
belllan.com
@@ -15575,11 +15309,11 @@ bendi5.com
bendibao.com
bendijin.net
bendis.cc
+bendiso.com
bendiw.cc
bendizhidao.com
benduo.net
benewake.com
-benfeijd.com
benfuip.com
bengbeng.com
bengbufan.com
@@ -15591,6 +15325,7 @@ bengou.com
bengrong.com
bengtie.com
bengzhanc.com
+benhs.com
beniao.com
benjamin.fun
benkejieye.com
@@ -15635,7 +15370,6 @@ bequw.com
bequwx.org
berchina.com
berens-china.com
-beretmall.com
berfen.com
bergerda.com
berlinchan.com
@@ -15648,7 +15382,6 @@ bersilion.com
bertadata.com
berui.com
bes.ren
-besavior.com
besbranding.com
bescar.com
beschannels.com
@@ -15682,7 +15415,6 @@ bestcem.com
bestchoiceco.com
bestcloudcdn.com
bestclouddns.com
-bestcmtech.com
bestcood.com
bestcovered.com
bestcrossborder.com
@@ -15783,6 +15515,7 @@ bewellbio.com
bewg.net
bewgnn.com
beyebe.com
+beyond-perfection.com
beyondbit.com
beyondcompare.cc
beyondcomparepro.com
@@ -15819,6 +15552,7 @@ bfqh.com
bfqifu.com
bfscoc.com
bfsea.xyz
+bfsmy.com
bfssj.com
bfsu-artery.net
bfsutw.com
@@ -15864,6 +15598,7 @@ bgrimm.com
bgrwgglz.com
bgs123.com
bgsdk.net
+bgsdyz.com
bgsyb.com
bgteach.com
bgtwater.com
@@ -15877,9 +15612,10 @@ bgxcl.com
bgxu.com
bgyfhh.com
bgyfhyx.com
-bgyfw.com
bgyhotel.com
bgyhotels.com
+bgypc.com
+bgypsc.com
bgyshop.com
bgyvfs.net
bgzchina.com
@@ -15888,7 +15624,6 @@ bh-lay.com
bh-mangrove.com
bh-med.com
bh-xhhd.com
-bh.sb
bh1t.com
bh3.com
bh5.com
@@ -15915,15 +15650,12 @@ bhgjjy.com
bhgmarketplace.com
bhgroups.com
bhgsb.com
-bhgslb.com
-bhgtm.com
bhhfsc.com
bhhospital.com
bhhthl.com
bhidi.com
bhiv.pro
bhjcsc.com
-bhjh168.com
bhjinghao.com
bhjjj360.com
bhjuxian.com
@@ -15946,6 +15678,7 @@ bhsanfan.com
bhsbdcdjzx.com
bhsgnk.com
bhshtksp.com
+bhshunhui.com
bhshyy.com
bhsr.com
bhsun.com
@@ -16019,7 +15752,7 @@ biaodiandichan.com
biaodianfu.com
biaofaw.com
biaoge.com
-biaogedaquan.com
+biaoge.me
biaohs.com
biaoju01.com
biaomi.com
@@ -16090,10 +15823,12 @@ bifengxia.com
bifiv.com
big-bit.com
big-shanghai.com
+big5network.com
bigaaa.net
bigaka.com
bigan.net
bigbaicai.com
+bigballbiz.club
bigbangux.com
bigbenmeng.com
bigbigai.com
@@ -16101,9 +15836,9 @@ bigbigsun.com
bigbigwon.com
bigbigwork.com
bigbrosci.com
+bigbrx.com
bigcakegame.com
bigcat.com
-bigcoder.xyz
bigda.com
bigdata-expo.org
bigdata.ren
@@ -16117,7 +15852,6 @@ bigecko.com
bigehudong.com
bigemao.com
bigemap.com
-bigemap.net
bigerdata.com
bigerwall.com
bigeshuju.com
@@ -16127,6 +15861,7 @@ biggaming.online
biggerlens.com
biggeryun.com
bigherdsman.com
+bigjpg.com
bigniu.com
bignox.com
bigo.sg
@@ -16159,7 +15894,6 @@ bihu.work
bihuatuku.net
bihubao.com
bihuoji.com
-biiii.com
biikan.com
biioii.com
biji.com
@@ -16196,7 +15930,6 @@ bilibiligame.net
bilibilihelper.com
bilibilipay.com
bilibiliq.com
-bilibilitoy.com
bilicdn1.com
bilicdn2.com
bilicdn3.com
@@ -16232,7 +15965,6 @@ billu.cc
billwang.net
bilnn.com
bim-times.com
-bim.fashion
bimant.com
bimawen.com
bimface.com
@@ -16337,6 +16069,7 @@ biogeeker.com
biogo.net
biogot.com
bioguoke.com
+biohf.com
biohong.com
biohuaxing.com
biohyalux.com
@@ -16471,6 +16204,7 @@ bitdefender-cn.com
biteabc.com
bitech-automotive-wuhu.com
bitecoin.com
+biteedu.com
bitell.com
bitenn.com
bitgo.cc
@@ -16485,6 +16219,7 @@ bitky.cc
bitlib.cc
bitmain.vip
bitmingw.com
+bitmoe.com
bitol.net
bitongtech.com
bitonloop.com
@@ -16492,6 +16227,7 @@ bitosscdn.com
bitqiu.com
bitscn.com
bitsde.com
+bitse.com
bitvh.com
bitzsoft.com
biubiu.tv
@@ -16553,6 +16289,7 @@ bizhimiao.com
bizhiquan.com
bizhiwang.com
bizhixia.com
+bizhizj.com
bizhizu.com
bizmoto.com
biznewscn.com
@@ -16568,6 +16305,7 @@ bj-brother.com
bj-brsf.com
bj-byjz.com
bj-cronda.com
+bj-dahon.com
bj-dsmzyy.com
bj-fm.com
bj-fxh.com
@@ -16590,6 +16328,7 @@ bj-tygy.com
bj-win.com
bj-wjh.com
bj-yt.com
+bj-zkhb.com
bj003.com
bj0yx.com
bj1.api.bing.com
@@ -16607,6 +16346,7 @@ bj51.org
bj520.com
bj597.com
bj5i5j.com
+bj5iodzgyi.com
bj7z.com
bj80.com
bj918.com
@@ -16684,7 +16424,6 @@ bjdfxj.com
bjdiaoyu.com
bjdjc.com
bjdllti.com
-bjdmc.net
bjdongxin.com
bjdp2p.com
bjdsppa.com
@@ -16698,6 +16437,7 @@ bjdyyc.com
bjeasycom.com
bjebc.com
bjeesa.org
+bjef.com
bjei.com
bjent.org
bjepea.com
@@ -16789,6 +16529,7 @@ bjitic.com
bjiwex.com
bjjbbayy.com
bjjbls.com
+bjjchf.com
bjjdwx.com
bjjfsd.com
bjjhhn.com
@@ -16876,6 +16617,7 @@ bjmzdx.org
bjmzw.com
bjn2ms.net
bjnai.net
+bjnaxl.com
bjnja.com
bjnkzx.com
bjnsr.com
@@ -16902,6 +16644,7 @@ bjqtforthbase.com
bjqtsecbase.com
bjqtthirdbase.com
bjqtti.com
+bjqyjjlb.com
bjqykc.com
bjqzhd.com
bjraee.com
@@ -16940,7 +16683,6 @@ bjshdjy.com
bjsheng.com
bjshgzzxh.com
bjshowinfilm.com
-bjsht.com
bjsiasun.com
bjsinglewindow.com
bjsj5.com
@@ -16998,6 +16740,7 @@ bjtth.org
bjttsf.com
bjtvnews.com
bjtysj.com
+bjtyzh.org
bjtzeduyun.com
bjtzfy.com
bjtzzg.com
@@ -17016,7 +16759,6 @@ bjwfz.com
bjwhds.com
bjwhmedia.com
bjwig.com
-bjwkc.xyz
bjwkhotel.com
bjwkzl.com
bjwpjs.com
@@ -17041,6 +16783,7 @@ bjxtjmsb.com
bjxtkj.com
bjxueche.net
bjxwcq.com
+bjxwx.com
bjxx.vip
bjxx8.com
bjxxw.com
@@ -17056,6 +16799,7 @@ bjyczb.com
bjydzy.com
bjyestar.com
bjyhjt.net
+bjyhwy.com
bjyingge.com
bjyingyun.com
bjyirui.com
@@ -17124,6 +16868,7 @@ bjzzschool.com
bk-cdn.com
bk-cdn01.com
bk3r.com
+bk41.net
bk5u.com
bkaivl2daed.com
bkapigw.com
@@ -17133,7 +16878,6 @@ bkbyxa.com
bkcloud.cc
bkclouds.cc
bkcode.net
-bkd898.com
bkdou.com
bkeconomy.com
bkill.com
@@ -17156,8 +16900,6 @@ bktencent.com
bktsj.com
bkvps.com
bkweek.com
-bkwsq.com
-bkzhibo.com
bkzzy.com
bl.com
bl0757.com
@@ -17206,7 +16948,6 @@ bling.link
blingabc.com
blinghour.com
blingoffice.com
-blipsandchitz.me
blissmall.net
blizzardcn.com
blju.com
@@ -17220,6 +16961,7 @@ blockchainlabs.org
blockmeta.com
blockob.com
blocrepresents.com
+blog.htc.com
blog.htcvive.com
blog.vive.com
blogcdn-dns.net
@@ -17285,6 +17027,7 @@ bluedarti.com
bluedgames.com
bluedhealth.com
bluedimg.com
+bluedon.com
bluedoorindex.com
bluedotcc.com
bluefite.com
@@ -17376,12 +17119,12 @@ bmobapp.com
bmobcloud.com
bmobpay.com
bmoook.com
+bmosecuritylogin.com
bmp.ovh
bmpj.net
bmrtech.com
bmrtjt.com
bms16.com
-bms28.xyz
bmser.com
bmshow.com
bmtrip.com
@@ -17389,6 +17132,7 @@ bmw8033.com
bmwallpaper.com
bmwchina.cloud
bmwnc.com
+bmxinfang.com
bmzxw.com
bn21.com
bnacg.com
@@ -17444,6 +17188,7 @@ bobo2008.com
bobobird.com
bobohome.store
bobopic.com
+boboyq.com
bobswatchstore.com
bobtranslate.com
bocai.life
@@ -17507,7 +17252,6 @@ bohaoclub.com
bohe.com
bohejiasuqi.com
bohewangluo.com
-bohrium.com
bohu.co
bohua.com
bohuanchina.com
@@ -17522,6 +17266,7 @@ boiots.com
bojianger.com
bojiaojituan.com
bojicdmo.com
+bojie.bid
bojolight.com
bojoy.net
bojun-import.com
@@ -17549,6 +17294,7 @@ bolanjr.com
boldfrontierdesign.com
boldseas.com
bole-china.com
+bole.com
bole.name
bole766.com
bolead.com
@@ -17570,8 +17316,10 @@ bolongxm.com
bolq.com
boltp.com
boluomee.com
+boluomeet.com
boluomi01.com
boluoyun.com
+boluoyunyu.com
boluozaixian.com
bom.ai
bom2buy.com
@@ -17598,6 +17346,7 @@ bongv.com
bongwell.com
bonjour.bio
bonkee.net
+bonkgb.com
bonree.com
boobooke.com
boodo.com
@@ -17615,7 +17364,6 @@ bookedu.com
bookersea.com
bookfedex.com
bookfeel.com
-bookgew.com
booking001.com
bookingtee.com
booknest.net
@@ -17736,14 +17484,12 @@ botongr.com
botorange.com
botsfy.com
botslab.com
-botsmart.net
bottlekj.com
bouffalolab.com
bountech.com
bountyteam.com
boway.com
boweifeng.com
-bowenkj.com
bowerp.com
bowok.com
bowu66.com
@@ -17751,6 +17497,7 @@ bowuzhi.fm
box-anchor.com
box3.fun
boxdouyin.com
+boxiaole.com
boxim.online
boxisign.com
boxmoe.com
@@ -17775,6 +17522,7 @@ boydwang.com
boyi.co
boyikang.com
boyingsj.com
+boyishu.me
boylondonchina.com
boyoucy.com
boyouquan.com
@@ -17795,12 +17543,11 @@ boyuonline.com
bozhihua.com
bozhong.com
bozifs.com
+bp1w.com
bpaykwai.com
bpec.com
bpgjuice.net
-bpgslbcn.com
bpi-shop.com
-bpigagtm.net
bpmlt.com
bpmuseum.com
bpqwxsh.com
@@ -17810,11 +17557,14 @@ bpuvuun0xg.com
bpxxfw.com
bpxxvo.com
bq04.com
+bqb.xyz
bqbh.org
bqfy.com
+bqg8.cc
bqg99.cc
bqgwap.com
bqgxsw.com
+bqjeep212.com
bqlcev.com
bqpoint.com
bqq8.com
@@ -17923,7 +17673,6 @@ bs2005.com
bsagit.com
bsbgjj.com
bsbkjt.com
-bsbsb.xyz
bsbydd.com
bscabank.com
bsccdn.com
@@ -17971,7 +17720,7 @@ bskrt.com
bskuav.com
bsmatrix.com
bsmjdjzx.com
-bsncdn.ai
+bsmy.cc
bsnljt.com
bsnniubi.com
bspapp.com
@@ -17982,7 +17731,6 @@ bsrmyy.com
bsrse.com
bssfy.com
bssgnkyy.com
-bsstar.net
bst-lab.com
bstatics.com
bstbattery.com
@@ -18036,6 +17784,7 @@ btdos.com
btdy.com
btechina.com
btgame.com
+btgcjs.com
btghotels.com
btgljt.com
btgtravel.com
@@ -18065,6 +17814,7 @@ btpig.com
btplay.net
btpxbf.com
btrbdf.com
+btropdi.xyz
btsemi.com
btshidai.com
btspreads.com
@@ -18075,10 +17825,10 @@ bttiantang.com
btttg.com
bttzy.com
btv.org
-btv2011.com
btvcloud.com
btwater.com
btwmw.net
+btwoa.com
btwob.net
btxintong.com
btydjxc.com
@@ -18090,6 +17840,7 @@ btzbjt.com
btzgamepkg.com
btzhcc.com
btzthb.com
+btzyc.com
bubaigei.com
bubalusplus.com
bubbb.com
@@ -18155,13 +17906,13 @@ bukesiyi8.com
bukeyi.net
bulaisi.com
bulaoge.net
+bulapingc.com
bulbsquare.com
bulejie.com
bullcome.com
bullmachinery.com
bullvet.net
buluanmai.com
-buluken.com
bumenkeji.com
bumiu.com
bundor.com
@@ -18200,10 +17951,10 @@ butterapis.com
button-nt.com
buxia.net
buxian8.com
+buxiuga.com
buy-bar.com
buy-copi888.com
buy0596.com
-buyang.com
buyanshufa.com
buyaocha.com
buycoor.com
@@ -18225,12 +17976,9 @@ buzao.net
buzhi.com
buzhibushi.com
bva68.com
+bvcxd.com
bvfcdn.com
bvfcdn2.com
-bvfcdn3.com
-bvglb.com
-bvgslb.com
-bvgtm.com
bvgv.com
bvmc.cc
bvseo.com
@@ -18248,10 +17996,10 @@ bwcj.com
bwcjxt.com
bwda.net
bwell-tec.com
-bwespv.com
bweyi.com
bwfapiao.com
bwfhmall.com
+bwgqwea.com
bwgrt.com
bwhero.com
bwhgsb.com
@@ -18306,7 +18054,6 @@ bxwljt.com
bxwx.cc
bxwx.io
bxwx.tv
-bxwx7.com
bxxhtsw.com
bxxy.com
bxyuer.com
@@ -18322,6 +18069,7 @@ byai.com
bybieyang.com
bybily.com
byboai.com
+bybon.com
bybutter.com
byc168.com
byclean.net
@@ -18342,7 +18090,6 @@ byering.com
byf.com
byfen.com
byfen.net
-byfscl.xyz
byfunds.com
bygamesdk.com
bygpu.com
@@ -18449,7 +18196,6 @@ byteeffecttos.com
bytefae.com
bytefast.net
bytefcdn.com
-bytefcdnrd-tob.com
bytefcdnrd.com
bytegecko.com
bytegeckoext.com
@@ -18458,7 +18204,6 @@ bytegle.tech
bytegoofy.com
bytegrowth.com
bytegslb.com
-bytehiservice.com
bytehwm.com
byteics.com
byteics.net
@@ -18479,12 +18224,8 @@ byteoc.com
byteorg.com
byteorge.com
byteox.com
-byteplus-api-test.com
-bytepluses-test.com
-bytepluspcs-test.com
bytepoker.fun
byteq8u.net
-bytertcmedia.com
bytescm.com
bytesfield.com
bytesim.com
@@ -18577,6 +18318,7 @@ bzszxyy.com
bzszyy.com
bzt120.com
bztdxxl.com
+bzvtc.com
bzwater.com
bzwz.com
bzwzw.com
@@ -18603,7 +18345,6 @@ c-fol.net
c-jet.com
c-lodop.com
c-markaudio.com
-c-nbh.com
c-nin.com
c-ps.net
c-rst.com
@@ -18640,12 +18381,14 @@ c4006.com
c4008.com
c400c.cc
c402f6df11021.beer
+c4190cb63e65819b.com
c41b1d28472ea27c.com
c437dfd45f96b488.com
c43c3cb111011.beer
c469f14b911012.beer
c4752e8a51.vip
c47cb27580c5de6b.com
+c49.com
c495f3eb10d6cf13.com
c4c6c49a6453534d.com
c4d.live
@@ -18666,7 +18409,9 @@ c578801be1009.beer
c57e6607c10292.beer
c57fbfc585.skin
c5a13eec21010.beer
+c5a7e584ed460dcd.com
c5b27c7c01019.beer
+c5b3c3db298ea985.com
c5b6bpoq7q.world
c5bf2b35337761f4.com
c5game.com
@@ -18678,6 +18423,7 @@ c6a0cbdfa0be06e6.com
c6bad2ad01020.beer
c6c.com
c6n708.ren
+c7.net
c7032.com
c705e5bdb71ae01d.com
c7197.com
@@ -18689,6 +18435,7 @@ c77200.com
c77c.com
c7878.com
c7bc68c2811032.beer
+c7c1jx3ikk.bar
c7c8.com
c7fffvip16.com
c7fffvip29.com
@@ -18704,6 +18451,7 @@ c8a8b0af81014.beer
c8f8537d91013.beer
c9018.com
c919.sbs
+c944748d38bcc258.com
c953b5d8b1013.beer
c969.com
c9b5b03e0ef62dc0.com
@@ -18713,7 +18461,6 @@ c9e8e19a411012.beer
c9ec9c2f0c2de043.com
c9o8nlanfm.work
ca-aicc.com
-ca-sinfusi.com
ca-sme.org
ca-smefs.com
ca-tencentclb.cloud
@@ -18731,6 +18478,7 @@ ca315.com
ca39.com
ca5d4ce601013.beer
ca800.com
+ca91a5eb7ed4495e.com
ca9ce6rv872ce1.com
caa830d2710251.beer
caa86.org
@@ -18794,8 +18542,10 @@ cadrolift.com
cadzhuan.com
cadzxw.com
caecc.com
+caeda-cxrh.com
caeef787f1694f47.com
caeerr.com
+caeete.net
caefa.org
caein.com
caeri-te.com
@@ -18803,13 +18553,13 @@ caes.store
caexpo.com
caexpo.org
cafachine.com
+cafagame.com
cafamuseum.org
caffci.org
cagentle.com
cagetest.com
cageystone.com
cagoe.com
-cahwfeh.com
cai-ba.com
cai110.com
cai58t.com
@@ -18922,6 +18672,7 @@ cairuijun.com
caisan.io
caishen.ai
caishenpo.com
+caishenyy.com
caishuiedu.com
caisixiang.com
caistc.com
@@ -18929,6 +18680,7 @@ caistv.com
cait.com
cait1981.com
caitaimg2.com
+caitaw.com
caitun.com
caituyou.com
caiwan.com
@@ -18940,6 +18692,7 @@ caixin.com
caixinfoundation.org
caixinmedia.com
caixinonline.com
+caiyeml.pw
caiyicloud.com
caiyiduo.com
caiyu.com
@@ -18985,7 +18738,6 @@ camcap.us
camcard.com
camce-rc.com
camdihg.com
-camelotdogkennels.com
camera360.com
cameraunion.net
camhen.com
@@ -19025,7 +18777,9 @@ candiabiotech.com
candou.com
candybook.com
candycake.cloud
+candyhaw.com
candypay.com
+candystars.net
canet.com
canevent.com
canfire.net
@@ -19036,7 +18790,6 @@ cangfengzhe.com
canghaiip.com
canghaimachine.com
cangjggame.com
-cangjie-lang.net
canglanghospital.com
cangmang.xyz
cangoonline.com
@@ -19053,7 +18806,6 @@ cangya.com
cangzhouhd.com
canhighcenter.com
canhot.net
-canhui.xyz
caniculab.com
canidc.com
canjio.com
@@ -19062,6 +18814,7 @@ cankaoshouce.com
cankaoxiaoxi.com
cankaoxx.com
canlanjy.com
+cannelton.org
canonpumps.com
canpoint.net
canpopo.com
@@ -19139,12 +18892,12 @@ capitaleco-pro.com
capitalip.org
capitalonline.net
capitaltoday.com
+capjfx.club
capjoy.com
cappdr.org
caps-china.org
capsuleshanghai.com
captain-cro.com
-captainbi.com
capturetheflag.fun
capvision.com
capwhale.com
@@ -19184,7 +18937,6 @@ careerintlinc.com
careerqihang.com
careersky.org
carefiber.work
-careforbaby.com
careked.com
carelifefood.com
carellicpa.com
@@ -19216,6 +18968,7 @@ cars001.com
carschina.com
carsmp3.com
cart-med.com
+cartaocontinente-ptssta.cfd
cartech8.com
cartersda.com
carthane.com
@@ -19223,6 +18976,7 @@ cartimen.com
cartoonwin.com
cartx.cloud
carutoo.com
+carxinwen.com
carxoo.com
caryoud.com
carzd.com
@@ -19252,6 +19006,7 @@ casibase.com
casic-addsino.com
casic-t.com
casic.com
+casic3s.com
casicloud.com
casicyber.com
casis.work
@@ -19282,6 +19037,7 @@ catalyst-loading.com
catcat321.com
catchingdoll.com
catchyrime.com
+catering-shizuoka.com
catfish-cms.com
catfk.com
catguo.com
@@ -19301,7 +19057,6 @@ cattsp.com
catugbio.com
catv.net
catv114.com
-catv888.com
catweiqi.com
catyun.cc
caua1988.com
@@ -19323,7 +19078,6 @@ cb6037f1b10261.beer
cb8a5dff61011.beer
cb8e405b81014.beer
cbaleague.com
-cbarpay.com
cbbn.net
cbc32120f1014.beer
cbca.net
@@ -19336,6 +19090,7 @@ cbd-china.com
cbd0512.com
cbd263.com
cbdcn.com
+cbdd9912fb913294.com
cbdio.com
cbdstest.download.prss.microsoft.com
cbdz13.com
@@ -19346,6 +19101,7 @@ cbecx.com
cbeeexpo.com
cbes21.com
cbex.com
+cbf92cea38c259ee.com
cbfau.com
cbgcloud.com
cbhb.biz
@@ -19372,8 +19128,9 @@ cbndata.com
cbndata.org
cbnri.org
cbnweek.com
+cboad.com
cbquan.com
-cbrcw.com
+cbsbearing.com
cbsrc.com
cbtgc.com
cbtimer.com
@@ -19389,9 +19146,9 @@ cc-pharming.com
cc-q.com
cc-uavia.com
cc.co
+cc06040d408f65b1.com
cc0808.com
cc11bh.com
-cc39ute.shop
cc55k.com
cc707.com
cc7m.com
@@ -19432,7 +19189,6 @@ ccbride.com
ccbxt.com
ccc-ch.com
ccc-chn.com
-cccbn.com
cccbs.net
cccc-capital.com
cccc-sdc.com
@@ -19493,6 +19249,7 @@ ccgfie.com
ccggd.com
ccgim.com
ccgjbus.com
+ccgogogo.com
ccgoyi.com
ccgs120.net
ccgslb.com
@@ -19558,6 +19315,7 @@ ccjkncdc.com
ccjoo.com
ccjoy.com
ccjoyland.com
+ccjs120.com
ccjt.com
ccjxcn.com
ccjytv.com
@@ -19615,6 +19373,7 @@ ccopyright.com
ccostm.com
ccotcm.com
ccoymc.com
+ccp3060.com
ccpaie.com
ccpc.io
ccpc360.com
@@ -19643,6 +19402,7 @@ ccpitsd.com
ccpittex.com
ccpittj.org
ccpitxiamen.org
+ccpitxian.org
ccplay.cc
ccplay.com
ccpnt.org
@@ -19667,7 +19427,7 @@ ccsacacasfdghh.com
ccschangsha.com
ccscrbyy.com
ccsedqrmyy.com
-ccsjhbj.com
+ccsfuchan.com
ccskqyy.com
ccsngqyy.com
ccsnpower.com
@@ -19691,6 +19451,7 @@ cctcce.com
cctcct.com
cctcdn.com
cctek.com
+cctg.cc
cctheze.com
cctime.com
cction.com
@@ -19735,7 +19496,6 @@ ccvui.com
ccw.site
ccwcw.com
ccwcyw.com
-ccwhz.com
ccwifi.cc
ccwl.net
ccwonline.com
@@ -19754,6 +19514,7 @@ ccyyxx.com
cczel.com
cczjyy.com
cczk.com
+cczkdmkj.com
cczq.com
cczq.net
cczxyjhyy.com
@@ -19778,7 +19539,6 @@ cd-wx.net
cd-zc.com
cd00c44f211031.beer
cd120.com
-cd120.info
cd12371.com
cd1958.com
cd20.net
@@ -19894,6 +19654,7 @@ cdjcow.com
cdjfwy.com
cdjiaoan.com
cdjingfeng.com
+cdjituan.com
cdjnrc.com
cdjsjlxh.com
cdjsjx.com
@@ -19907,6 +19668,7 @@ cdkf.com
cdkjbg.com
cdkjw.org
cdks.run
+cdkyfc.com
cdlaobing.com
cdlbmy.com
cdlbyl.com
@@ -19930,11 +19692,11 @@ cdn-cba.com
cdn-cdn.net
cdn-gw-dv.vip
cdn-speed.com
+cdn-static.farfetch-contents.com
cdn-uc.cc
cdn-v.com
cdn.fun
cdn.jetbrains.com
-cdn.me
cdn.samsung.com
cdn.shanghai.nyu.edu
cdn.show
@@ -19944,7 +19706,6 @@ cdn08.com
cdn1.vip
cdn1008.com
cdn1218.com
-cdn123.cc
cdn16.com
cdn20.com
cdn20.info
@@ -19958,12 +19719,12 @@ cdn3344.com
cdn35.com
cdn40.com
cdn56.com
-cdn78.xyz
cdn86.com
cdn86.net
cdn90.com
cdn90.net
cdn90.org
+cdn99.com
cdnb.net
cdnbbb.net
cdnbuild.com
@@ -20004,7 +19765,6 @@ cdnhhh.net
cdnhub.net
cdnhwc1.com
cdnhwc10.com
-cdnhwc15.com
cdnhwc2.com
cdnhwc3.com
cdnhwc4.com
@@ -20102,7 +19862,7 @@ cdqph.com
cdqsng.com
cdqss.com
cdqszz.com
-cdqz.net
+cdqzcz.com
cdrbs.net
cdrcb.com
cdren.net
@@ -20148,6 +19908,7 @@ cdtianda.com
cdtkdw.com
cdtlev.com
cdtlxx.net
+cdtnrq.com
cdtszn.net
cdtyxx999.com
cdtz.net
@@ -20156,7 +19917,6 @@ cduncname.com
cdvcloud.com
cdvisor.com
cdxdyy.com
-cdxnfk.com
cdxrdz.com
cdxsxbx.com
cdxw.net
@@ -20198,6 +19958,7 @@ ce-air.com
ce04.com
ce2293.com
ce247ce247.shop
+ce71jubc2.com
cea45b9f61023.beer
ceacq.com
ceair.com
@@ -20271,7 +20032,6 @@ cekeis.com
cekid.com
celebpalace.com
celebritywallpapershq.com
-celersyn.com
celgenpharm.com
celhr.com
celiang.net
@@ -20309,6 +20069,7 @@ cencs.com
cendes-arch.com
cengceng.chat
cengcloud.net
+ceniiat.com
cenjiasu.com
cenkersz.com
cenn.com
@@ -20341,6 +20102,7 @@ centurycreation.com
centuryenglish.com
centurystar.net
centurytrip.com
+cenuan.com
cenvan.net
cenvandns.com
cenwan.com
@@ -20426,6 +20188,7 @@ cf-ns.com
cf-ns.net
cf-ns.site
cf-ns.tech
+cf01e170e475757b.com
cf115.com
cf69.com
cf6ea43741014.beer
@@ -20443,9 +20206,6 @@ cfchint.com
cfcpn.com
cfd-china.com
cfd163.com
-cfdns43.com
-cfdns5.com
-cfdns81.com
cfdp.org
cfdwater.com
cfecq.com
@@ -20465,6 +20225,7 @@ cfhuodong.com
cfido.com
cfiec.net
cfimg.com
+cfishsoft.com
cfjqr.com
cfjzyxh.com
cfkjgx.com
@@ -20485,9 +20246,9 @@ cfoft.online
cfogc.com
cfogc.net
cfpa.team
+cfrlr.com
cfsbcn.com
cfscar.com
-cfscrm.com
cfsggjt.com
cfsino.com
cfss.cc
@@ -20553,6 +20314,7 @@ cgjoy.net
cgke.com
cgkjvip.com
cgksw.com
+cgktudr.xyz
cgl.cc
cglw.com
cgmama.com
@@ -20582,7 +20344,6 @@ cgrzzl.com
cgsec.com
cgsfusion.com
cgsoft.net
-cgt48.com
cgtblog.com
cgtn.com
cgtsg.com
@@ -20620,6 +20381,7 @@ ch-guerrant.com
ch-tools.com
ch-water.com
ch.com
+ch028.net
ch12333.com
ch9888.com
ch999.com
@@ -20653,6 +20415,7 @@ chahui.com
chahuo.com
chaic.com
chaichefang.com
+chaiderl.com
chaiding.com
chaidongpower.com
chaihezi.com
@@ -20663,9 +20426,10 @@ chain56.com
chaincar.com
chaincatcher.com
chaindd.com
-chaindd.net
chainedbox.com
chainknow.com
+chainlinkpcp.com
+chainlinkwork.com
chainnode.com
chainpharm.com
chainsql.net
@@ -20702,6 +20466,7 @@ championunion.com
champsely.com
chan.ink
chance-ad.com
+chanced112.com
chancel.ltd
chandao.net
chandashi.com
@@ -20738,6 +20503,7 @@ changhaigfrp.com
changhe-suzuki.com
changhe.com
changhe.tech
+changheauto.com
changhedayun.com
changheng88.com
changhong-network.com
@@ -20753,6 +20519,7 @@ changjiangdata.com
changjiangjin.com
changjiangtimes.com
changjianxy.com
+changjingtong.com
changjiulogistics.com
changjiuqiche.com
changker.com
@@ -20773,16 +20540,19 @@ changshaship.com
changshatong.com
changshazrkj.com
changshengmobi.com
+changshengshangye.com
changshengyiliao.com
changshiban.com
changshizu.com
changshouchemgroup.com
changshu-marathon.com
+changshunhuojia.com
changtounet.com
changtubus.com
changuanjia.com
changwang.com
changwankeji.com
+changwei.asia
changx.com
changxianchem.com
changxiao.co
@@ -20828,7 +20598,7 @@ chaofan.com
chaofanlin.com
chaofanshuma.com
chaofantian.com
-chaofayin.com
+chaoge.press
chaogejiaoyu.com
chaogu1688.com
chaohuishou.com
@@ -20839,6 +20609,7 @@ chaojibuy.com
chaojicdn.com
chaojifan.com
chaojijianli.com
+chaojiping.homes
chaojituzi.net
chaojiying.com
chaojiyun.com
@@ -20885,6 +20656,7 @@ char123.com
charcaius.com
charge-mobile.com
chargedot.com
+chargerlab.com
chargerlink.com
chariotpharm.com
charlsdata.com
@@ -20894,10 +20666,13 @@ charmkeytextile.com
charmsunfund.com
chartboost-china.com
chase-secure55.wiki
+chasedorisu.com
chasedream.com
chaseyanyu.net
chashebao.com
chashudi.com
+chat12m.cfd
+chat14da.cfd
chat2db-ai.com
chat778.com
chatairc.com
@@ -20952,6 +20727,7 @@ chdmc.com
chdqyy.com
chdtp.com
che-shijie.com
+che-youhui.com
che.com
che0.com
che101.com
@@ -21013,6 +20789,7 @@ cheguo.com
chegva.com
chehang168.com
chehejia.com
+chehui.com
cheil.site
chejianding.com
chejingjie.com
@@ -21037,6 +20814,7 @@ chembible.com
chembk.com
chemcd.com
chemchina.com
+chemcp.com
chemcyber.com
chemdodgen.com
chemdrug.com
@@ -21063,6 +20841,7 @@ chemwith.com
chemyouth.com
chemyq.com
chen-design.com
+chen.fun
chenag.com
chenall.net
chenapp.com
@@ -21112,10 +20891,8 @@ chenglispv.com
chengliwang.com
chengloongcishan.org
chenglou.net
-chengmei-trout.com
chengmei.games
chengmeiyouxuan.com
-chengpan.com
chengpeiquan.com
chengrang.com
chengrengaokaobaoming.com
@@ -21137,9 +20914,9 @@ chengxiangzhineng.com
chengxinyouxuan.com
chengxua.com
chengxuan.com
-chengxuweb.com
chengyangyang.com
chengye-capital.com
+chengyi.press
chengyitex.com
chengyouyun.com
chengyuanwenquan.com
@@ -21156,6 +20933,7 @@ chenhe.cc
chenhe.me
chenhr.com
chenhuangxun.com
+chenhui.org
chenjia.me
chenjiehua.me
chenjinghealth.com
@@ -21177,6 +20955,7 @@ chenpon.com
chenpot.com
chenroot.com
chenruixuan.com
+chenruo.net
chens.life
chenshipin.com
chensuyang.com
@@ -21252,6 +21031,7 @@ chexiang.com
chexiaoliang.net
chexinmeng.com
chexiu.com
+chextx.com
chexun.com
chexun.net
cheyaoshi.com
@@ -21334,6 +21114,7 @@ china-ah.com
china-anhe.com
china-applefix.com
china-asahi.com
+china-aseanbis.com
china-audit.com
china-autotech.com
china-b.com
@@ -21394,6 +21175,7 @@ china-drama.com
china-drm.net
china-dt.com
china-dtv.com
+china-eaea.com
china-ecee.com
china-eia.com
china-embassy.org
@@ -21439,6 +21221,7 @@ china-hushan.com
china-hxzb.com
china-hzd.com
china-iace.com
+china-ida.com
china-inse.com
china-invests.net
china-ipif.com
@@ -21509,6 +21292,7 @@ china-see.com
china-seeq.com
china-sfc.com
china-shancun.com
+china-shimo.com
china-shjyx.com
china-shufan.com
china-shugaung.net
@@ -21689,7 +21473,6 @@ chinacamel.com
chinacapac.com
chinacapg.com
chinacarbide.com
-chinacaring.com
chinacars.com
chinacasa.org
chinacatel.com
@@ -21795,6 +21578,7 @@ chinadmoz.org
chinadns.com
chinadns.org
chinadongchu.com
+chinadougong.com
chinadra.com
chinadrtv.com
chinadrum.net
@@ -21833,6 +21617,7 @@ chinaesm.com
chinaet.net
chinaev100.com
chinaeve.com
+chinaexam.org
chinaexpo365.com
chinaexpressair.com
chinafa.org
@@ -21851,6 +21636,7 @@ chinafga.org
chinafiber.com
chinafic.org
chinafilm.com
+chinafilmhy.com
chinafilms.net
chinafinancenet.com
chinafinanceonline.com
@@ -21916,6 +21702,7 @@ chinagzn.com
chinahacker.com
chinahaixun.com
chinaham.com
+chinahanang.com
chinahao.com
chinahaochuan.com
chinaharp.com
@@ -21946,8 +21733,10 @@ chinahotelgz.com
chinahpa.org
chinahqjjw.com
chinahr.com
+chinahrd.net
chinahrt.com
chinahsdp.com
+chinahte.com
chinahtz.com
chinahualai.com
chinahuashan.com
@@ -21973,7 +21762,6 @@ chinaief.net
chinaielts.org
chinaiia.org
chinaiiss.org
-chinaims.org
chinainfoseek.com
chinainout.com
chinainsbrokers.com
@@ -21981,6 +21769,7 @@ chinaiol.com
chinaiprlaw.com
chinairn.com
chinairport.net
+chinait.vip
chinaitcapital.com
chinaitlab.com
chinaiut.com
@@ -22153,6 +21942,7 @@ chinaparking.org
chinapastel.com
chinapay.com
chinapayhongkong.com
+chinapbw.com
chinapcd.com
chinapearlk.com
chinapeier.com
@@ -22392,6 +22182,7 @@ chinawestagr.com
chinawie.com
chinawindnews.com
chinawinjoy.com
+chinawiserv.com
chinawitmedia.com
chinawr.net
chinaws.net
@@ -22401,6 +22192,7 @@ chinawudang.com
chinawulong.com
chinawutong.com
chinawutong.net
+chinawuyuan.com
chinawxfoundry.com
chinaxiaokang.com
chinaxidian.com
@@ -22694,6 +22486,8 @@ chrieschina.com
christophero.xyz
chrmn.com
chrome64.com
+chrome666.com
+chromecj.com
chromedownloads.net
chromefor.com
chromegw.com
@@ -22782,6 +22576,7 @@ chuangyejia.com
chuangyetv.com
chuangyijisu.com
chuangyiqifu.com
+chuangyisai.com
chuangyiwh.com
chuangyouqi.com
chuangyuan.ltd
@@ -22797,9 +22592,9 @@ chuanmeixing.com
chuannan.net
chuanpuyun.com
chuanqi.com
+chuanqiart.com
chuanshanjia.work
chuanshanqundao.com
-chuansinfo.com
chuansong.me
chuansongme.com
chuantec.com
@@ -22823,7 +22618,6 @@ chufaba.me
chufw.com
chuge8.com
chugou360.com
-chuguansmart.com
chuguo.tech
chuguohao.com
chuhai.group
@@ -22879,6 +22673,7 @@ chunyu.mobi
chunyuqiufeng.com
chunyuyisheng.com
chunzuo.com
+chuoemg.work
chuolitech.com
chuquan.me
churenjixie.com
@@ -22904,6 +22699,7 @@ chuxinhudong.com
chuxinvip.com
chuxueyun.com
chuyaer.com
+chuyigao.com
chuyu.me
chuzhaobiao.com
chvacuum.com
@@ -22917,8 +22713,8 @@ chxin-oil.com
chxq.org
chxyl.com
chxyq.com
-chysan.com
chysoft.net
+chyw.pub
chyxx.com
chyyyygl.com
chz.cc
@@ -22936,7 +22732,6 @@ ci123.com
ci800.com
ciaie.com
ciallo.cc
-ciallo.party
ciaoca.com
ciapst.org
cibaike.com
@@ -22952,6 +22747,7 @@ ciboedu.org
cibonet.com
cibresearch.com
cibuser.com
+cic-js.com
cicadayun.com
cicaf.com
cicba.net
@@ -22973,11 +22769,11 @@ cicphoto.com
cict.com
cidf.net
cidi.ai
+cidianbao.com
cidiancn.com
cidianso.com
ciding.cc
cidschina.com
-cidu.net
ciduw.com
cie-lgr.com
cieaast.com
@@ -22988,7 +22784,6 @@ ciecte.com
ciecworld.com
ciedata.com
cieet.com
-ciefc.com
ciepe.com
cietac-hb.org
cietac-sc.org
@@ -23005,7 +22800,6 @@ ciftis.org
cig-cq.com
cigadesign.com
cigarambassador.com
-cige.net
cigh.com
cignacmb-ipmi.com
cignacmb.com
@@ -23064,7 +22858,6 @@ cindasoft.com
cinehello.com
cineplexsn.com
cingta.com
-ciniaoppt.com
cinic.com
cinsee.com
cinsos.com
@@ -23079,6 +22872,7 @@ ciou.com
cioxom-top.com
cip.cc
cipgtrans.com
+cipherupcloud.com
ciplawyer.com
cippe.net
ciprun.com
@@ -23131,6 +22925,7 @@ citisa.org
citiz.net
citizenmech.com
citreport.com
+cits-jl.com
cits-sz.net
citsbj.com
citscq.com
@@ -23193,6 +22988,8 @@ ciyuans.com
ciyynodegroup.cyou
cizip.com
cj0515.com
+cj5bs.com
+cj5bs.net
cj8.ren
cjaljs.com
cjasen.com
@@ -23240,6 +23037,7 @@ cjjd19.com
cjjd20.com
cjjhb.com
cjjhk.com
+cjjjs.com
cjjnff.com
cjk3d.net
cjkhd.com
@@ -23261,7 +23059,6 @@ cjnas.com
cjnis.com
cjol.com
cjs-lwh.love
-cjs001.com
cjsc.com
cjsgegs.com
cjshipin.net
@@ -23294,11 +23091,13 @@ cjzzc.com
ck-coinmcap.lol
ck0771.com
ck100.com
+ck180.net
ck586.com
ck830.com
ck921.com
ckair.com
ckan.tv
+ckbv165.org
ckd-mbd.com
ckd.im
ckd.so
@@ -23318,12 +23117,14 @@ ckjr001.com
ckjryy.com
ckpharm.com
ckplayer.com
+ckqjyjq.xyz
cksct.com
cksic.com
cksschool.com
cksx.org
cktshare.com
ckuai.com
+ckw205.com
ckxx.net
ckzcc.com
ckzhaoyaojing.com
@@ -23347,7 +23148,6 @@ claritywallpaper.com
classa-z.com
classcms.com
classic023.com
-classin.com
classinpaas.com
classmateer.com
classpassincn.com
@@ -23385,7 +23185,6 @@ clearsky360.com
cleartone.club
clevercn.net
cleveroom.com
-cleverschool.com
clewm.net
clfcgc.com
clfdked.icu
@@ -23414,7 +23213,6 @@ clivia.fun
clj178.com
cljport.com
cljtscd.com
-clkf.net
clled.com
cllk.net
clloz.com
@@ -23426,6 +23224,8 @@ cloopen.com
cloopen.net
cloopm.com
closeli.work
+closertb.site
+clothinggg.store
clothjob.com
clothr.com
clotliu.com
@@ -23458,6 +23258,7 @@ cloud-zhaoqing.com
cloud-zhongwei.com
cloud21cn.com
cloud301.net
+cloud887325.com
clouda.com
cloudacc1.com
cloudacc1.net
@@ -23508,7 +23309,6 @@ cloudflareperf.com
cloudflareprod.com
cloudflarestaging.com
cloudflarestoragegw.com
-cloudflvare.com
cloudfoshan.com
cloudfront-cn.net
cloudfuqing.com
@@ -23596,7 +23396,6 @@ cloudstudio.run
cloudstudio.work
cloudsuqian.com
cloudswift.cloud
-cloudt.chat
cloudtalkers.com
cloudtangshan.com
cloudtencents.com
@@ -23671,11 +23470,11 @@ cm-inv.com
cm-iov.com
cm-worklink.com
cm1.hk
-cm2.hk
cm233.com
cm3721.com
cm442.com
cmacredit.org
+cmaif.com
cmakaoj.com
cmanuf.com
cmb-leasing.com
@@ -23724,6 +23523,8 @@ cmdcxls.com
cmdpe.com
cmdschool.org
cmdsir.com
+cmdw.vip
+cme-am.com
cme-cq.com
cme021.com
cmea-crtc.com
@@ -23800,7 +23601,6 @@ cmskcrm.com
cmsta.org
cmstop.com
cmstp.com
-cmswat.com
cmswin.com
cmt1993.com
cmt7.com
@@ -23865,7 +23665,6 @@ cn-msedge.net
cn-mw.com
cn-natural.com
cn-only.com
-cn-orient.com
cn-psy.com
cn-railway.net
cn-rcqc.com
@@ -23875,7 +23674,6 @@ cn-sdf.com
cn-shine.com
cn-soft.com
cn-tf.com
-cn-tn.com
cn-tom.com
cn-truck.com
cn-unitech.com
@@ -23893,6 +23691,7 @@ cn.mm.bing.net
cn.net
cn.pool.ntp.org
cn.sc.com
+cn.windowssearch.com
cn0-6.com
cn006.com
cn010w.com
@@ -23947,7 +23746,6 @@ cnalu.com
cnambition.com
cname-cdn.com
cname-syd.com
-cname0.com
cname123.net
cname88.com
cnamegslb.com
@@ -23961,12 +23759,10 @@ cnats.com
cnautofinance.com
cnautonews.com
cnautotool.com
-cnazd.com
cnb.cool
cnb.run
cnb.space
cnbabylon.com
-cnbaiyin.com
cnball.net
cnbanbao.com
cnbang.net
@@ -23989,6 +23785,7 @@ cnblower.com
cnbm-njks.com
cnbmltd.com
cnbmtech.com
+cnbmys.com
cnbnl.com
cnboat.com
cnbonly.com
@@ -24050,6 +23847,7 @@ cncn.com
cncn.net
cncncn.com
cncnet.net
+cncnki.com
cncolour.com
cncompute.com
cncoolm.com
@@ -24185,6 +23983,7 @@ cnfrp.com
cnfrp.net
cnfruit.com
cnfth.com
+cnfuhuaqi.com
cnfuyin.org
cnfxc.com
cnfxj.org
@@ -24258,7 +24057,7 @@ cnhuafag.com
cnhuafas.com
cnhuanya.com
cnhubei.com
-cnhuilv.com
+cnhvacrnet.com
cnhwjt.com
cnhyc.com
cnhyjt.com
@@ -24398,7 +24197,6 @@ cnmansi.com
cnmarathon.net
cnmarinefan.com
cnmattson.com
-cnmcdn.com
cnmcl.net
cnmdy.com
cnmec.biz
@@ -24430,10 +24228,10 @@ cnmsn.net
cnmstl.net
cnmtpt.com
cnmuseum.com
-cnmvps.com
cnn100.com
cnnb.com
cnnbfdc.com
+cnnbsa.com
cnncbhy.com
cnncguilin.com
cnndns.com
@@ -24505,9 +24303,9 @@ cnponer.com
cnpot.com
cnpou.com
cnpoultry.com
+cnpowdertech.com
cnpp100.com
cnppa.org
-cnprac.xyz
cnpressphoto.com
cnprofit.com
cnprs.com
@@ -24519,6 +24317,7 @@ cnpxyy.com
cnpython.com
cnqc.com
cnqcc.com
+cnqd.net
cnqiang.com
cnqichun.com
cnqifeng88.com
@@ -24575,6 +24374,7 @@ cnsetsail.com
cnsfk.com
cnshende.com
cnshexinji.com
+cnshiri.com
cnshjy.com
cnshuizu.com
cnshzm.com
@@ -24694,6 +24494,7 @@ cnxad.com
cnxcjt.com
cnxclm.com
cnxct.com
+cnxds.com
cnxdw.com
cnxfans.com
cnxhyp.com
@@ -24780,7 +24581,6 @@ coach-edu.com
coach-japanese.com
coahr.net
coalcloud.net
-coalmo.com
coalstudy.com
coantec.com
coaoo.com
@@ -24810,6 +24610,7 @@ cocophp.com
cocos.com
cocos.org
cocos2d-x.org
+cocos2d.org
cocos2dx.net
cocosgame.net
cocounion.com
@@ -24817,7 +24618,7 @@ cocozq.com
cocss.com
codante.org
code-abc.com
-code-relay.com
+code-by.org
code222.com
code369.com
code666.com
@@ -24844,7 +24645,6 @@ codeios.com
codekissyoung.com
codekk.com
codelife.cc
-codelink.vip
codemart.com
codenews.cc
codeofchina.com
@@ -24961,6 +24761,7 @@ colipu.com
collaborate.download.prss.microsoft.com
collaborateppe.download.prss.microsoft.com
collect-med.com
+collect-v6-51.la
college-ing.com
collt.org
colly-pink.com
@@ -24969,7 +24770,6 @@ colocess.com
color-measure.com
color365.com
colorbird.com
-colorfulclouds.com
colorfulclouds.net
colorfulltech.net
colorimeter.com
@@ -24978,6 +24778,7 @@ coloros.net
colortechchina.com
colorv.com
coloryr.com
+colosseo7143.xyz
colourlife.com
columbia-china.com
columbia-kaiyuan.com
@@ -25008,6 +24809,7 @@ comeyes.com
comflowy.com
comfylink.com
comiai.com
+comic520.com
comicdd.com
comicer.com
comicfans.net
@@ -25020,8 +24822,6 @@ comlan.com
comlbs.com
commchina.net
comme.work
-commonpcs-test.com
-commonpcs.com
communicatte.com
comnergy.com
comocloud.net
@@ -25052,6 +24852,7 @@ con3c.com
conan06.com
conantoptical.com
conbagroup.com
+conceptan.com
conchdate.com
conchdesktop.com
conco-esd.com
@@ -25068,6 +24869,7 @@ conew.com
confluxrpc.com
conghua.com
congmiqq.com
+congresobolivariano.org
congrongfund.com
congtoo.com
congtoukaishi.com
@@ -25090,6 +24892,7 @@ console-integration.cdnetworks.com
console.cdnetworks.com
constao.com
constar-gd.com
+constasj.me
constgroup.com
content4ads.com
contentchina.com
@@ -25120,6 +24923,7 @@ coohua.com
cooioo.com
cookcai.com
cookicut.com
+cookie4you.com
cookiezhong.com
cool-admin.com
cool-de.com
@@ -25151,6 +24955,7 @@ coolight.cool
coolkaba.com
coolkit.cc
coolkk.net
+coolku.cc
coollf.com
coolmitech.com
coolnull.com
@@ -25256,6 +25061,7 @@ cosz.com
cotek-robotics.com
cotong.com
cotticoffee.com
+cottonchina.org
cotv.tv
couas.com
couns.com
@@ -25348,6 +25154,7 @@ cplamc.com
cplotus.com
cpm1000.com
cpmiao.net
+cpmrc.org
cpo2o.com
cpolar.com
cpolive.com
@@ -25363,6 +25170,7 @@ cppdebug.com
cppfoto.com
cpph.com
cpplay.com
+cppoly.com
cpppf.org
cpqrmyy.com
cproton.com
@@ -25390,7 +25198,6 @@ cpury.com
cpuxn.com
cpwlx.com
cpwnews.com
-cpwxw.net
cpwzb.com
cpzls.com
cpzst.com
@@ -25560,6 +25367,7 @@ cqguangrong.com
cqguli.com
cqguohua.com
cqguorui.com
+cqgwd.com
cqgwy.org
cqgwzx.com
cqgxjscy.com
@@ -25603,6 +25411,7 @@ cqhwzs.com
cqhxdbj666.com
cqhxeye.com
cqhxf.com
+cqhxfk.com
cqhxgf.com
cqhxyy.com
cqhxzz.net
@@ -25627,6 +25436,7 @@ cqipc.net
cqirobot.com
cqiss.com
cqit.com
+cqiter.com
cqiti.com
cqitic.com
cqivc.com
@@ -25679,6 +25489,7 @@ cqkejufu.com
cqkepu.com
cqkerui.com
cqkexun.com
+cqkeye.com
cqkfb.com
cqkhjt.cc
cqkjb.com
@@ -25694,6 +25505,7 @@ cqkytech.com
cqkytq.com
cqlaifu.com
cqlandtower.com
+cqlba.com
cqld.com
cqlfn.com
cqlhyy.com
@@ -25803,9 +25615,11 @@ cqrksw.com
cqrm.com
cqrmb.com
cqrmrq.com
+cqrqdx.com
cqrwys.com
cqryxfp.com
cqs-hm.com
+cqsaea.com
cqsamr.com
cqscmy.net
cqsdei.com
@@ -26075,7 +25889,6 @@ crbbg.com
crbc.com
crbeverage.com
crbiopharm.com
-crbybosh.com
crc-bj.com
crc.com.hk
crc.hk
@@ -26095,7 +25908,6 @@ crcrfsp.com
crcsz.com
crct.com
crctrust.com
-crdietitian.org
cre.net
cread.com
creality.com
@@ -26105,6 +25917,7 @@ createcdigital.com
createpoint.qti.qualcomm.com
createw.com
createwf.com
+creati5.com
creation-bj.com
creationventure.com
creative-micro.com
@@ -26163,6 +25976,7 @@ crimoon.net
crimoscow.com
crinductance.com
crisydney.com
+criwashington.com
crjfw.com
crl.globalsign.net
crl.kaspersky.com
@@ -26179,7 +25993,6 @@ crmicro.com
crmip.com
crmyy.com
crnews.net
-crntt.com
crodigy.com
crodigynat.com
croot.com
@@ -26201,7 +26014,6 @@ crpcg.com
crpharm.com
crracelve.com
crrcgc.cc
-crrcgo.cc
crs811.com
crsc.cc
crscm.com
@@ -26315,7 +26127,6 @@ csgasgroup.com
csgcjxxh.com
csgcyy.com
csgfjc.com
-csgholding.com
csghy.com
csgjhzzx.com
csgjjt.com
@@ -26323,7 +26134,6 @@ csgkjt.com
csgky.net
csgocn.net
csgongshui.com
-csgozbt.com
csgpc.org
csgwexpo.com
csgxyl.com
@@ -26403,6 +26213,7 @@ csmxh.com
csmzxy.com
csnbgsh.com
csnhjyxx.com
+csnhszjy.com
csnzxl.com
csoly.com
csomdmyxy.com
@@ -26418,7 +26229,6 @@ cspplaza.com
cspro.org
cspruc.com
csptia.org
-csqaq.com
csqsg.com
csrcare.com
csrcbank.com
@@ -26466,6 +26276,7 @@ cst6.com
cstccloud.org
cstcloud.net
cstcq.com
+cstech.ltd
csteelnews.com
cstexun.com
csthxx.com
@@ -26508,7 +26319,6 @@ csxsrcw.com
csxww.com
csy17.com
csyamei.com
-csydkj.com
csyestar.com
csykgs.com
csylxy.com
@@ -26541,6 +26351,7 @@ ct-emall.com
ct-laser.com
ct-parking.com
ct108.com
+ct52.com
cta613.org
ctaca.com
ctags.net
@@ -26643,6 +26454,7 @@ ctmcq.com
ctmgid.com
ctmon.com
ctmwow.com
+ctn1986.com
ctnma.com
ctntech.com
ctnyypt.com
@@ -26666,7 +26478,6 @@ ctripbuy.hk
ctripc.com
ctripcorp.com
ctripgslb.com
-ctripgslb.net
ctripins.com
ctripqa.com
ctrmi.com
@@ -26690,6 +26501,7 @@ cttms.com
cttpptrs-pt.cfd
cttptru-pt.icu
cttq.com
+cttsd.com
cttv.co
ctuaa.com
ctvpost.com
@@ -26698,6 +26510,7 @@ ctvwx.com
ctwx.net
ctxcdn.com
ctxcdn.net
+ctxcollect.com
ctxcpa.com
ctxirang.com
cty9.com
@@ -26770,7 +26583,6 @@ cummins-cq.com
cumtenn.com
cumulon.com
cunan.com
-cuncc.cc
cuncunle.com
cunfang.com
cunhao.net
@@ -26853,6 +26665,7 @@ cwems.com
cwestc.com
cweun.org
cwewater.com
+cwfls.com
cwgarnet.com
cwiaj.com
cwjedu.com
@@ -26927,6 +26740,7 @@ cxsk.work
cxsm.com
cxstar.com
cxsteel.com
+cxstgc.com
cxsw3d.com
cxta.com
cxthhhhh.com
@@ -26988,6 +26802,7 @@ cyberway-china.net
cybstar.com
cybtc.com
cyc2018.xyz
+cychaiqian.com
cyclemixcn.com
cyclewell.com
cyclingchina.net
@@ -27147,6 +26962,7 @@ czgongzuo.com
czgtjt.com
czguangfu.org
czhaobiao.com
+czhjs.com
czhmjx.com
czhtff.com
czhuayuansuye.com
@@ -27156,6 +26972,7 @@ czinfo.net
czitc.com
czjake.com
czjdgz.com
+czjdjt.com
czjdu.com
czjfa.com
czjiangteng.com
@@ -27203,7 +27020,6 @@ czsrc.com
czsrmyy.com
czsshb.com
czstx.net
-czsvip.com
czswdx.com
cztaojiu.com
cztrjs.com
@@ -27234,16 +27050,15 @@ czyongfeng.com
czypcb.com
czyuxing.com
czyxba.com
-czyzd.com
czzqp.com
czzsw.com
czzy-edu.com
czzyc.com
-czzyv.com
czzyvideo.com
czzzbwg.com
d-controls.com
d-ctrip.com
+d-d.design
d-heaven.com
d-innovation.com
d-long.com
@@ -27268,6 +27083,7 @@ d1be4a4fdf902c14.com
d1c73dbb1de91850.com
d1cm.com
d1com.com
+d1cy.com
d1dengju.com
d1dytt.com
d1ev.com
@@ -27286,6 +27102,7 @@ d1xn.com
d1xny.com
d1y.cc
d20d0896ac7f79d3.com
+d22fa4e66e2dbda2.com
d23c41a0511031.beer
d27c2e00d10251.beer
d2940a1d3924e37f.com
@@ -27315,29 +27132,33 @@ d475a937d0e92b96.com
d48c3443110281.beer
d4cd5439c1009.beer
d4ctech.com
-d5168.com
d54a00143de85b64.com
d56c84cfb4a786f7.com
d58.net
d5a18ed7b2f74e45.com
+d5h.net
d5power.com
d5render.com
d5xs.net
d65d6.com
+d65fee3222cbaf80.com
d6861213910261.beer
d6ffdb55d1009.beer
d7585a05210281.beer
d777.com
d7e29629277.luxe
+d7ftpecw.work
d7vg.com
d7w.net
d7ytrv7yxa.com
d837c367d34d7bb5.com
+d8e8664c05df452c.com
d8fb1ffab10251.beer
d8th.com
d90eeacb0ed722f9.com
d920c164caf0ebba.com
d959fb95dd5cc433.com
+d9741b1859dfcfee.com
d99net.net
d9b5cc7f82ccfc18.com
d9j8.com
@@ -27391,6 +27212,7 @@ daccc.com
daccf.com
dachanet.com
dachao.com
+dachaoshan.org
dachengbiochemical.com
dachengge.com
dachenglaw.com
@@ -27405,7 +27227,6 @@ dad86b446ac9f8b7.com
dada114.net
dada360.com
dadaabc.com
-dadacart.com
dadagame.com
dadagem.xyz
dadajiasu.com
@@ -27426,6 +27247,7 @@ dadicinema.com
dadighost.com
dadikid.net
dadisalt.com
+dadiwang.com
dadiyimao.com
dadongwu.com
dadou.com
@@ -27446,7 +27268,6 @@ dafanshu.com
dafaun.com
dafenghk.com
dafenghk.net
-dafga9.com
dafmgroup.com
dafork.com
dafosi.org
@@ -27471,6 +27292,7 @@ dahangsky.com
dahangzhou.com
dahantc.com
dahanyinbang.com
+dahanyu.com
dahao-dahao.com
dahaoexpo.com
daheapp.com
@@ -27539,8 +27361,6 @@ dainiter.com
dairao.net
daishangqian.com
daishanmarathon.com
-daishi-edu.net
-daishi-jy.com
daishu.com
daishucha.com
daishujiankang.com
@@ -27551,6 +27371,7 @@ daivc.com
daiwofly.com
daiwoqu.com
daixiaji.net
+daixiaobao.com
daixiaomi.com
daixiaorui.com
daiyanbao.com
@@ -27600,6 +27421,7 @@ dakaruanwen.com
dakasi.com
dakedakedu.com
dakejie.com
+dakekj.com
dakele.com
dakw.xyz
dalanyouxi.com
@@ -27621,6 +27443,7 @@ dalianxianting.com
daliaolaser.com
daliapp.net
dalidaily.com
+dalidm.com
dalifa.com
daliha.com
dalipan.com
@@ -27636,6 +27459,10 @@ daluwang.net
daluxinxi.com
dalvhe.com
dalvlaw.com
+dalwiaavieru.com
+dalwiaebulon.com
+dalwiakieyne.com
+dalwiaresham.com
dalyfeds.com
damai.com
damaicheng.com
@@ -27650,10 +27477,10 @@ damiercapital.com
damijing.com
damingweb.com
damiw.com
+damixs.biz
damndigital.com
damo-academy.com
damodel.com
-damon-group.com
damonroller.com
damotu.com
damoyang.com
@@ -27671,7 +27498,6 @@ dance365.com
danceinchina.org
dancf.com
danchuangglobal.com
-danchun.me
dancihu.com
dancingcg.com
dancizhan.com
@@ -27714,6 +27540,7 @@ dangzhi.net
dangzhu.net
dangzhuntianqi.com
danhao51.com
+danhaowang.org
danhuaer.com
danhuangyun.com
daniao.org
@@ -27725,6 +27552,7 @@ daniopack.com
daniuguwang.com
daniuit.com
daniujiaoyu.com
+daniushiwan.com
daniuwangxiao.com
danji100.com
danji6.com
@@ -27765,7 +27593,6 @@ dantuvc.com
danxia.com
danxin.net
danyang.com
-danyue.site
danzhaoedu.com
danzhou8.com
dao-fu.com
@@ -27789,7 +27616,6 @@ daodoc.com
daododo.com
daoduoduo.com
daofengdj.com
-daogou.ai
daoguo.com
daohang198.com
daohang4.com
@@ -27810,6 +27636,7 @@ daokers.com
daokeyuedu.com
daokoudai.com
daomengad.com
+daomengren.com
daomicfo.com
daomuol.com
daonong.com
@@ -27840,6 +27667,7 @@ dapan.com
dapei.cc
dapenti.com
dapingshidai.com
+dapiniu.com
dapustor.com
daqi.com
daqiao.host
@@ -27881,6 +27709,7 @@ dasctf.com
dasfbio.com
dasfjd.com
dashangu.com
+dashen8.com
dashengji.com
dashengpan.com
dashengshan.com
@@ -27909,6 +27738,7 @@ dasung.com
dasungtech.com
dat881.com
data380.com
+data4h.com
data5u.com
data86.com
data86.net
@@ -27948,6 +27778,7 @@ dataojo.com
dataoke.com
datarelab.com
datarj.com
+datasheet.hk
datasheet5.com
datastoragesummit.com
datatang.com
@@ -27956,7 +27787,6 @@ datatist.com
datatocn.com
datatool.vip
datauseful.com
-datawindexmarket.com
dataxcrm.com
datayes.com
datazt.com
@@ -27967,6 +27797,7 @@ datesdata.com
datia-inspect.com
datianmen.com
datk.anythinktech.com
+datong.info
datongjianshe.com
datongtaxi.com
datuc.com
@@ -27995,11 +27826,9 @@ dawndiy.com
dawnjs.com
dawnlab.me
dawnled.net
-dawnmic.com
dawntech.net
dawuhanapp.com
dawurencai.com
-dawushiye.com
dawuyu.com
dawx.com
dawx.net
@@ -28020,11 +27849,13 @@ daxishi.com
daxitouzi.com
daxue52.com
daxuecidian.com
+daxueit.com
daxuejiayou.com
daxuelu.com
daxuepc.com
daxuesoutijiang.com
daxuewang.com
+day66.com
dayaguqin.com
dayainfo.com
dayang.group
@@ -28120,7 +27951,7 @@ dazhong.com
dazhongbanben.com
dazhonghr.com
dazhongkanche.com
-dazhongyi.cc
+dazhoumzj.com
dazhoushan.com
dazhouwater.com
dazhu1988.com
@@ -28184,6 +28015,8 @@ dbqgg.com
dbs724.com
dbscar.com
dbshop.net
+dbss360.com
+dbtclub.com
dbyun.net
dc-cn.com
dc0792.com
@@ -28234,7 +28067,6 @@ dcpc.com
dcpfb.com
dcqsq.com
dcsapi.com
-dcshfu.com
dcshow.com
dcsjw.com
dcsme.org
@@ -28251,7 +28083,6 @@ dcyjc.com
dcyz.com
dcyzq.com
dczcsc.com
-dczcy.com
dczkj.com
dczy168.com
dd-advisor.com
@@ -28266,6 +28097,7 @@ dd0d7e15310311.beer
dd0ss-waf.com
dd128.com
dd2007.com
+dd208.com
dd369.com
dd373.com
dd4.com
@@ -28296,6 +28128,7 @@ dddja.com
dddki.com
dddkq.com
dddwan.com
+dde-desktop.org
ddedush.com
ddfans.com
ddfchina.com
@@ -28347,16 +28180,19 @@ ddpai.com
ddpoc.com
ddqcw.com
ddsaas.com
+ddsiojf.xyz
ddsk.la
ddsm.com
ddstarapp.com
ddsy.com
ddtk.vip
+ddtsg.com
ddtugame.com
ddun.com
ddunyun.com
ddurl.to
dduser.mobi
+dduwork.com
ddvaj.com
ddweilai.com
ddwgame.com
@@ -28415,6 +28251,7 @@ deathearth.com
deau-cable.com
deb1c7bad11031.beer
debao.com
+debao123.com
debaochina.com
debbe32e10b635a7.com
deben.me
@@ -28432,10 +28269,12 @@ decerp.cc
dechang-chem.com
dechingroup.com
dechlogi.com
+dechong.site
dechua.com
deckmanager.net
declous.com
decohome.cc
+decoration.ltd
decorcn.com
decwhy.com
deczh.com
@@ -28458,6 +28297,7 @@ deehon.com
deemos.com
deep56.com
deepblog.net
+deepc.cc
deepcloudsdp.com
deepcoin.red
deepcool.com
@@ -28467,6 +28307,7 @@ deepfast.com
deepin-ai.com
deepin.com
deepin.org
+deepinghost.com
deepinmind.com
deepinos.org
deepinout.com
@@ -28517,7 +28358,6 @@ dehuigroup.com
dehuisk.com
dehuiyuan.com
deifgs.com
-deipei.com
dejiart.com
dejiplaza.com
dekeego.com
@@ -28571,10 +28411,12 @@ deluya.com
demanmedical.com
demark-jgkj.com
demaxmedical.com
+demingzi.com
demix.cc
demixc.com
demizhongbao.com
demlution.com
+demo-15.work
demo1024.com
demo8.com
demodashi.com
@@ -28610,7 +28452,6 @@ denopark.com
denson168.com
dentistshow.com
denza.cloud
-denza.com
denzacloud.com
deosen.com
deosin.com
@@ -28669,6 +28510,7 @@ desunpv.com
desuntech.com
deswfggabc.work
detailroi.com
+deteufelde.shop
detion.com
detonfan.com
detonger.com
@@ -28682,6 +28524,7 @@ devclub.cc
devedu.net
develenv.com
developer.htcvive.com
+developer.microsoft.com
developer.vive.com
developers.pub
developwechat.com
@@ -28698,6 +28541,7 @@ devio.org
devops-dev.com
devotiongroup.com
devourad.com
+devpss.com
devsapp.net
devsiki.com
devskyr.com
@@ -28760,7 +28604,6 @@ df3n43m.com
df81.com
df962388.com
dfb232ce910241.beer
-dfcdn.com
dfcfs.com
dfcfw.com
dfcms.net
@@ -28768,6 +28611,7 @@ dfcx-bj.com
dfdaily.com
dfdd-toubiaole.com
dfdinsin.com
+dfdtt.com
dfebda0512.vip
dfedu.com
dfeeb7ee91022.beer
@@ -28789,6 +28633,7 @@ dflzm.com
dflzmxs.com
dfmc.com
dfmcastrol.com
+dfmingya.com
dfnzhp.com
dfpost.com
dfqcmy.com
@@ -28819,6 +28664,7 @@ dfyapp.com
dfyl-luxgen.com
dfynet.com
dfyoo.com
+dfysgs.com
dfysscy.com
dfysw.net
dfyuan.com
@@ -28917,6 +28763,7 @@ dgsztyy.com
dgt-factory.com
dgtianbao.xin
dgtle.com
+dgtn1718.org
dgtpcj.com
dgtungwah.com
dgtuoyue.com
@@ -28925,6 +28772,7 @@ dgweierwj.com
dgweitian.com
dgwia.com
dgwlhj.com
+dgwtrl.com
dgxbjg.com
dgxinde.net
dgxue.com
@@ -28968,6 +28816,7 @@ dhbs86.com
dhchain.com
dhcooker.com
dhdly.com
+dhg858a07.shop
dhgsqjcnd.com
dhgsqjcnj.com
dhgsqjcnm.com
@@ -29003,7 +28852,6 @@ dhszyy.net
dht5867.com
dhtest.com
dhtopology.com
-dhtsm.com
dhtv.tv
dhuili.com
dhvisiontech.com
@@ -29149,6 +28997,7 @@ dianzhenkeji.com
dianzhentan.com
dianzhi.com
dianzhong.com
+dianzi6.com
dianziaihaozhe.com
dianzihetong.net
dianzixuexi.com
@@ -29218,7 +29067,6 @@ didibuluo.com
didichuxing.com
dididapiao.com
dididi88.com
-didifinance.com
didiglobal.com
didimobility.com
didiopenapi.com
@@ -29264,6 +29112,7 @@ digitalchinahealth.org
digitalcloudshield.com
digitalcnzz.com
digitalcq.com
+digitalfiles.org
digitaling.com
digitaljx.com
digitalmanu.com
@@ -29386,7 +29235,6 @@ dingsheng.com
dingso.com
dingtalk.co.jp
dingtalk.com
-dingtalk.io
dingtalk.net
dingtalkapps.com
dingtalkcloud.com
@@ -29406,9 +29254,7 @@ dingyantec.com
dingyao17.com
dingyue-ele.com
dingyueads.com
-dingyunwl.com
dingzhijl.com
-dingzhiyou.org
dingzhoudaily.com
dingzhourencai.com
diningcity.asia
@@ -29426,15 +29272,14 @@ dipan.com
dipephoto.com
dipont.com
dippstar.com
-diqcdbc.com
diqiuw.com
diqua.com
dir001.com
dir28.com
-dircleaner.com
directorfeng.com
directui.com
dis9.net
+disccrds.com
discount-polska.store
discourse-studies.com
discoversources.com
@@ -29458,7 +29303,6 @@ dismall.com
displink.com
distantmeaning.com
distinctclinic.com
-distinctech.com
ditai.fun
ditan.com
ditan360.com
@@ -29487,7 +29331,6 @@ dixintong.com
diy10.com
diyahz.com
diybcq.com
-diybuy.net
diydiymall.com
diygogogo.com
diygw.com
@@ -29570,6 +29413,7 @@ djiits.com
djiops.com
djiservice.org
djjgj.com
+djjlseo.com
djjw.com
djjyzly.com
djkk.com
@@ -29578,7 +29422,6 @@ djksh.com
djksq.com
djkxl.com
djlcom.net
-djll.fun
djlmvip.com
djlsoft.net
djm-bj.com
@@ -29611,6 +29454,7 @@ dk-lexus.com
dk8s.com
dkdangle.com
dkdgroup.com
+dkdsfrwety.xyz
dkewl.com
dkfinancing.com
dkgyw.com
@@ -29681,6 +29525,7 @@ dllzj.com
dlmeasure.com
dlmianshuiche.com
dlmonita.com
+dlmyzf.com
dlmzk.com
dlnel.com
dlnel.org
@@ -29725,16 +29570,19 @@ dlztb.com
dlzxyy.com
dlzyc.com
dm0775.com
+dm300.com
dm456.co
dm5.com
dm591.com
dm5u.com
dm67.com
dm9.com
+dma13.org
dmacg.net
dmaking.com
dmall.com
dmallcdn.com
+dmallovo.com
dmb168.com
dmcdn.com
dmd968.com
@@ -29742,6 +29590,7 @@ dmdaili.com
dmeiti.com
dmeiti.net
dmeng.net
+dmentt.help
dmgapp.com
dmggb.com
dmgpark.com
@@ -29781,6 +29630,7 @@ dmzfa.com
dmzgame.com
dmzj.com
dmzlcn.com
+dmzx.com
dmzzbjb.net
dn.com
dn23.com
@@ -29799,6 +29649,7 @@ dningbo.com
dnion.com
dnjd.com
dnjsb.com
+dnlunwen.com
dnmall.com
dnmcn.com
dnnunion.com
@@ -29824,7 +29675,6 @@ dns123.net
dns12345.com
dns200.net
dns2008.com
-dns36.cc
dns567.com
dns6132.com
dns666.com
@@ -29905,6 +29755,7 @@ dnsrw.com
dnss.vip
dnssina.com
dnstest.vip
+dnstx88.cc
dnsurl.net
dnsv1.com
dnsv1.net
@@ -29972,6 +29823,7 @@ doc361.net
doc88.com
doccamera.com
docer.com
+docexcel.net
docin.com
dockerinfo.net
dockerone.com
@@ -29984,6 +29836,7 @@ docoi.cc
docpe.com
docs.cdnetworks.com
docschina.org
+docshare.org
docsj.com
docsmall.com
docsou.com
@@ -29996,6 +29849,7 @@ doctoryou.ai
docuarea.org
documents.cdnetworks.com
docx88.com
+doczj.com
dodjoy.com
dodo8.com
dodobook.net
@@ -30013,6 +29867,8 @@ doerjob.com
doffry.com
dofolong.com
dog-e-clothing.com
+dog089a-a66.com
+dogain.com
dogecast.com
dogecdn.com
dogecloud.com
@@ -30069,6 +29925,7 @@ domilight.com
domob-inc.com
domobcdn.com
domor.net
+domp4.net
dondonwenda.com
done-home.com
donews.com
@@ -30111,6 +29968,7 @@ dongdongzu.com
dongeejiao.com
dongfahouse.com
dongfang-heater.com
+dongfang-sisal.com
dongfang-wh.com
dongfang.com
dongfang77.com
@@ -30231,6 +30089,7 @@ dongzhougroup.com
dongzhuoyao.com
dongzsec.com
donhonet.net
+doniv.net
donlim.com
donnor.com
donoo.net
@@ -30273,6 +30132,7 @@ doservice.com
doshome.com
dosilicon.com
dosk.win
+dosnap.com
dospy.com
dossav.com
dossen.com
@@ -30296,7 +30156,6 @@ dou6.cc
doubaijiu.com
douban.com
douban.fm
-doubaninfo.com
doubanio.com
doubao-dev.com
doubao.com
@@ -30355,6 +30214,7 @@ douleyun.net
doulongyun.com
doumenqu.com
doumi.com
+doumiip.com
doumistatic.com
doumob.com
douniwan.org
@@ -30440,6 +30300,7 @@ downkuai.com
download.microsoft.com
download.visualstudio.microsoft.com
download.windowsupdate.com
+downloadcenter.samsung.com
downloads.ltd
downok.com
downos.com
@@ -30472,6 +30333,7 @@ dp2u.com
dpanel.cc
dpangzi.com
dpcafc.com
+dpcq1.net
dpcyjt.com
dpd-hul.cfd
dpdfsd.com
@@ -30481,6 +30343,7 @@ dper.com
dpfile.com
dpgz.com
dpin100.com
+dpjszs.com
dpkyz.com
dplor.com
dplord.com
@@ -30492,6 +30355,7 @@ dptech.com
dptechnology.net
dptel.com
dpurat.com
+dpw.pub
dpwl.net
dpxkjw.com
dpxq.com
@@ -30509,6 +30373,8 @@ dqdg.cc
dqdgame.com
dqdm.com
dqguo.com
+dqhsrq.com
+dqhui.com
dqhyxh.com
dqiis.com
dqjob88.com
@@ -30526,6 +30392,7 @@ dqsldz.com
dqsq.net
dqsy.net
dqtzdt.com
+dqyadong.net
dqyfapiao.com
dqyouqi.com
dqyq.com
@@ -30656,7 +30523,6 @@ dsdbxg.com
dsdod.com
dseman.com
dser.com
-dsers.com
dsfdy.com
dsfjh.vip
dsfpz.com
@@ -30666,7 +30532,6 @@ dsfzh.com
dshigao.com
dshltech.com
dshrc.com
-dsjpt.net
dsjt.com
dskb.co
dskj-ops.com
@@ -30674,7 +30539,6 @@ dsktjt.com
dskystudio.com
dslbuy.com
dslr120.com
-dslt.net
dslt.tech
dslvts.com
dslyy.com
@@ -30686,6 +30550,7 @@ dsnpz.com
dsnzyy120.com
dsook.com
dsp.com
+dspgo.com
dspmt.com
dspwhy.com
dsq.com
@@ -30696,12 +30561,12 @@ dss.hk
dsspinfo.com
dsssp.com
dsstudio.tech
+dssz.com
dst.gov.mo
dstcar.com
dstfsbc.com
dstguanwang.com
dsti.net
-dsw123.com
dsw6.com
dswjcms.com
dswljt.com
@@ -30722,7 +30587,6 @@ dt-stor.com
dt123.net
dt830.com
dtao.com
-dtcits.com
dtcj.com
dtcms.net
dtcoalmine.com
@@ -30742,7 +30606,6 @@ dtmiller.com
dtminds.com
dtmuban.com
dtnews.net
-dtpower.com
dtq.com
dtrcb.com
dtrcw.net
@@ -30790,6 +30653,7 @@ duanxianxia.com
duanxin.com
duanxin520.com
duanxindao.com
+duanzaixian.vip
duanzao001.com
duanzikuaizui.com
duanziya.com
@@ -30797,10 +30661,12 @@ duapp-preview.com
duapp.com
duapp.net
duapps.com
+duasrdwb.com
duba.cc
duba.com
duba.net
dubairen.com
+dubao123.com
dubbing.tech
dubbingx.com
dubbo.io
@@ -30812,6 +30678,7 @@ ducafecat.com
ducafecat.tech
ducar.cc
duchina.com
+duckyset.com
dudong.com
dudongsheji.com
duduaa.com
@@ -30865,13 +30732,13 @@ duliangaotu.com
dulife.com
dulifei.com
dullr.com
-dulupay.com
dulwich.org
dumall.com
dumanhua.com
dumasoftware.com
dumi0898.com
dumpapp.com
+dun.la
dun222.com
dun555.com
dun599.com
@@ -30920,6 +30787,7 @@ duodutek.com
duoerpharmacy.com
duofriend.com
duofugroup.com
+duogouhui.com
duohuanbao.com
duohui.co
duoic.com
@@ -30940,6 +30808,7 @@ duoladayin.com
duolaika.com
duolapiao.com
duolatom.com
+duolawk.asia
duolayunwang.com
duole.com
duolebaohuang.com
@@ -30970,10 +30839,14 @@ duomicheng.com
duominuo.com
duomiyou.com
duomni.com
+duomo3205.xyz
duomob.com
duomoyu.com
duomu.hk
+duomu.tv
duopao.com
+duopei.cc
+duopei.xyz
duopingka.com
duoqu.com
duorenwei.com
@@ -31005,7 +30878,6 @@ duoyewu.com
duoyi.com
duoying.com
duoyinsu.com
-duoyiwangluo.com
duoyoumi.com
duozhi.com
duozhuayu.com
@@ -31081,17 +30953,17 @@ dvmama.com
dvmission.com
dvr163.com
dvrdydns.com
+dvsadive.com
dvvvs.com
dw-microbiology.com
dw4.co
dwbxg.com
dwdds.com
-dwejyx.com
dwforging.com
dwgbj.com
dwgszc.com
dwgwatch.com
-dwhy.net
+dwhub.net
dwidc.com
dwinput.com
dwion.com
@@ -31127,7 +30999,6 @@ dxclinics.com
dxda.com
dxdl1688.com
dxdlw.com
-dxdstar.com
dxe520.com
dxecs.com
dxf6.com
@@ -31203,6 +31074,7 @@ dy1905.net
dy2018.com
dy2066.com
dy3j.com
+dyaobo2029.com
dybeta.com
dycar.net
dyccb.net
@@ -31224,6 +31096,7 @@ dyemp.com
dyets-cn.com
dyfc.net
dyfm200.com
+dyfsp88.wiki
dyg-hec.com
dygf.com
dygmotor.com
@@ -31242,9 +31115,11 @@ dyjqlrj.com
dyjs.com
dyjw.info
dyjxjt.com
+dyjxsj.com
dykszx.com
dykz66.com
dylc.com
+dyls.app
dyly.com
dylyghm.com
dymatic.com
@@ -31268,13 +31143,11 @@ dyshortvideo.com
dysj.com
dysji.com
dyspcdntip.com
-dyswl.com
dytmgm.com
dytss.com
dytt2028.cc
dytt789.com
dytt7899.com
-dytt8.com
dytt8.net
dytt89.com
dytuj6zs26.com
@@ -31351,7 +31224,6 @@ dzljy.com
dzllzg.com
dzmachines.com
dzmhospital.com
-dzmsite.com
dzng.com
dzoptics.com
dzp.tv
@@ -31371,6 +31243,7 @@ dzs2004.com
dzsaas.com
dzsaascdn.com
dzsc.com
+dzsdg.com
dzsg.com
dzsjgroup.com
dzsjtjt.com
@@ -31383,6 +31256,7 @@ dztester.com
dztugongbu.net
dztv.tv
dztz168.com
+dzvv.com
dzw3.com
dzwad.com
dzwebs.net
@@ -31477,13 +31351,13 @@ e0575.com
e0734.com
e0838.com
e12345.com
+e1288.com
e1299.com
e12e.com
e13000d6f1019.beer
e151475d71020.beer
e1617.com
e1988.com
-e1em.cc
e213155.com
e21cn.com
e22a.com
@@ -31495,6 +31369,7 @@ e2capp.com
e2edesign.com
e2esoft.com
e2say.com
+e307586127f21050.com
e32047a8e21fbc0a.com
e32a01b94145bb23.com
e3492587711012.beer
@@ -31511,9 +31386,11 @@ e4008.com
e43bb71e710272.beer
e44e4e8c11020.beer
e452a362210291.beer
+e495f363ae7187cf.com
e4d0c1f1d1021.beer
e4e4c4415fd53198.com
e4l4.com
+e4xk2cvh.work
e508250086b14d75.com
e5413.com
e5865f69dee0.xyz
@@ -31526,6 +31403,8 @@ e5d9384f510292.beer
e5e333e55e5e3d.xyz
e5hc.com
e5n.com
+e5sj.com
+e5tech.com
e600.com
e656gps.com
e65u.com
@@ -31603,6 +31482,7 @@ ear0.com
eardatek.com
earlytrip.fun
earth-science.net
+earth-traveller.com
earth2037.com
earthdq.com
earthedu.com
@@ -31706,6 +31586,7 @@ easy163.net
easy2world.com
easy361.com
easy888.com
+easyapple.net
easyar.com
easyarvr.com
easybug.org
@@ -31741,6 +31622,7 @@ easyscholar.cc
easysensor.net
easysofthome.com
easyswoole.com
+easytifen.com
easytimetv.com
easytite.com
easytocn.com
@@ -31756,10 +31638,10 @@ eaton-samc.com
eatonbusbar.com
eatuo.com
eavic.com
-eaw4.com
eaydu.com
eayh.com
eayou.com
+eayuan.com
eayyou.com
eazypharm.com
eazytec-cloud.com
@@ -31777,7 +31659,6 @@ ebaixing.com
ebama.net
ebancom.com
ebangchina.com
-ebangkj.com
ebank96518.com
ebanma.com
ebanshu.net
@@ -31785,6 +31666,7 @@ ebaodai.com
ebaoquan.org
ebaotech.com
ebasset.com
+ebb6ea72919edea2.com
ebbcb476210291.beer
ebbf2f9101016.beer
ebchina.com
@@ -31824,7 +31706,6 @@ ebseek.com
ebsfw.com
ebt.group
ebtang.com
-ebtool.com
ebtrust.com
ebuckler.com
ebumbrella.com
@@ -31845,6 +31726,7 @@ ec3s.com
ec45f2d84111f960.com
ec4ca59341009.beer
ec4e54545d0e31fa.com
+ec6056a95386f752.com
ec8j.com
ecac1cd921021.beer
ecadi.com
@@ -31869,7 +31751,6 @@ ecco-market.com
eccpos.com
ecdag.net
ecdnx.com
-ecdove.com
ecduo.com
ece-global.com
eceibs.com
@@ -31879,7 +31760,6 @@ ecej.com
ecer.com
ecerdns.com
ecerimg.com
-eceshi.com
ecf-gov.com
ecgci.com
ecgoods.com
@@ -31889,7 +31769,6 @@ echangye.com
echao8.com
echargenet.com
echarpile.com
-echartnow.com
echatsoft.com
echead.com
echemsrc.com
@@ -31900,7 +31779,6 @@ echinacities.com
echinagov.com
echinalife.org
echinatobacco.com
-echippqc.com
echo-isoftstone.com
echo188.com
echoing.tech
@@ -31927,6 +31805,7 @@ ecnuas.com
ecnudec.com
eco-seavol.com
eco-system.xyz
+ecoalchina.com
ecodreamers.com
ecoland-plan.com
ecoliving168.com
@@ -31983,6 +31862,7 @@ ecydm.com
ecyti.com
ecyzm.com
ed-textile.com
+ed21.cc
ed2k.vip
ed2kers.com
ed2kk.com
@@ -32027,7 +31907,6 @@ edengjiang.com
edesson.com
edge-byted.com
edge-cluster-hk-pre.com
-edgeceler.com
edgefn.net
edgegslb.com
edgekey88.net
@@ -32068,7 +31947,6 @@ edifier.com
edimob.com
edingzhuan.com
edisec.net
-editbanana.net
editorjianying.com
editsprings.com
ediuschina.com
@@ -32139,6 +32017,7 @@ edurck.com
edushi.com
edusoho.com
edusoho.net
+edusy.net
edutalkingdata.com
edutao.com
edutime.net
@@ -32190,7 +32069,6 @@ eeeetop.com
eeeff.com
eeekkk.com
eeeknow.com
-eeenav.com
eeeqi.net
eees.cc
eeetb.com
@@ -32221,17 +32099,20 @@ eetrend.com
eetrust.com
eevision.com
eeworld.com
+eeworm.com
eexiaoshuo.com
eeyd.com
eeyxs.com
eeyy.com
eeyys.com
+eezml.com
ef-cdn.com
ef17145aecd7dd06.com
ef360.com
ef360.net
ef369594911012.beer
efang.tv
+efangcdn.com
efangwang.com
efapiao.com
efasco.com
@@ -32255,6 +32136,7 @@ efl-tech.com
eflagcomm.com
eflybird.com
eflycloud.com
+eflydns.net
efmac.net
efnchina.com
eforclub.com
@@ -32368,6 +32250,7 @@ eiafans.com
eiccmall.com
eickaopei.com
eicodesign.com
+eicourse.com
eicp.net
eicp.vip
eiczz.com
@@ -32376,7 +32259,6 @@ eidcenter.com
eidlink.com
eidtokencloud.com
eifini.com
-eifleasing.com
eightbridge.com
eightedu.com
eigpay.com
@@ -32439,6 +32321,7 @@ ekaoyan.com
ekaoyan365.com
ekclubinternational.com
ekdoc.com
+ekecdn.com
ekewy.com
ekimmigration.com
eking-tech.com
@@ -32463,6 +32346,7 @@ elanw.com
elascloud.com
elawoffice.net
elbmodel.com
+eldamu.com
ele.me
ele.to
ele001.com
@@ -32560,6 +32444,7 @@ elysia.beauty
em86.net
emai.com
email.fund
+emaileds.com
emailflame.com
emailuo.com
emailxqq.com
@@ -32587,6 +32472,7 @@ embedtrain.org
embedu.org
embedunion.com
embedway.com
+embest-tech.com
embryform.com
embryochina.com
embsky.com
@@ -32608,6 +32494,7 @@ emeratech.com
emergencyexit.xyz
emfuture.com
emilechouriet.com
+emiltorres.com
emin123.com
eminsheng.com
emiretasnbd.com
@@ -32651,6 +32538,7 @@ emumax.com
emupic.com
emushroom.net
emwan.com
+emzexzfp.com
en-micro.com
en.tm
en51.com
@@ -32773,11 +32661,12 @@ enterdesk.net
enthalpy.space
entive.com
entstudy.com
+entts.com
+enunix.com
enuomachinery.net
envi-ch.com
envisionagents.com
envisioncn.com
-envtoday.com
enwing-tech.com
enxicled.com
enyamusical.com
@@ -32820,9 +32709,11 @@ eolinker.com
eomgames.net
eomoo.com
eomoy.com
+eonad.org
eonlytech.com
eonun.com
eoof.net
+eoofoo.com
eooioo.com
eoopoo.com
eooqoo.com
@@ -32912,12 +32803,12 @@ eqnvip.com
eqoavtbu.com
eqq.net
equalocean.com
+equipmentimes.com
eqxiu.com
eqxiul.com
eqxiuzhan.com
eqyn.com
er07.com
-er3w.com
eraclean.com
eraedu.com
eral.com
@@ -32937,6 +32828,7 @@ erdiamond.com
erdianzhang.com
erdong.site
erdosedu.com
+erdosrcb.com
erdossysw.com
erelcn.com
erentalcarpro.com
@@ -32976,11 +32868,11 @@ ermiao.com
ernaonet.com
ernest.me
eroacg.com
-erocraft.com
erongdu.com
erp198.com
erp321.com
erp321.net
+erpingge.com
erpwd.com
erro.life
ersantian.com
@@ -33004,7 +32896,6 @@ erya100.com
eryajf.net
eryanet.com
eryi.org
-eryinote.com
eryyutu.com
es-soccer.com
es100.com
@@ -33042,6 +32933,7 @@ eshow365.com
eshufa.com
eshuizong.com
eshukan.com
+eshzp.com
esilk.net
esinidc.com
esipark.com
@@ -33087,6 +32979,7 @@ essxp.com
essyy.com
estandonhotel.com
esteellink.com
+estelchina.com
estonegroup.com
estory365.com
estrongs.com
@@ -33150,14 +33043,15 @@ ethereum.work
etian365.com
etiantian.com
etiantian.net
-etimbre.cc
etimeusa.com
+etitgo.com
etiv.me
etjy.com
etmoc.com
etmtoy.com
etmwanju.com
etocrm.com
+etokzt.site
etolies.com
etomlink.com
eton-tech.com
@@ -33237,7 +33131,6 @@ euino.com
eulike.com
eulixos.com
eumt.com
-euqwl.com
eur-go.com
eurasia.edu
euratao.com
@@ -33274,7 +33167,6 @@ evdays.com
evdo.vip
eve.moe
evebattery.com
-eveclerdx.com
evefashion.com
evening.me
eventown.com
@@ -33295,6 +33187,7 @@ evergrandeauto.com
evergrandeservice.com
evergrandespring.com
evergreen-plastics.com
+evergreen2012.org
everichgroup.com
everisker.com
everknight.net
@@ -33307,6 +33200,7 @@ everspry.com
everstar.xyz
everstray.com
eversun-chn.com
+everybodysuo.com
everychina.com
everydo.com
everyonejun.com
@@ -33317,7 +33211,6 @@ evfchina.com
evget.com
evgezphv.com
evhui.com
-evhzzh.com
evideostb.com
evileyesaint.com
evilleaker.com
@@ -33339,6 +33232,7 @@ evtcn.com
evtrust.com
evyy.net
evzhidao.com
+evznl.org
evzs.com
ew-wirestripping.com
ew80.com
@@ -33365,6 +33259,7 @@ ewen.co
ewenyan.com
ewhnzmqncm7.com
ewidewater.com
+ewidewater.net
ewie.net
ewin007.com
ewinshine.com
@@ -33405,6 +33300,7 @@ exaphotons.com
exbaotuan.com
exbapp.com
exbot.net
+exc-resin.com
excake.com
excalibur.link
excarepharm.com
@@ -33412,6 +33308,7 @@ excbio.com
excean.com
exceedconn.com
excegroup.com
+excegroupur.com
excel8.com
excel880.com
excelbbx.net
@@ -33442,9 +33339,9 @@ exmay.com
exmetis.com
exmoo.com
exmrw.com
+exnpk.com
exntech.com
expba.com
-expdiy.com
expdns.net
expec-tech.com
expensiveg.com
@@ -33470,13 +33367,13 @@ expoquan.com
expotu.com
expowindow.com
expozh.com
-exprank.com
expressboo.com
expresscompanynetwork.com
expreview.com
exprun.com
expsky.com
exquisite-automotive.com
+exscapesmoke.com
exsvc.net
ext2fsd.com
extech-sh.com
@@ -33562,6 +33459,7 @@ eyugame.com
eyunidc.com
eyunzhu.com
eyuyan.com
+eyuyan.la
eyuyao.com
eyuzhu.com
eywedu.com
@@ -33684,6 +33582,7 @@ f6d4a4f461010.beer
f6yc.com
f704204fa11021.beer
f71f38e6a1015.beer
+f746c2da252336a6.com
f7777.net
f79ca805111881f6.com
f79f9e5b71019.beer
@@ -33692,6 +33591,7 @@ f7chinavip.com
f7e84829210281.beer
f7yuncdn.com
f800909401015.beer
+f8167007e7bf667d.com
f831fb9ce11031.beer
f8e772f41348c086.com
f92ec0629f52f064.com
@@ -33704,6 +33604,7 @@ fa-tojoin.com
fa2da1f5b1024.beer
fa80a608ec3e1ead.com
faadcf6d01009.beer
+faakee.com
faanw.com
faayoo.com
fabao365.com
@@ -33792,7 +33693,6 @@ faiusrd.com
faiww.com
fajiayun.com
fajihao.com
-faka.it
fakamiao.com
fakamiao.shop
fakeloc.cc
@@ -33805,7 +33705,9 @@ famascro.com
fameile.net
fameirui.com
famen163.com
+famenbaike.com
famens.com
+famens.vip
famensi.com
family-marathon.com
familyincloud.com
@@ -33846,6 +33748,7 @@ fang.com
fang.xin
fang24k.com
fang33.com
+fang668.com
fang91.com
fang99.cc
fang99.com
@@ -33863,7 +33766,6 @@ fangda-specialsteels.com
fangda.com
fangdacarbon.com
fangdaijisuanqi.com
-fangdailixi.com
fangdaquan.com
fangdd.com
fangdichanceo.com
@@ -33965,7 +33867,6 @@ fankebang.com
fankhome.com
fankuweb.com
fanli.com
-fanliang.cc
fanlibei.com
fanlihe.com
fanlihi.com
@@ -33982,6 +33883,7 @@ fanpanjidain.com
fanpusoft.com
fanqianbb.com
fanqiang.com
+fanqianxs.com
fanqianzhushou.com
fanqie.im
fanqiecopyright.com
@@ -34064,12 +33966,16 @@ fanyitec.com
fanyouvip.com
fanyu.com
fanyu.work
+fanyuip.com
fanzehua.com
fanzhidu.com
+fanzhiyang.com
fapharm.com
fapiao.com
fapiao365.com
fapiaobang.com
+faq-whtasapp.com
+faq-whtasapp.net
faqianjia.com
faqiren.com
far-china.com
@@ -34089,9 +33995,11 @@ farmkd.com
farmsec.com
farsee2.com
farsightdev.com
+farsiightppc.com
fas-bee.com
fasensor.com
fashaoyou.net
+fashengba.com
fashilawfirm.com
fashionan.com
fashionszshow.com
@@ -34099,6 +34007,7 @@ fashiontrenddigest.com
fashuounion.com
fasionchan.com
fast-eyes.com
+fast-heat-cartridge-heaters.com
fast.im
fastadmin.net
fastapi.net
@@ -34177,7 +34086,6 @@ fb32dc52302e6b9b.com
fb46cd5483f029aa.com
fb4bc82f71019.beer
fb56.com
-fb71ef91e1014.beer
fbaichuan.com
fbank.com
fbatop.com
@@ -34192,7 +34100,6 @@ fblsj.com
fbook.net
fbpaas.com
fbsjedu.com
-fbxd.info
fbxslw.com
fbyvalve.com
fc0531.com
@@ -34216,6 +34123,7 @@ fccs.com
fccscar.com
fccxgjg.com
fcczp.com
+fcd2448c6211c5a6.com
fcdecb0b610261.beer
fcg01.com
fcg0770.com
@@ -34283,11 +34191,11 @@ fdctax.com
fdcyun.com
fdczbstatic.com
fdd0cd79c10281.beer
-fddhlaw.com
fdeent.org
fdeer.com
fdevops.com
fdf46bd061024.beer
+fdfhtl.com
fdfinvoice.com
fdgearbox.com
fdjskf.com
@@ -34340,6 +34248,7 @@ feel-bar.com
feelcars.com
feelchat.net
feelec.net
+feelnowtrip.com
feelsoar.com
feemoo.com
feemoo.hk
@@ -34378,6 +34287,7 @@ feida-china.net
feidacrusher.com
feidaep.com
feidagroup.com
+feidaoboke.com
feidavalve.com
feidazuanji.com
feidee.com
@@ -34430,7 +34340,6 @@ feilixi888.com
feilu.cc
feilvway.com
feimalv.com
-feimanhua.com
feimaoweb.com
feimaoyun.com
feimawaiqin.com
@@ -34507,7 +34416,6 @@ feiyouyun.com
feiyu.com
feiyuapi.com
feiyue.online
-feiyue15.com
feiyueconglin.com
feiyuhu.com
feiyun.cc
@@ -34556,7 +34464,6 @@ feng1.com
fengakj.com
fengaomedical.com
fengba888.com
-fengbaikeji.com
fengbangleasing.com
fengbao.com
fengbohan.com
@@ -34564,13 +34471,14 @@ fengbolive.com
fengbuy.com
fengcaijiaju.com
fengchaoyuan.com
+fengche.us
fengchengroup.com
fengchizixun.com
fengchuanba.com
+fengchui.cc
fengchusheng.com
fengcms.com
fengcx.com
-fengda.me
fengdu.com
fengdu365.com
fengdufrp.com
@@ -34607,6 +34515,7 @@ fengkuangzaoren.com
fengkui.net
fenglao.org
fengli.com
+fengli.su
fengliankeji.com
fenglichem.com
fenglingkj.com
@@ -34628,6 +34537,7 @@ fengpintech.com
fengread.com
fengse.com
fengshangroup.com
+fengshangweekly.com
fengshankeji.com
fengshi8888.com
fengshigroup.com
@@ -34663,6 +34573,7 @@ fengyunpdf.com
fengyushan.com
fengyx.com
fengzegroup.com
+fengzhan.vip
fengzhangame.net
fengzhao.net
fengzigame.com
@@ -34680,7 +34591,6 @@ fenlekeji.com
fenliu.net
fenmitech.com
fennessy.hk
-fenno.ai
fenqile.com
fenqix.com
fenqubiao.com
@@ -34747,7 +34657,6 @@ ffe06ebc91024.beer
ffe0be9f91019.beer
ffeeii.com
ffepower.com
-fffff.games
fffont.com
ffhome.com
ffis.me
@@ -34861,6 +34770,7 @@ filfox.info
fillersmart.com
fillseo.com
film-yuelongchina.com
+filteringlist.com
fily.fun
fim34s.com
fimmu.com
@@ -34874,6 +34784,7 @@ financialdatamining.com
financialstreetforum.com
finchina.com
finclip.com
+finddanandlaura.com
finderweb.net
findhro.com
findic.com
@@ -34886,7 +34797,6 @@ findmyfun.xyz
findmyrepair.com
findoout.com
findshu.net
-findskill.com
findxk.com
findxz.com
findyou.xin
@@ -34926,7 +34836,6 @@ finovo.com
finshell-cib.com
fintechinchina.com
fintechquan.com
-fintopia.tech
finupgroup.com
finzfin.com
finzjr.com
@@ -34968,6 +34877,7 @@ fishcn.com
fisherac.com
fisherv.com
fishfay.com
+fishfd.com
fishflying.net
fishin2boat.com
fishing-sh.com
@@ -34990,6 +34900,12 @@ fitit100.com
fitoneapp.com
fittentech.com
fittingcn.com
+fiu07021kl.com
+fiu07040kl.com
+fiu07050kl.com
+fiu07060kl.com
+fiu07070kl.com
+fiu07090kl.com
fiui.org
fivecakes.com
fivedo.net
@@ -35014,7 +34930,6 @@ fj3c.net
fj888.com
fj96336.com
fj987.com
-fjadd.com
fjbcjt.com
fjbdex.com
fjber.com
@@ -35057,6 +34972,7 @@ fjguanyue.com
fjhaizu.com
fjhcw.com
fjhospital.com
+fjhps.com
fjhrjt.com
fjhssy.com
fjhuayagroup.com
@@ -35088,6 +35004,7 @@ fjlh.com
fjlib.net
fjllsn.com
fjlstz.net
+fjlszbc.com
fjly.com
fjlygroup.com
fjlyrmyy.com
@@ -35100,8 +35017,6 @@ fjmlh.com
fjmotor.net
fjmstc.com
fjmzw.com
-fjmzx.com
-fjndqx.com
fjndwb.com
fjnet.com
fjnhjt.com
@@ -35146,10 +35061,11 @@ fjtd-logistics.com
fjtelecom.com
fjtp.net
fjtv.net
+fjtzlt.com
+fjvs.org
fjwanan.com
fjwjgs.com
fjwr.xyz
-fjwyw.com
fjwzjt.com
fjxfgroup.com
fjxhfx.com
@@ -35161,9 +35077,11 @@ fjxsxx.com
fjxwx.com
fjxxal.com
fjybyjjysos.com
+fjyc8.com
fjycw.com
fjydnews.com
fjyfjsjt.com
+fjyklc.com
fjyunba.com
fjyxdm.com
fjyxgl.com
@@ -35195,6 +35113,7 @@ fktool.com
fkw.com
fkw100.com
fkwapi.com
+fkwatchtw.com
fkwvya4035.vip
fkyuer.com
fkyun.com
@@ -35264,6 +35183,7 @@ flourish-fs.com
flowchemchina.com
flower188.com
flowerknows.co
+flowever.net
flowinnglobal.com
flowlbkj.com
flowportal.com
@@ -35317,6 +35237,7 @@ flymeos.com
flymeyun.com
flyml.net
flymobi.biz
+flymodem.net
flymopaper.com
flyneutron.com
flysand.com
@@ -35391,6 +35312,7 @@ fnyes.com
fob123.com
fob580.com
fobaoyou.com
+fobbusinessforum.com
fobcentury.com
fobmy.com
fobshanghai.com
@@ -35471,6 +35393,7 @@ fooleap.org
foomx.com
foooooot.com
foosheng.com
+football8888.store
footballdown.com
footbig.com
footseen.com
@@ -35523,6 +35446,7 @@ fornature.com
forrealbio.com
forrelaxing.com
forrerri.com
+forshine.net
forsol.net
forsou.com
forthxu.com
@@ -35537,7 +35461,6 @@ fortunevc.com
forwardgroup.com
forwe.store
forwell-parking.com
-foryao.ltd
foryou56.com
foryouge.com
foryougroup.com
@@ -35597,6 +35520,7 @@ fox008.com
foxconn.com
foxirj.com
foxmail.com
+foxphp.com
foxqq.com
foxtable.com
foxuc.com
@@ -35658,6 +35582,7 @@ fqxs.org
fqxsw.cc
fr-trading.com
fr0528.art
+fr2007.com
fractal-technology.com
fraeco.com
fraee.com
@@ -35680,6 +35605,7 @@ fredamd.com
fredestiny.com
free-863.com
free-api.com
+free-e.net
free-img.com
free9.net
freebuf.com
@@ -35718,6 +35644,7 @@ freeydch.com
freeyun.com
freezhw.com
freezl.net
+frefloya.com
frensworkz.com
freqchina.com
fresh-ideas.cc
@@ -35814,7 +35741,6 @@ frp-ski.com
frp-sun.com
frp-tag.com
frpapp.com
-frrcw.com
frt.ltd
frtgraphite.com
fruitday.com
@@ -35876,7 +35802,6 @@ fsightai.com
fsilon.com
fsjgchina.com
fsjgw.com
-fsjiaoyubang.com
fsjinlan.com
fsjinma.com
fsjoy.com
@@ -35884,7 +35809,6 @@ fsjrl.com
fsjsdtc.com
fsjx.org
fsjy.net
-fsk-download.com
fsky.pro
fskzpw.com
fslgz.com
@@ -35961,7 +35885,6 @@ fthgz.com
fthimalayandb.com
ftihzjg.com
ftium4.com
-ftj003.com
ftlcloud.com
ftls.xyz
ftlzghz.com
@@ -35985,6 +35908,7 @@ ftylw.com
ftzn.net
fu-guan.com
fu-rui.com
+fu2zu.com
fu57.com
fuanna.com
fubabafumama.com
@@ -35996,7 +35920,6 @@ fubonplastic.com
fuca-china.com
fucantec.com
fuchaipower.com
-fuchenkj.com
fuchuangyu.com
fucnm.com
fucol.club
@@ -36040,7 +35963,6 @@ fuhaoku.com
fuhefu.com
fuheng.org
fuhouyin.com
-fuhuayun.asia
fuhuibao.club
fui.im
fuiou.com
@@ -36060,6 +35982,7 @@ fuka.cc
fukangjixie.com
fukangqipai.com
fukangyuanyanglao.com
+fuke39.com
fukexie.com
fulantv.com
fulengen.com
@@ -36086,6 +36009,7 @@ fullics.com
fulllinks.com
fullluckcalendar.com
fullsemitech.com
+fulltech.work
fulltruckalliance.com
fulou.life
fultree.com
@@ -36156,7 +36080,6 @@ fupanwang.com
fupin832.com
furagon.com
furama-beihai.com
-furapi.com
furderdriving.com
furenchina.com
furenkeji.com
@@ -36202,7 +36125,6 @@ fututrustee.com
fuwa.org
fuwahgroup.com
fuwai.com
-fuwaihospital.org
fuwaliuxue.com
fuwei.com
fuweifilms.com
@@ -36229,6 +36151,7 @@ fuyang.com
fuyang.net
fuyangbio.com
fuyangjituan.com
+fuyangren.org
fuyangtv.com
fuyaogroup.com
fuyaozb.com
@@ -36238,7 +36161,6 @@ fuyingkeji.com
fuyingyanke.com
fuyiou.com
fuyiwang.net
-fuyizk.com
fuyou.online
fuyou888.com
fuyoubank.com
@@ -36278,11 +36200,14 @@ fwdq.com
fwdqw.com
fwfly.com
fwhzxxgbyy.com
+fwljmwf.com
fwlxtc.com
+fwqje67h.work
fwqlt.com
fwqtg.net
fws-china.com
fwvv.net
+fwwevez.xyz
fwxgx.com
fx-plc.com
fx120.net
@@ -36393,11 +36318,9 @@ fygjyljt.com
fygmbc.com
fygroup.com
fygsoft.com
-fyhbxh.com
fyjl.org
fyjsz.net
fyjzyxh.com
-fykxjs.com
fylcg.com
fyleasing.com
fyluo.com
@@ -36456,7 +36379,6 @@ fyxxwb.com
fyxz.com
fyydnz.cc
fyynlx.com
-fyyxzz.com
fyyy.com
fyzku.com
fyzls.com
@@ -36488,6 +36410,7 @@ fzele.com
fzengine.com
fzentertainment.com
fzetyy.com
+fzfhg.com
fzfinancing.com
fzfrp.com
fzfu.com
@@ -36495,6 +36418,7 @@ fzfzjx.com
fzg360.com
fzghy.com
fzgolden.com
+fzhlkx.com
fzhqzx.net
fzhzxh.com
fzithome.com
@@ -36585,8 +36509,15 @@ g5h.com
g5h4.com
g5kj.com
g63.fun
+g66667777.com
g768r.com
+g77775555.com
+g77776666.com
+g7bd307de.skin
g80mx.com
+g82btd54.work
+g88885555.com
+g88886666.com
g8hh.com
g983.com
g9china.com
@@ -36620,12 +36551,14 @@ gagaga.icu
gagaga.tech
gagahi.com
gai.net
+gaiabiohx.com
gaiamount.com
gaiaworkforce.com
gaibang365.com
gaibar.com
gaibieshu.net
gaicas.com
+gaigeshen.work
gainchip.com
gainda.net
gaineng.net
@@ -36648,6 +36581,7 @@ gaiyazhanlan.com
gaizhui.com
gajerseys.com
gajsk.com
+gal3d.info
gala-v.com
galaxix.com
galaxy-adx.com
@@ -36799,6 +36733,7 @@ gank-studio.com
gank.io
gankang.com
gankao.com
+gankaomao.com
gankaosheng.com
gankgames.com
gankh5.com
@@ -36829,6 +36764,7 @@ ganyeah.com
ganyu.com
ganyu8.net
ganyurc.com
+ganzhe.com
ganzhishi.com
ganzhong.net
ganzitv.com
@@ -36845,6 +36781,7 @@ gaocangyun.com
gaoce.cc
gaocegege.com
gaochun.info
+gaoda8.com
gaodage.com
gaodangbiao.com
gaode.com
@@ -36875,7 +36812,6 @@ gaohr.com
gaohuasec.com
gaojer.com
gaoji.ren
-gaojidata.com
gaojie.com
gaojihealth.com
gaojima.com
@@ -36898,11 +36834,9 @@ gaokowl.com
gaokw.com
gaokzx.com
gaolian.com
-gaolianggame.com
gaoligroup.com
gaolihanjie.com
gaolouimg.com
-gaomaipharma.com
gaomeif.com
gaomeluo.com
gaominews.com
@@ -36950,6 +36884,7 @@ gaoxinedu.com
gaoxinedu.net
gaoxinjy.com
gaoxitech.com
+gaoyawang.com
gaoyizaixian.com
gaoyoujob.com
gaozhaiedu.com
@@ -37014,6 +36949,7 @@ gbase8a.com
gbasig.com
gbdex.com
gbdz.net
+gbeca.org
gbffchina.com
gbgba.com
gbgcn.com
@@ -37064,7 +37000,6 @@ gckychina.com
gcl-et.com
gcl-perovskite.com
gcl-power.com
-gclawyer.net
gcld.net
gclhgc.com
gcloudcache.com
@@ -37072,6 +37007,7 @@ gcloudcs.com
gcloudcstest.com
gcloudcstestonly.com
gclouddolphin.com
+gcloudf.com
gcloudgbs.com
gcloudsdk.com
gcloudsvcs.com
@@ -37094,7 +37030,8 @@ gcwduoduo.com
gcwith.com
gcykj.com
gcyts.com
-gcyvm.com
+gcyy08.com
+gczyg.com
gd-chenxing.com
gd-chuangfu.com
gd-dl.com
@@ -37119,6 +37056,7 @@ gd-tianyue.com
gd-wanxi.com
gd-weisi.com
gd-xrsd.com
+gd1580.com
gd165.com
gd2000.org
gd2h.com
@@ -37167,7 +37105,6 @@ gdccus.org
gdcdsh.com
gdceg.com
gdcgkg.com
-gdcgkj.com
gdchanbo.com
gdchess.com
gdchjt.com
@@ -37213,6 +37150,7 @@ gddingxin.com
gddjauto.com
gddlaaa.com
gddlkj.com
+gddmsmc.com
gddqfs.com
gddqfs.net
gddrcgzjt.com
@@ -37236,6 +37174,7 @@ gdfcjz.com
gdfeiyang.com
gdfenxiao.com
gdfgq.club
+gdfjsh.org
gdfplaza.com
gdfs.com
gdfshx.com
@@ -37245,6 +37184,7 @@ gdfzsy.com
gdgajt.com
gdganhua.com
gdgassoc.com
+gdgcjhf.com
gdgczb.com
gdggkf.com
gdghg.com
@@ -37256,7 +37196,6 @@ gdgrsw.com
gdguangdong.com
gdguozhi.com
gdgwyw.com
-gdgxw.com
gdgxxbw.com
gdgzhengzhou.com
gdgzrb.com
@@ -37272,6 +37211,7 @@ gdhfjt.com
gdhfkg.com
gdhhgroup.com
gdhhjs.net
+gdhhotels.com
gdhjtz.com
gdhla.com
gdhmgc.com
@@ -37283,7 +37223,6 @@ gdhtcm.com
gdhuana.com
gdhuaxun.net
gdhuaya.com
-gdhuazhuang.net
gdhwater.com
gdhwgf.com
gdhwjl.com
@@ -37363,7 +37302,6 @@ gdmca.org
gdmhjjt.com
gdmia.com
gdminda.com
-gdmm.biz
gdmm.com
gdmoa.org
gdmschina.com
@@ -37484,6 +37422,7 @@ gdszxh.com
gdtaihao.com
gdtap.com
gdtc.cc
+gdtcoin.com
gdtcyy.com
gdtengen.com
gdtengnan.com
@@ -37515,6 +37454,7 @@ gdvolunteer.net
gdwanlv.com
gdwanshun.com
gdwbyq.com
+gdwca.com
gdwczb.com
gdweilaisw.com
gdwha.org
@@ -37532,6 +37472,7 @@ gdxdpg.com
gdxdy.com
gdxfl.com
gdxindun.com
+gdxinqiang168.com
gdxinxiang.com
gdxise.com
gdxjzx.org
@@ -37547,7 +37488,6 @@ gdyd.com
gdydgj.com
gdydzb.com
gdyeb.com
-gdyfxx.com
gdygsk.com
gdyhgn.com
gdyhsp.com
@@ -37655,8 +37595,8 @@ geekdive.com
geekefu.com
geekercloud.com
geekerconsulting.com
+geekerhua.com
geekfans.com
-geekhour.net
geeklei.com
geekluo.com
geekmaker.com
@@ -37703,6 +37643,7 @@ gegejia.com
gegemm.work
gegeselect.hk
gegeyingshi.com
+gehaowu.com
gehope.com
gehua.com
gehua.net
@@ -37719,9 +37660,7 @@ geimian.com
geindex.com
geiniwan.com
geizan.cc
-gejsg.com
gelaha.com
-gelaiyun.net
gelicang.net
geline.net
gelinya.com
@@ -37766,9 +37705,7 @@ genevoyager.com
geneway-bio.com
geneworldcn.com
genfleet.com
-genforce-tech.com
gengchuangz.com
-gengdd.com
gengfuwang.com
genghai.com
gengleyuan.com
@@ -37851,6 +37788,7 @@ geswl.com
get-shell.com
get.vip
get233.com
+getcai.com
getddhospi.com
getehu.com
getelighting.com
@@ -37863,6 +37801,7 @@ getmarkman.com
getpm.com
getquicker.net
getrebuild.com
+getsetgadget.com
getsurfboard.com
gettopacoustic.com
getu.fun
@@ -37873,6 +37812,7 @@ getvidi.co
gewala.com
gewara.com
gewei-wh.com
+gewei.com
geweng.com
gewu.vc
gewuer.com
@@ -37957,6 +37897,7 @@ gfnormal07ai.com
gfnormal08ag.com
gfnormal08as.com
gfnormal08at.com
+gfnormal09ag.com
gfnormal09aq.com
gfnormal09ar.com
gforward.org
@@ -38027,6 +37968,7 @@ gghb.cloud
gghosp.net
gghs.info
gghualong.com
+gghx120.com
gghy.org
gginto.com
ggjcpm.com
@@ -38036,6 +37978,7 @@ ggjstz.com
ggjszp.com
ggjt.com
ggjtfw.com
+ggksw.com
ggkuai.com
ggl.com
gglenglish.com
@@ -38055,6 +37998,7 @@ ggqunshanmuye.com
ggqx.com
ggrcw.com
ggren.net
+ggrsmy.com
ggrsrc.com
ggsafe.com
ggsfcw.com
@@ -38110,6 +38054,7 @@ ghddi.org
ghdoor.com
ghed119.com
ghedu.com
+ghfdc.org
ghgglobal.com
ghglzx.com
ghgy.com
@@ -38204,7 +38149,6 @@ giho.com
giihg.com
giikin.com
giiktop.com
-giiport.com
giiso.com
gijsq.com
gildata.com
@@ -38224,8 +38168,9 @@ gingyan.com
ginlong.com
ginshio.org
ginwa.com
-ginza7.win
gio.ren
+gio07231rp.com
+gio07250rp.com
gioccc.com
giocdn.com
giomeru.com
@@ -38290,6 +38235,7 @@ gjgzpw.com
gjhgroup.com
gjhl.com
gjj.cc
+gjjcxw.com
gjjnhb.com
gjjsbz.com
gjkdwl.com
@@ -38316,6 +38262,7 @@ gjxzq.com
gjydz.com
gjyuxiang.com
gjyys.com
+gjzy.com
gk-cn.com
gk-net.com
gk-z.com
@@ -38366,12 +38313,14 @@ gkzy100.com
gkzyb.com
gkzzd.com
gl-data.com
+gl-mes.com
gl-qf.com
gl-uav.com
gl-zj.com
gl102.com
gl114.net
gl170.com
+gl17u.com
gl18.com
gl258.com
gl2mt.com
@@ -38414,6 +38363,7 @@ gldaewoo.com
gldjc.com
gleasy.com
glecan.com
+glelec.com
gleyy.com
glface.com
glfangzhen.com
@@ -38437,6 +38387,7 @@ glgzlq.com
glhcjs.com
glhclv-kool.com
glhdq.com
+glhfmy.com
glhfsy.com
glhmmr.com
glhospital.com
@@ -38472,6 +38423,7 @@ gljtxjy.com
gljygd.com
gljykj.com
gljyrj.com
+gljzgs.com
glk7.com
glkgjt.com
glkths.com
@@ -38497,6 +38449,7 @@ global-dba.com
global-download.acer.com
global-harbor.com
global-idc.net
+global-jf.com
global-ks-cdn.com
global-leader.com
global-otc.com
@@ -38546,9 +38499,11 @@ glorysoft.com
gloryview.com
glorze.com
glosellers.com
+glosku.com
glosspp.com
glowapp.fun
glowapp.vip
+glowoman.org
glpenhui.com
glplyf.com
glqh.com
@@ -38565,6 +38520,7 @@ glsdhnt.com
glseed.com
glsgmr.com
glshimg.com
+glsmy024.com
glsstm.com
glsxdlkj.com
glsyjd.com
@@ -38585,7 +38541,9 @@ glwxw.net
glwyhd.com
glxcc.net
glxcjt.com
+glxd.com
glxhzs.com
+glxiaoyaohu.com
glxinhu.com
glxkbz.com
glxsyx.vip
@@ -38610,6 +38568,7 @@ glzeasun.com
glzfst.com
glzh-szzx.site
glzhcyy.com
+glzhealth.com
glzip.com
glzizhu.com
glzj88.com
@@ -38646,6 +38605,7 @@ gmdt9b.com
gmdun.com
gmecn.com
gmed.cc
+gmedata.com
gmeditech.com
gmedtech.com
gmem.cc
@@ -38778,6 +38738,7 @@ godele.com
godgy.xyz
godic.net
godida.com
+godo.pub
godoor.com
godotcn.com
godsheepteam.com
@@ -38791,6 +38752,7 @@ goertek.com
goetheslz.com
gofarqzyy.com
goforandroid.com
+goframe.org
gofreeplay.com
gofrp.org
gogbuy.com
@@ -38816,11 +38778,13 @@ goi08130kh.com
goi08160kh.com
going-link.com
gojiaju.com
+gojira.net
gokaigai.com
goke.com
gokemicro.com
gokuai.com
golahsg.com
+golang8.com
golanger.com
golangroadmap.com
golangw.com
@@ -38897,7 +38861,6 @@ gomecloud.com
gomegj.com
gomeholdings.com
gomehome.com
-gomeishop.com
gomeplus.com
gomo.com
gomocdn.com
@@ -38925,7 +38888,6 @@ gongjiaomi.com
gongjiyun.com
gongju.com
gongju5.com
-gongjucha.com
gongjux.com
gongkaohub.com
gongkaoleida.com
@@ -38948,8 +38910,6 @@ gongshiku.com
gongsibao.com
gongsizhang.com
gongsizhijia.com
-gongwenbao-ai.com
-gongwenbao666.com
gongxiangcj.com
gongxiangjizhang.com
gongxiao8.com
@@ -38963,7 +38923,6 @@ gongyeku.com
gongyelian.com
gongyeyun.com
gongyeyunwang.com
-gongyi.center
gongyi.la
gongyi.net
gongyi.xin
@@ -39096,7 +39055,6 @@ gorouter.info
gorse.com
gortune.com
gosailgis.com
-goshare2.com
goshijia.com
goshopjp.com
gosinoic.com
@@ -39123,6 +39081,7 @@ gotocoding.com
gotodn.com
gotofreight.com
gotohui.com
+gotohz.com
gotohzrb.com
gotoip.net
gotoip1.com
@@ -39148,6 +39107,7 @@ goufang.com
goufw.com
gougoujp.com
gouguoyin.com
+gouhai.com
gouhao.com
gouhaowang.com
gouhuasuan.shop
@@ -39191,6 +39151,7 @@ gowinlease.com
gowinxp.com
gowlc.net
gowmo.com
+gowonganinn.com
goyihu.com
goyoo.com
gozap.com
@@ -39250,13 +39211,13 @@ gptkong.com
gpubgm.com
gpuez.com
gpuztrvt.com
-gpxiazai.com
gpxiv5kew4mvk.com
gpxxz.com
gpxygpfx.com
gpxz.com
gpxzw.com
gpydxl.com
+gq60.com
gqbmt.com
gqgkj.com
gqjd.net
@@ -39268,7 +39229,7 @@ gqsj.cc
gqsoso.com
gqsyk.com
gqt168.com
-gqyvyq.com
+gqxtq.com
gr-hospital.com
gra-moissanitesorg.com
grablan.com
@@ -39333,6 +39294,7 @@ greatwuyi.com
gredmedic.com
gree-jd.com
gree.com
+greebox.com
greedc.com
greedongaohotel.com
greefinance.com
@@ -39365,6 +39327,7 @@ greplay.com
grescw.com
gretf.com
greyli.com
+greywolfcdn.net
greywolffast.com
greywolfns.com
grfexpo.com
@@ -39410,6 +39373,7 @@ growthbox.net
grpindex.com
grria.net
grspet.com
+grstz.com
grt-china.com
grtrelay.com
grtsports.com
@@ -39425,6 +39389,7 @@ grzq.com
gs-cdn.com
gs090.com
gs12122.com
+gs14.com
gs1cn.org
gs2.ww.prod.dl.playstation.net
gs307.com
@@ -39441,6 +39406,7 @@ gscdn.pub
gschaos.club
gscidc.net
gsdk.tv
+gsdpw.com
gsdtfx.com
gsdyjsgs.com
gseen.com
@@ -39504,6 +39470,7 @@ gsslxh.com
gsstargroup.com
gsstic.com
gsstock.com
+gsstsdgs.com
gsswtz.com
gst.prod.dl.playstation.net
gstarcad.com
@@ -39563,7 +39530,6 @@ gter.net
gtetern.com
gtfund.com
gtg56.com
-gtgjtrip.com
gtgqw.com
gtgres.com
gtht.com
@@ -39670,7 +39636,6 @@ gtzy123.com
gu166.com
gu360.com
gua123.com
-gua9.com
guabu.com
guaguay.com
guahao-inc.com
@@ -39777,6 +39742,7 @@ guangxilonghua.com
guangxima.com
guangximinhang.com
guangxinengyuan.com
+guangxipubeihuaheng.com
guangxircw.com
guangxishangfu.com
guangxishuizhiyangzhigongsi.com
@@ -39820,7 +39786,6 @@ guanjiajf.com
guankou.net
guanlannet.com
guanli360.com
-guanlingms.com
guanlixi.com
guanliyun.com
guanmeikj.com
@@ -39891,6 +39856,7 @@ gugeapps.net
gugezg.com
gugong.net
gugu.fun
+gugud.com
gugudang.com
gugudata.com
guguread.com
@@ -39935,6 +39901,7 @@ guikangmaterials.com
guikuan.com
guilinaohu.com
guilincyjt.com
+guilinhd.com
guilinhengda.com
guilinihg.com
guilinjizhuangxiang.com
@@ -39949,6 +39916,7 @@ guilintravel.com
guiluohuang.com
guimamuye.com
guimengjob.com
+guimengning.com
guimengshangeng.com
guinsoft.com
guipeibao.com
@@ -39968,6 +39936,7 @@ guitarpro.cc
guitarq.com
guitongmy.com
guitu18.com
+guiwang.org
guiweilian.com
guixiaozi.com
guixue.com
@@ -39982,6 +39951,7 @@ guizhougames.com
guizhougas.com
guizhoushengyang.com
guizhutanglao.com
+gujianba.com
gujing.com
gujinshici.com
gujiushu.com
@@ -40040,6 +40010,7 @@ guocool.com
guocuijingju.com
guodashi.com
guodatzjt.com
+guodegang.org
guodi.net
guodiana.com
guodingnet.com
@@ -40060,6 +40031,7 @@ guogongxin.com
guoguangmold.com
guoguo-app.com
guohanlawfirm.com
+guohaokeji.com
guohongxin.com
guohu360.com
guohua88.com
@@ -40092,7 +40064,6 @@ guokang.com
guokelonghui.com
guoketest.com
guokeyun.com
-guoko.com
guokongqixie.com
guokr.com
guokr.io
@@ -40177,9 +40148,7 @@ guozhenyi.com
guozhivip.com
guozhuan.com
guozhuangxincai.com
-guozi-robotics.com
guoziyx.com
-guozunlaw.com
gupang.com
gupaoedu.com
gupei.com
@@ -40208,7 +40177,6 @@ gushidi.com
gushiji.cc
gushiju.net
gushiwen.org
-gusiwen.com
gusspro.com
gusucaishui.com
gusuwang.com
@@ -40262,11 +40230,13 @@ gwdzkj.com
gweike.com
gwell.cc
gwenorcasv1.com
+gwepy.org
gwetech.com
gwfls.com
gwfx.net
gwgl168.com
gwgsc.com
+gwi.cc
gwidc.com
gwin-cn.com
gwinbody.com
@@ -40284,6 +40254,7 @@ gwozai.com
gwpdi.com
gwpp.net
gwpstools.com
+gwsdns.com
gwtt.com
gwwg.com
gwxeda.com
@@ -40343,7 +40314,10 @@ gxalt.com
gxanchen.com
gxankao.com
gxantu.com
+gxany.com
+gxaoma.com
gxar.com
+gxarl.com
gxasjc.com
gxasjn.com
gxawjmy.com
@@ -40354,6 +40328,7 @@ gxb.io
gxbaichen.com
gxbaidu.net
gxbaidutg.com
+gxbaifugch.com
gxbaikuang.com
gxbakj.com
gxbaozhiyue.com
@@ -40424,6 +40399,7 @@ gxcatv.com
gxcbjs.com
gxcbljt.com
gxccblg.com
+gxccedu.com
gxccjt.com
gxcd.pw
gxcdc.com
@@ -40444,6 +40420,7 @@ gxchengyun.com
gxchlrf.com
gxchr.com
gxchuanghua.com
+gxchuanlan.com
gxchuen.com
gxchunmao.com
gxchuxin.com
@@ -40459,6 +40436,7 @@ gxclzz.com
gxcmgr.com
gxcmicc.com
gxcncec.com
+gxcodemaker.com
gxcors.com
gxcounty.com
gxcpa.com
@@ -40479,6 +40457,7 @@ gxcsycj.com
gxcsypm.com
gxcszm.com
gxctc.net
+gxctd.com
gxcthb.com
gxcti.com
gxctzb.com
@@ -40500,12 +40479,14 @@ gxdajixiong.com
gxdake.com
gxdanbao.com
gxdangan.com
+gxdansi.com
gxdanzo.com
gxdaos.com
gxdaosheng.com
gxdbdl.com
gxdbxrmyy.com
gxdco.net
+gxdcwh.com
gxddcs.com
gxddtz.com
gxddzl.com
@@ -40529,6 +40510,7 @@ gxdlxy.com
gxdlzl.com
gxdmds.com
gxdmsq.com
+gxdmtrade.com
gxdna.com
gxdnu.com
gxdong.com
@@ -40627,6 +40609,7 @@ gxfxm.com
gxfxwh.com
gxfxzb.com
gxfybj.com
+gxfygp.com
gxfysteel.com
gxfyzx.com
gxfzf.com
@@ -40652,6 +40635,7 @@ gxgcfscl.com
gxgcjs.com
gxgczxjt.com
gxgd192.com
+gxgdbg.com
gxgdhg.com
gxgdlsp.com
gxgdpg.com
@@ -40703,6 +40687,7 @@ gxgoodfirst.com
gxgp123.com
gxgpo.com
gxgpzhtc.com
+gxgqdz.com
gxgqsn.com
gxgrasp.com
gxgree.com
@@ -40723,6 +40708,7 @@ gxgtxny.com
gxgtzb.com
gxgtzx.com
gxguanghui.com
+gxguangxin.com
gxguangyi.com
gxguantai.com
gxguanyu.com
@@ -40743,6 +40729,7 @@ gxguojingjiuye.com
gxguoyang.com
gxguyu.com
gxgwmb.com
+gxgwyw.org
gxgxjc.com
gxgxncplm.com
gxgxun.com
@@ -40797,6 +40784,7 @@ gxhgx.net
gxhgzb.com
gxhgzc.com
gxhh.com
+gxhhgc.com
gxhhgs.com
gxhhhb.com
gxhhig.com
@@ -40827,6 +40815,7 @@ gxhongchuan.com
gxhonggang.com
gxhongning.com
gxhongshimuye.com
+gxhongyunsi.com
gxhongzh.com
gxhope.org
gxhospital.com
@@ -40842,6 +40831,7 @@ gxhrkj.com
gxhs.site
gxhsba.com
gxhsjgs.com
+gxhsltd.com
gxhsry.com
gxhsshj.com
gxhsshjzl.com
@@ -40863,6 +40853,7 @@ gxhuanbaojt.com
gxhuaqu.com
gxhuar.com
gxhuaxing.com
+gxhuaxintech.com
gxhui.com
gxhuicuibencao.com
gxhuifa.com
@@ -40878,13 +40869,16 @@ gxhxgroup.com
gxhxh.com
gxhxysgs.com
gxhxyyjt.com
+gxhxzyh.com
gxhyart.com
gxhydq.com
gxhyey.com
gxhygg.com
gxhykglass.com
+gxhyq.com
gxhyscl.com
gxhysm.com
+gxhyww.com
gxhyxf.com
gxhyxt.com
gxhyz168.com
@@ -40895,7 +40889,9 @@ gxhzjsgc.com
gxhzsbwg.com
gxhzsqyg.com
gxhztqt.com
+gxhzxk.com
gxhzxw.com
+gxhzyd.com
gxi.ink
gxiang.org
gxibvc.net
@@ -40948,6 +40944,7 @@ gxjhcj.com
gxjhgczx.com
gxjhgd.com
gxjhgs.com
+gxjhjcw.com
gxjhjdsb.com
gxjhjs.com
gxjhky.com
@@ -40963,6 +40960,7 @@ gxjianyi.com
gxjiaohang.com
gxjiasheng.com
gxjiatai.com
+gxjichang.com
gxjiebai.com
gxjiefeng.com
gxjien.com
@@ -40987,6 +40985,8 @@ gxjjb.com
gxjjfds.com
gxjjfjt.com
gxjjgy.com
+gxjjh.com
+gxjjyb.com
gxjkamc.com
gxjkhj.com
gxjkjg.com
@@ -40994,6 +40994,7 @@ gxjkjyjc.com
gxjkwy.com
gxjl99.com
gxjla.com
+gxjljz.com
gxjlkj.com
gxjlnm.com
gxjlrc.com
@@ -41044,11 +41045,15 @@ gxjxcloud.com
gxjxsy.com
gxjxwh.com
gxjycjsb.com
+gxjyfdc.com
gxjyfkj.com
gxjygljt.com
+gxjyh.store
+gxjyhb.com
gxjyjs168.com
gxjyjt.com
gxjyjz.com
+gxjyxxw.com
gxjyy.com
gxjyzl.com
gxjyzyw.com
@@ -41116,6 +41121,7 @@ gxlanbowang.com
gxlanco.com
gxlancogroup.com
gxlanlian.com
+gxlansheng.com
gxlbang.com
gxlbbwg.com
gxlbi.com
@@ -41168,6 +41174,7 @@ gxljjt.com
gxljxs.com
gxlke.com
gxlkjy.com
+gxlkl.net
gxllsw888.com
gxlmjt.com
gxlmzs.com
@@ -41256,6 +41263,7 @@ gxmjzs.com
gxmk.net
gxmlba.com
gxmlyjy.com
+gxmmhgs.com
gxmmkt.com
gxmoking.com
gxmqhb.com
@@ -41302,6 +41310,7 @@ gxnmzj.com
gxnncj.com
gxnnclt.com
gxnndghb.com
+gxnnedu.com
gxnnfx.com
gxnnhexiexinli.com
gxnnip.com
@@ -41327,9 +41336,11 @@ gxnongmu.com
gxnpzbx.com
gxnsjt.com
gxntjz.com
+gxnumba.com
gxnun.net
gxnwjt.com
gxnxdb.com
+gxnxgd.com
gxnydq.com
gxnzjz.com
gxnzzy.com
@@ -41375,6 +41386,7 @@ gxqdkj.com
gxqfjzzs.com
gxqgjx.com
gxqgps.com
+gxqhcm.com
gxqhjc.com
gxqhtec.com
gxqianhan.com
@@ -41393,6 +41405,7 @@ gxqmk.com
gxqnjc.com
gxqqxcl.com
gxqrhb.com
+gxqrjy.com
gxqs.org
gxqszl.com
gxqtgroup.com
@@ -41409,6 +41422,7 @@ gxqzrc.com
gxqzrm.com
gxqztv.com
gxqztz.net
+gxqzxjh.com
gxqzxw.com
gxqzxyd.com
gxqzyz.com
@@ -41467,6 +41481,7 @@ gxscjn.com
gxscjx.com
gxsckj.net
gxscsw.com
+gxsd.net
gxsdem.com
gxsdpx.com
gxsdy.com
@@ -41488,9 +41503,11 @@ gxshanyixing.com
gxshbs.com
gxshck.com
gxshdl.com
+gxshenglu.com
gxshenyi.com
gxshgk.com
gxshile.com
+gxshiteng.com
gxshixinde.com
gxshjy.com
gxshjz.com
@@ -41522,6 +41539,7 @@ gxsjwh.com
gxskf.com
gxsksw.com
gxsksy.com
+gxsl.com
gxslbj.com
gxslcc.com
gxslyj.com
@@ -41567,6 +41585,7 @@ gxszjf.com
gxszjk.com
gxszyy.com
gxtagrm.com
+gxtaishi.com
gxtaiyinuo.com
gxtalc.com
gxtangmi.com
@@ -41583,6 +41602,7 @@ gxtfxx.com
gxthcpa.com
gxthxxkj.com
gxthyy.com
+gxtianmiao.com
gxtianpin.com
gxticket.com
gxtizi.com
@@ -41642,11 +41662,13 @@ gxwbl.com
gxwcll.com
gxwcwl.com
gxwdgg.com
+gxwdjt.com
gxweibo.net
gxweipeng.com
gxweite.com
gxwellsun.com
gxwenlian.com
+gxwenyutech.com
gxwgdq.com
gxwgjf.com
gxwhwy.com
@@ -41686,6 +41708,7 @@ gxwzsz.com
gxwzxhyq.com
gxwzyl.com
gxxbx.com
+gxxbzm.com
gxxdbp.com
gxxdit.com
gxxdpc.com
@@ -41693,6 +41716,7 @@ gxxdzx.com
gxxfbfg.com
gxxfgg.com
gxxfky.com
+gxxfsl.com
gxxfz.com
gxxgg.com
gxxgle.com
@@ -41713,6 +41737,7 @@ gxxhtzp.com
gxxhz.com
gxxhzp.com
gxxiangxing.com
+gxxiangyi88.com
gxxiaofu.com
gxxiaolong.net
gxxijiang.com
@@ -41732,8 +41757,10 @@ gxxiyuanep.com
gxxjcz.com
gxxjry.com
gxxjsy.com
+gxxkai.com
gxxkgs.com
gxxkhj.com
+gxxkslgy.com
gxxldl.com
gxxlk.com
gxxlkj.com
@@ -41848,9 +41875,11 @@ gxypjy.com
gxypnh.com
gxyqjc.com
gxysbt.com
+gxysbz.com
gxysccsh.com
gxyskz.com
gxyslkj.com
+gxysqj.com
gxyss.com
gxytdyf.com
gxytgc.com
@@ -41883,6 +41912,7 @@ gxyz120.com
gxyzems.com
gxyzh.com
gxyzhhb.com
+gxyzjc.com
gxyzrmyy.com
gxyzt.com
gxyzxf119.com
@@ -41915,10 +41945,12 @@ gxzh666.com
gxzhdq.com
gxzhenghua.com
gxzhenhang.com
+gxzhentao.com
gxzhgz.com
gxzhicui.com
gxzhihui.com
gxzhisai.com
+gxzhixing.com
gxzhiyuanxing.com
gxzhizhi.com
gxzhjj.com
@@ -41931,6 +41963,7 @@ gxzhp.com
gxzhpm.com
gxzhshxx.com
gxzhunchengbg.com
+gxzhzb.com
gxzhzy.com
gxziheng.com
gxzj-metal.com
@@ -41959,6 +41992,7 @@ gxzpjx.com
gxzpw.org
gxzrdk.com
gxzrjc.com
+gxzrxf.com
gxzscloud.com
gxzsgl.com
gxzsjzsj.com
@@ -41996,15 +42030,19 @@ gxzzcpa.com
gxzzd.com
gxzztkj.com
gxzzxin.com
+gy-ggy.com
gy120.net
gy1688led.com
gy2025.com
gy328.com
gy3y.com
+gy794c.com
gy7n.com
gy818.com
gyaqyy.com
gyb086.com
+gybcq.com
+gybsn.com
gybyscy.com
gycharm.com
gycode.com
@@ -42012,7 +42050,7 @@ gyddos.com
gydfsy.com
gydongli.com
gyedu.net
-gyey.com
+gyersf.com
gyfensuiji.com
gyfwyy.com
gyfyy.com
@@ -42066,6 +42104,7 @@ gyscw.com
gysdzy.com
gyseals.com
gyshwl.online
+gysk.com
gysou.com
gysq.org
gysrmyy.com
@@ -42074,6 +42113,7 @@ gystars.com
gystatic.com
gystc.com
gyswzys.com
+gytcwb.com
gytxnc.com
gytzkg.com
gyuancdn.com
@@ -42129,7 +42169,6 @@ gz007.net
gz0668.com
gz111.com
gz121.com
-gz163rsw.com
gz1hua.com
gz304.com
gz360.com
@@ -42143,7 +42182,6 @@ gzads.com
gzanquan.com
gzap.net
gzaptech.net
-gzasc.com
gzasp.net
gzate.com
gzautojet.com
@@ -42191,7 +42229,6 @@ gzcqs.com
gzcrdzbk.com
gzcsgs.com
gzcsjg.com
-gzculture.net
gzcxhd.com
gzcxlm.org
gzcycling.com
@@ -42229,8 +42266,6 @@ gzenxx.com
gzeryun.com
gzexpo.com
gzfc.net
-gzfeice.com
-gzfeice.net
gzfengmao.com
gzfezx.com
gzfgxh.com
@@ -42337,7 +42372,6 @@ gzjk120.com
gzjkfk.com
gzjkfund.com
gzjkjl.com
-gzjkoa.com
gzjkqh.com
gzjkyljt.com
gzjlp.com
@@ -42346,6 +42380,7 @@ gzjlwy.com
gzjlxh.com
gzjmyy.com
gzjob.net
+gzjpad.com
gzjqd.com
gzjrkg.com
gzjs020.com
@@ -42379,6 +42414,7 @@ gzkmbg.com
gzkofa.com
gzktm.com
gzkuaiyingyong.com
+gzkunmao.com
gzkydzyyy.com
gzlarc.com
gzlawyer.org
@@ -42391,7 +42427,6 @@ gzlig.com
gzlight.com
gzliyuanhb.com
gzlnholdings.com
-gzlrck.com
gzlsgy.com
gzlt.net
gzlujiao.com
@@ -42412,6 +42447,7 @@ gzmath.com
gzmc668.com
gzmcg.com
gzmcgjcpt.com
+gzmediaclick.com
gzmedri.com
gzmeichang.com
gzmiden.com
@@ -42491,6 +42527,7 @@ gzrycl.com
gzsaf.com
gzscbio.com
gzschknyy.com
+gzscjrh.com
gzsdwrmyy.com
gzselon.com
gzsenergy.com
@@ -42516,6 +42553,7 @@ gzslyy.com
gzsonic.com
gzsouth.com
gzspm.com
+gzspring.com
gzspt.com
gzsq.com
gzsqkfyy.com
@@ -42547,6 +42585,7 @@ gzszsj.com
gzszyy.com
gztaiyou.com
gztalx.com
+gztamude.com
gztcdj.com
gztcm3.com
gztea.vip
@@ -42584,7 +42623,6 @@ gzupdc.com
gzv6.com
gzvalex.com
gzvstc.net
-gzvti.com
gzw.net
gzwanbao.com
gzwanju.com
@@ -42602,6 +42640,7 @@ gzwlcyjt.com
gzwoman.org
gzwonbo.com
gzwrit.com
+gzwrjt.com
gzwshd.com
gzwswjc.com
gzwtqx.com
@@ -42623,6 +42662,7 @@ gzxiaoban.com
gzxict.com
gzxijiu.com
gzxinfo.com
+gzxjgc.com
gzxrsqj.com
gzxswh.com
gzxsyy.com
@@ -42648,9 +42688,11 @@ gzyfjsjt.com
gzyflw.com
gzyhg.vip
gzyiagu.com
+gzyilongprinting.com
gzylhyzx.com
gzyouai.com
gzyowin.com
+gzyqtlxs.com
gzyqwl.net
gzytgf.com
gzyucai.com
@@ -42713,6 +42755,7 @@ h2vm.com
h2weilai.com
h3806.com
h3807.com
+h389.com
h3c.com
h3c.com.hk
h3cfuwuqi.com
@@ -42829,6 +42872,7 @@ hafuyoufk.com
hagaozhong.com
hagibis.com
haguan.com
+haguworld.com
haha168.com
haha33.com
haha360.com
@@ -42909,9 +42953,9 @@ haigoose.com
haigouyan.com
haigugroup.com
haigui001.com
-haihengwuye.com
haihepharma.com
haihetour.com
+haihuainternational.com
haihub.co
haihuishou.com
haiintelligent.com
@@ -42954,7 +42998,7 @@ haima.me
haima001.com
haimacloud.com
haimacloudpc.com
-haimaiedu.net
+haimaiyun.com
haiman.io
haimawan.com
haimeec.com
@@ -42982,7 +43026,6 @@ hainanlecheng.com
hainanruiyuan.com
hainanwangdai.com
hainanyouxi.com
-hainanyuyue.com
hainanzuojia.com
hainawater.com
hainayun.net
@@ -42996,7 +43039,6 @@ hainiugo.com
hainiuxy.com
hainuotech.com
haiotsys.com
-haiouchat.com
haipal.com
haipengtoy.com
haipinggroup.com
@@ -43008,6 +43050,7 @@ haiqq.com
haiqu.vip
hair8.net
hairbobo.com
+hairboxonline.com
hairenren.com
hairology.net
hairongsw.com
@@ -43030,6 +43073,7 @@ haita.io
haitaibrowser.com
haitaichina.com
haitakuajing.com
+haitangmm.com
haitangw.cc
haitangw.net
haitao.co
@@ -43049,6 +43093,7 @@ haitl.com
haitong.com
haitongjiaoyu.com
haitou.cc
+haitou360.com
haitoujia.com
haitunshenghuo.com
haitunvoice.com
@@ -43129,7 +43174,6 @@ halcyonz.com
halead.com
halfrost.com
haligame.com
-haling.com
halixun.com
haljl.com
halloar.com
@@ -43147,6 +43191,7 @@ hamashouzuo.com
hamdl.com
hamedal.com
haminol.com
+hammypuff.com
hamu.site
hanabi-live.com
hanas.com
@@ -43206,7 +43251,6 @@ hangjiayun.com
hangkong.com
hangkongxx.com
hanglorygroup.com
-hangluyuan.asia
hangnakeji.com
hangpai.org
hangpu-topsys.com
@@ -43220,7 +43264,6 @@ hanguangbaihuo.com
hanguu.com
hangw.com
hangwei-media.com
-hangwen520.com
hangxinyiqi.xin
hangyan.co
hangyang.com
@@ -43249,6 +43292,7 @@ hanhoo.com
hanhua.com
hanhuatin.com
hanihanrf.com
+hanjea.com
hanjianbing.org
hanjiaying.com
hanjie.biz
@@ -43291,7 +43335,6 @@ hanpokou.com
hanpupharm.com
hanqigroup.com
hanqinghb.com
-hanqiuming888.com
hanqunfeng.com
hans-ad.com
hanschen.site
@@ -43312,6 +43355,7 @@ hanstong.com
hansuku.com
hansunic.com
hanswine.net
+hant.cc
hantang59.com
hantangxintong.com
hantangzy.com
@@ -43356,6 +43400,7 @@ hanzhoulaser.com
hanzify.org
hanziguan.com
hao-shangliang.com
+hao.ac
hao.gg
hao.ink
hao0517.com
@@ -43382,6 +43427,7 @@ hao24.com
hao245.com
hao251.com
hao268.com
+hao315.cc
hao315.com
hao353.com
hao360.com
@@ -43447,6 +43493,7 @@ haoduofangs.com
haoduojiaju.com
haoduorou.net
haoduoziti.com
+haoe123.com
haoejia.com
haoeyou.com
haofabiao.com
@@ -43457,7 +43504,6 @@ haofang007.com
haofang5.com
haofangkankan.com
haofangyu999.com
-haofanhuoban.com
haofeng-group.com
haofenshu.com
haofly.net
@@ -43481,6 +43527,7 @@ haohaoxz.com
haohaoyx.com
haohaozhu.com
haohead.com
+haoht123.com
haohuan.com
haohuanjiao.com
haohuoyuan.com
@@ -43491,7 +43538,6 @@ haojiao.cc
haojiao.net
haojiaolian.com
haojie.work
-haojieyun.com
haojing.org
haojit.com
haoju5.com
@@ -43503,6 +43549,7 @@ haokan.com
haokan5.com
haokanbu.com
haokanqq.com
+haokanshipin.com
haokavip.com
haoke100.com
haokebang.net
@@ -43554,7 +43601,6 @@ haoniu1.com
haonongzi.com
haooyuan.com
haopeixun.com
-haopx123.com
haoqiao.com
haoqikan.com
haoqiutiyu.com
@@ -43592,6 +43638,7 @@ haoshunjia.com
haoshunjx.com
haoshuntm.com
haoshuo.com
+haoshuyou.net
haoshuyun.com
haositone.com
haoso.com
@@ -43701,12 +43748,12 @@ hapco-cn.com
hapg-hitachi.com
hapi123.net
hapids.com
-hapigo.com
hapingapp.com
hapjs.org
haplat.net
happi123.com
happigo.com
+happiness9999.com
happy-ti.com
happy-vpn.com
happy88.com
@@ -43776,7 +43823,6 @@ hasco-group.com
hasea.com
hasee.com
hasee.net
-haseecomputer.com
hasen-cn.com
hashnest.com
hashyrmyy.com
@@ -43832,12 +43878,12 @@ hb-green.com
hb-hengda.com
hb-jn.com
hb-sx.net
-hb-tulip.com
hb-water.com
hb-ws.com
hb-xydq.com
hb-young.com
hb0771.com
+hb10000.com
hb10000sale.com
hb1000kv.com
hb110.cc
@@ -43847,6 +43893,7 @@ hb2h.com
hb30.com
hb3rm.com
hb500.com
+hb56.cc
hb96369.com
hb96568.com
hbaas.com
@@ -43865,6 +43912,7 @@ hbbidding.com
hbblxb.com
hbbmjd.com
hbbnqy.com
+hbbrgd.com
hbbst99.com
hbbsw.vip
hbbutler.com
@@ -43881,6 +43929,7 @@ hbcdyz.com
hbcg.cc
hbchen.com
hbchufeng.com
+hbcjh.net
hbcjkcfwjt.com
hbcjlq.com
hbcjw.com
@@ -43995,6 +44044,7 @@ hbjir.com
hbjjrb.com
hbjk114.com
hbjkjt.com
+hbjmyljs.com
hbjob88.com
hbjomay.com
hbjpim.com
@@ -44008,6 +44058,7 @@ hbjubao.com
hbjxad.com
hbjxjy.org
hbjxjyw.com
+hbjxym.com
hbjyjmzg.com
hbjzgw.com
hbjzxh.com
@@ -44101,6 +44152,7 @@ hbshgzx.com
hbshichang.com
hbshls.com
hbsia.org
+hbsjym.com
hbsjzyxh.com
hbskw.com
hbslft.com
@@ -44181,7 +44233,6 @@ hbydsg.com
hbydsy.com
hbyh0561.com
hbyhfcyy.com
-hbyidc.com
hbyidu.com
hbyisen.com
hbyjfs.com
@@ -44192,6 +44243,7 @@ hbyouyunyouke.com
hbyoyo.com
hbyqtl.com
hbysfhm.com
+hbyt56.com
hbyunxi.net
hbyunyang.net
hbyybwff.com
@@ -44215,6 +44267,7 @@ hbzmw.com
hbzncz.com
hbzqzx.com
hbzsb.com
+hbzst.com
hbzszy.net
hbztn.com
hbzuojia.com
@@ -44239,6 +44292,7 @@ hc79.com
hc943.com
hca258.com
hcaj.com
+hcazb.com
hcbbs.com
hcbnjy.com
hcbuy.com
@@ -44251,7 +44305,6 @@ hcclhealthcare.com
hccoeutg.com
hccpcba.com
hcdamai.com
-hcdns21.com
hcdyhr.com
hceia.com
hcepay.com
@@ -44300,6 +44353,7 @@ hctxf.org
hcty.com
hcvac.com
hcwebsite.com
+hcwh.ltd
hcwhjd.com
hcwiki.com
hcwljy.com
@@ -44312,6 +44366,7 @@ hcxxy.com
hcyacg.com
hcydit.com
hcykt.com
+hcypzy.com
hczc.com
hczl.com
hczq.com
@@ -44340,7 +44395,7 @@ hdabc.com
hdanc.com
hdarea.club
hdavchina.com
-hdb489.com
+hdb.com
hdbaichuan.com
hdbgjt.com
hdbp.com
@@ -44351,6 +44406,7 @@ hdcy123.com
hdd-group.com
hddata.net
hddgood.com
+hddid.com
hddlion.com
hddznet.com
hdeexpo.com
@@ -44364,6 +44420,7 @@ hdhosp.com
hdhospital.com
hdhui.com
hditec.com
+hdj.me
hdjad.com
hdjingwei.com
hdjt.net
@@ -44405,7 +44462,6 @@ hdslb.com
hdslb.net
hdslb.org
hdsmgw.com
-hdsxwhg.com
hdtgtm.com
hdtonghe.com
hdtyre.com
@@ -44449,6 +44505,7 @@ he29.com
he2d.com
heacn.net
head-way.com
+headconsultant.com
heading123.com
headingfilter.com
headphoneclub.com
@@ -44479,7 +44536,7 @@ heating-sh.com
heatingtrace.com
heavenlywind.cc
heavenonearthhealingalternatives.com
-heaye.shop
+heavly1.com
hebangdianzi.com
hebbank.com
hebbc.org
@@ -44518,6 +44575,7 @@ hebgtjt.com
hebi99.com
hebiia.org
hebinhospital.com
+hebisf.com
hebitv.com
hebiw.com
hebjxw.com
@@ -44574,7 +44632,6 @@ heduibu.com
heduismart.com
hedysx.com
heec.com
-heeee.com
heeeeeh.com
heeeepin.com
heemoney.com
@@ -44583,13 +44640,13 @@ heepay.com
heerit.com
hefagear.com
hefei.cc
-hefei.website
hefeilaws.com
hefeimarathon.com
heflc.com
hefls.net
hefunoodles.com
hegii.com
+hegouvip.com
hegsryjq.com
hehagame.com
hehang.net
@@ -44620,12 +44677,15 @@ heidiankeji.com
heightindustry.com
heiguang.com
heiguang.net
+heiha.net
heihei.com
heiheiyuyin.com
heihekeji.com
heijiao.net
heijiaovip.com
+heike07.com
heilanhome.com
+heilei.com
heilifun.com
heilongjianggames.com
heiluo.com
@@ -44684,11 +44744,11 @@ hejxf.com
heketai.com
hekouxin.com
heku.org
+hel168.com
helensbar.com
heliang.cc
helianhealth.com
helianwap.com
-helib.net
helichina.com
heliforklift.com
helight.info
@@ -44750,6 +44810,7 @@ helpton.com
helptousa.com
helpweixin.com
helunyun.com
+heluowenhua.net
helywin.com
hema.ren
hema.wiki
@@ -44797,7 +44858,6 @@ hendera.com
henduofang.com
heng-f.com
hengan-instruments.com
-hengan.com
hengansl.com
hengaodebj.com
hengbao.com
@@ -44833,8 +44893,6 @@ hengkun.com
hengli.com
hengliguoji.com
henglihotels.com
-hengluelaw.com
-hengluopanshi.xyz
hengqian.com
hengqifeng.com
hengqijy.com
@@ -44859,7 +44917,6 @@ hengxiangtaji.com
hengxinjinshu.com
hengxucapital.com
hengxueedu.com
-hengxunguoji.com
hengyagongshui.com
hengyan.com
hengyankeji.com
@@ -44885,14 +44942,17 @@ henmimang.com
henningchem.com
henovcom.com
henrayglass.com
+henri.ren
hensctai.com
hensgroup.com
henzan.com
henzanapp.com
+heodoraiu.com
hepalink.com
hepan.com
hepan.org
hepartshome.com
+hepatox.org
hepmall.com
hepost.com
hepu123.com
@@ -44901,6 +44961,7 @@ hepuwang.com
hepuweilai.com
hepuxw.com
heqingloong.com
+hercity.com
hercules-logistics.com
hercules-micro.com
herdacdn.com
@@ -44915,6 +44976,7 @@ heredlift.com
herenit.com
herllamo-med.com
herllamo.com
+hermod1.com
hero-geek.com
hero.com
herocoming.com
@@ -44924,6 +44986,7 @@ herohr.net
heroic-ltd.com
heroje.com
heroone.com
+herosanctuary.com
heroskate.com
herostart.com
heroworld.net
@@ -44961,6 +45024,7 @@ hetongamp.com
hetusoft.com
heu8.com
heungkong.com
+heupxtct.work
heuvan.com
hewaner.com
hewascreen.com
@@ -44976,6 +45040,7 @@ hexgears.com
hexi-electric.com
hexian.ltd
hexiangroup.com
+hexianrc.com
hexiaoxiang.com
hexie.cc
hexieshaanxi.com
@@ -45025,6 +45090,7 @@ heytapugc.com
heytea.com
heythings-iot.com
heytime.com
+heyuanstone.com
heyuanxw.com
heyuedi.com
heyun100.com
@@ -45092,7 +45158,6 @@ hfgjj.com
hfgxbus.com
hfhm.com
hfhouse.com
-hfhs8x.info
hfhuamei.com
hfi-health.com
hfish.net
@@ -45106,6 +45171,7 @@ hfkenfan.com
hfkjsd.com
hfkktt.com
hfksmdl.com
+hflbysm.com
hfleda.net
hflengku.com
hflp88.com
@@ -45127,9 +45193,7 @@ hfrc.net
hfrcbc.com
hfrsggff.com
hfsava.com
-hfsczx.net
hfshec.com
-hfshz.com
hfsia.com
hfsid.com
hfspxh.com
@@ -45144,6 +45208,7 @@ hftsoft.com
hftx-jt.com
hfw.cc
hfx.net
+hfxczj.com
hfyestar.com
hfykd.com
hfykt.com
@@ -45152,7 +45217,6 @@ hfyt365.com
hfyuqin.com
hfyyhyxh.com
hfyylcy.com
-hfyz.net
hfzfzlw.com
hfzhengxu.com
hfzjxh.com
@@ -45163,6 +45227,7 @@ hg-capacitor.com
hg-daigou.com
hg1218.com
hg12333.com
+hg5177.com
hg568.com
hg8880.org
hg9895.com
@@ -45189,6 +45254,14 @@ hglaser.com
hgmai.com
hgmri.com
hgnc.net
+hgo06070uyi.com
+hgo06071uyi.com
+hgo06080uyi.com
+hgo06081uyi.com
+hgo06090uyi.com
+hgo06091uyi.com
+hgo06101uyi.com
+hgo06111uyi.com
hgobox.com
hgptech.com
hgqizhong.com
@@ -45204,6 +45277,7 @@ hgty5533.com
hgty663.com
hguduo.com
hgvalve.com
+hgveejt270.vip
hgxxgz.com
hgxxgz.net
hgyrnk.com
@@ -45218,6 +45292,7 @@ hh-gltd.com
hh-honghu.com
hh-jt.com
hh-medic.com
+hh-pcbs.com
hh-pmp.com
hh-post.com
hh.global
@@ -45232,9 +45307,11 @@ hhchampion.com
hhchsw.com
hhcjjy.com
hhclby.com
+hhcn.com
hhcx-led.com
hhcyt.com
hhczy.com
+hhdglm.com
hhdna.net
hhfxw.com
hhglys.com
@@ -45253,7 +45330,6 @@ hhhtscf.com
hhhtyg.com
hhitgroup.com
hhjctest.com
-hhjd.mobi
hhjgqh.com
hhjsyxh.com
hhjtcn.com
@@ -45267,6 +45343,7 @@ hhl1916.com
hhlwchem.com
hhmage.com
hhmajiang.com
+hhmanhua.net
hhnykg.com
hhnynews.com
hho-hawater.com
@@ -45353,7 +45430,6 @@ hichain.com
hicheng.net
hichina.com
hichina.net
-hichip.net
hichipharm.com
hichips.com
hicitech.com
@@ -45370,7 +45446,6 @@ hicosmo.com
hicp.net
hicsharp.com
hicss.net
-hicustom.com
hiczp.com
hidery.com
hidesigncloud.com
@@ -45407,7 +45482,6 @@ higame123.com
higer.com
higeshi.com
higgmm.net
-higgsweb.com
high-genius.com
highdigitizing.com
highfaststudio.com
@@ -45445,6 +45519,7 @@ hiigame.net
hiiibrand.com
hiiyun.com
hijackorg.net
+hijiangxi.com
hijiaoshi.com
hijin.vip
hijoys.com
@@ -45452,6 +45527,7 @@ hik-cloud.com
hik-express.com
hik-park.com
hikailink.com
+hikari-ch.com
hikauto.com
hikcreate.com
hikemobile.com
@@ -45481,6 +45557,7 @@ hilemic.com
hilfv.com
hiliad.com
hiliwi.com
+hillelmilwaukee.org
hilllei.com
hillstonenet.com
hillyton.com
@@ -45515,7 +45592,6 @@ hinotravel.com
hinpy.com
hinsyeow.org
hintsnet.com
-hiocloud.com
hiofd.com
hiosu.com
hiparking.com
@@ -45531,6 +45607,7 @@ hippoanimation.com
hippter.com
hipu.com
hiputian.com
+hiqiyu.com
hirain.com
hiram1009-dw.org
hirata-cn.com
@@ -45628,7 +45705,6 @@ hizom.com
hizyw.com
hizyy.com
hj-bits.com
-hj-hospital.com
hj-ienergy.com
hj-mail.com
hj-pack.com
@@ -45637,6 +45713,7 @@ hj1951.com
hj217.com
hj44103a1.shop
hjapi.com
+hjasiancenter.com
hjbbs.com
hjbxw.com
hjcadc.com
@@ -45648,7 +45725,6 @@ hjcm.net
hjcpl.com
hjd111.shop
hjd123.com
-hjdang.com
hjdhdduekcdie.com
hjdict.com
hjdns.com
@@ -45677,14 +45753,13 @@ hjlw.com
hjmarathon.com
hjpcc.com
hjpp.net
-hjqkox.com
hjr-exchange.com
hjren.com
hjsj.com
hjtag.com
-hjtlink.com
hjunkel.com
hjw169.com
+hjw68.com
hjwsky.com
hjwsxzz.com
hjwxcps.com
@@ -45719,9 +45794,9 @@ hk9.com
hkaco.com
hkaima.com
hkance.com
+hkance.xyz
hkanews.com
hkaohua.com
-hkatv.com
hkbchina.com
hkcd.com
hkcgart.com
@@ -45737,6 +45812,7 @@ hkcwdc.com
hkdfc.com
hkdfgroup.com
hkdqgroup.com
+hkdzxs.com
hkexpressworld.com
hkfc.hk
hkfcchina.com
@@ -45759,8 +45835,8 @@ hkklock.com
hkkuaiyixiu.com
hklego.com
hklmoto.com
+hklmxcx.com
hkm168.com
-hkmanga.com
hkmedtime.com
hkmeinian.com
hkmipo.com
@@ -45817,7 +45893,6 @@ hldgp.com
hldhouse.com
hldhuanbao.com
hldjob.com
-hldlchina.com
hldmzg.com
hldnews.com
hldszxyy.com
@@ -45839,6 +45914,7 @@ hljcqjy.com
hljdata.net
hljgvc.com
hljgwy.net
+hljgzkj.com
hljhgckj.com
hljiasen.com
hljjjb.com
@@ -45861,6 +45937,7 @@ hlkkwl.com
hlkncse.com
hlktech.com
hllinks.com
+hllives.com
hlmmold.com
hlnhw.com
hlnmg.com
@@ -45868,6 +45945,7 @@ hlnpic.com
hlnpm.com
hlo-trade.com
hlqiaojia.com
+hlread.com
hlsdq.com
hlstlyy.com
hltmsp.com
@@ -45884,12 +45962,12 @@ hlxstipark.com
hlxsykd.com
hlxsz.com
hlxy.com
-hlxy.net
hly.com
hlybar.com
hlyds.com
hlyiq.com
hlytec.com
+hlyy8.com
hlyykp.com
hlzaojia.com
hlzq.com
@@ -45908,6 +45986,7 @@ hmadgz.com
hmarathon.com
hmbzfjt.com
hmchina.com
+hmdx.net
hmedu.com
hmeili.com
hmf-china.com
@@ -45945,6 +46024,7 @@ hmxixie.com
hmxw.com
hmxx.net
hmyzs.com
+hmz.com
hmz8.com
hmzhtc.cc
hmzhtc.com
@@ -45954,7 +46034,6 @@ hn-binglang.com
hn-cbec.com
hn-hwqjxh.com
hn-medical.com
-hn-tourdev.info
hn-xqlhw.com
hn0746.com
hn165.com
@@ -45962,6 +46041,7 @@ hn6j.com
hn96520.com
hn9mu.com
hnacargo.com
+hnacgs.com
hnaec.com
hnaec.org
hnaee.com
@@ -45994,7 +46074,6 @@ hnceg.com
hncfa.com
hncgkgjt.com
hnchaosu.com
-hnchasing.com
hnchemtech.com
hnchuangj.net
hnchuangxiangkj.com
@@ -46020,7 +46099,6 @@ hndcyg.com
hndec.com
hndfbg.com
hndfsrmyy.com
-hndfzx.com
hndgxh.com
hndhsyjt.com
hndlhx.com
@@ -46029,6 +46107,7 @@ hndmtjc.com
hndnews.com
hndpf.org
hndpx.com
+hnds88.com
hndscg.com
hndsyy.com
hndt.com
@@ -46037,6 +46116,7 @@ hndybus.com
hndysx.com
hndz413.com
hndzxh.com
+hnechz.com
hnedition.com
hnedutv.com
hnerkang.com
@@ -46068,6 +46148,7 @@ hngscloud.com
hngsetc.com
hngtrust.com
hngwg.com
+hngwkj.net
hngwmt.com
hngwy.org
hngwzk.com
@@ -46083,7 +46164,6 @@ hnhjjx.com
hnhnled.com
hnhp.com
hnhsjt.com
-hnhspc.com
hnht56.com
hnhtdg.com
hnhw.com
@@ -46115,7 +46195,6 @@ hnjme.com
hnjmsk.com
hnjshzy.com
hnjsrcw.com
-hnjsxy.com
hnjtcl.com
hnjttz.com
hnjudarhr.com
@@ -46222,7 +46301,6 @@ hnsiwei.com
hnsjgroup.com
hnsjlh.com
hnsjrd.com
-hnskl.org
hnsktc.com
hnskxy.com
hnsky.net
@@ -46279,7 +46357,6 @@ hntzyy.com
hnubbs.com
hnucc.com
hnukai.com
-hnw443.com
hnwanglong.com
hnwbxx.com
hnwca.com
@@ -46323,6 +46400,7 @@ hnydgl.com
hnyesf.com
hnyfkj.com
hnyichang.com
+hnyingfang.com
hnyinhan.com
hnyixiao.com
hnysfww.com
@@ -46335,7 +46413,6 @@ hnyunzhiyi.com
hnyuyuhui.com
hnyydg.com
hnyygroup.com
-hnyytech.com
hnyyws.com
hnyyxj.com
hnyyyfsyy.com
@@ -46374,12 +46451,11 @@ hnzyfy.com
hnzywh.xyz
hnzyxckj.com
hnzyydx.com
+hnzyzx.com
hnzzjob.com
hnzzlh.com
hnzzms.com
hnzzrc.com
-hoaihe.store
-hoatia.com
hoau.net
hobalab.com
hobby-eagle.net
@@ -46397,9 +46473,9 @@ hoehub.com
hofcc.com
hogacn.com
hogasky.com
-hogci.com
hogesoft.com
hogon17.com
+hoho666.com
hohode.com
hoilon.com
hoing.net
@@ -46451,6 +46527,7 @@ homecdn.com
homed.me
homedgroup.com
homedo.com
+homeindus.com
homeinframes.com
homeinmists.com
homeinns.com
@@ -46466,6 +46543,7 @@ homesir110.com
homestyler.com
hometex114.com
hometexnet.com
+hometol.com
homey-household.com
homeyao.com
homhow.com
@@ -46501,6 +46579,7 @@ hongbo-sh.com
hongbo100.com
hongboluo.com
hongcesys.com
+hongchangpawn.com
hongchisw.com
hongchuangholding.com
hongda-steeltube.com
@@ -46533,6 +46612,7 @@ hongjia138.com
hongjiang.info
hongjiejia.com
hongjigroupsz.com
+hongjin2.com
hongjing-wh.com
hongjing.com
hongjing3.com
@@ -46552,12 +46632,14 @@ honglimfg.com
honglimingbiao.com
honglipai.net
honglumedia.com
+hongm.com
hongmaoshiye.com
hongmeiti.com
hongmeiti.net
hongmen.cc
hongmen.com
hongmingbus.com
+hongmo.xyz
hongmoka.com
hongmu.com
hongniang.com
@@ -46590,7 +46672,6 @@ hongshipaint.com
hongshizi.org
hongshn.xyz
hongshu.com
-hongshu18.com
hongshunet.com
hongshunth.com
hongshuxiao.com
@@ -46615,7 +46696,6 @@ hongwu.com
hongwuhuan.com
hongxiangzaixian.com
hongxiaolong.com
-hongxin1.asia
hongxingdl.com
hongxingdl.love
hongxinglin.com
@@ -46690,13 +46770,12 @@ hoolee8.com
hoolinks.com
hoolo.tv
hoonup.com
+hoop-archi.com
hoopchina.com
hoopugames.net
hoosho.com
hooshun.com
hoosuntec.com
-hootnews.site
-hooxz.com
hooya.hk
hooyagroup.com
hooyoo.com
@@ -46710,6 +46789,7 @@ hopechart.com
hopecool.com
hopeda.com
hopegoocdn.com
+hopehook.com
hopemedinc.com
hopenoah.com
hoperun.com
@@ -46771,6 +46851,7 @@ hospitalkg.com
hospitalshy.com
hospitalstar.com
hospite.com
+host263.com
host888.net
hostacc.net
hostacc1.com
@@ -46798,7 +46879,6 @@ hoteastday.com
hotelbaijin.com
hotelcis.com
hotelgg.com
-hotelincn.com
hoteljianguo.com
hotelpanpacific.com
hotelsjianguo.com
@@ -46871,6 +46951,7 @@ house5.net
house510.com
house86.com
houseimg.com
+houseoftantra.org
houshaoan.com
housoo.com
houwuedu.com
@@ -46896,6 +46977,7 @@ hoxue.com
hoyakeji.com
hoyatod.com
hoyi-tech.com
+hoyibox.xyz
hoyip.com
hoyo.link
hoyoverse.com
@@ -46903,7 +46985,6 @@ hozest.com
hozin.com
hozonauto.com
hp-marathon.com
-hp-ww.com
hp.com
hp123.com
hp888.com
@@ -46925,9 +47006,10 @@ hpigc.com
hpjd.com
hplyy.com
hpmicro.com
+hpnfjx.com
hpoi.net
hprt.com
-hprtupgrade.com
+hprx.com
hps-sh.com
hpstore-china.com
hpstore.cc
@@ -47078,10 +47160,10 @@ hrflc.com
hrfoods.com
hrgsmz.com
hrgxyy.com
-hrhgstock.com
hrhuiyi.com
hrhy365.com
hrintl.com.hk
+hrjextruders.com
hrjkjt.com
hrloo.com
hrm100.com
@@ -47093,7 +47175,6 @@ hrpackage.com
hrs100.com
hrsalon.org
hrsay.com
-hrsecn.com
hrsee.com
hrsel.com
hrsoft-china.com
@@ -47105,7 +47186,6 @@ hruikang.com
hrvouge.com
hrwuu.com
hrxz.com
-hrzs168.com
hrzy.cc
hs-bianma.com
hs-biopharm.com
@@ -47151,7 +47231,6 @@ hsg2oi3c.com
hsgf.net
hsgjj.com
hsgjysj.com
-hsgtour.net
hshan.com
hshdyw.com
hshhlj.com
@@ -47162,6 +47241,7 @@ hshsxkj.com
hshton.com
hshuiyi.com
hsjk.com
+hsjkaoyan.com
hsjpgzx.com
hsjrhy.com
hsjt1983.com
@@ -47181,7 +47261,6 @@ hsmob.com
hsmrt.com
hsnewsnet.com
hsoow.com
-hspdz.com
hspharm.com
hspm.net
hspress.net
@@ -47230,6 +47309,7 @@ hsxt.net
hsy188.com
hsyaguanjg.com
hsyanyi.com
+hsybyh.com
hsyk023.com
hsysupply.com
hsyuntai.com
@@ -47292,7 +47372,6 @@ htgkdz.com
htguosheng.com
htgwf.com
hth.com
-hthbet.com
hti-instrument.com
htidc.com
htinfor.com
@@ -47324,7 +47403,6 @@ htong.com
htoo.vip
htood.com
htool.com
-htqhedu.com
htqjy.com
htqyy.com
htrip.biz
@@ -47368,6 +47446,7 @@ htys123.com
htyswzzgw.com
htyunwang.com
htzdj.com
+htzdznjs.com
htzhgd.com
htzipr.com
hu.com
@@ -47395,13 +47474,11 @@ huabbao.com
huabeicw.com
huabian.com
huabianyl.com
-huabiaolaw.com
huabo.net
huabokeji.com
huabot.com
huacai-tech.com
huacai.com
-huacaihuayi.com
huacaijia.com
huacaole.com
huacemedia.com
@@ -47619,6 +47696,7 @@ huangqi1688.com
huangshaotian.com
huangshimarathon.com
huangwei.me
+huangwei.pro
huangxin.dev
huangxinwei.com
huangyao.work
@@ -47663,12 +47741,12 @@ huanqiu.org
huanqiu56.com
huanqiuauto.com
huanqiuchuguo.com
+huanqiujiemi.com
huanqiukexue.com
huanqiutape.com
huanqiuw.com
huanqiuyimin.com
huanqunquan.com
-huanse.net
huansengifts.com
huanshoulv.com
huante.com
@@ -47881,7 +47959,6 @@ huayilighting.com
huayimedia.com
huayiming.com
huayin114.com
-huayin99.com
huayingglass.com
huayingrc.com
huayingsc.com
@@ -47895,9 +47972,11 @@ huayiwork.com
huayiyunxinxi.com
huayou.com
huayoumengze.com
+huayoutianyu.com
huayuan-print.com
huayuanlcd.com
huayuchaxiang.com
+huayue119.com
huayueivf.com
huayufilter.com
huayug.com
@@ -47914,13 +47993,13 @@ huazhen2008.net
huazhengcaiwu.com
huazhengwuye.com
huazhenjiaoyu.com
+huazhiedu.com
huazhiweilai.com
huazhixingchina.com
huazhongcar.com
huazhongcnc.com
huazhu.com
huazhuanapp.com
-huazhuangshi.net
huazhucorp.com
huazirc.com
hubamdi.com
@@ -47940,9 +48019,9 @@ hubeihome.net
hubeiip.com
hubeijingjunf.com
hubeikj.com
+hubeinet.com
hubeipbx.com
hubeiport.com
-hubeixingyih.com
hubeixuekao.com
hubeiyanjiusheng.com
hubeiyongtai.com
@@ -47988,7 +48067,9 @@ hugecdn168.com
hugecore.net
hugeland.com
hugetall.com
+hugong-js.com
hugong.com
+huhaha.net
huhaoyang.com
huhexian.com
huhoo.com
@@ -48035,6 +48116,7 @@ huidafrp.com
huidagroup.com
huidan.net
huidang.com
+huidaocaishui.com
huidaqg.com
huidawanan.com
huidazhe.vip
@@ -48060,6 +48142,7 @@ huifengzhuzao.com
huifenqi.com
huifu.com
huifudashi.com
+huifusihai.com
huifutz.com
huifuzhinan.com
huigao-magnetics.com
@@ -48195,6 +48278,7 @@ huisucn.com
huisuoping.com
huitao.net
huitaoche.com
+huitaoyouhui.com
huitengpipe.com
huitongqingsuan.com
huitouche.com
@@ -48235,6 +48319,7 @@ huiyi-123.com
huiyi365.net
huiyi8.com
huiyi9e.com
+huiyiabc.com
huiyiai.net
huiyihealth.com
huiyinxun.com
@@ -48317,14 +48402,12 @@ humensec.com
huming.com
hummcars.com
hunaen.com
-hunan-bank.com
hunan-changda.com
hunan-huasheng.com
hunan100km.com
hunanbestall.com
hunancatv.com
hunaneu.com
-hunanfapaiwang.com
hunangaozhi.com
hunangy.com
hunanhaihong.com
@@ -48345,6 +48428,7 @@ hunbei4.com
hunbei5.com
hunbohui.info
hunbys.com
+hunche.net
hunchun123.com
hundredcent.com
hundsun.com
@@ -48364,7 +48448,6 @@ hunlimama.com
hunlimao.com
hunmiao.com
hunsh.net
-hunsha.work
huntchance.com
huntermailfocus.com
hunteron.com
@@ -48374,6 +48457,13 @@ huntkeydiy.com
huntsbot.com
hunuo.com
hunyinyiyuan.com
+huo07100hy.com
+huo07110hy.com
+huo07120hy.com
+huo07140hy.com
+huo07150hy.com
+huo07160hy.com
+huoas.com
huoban.com
huobanbot.com
huobanhuyu.com
@@ -48397,6 +48487,7 @@ huocheso.com
huocms.com
huodao.hk
huodong.org
+huodong.store
huodong5.com
huodonghezi.com
huodonghui.net
@@ -48434,6 +48525,7 @@ huolishaonianwang.com
huolug.com
huomakeji.com
huomao.com
+huomaotv.com
huomaqun.com
huomujin.com
huonan.net
@@ -48447,7 +48539,6 @@ huoshan.cc
huoshan.club
huoshan.com
huoshancdn.com
-huoshanfake.com
huoshangroup.com
huoshanimg.com
huoshanlive.com
@@ -48496,6 +48587,7 @@ hurom.vip
hurricane618.me
hurricanechip.com
hurun.net
+hurx04.xyz
hurys.com
husenji.com
hushangcaifu.com
@@ -48532,6 +48624,7 @@ hutuii.com
huuhoo.com
huuing.com
huwaibbs.com
+huwaizb.com
huway.com
huweihuang.com
huweishen.com
@@ -48601,6 +48694,7 @@ hwastro.com
hwasunpharma.com
hwatson.com
hwavi.org
+hwbanaa.com
hwbaoan.com
hwbfxp5030.vip
hwbim.com
@@ -48666,6 +48760,7 @@ hx2cars.com
hx36.net
hx416.com
hx5658.com
+hx818.com
hx8886.com
hx95.com
hx99.net
@@ -48680,16 +48775,15 @@ hxccc.org
hxcdn.net
hxchem.net
hxchx.org
+hxclouds.com
hxct.com
hxd56.com
hxdec.com
hxdi.com
hxdkfp.com
hxdkj88.com
-hxdpay.com
hxdrisk.com
hxdsbgg.com
-hxdsmy.com
hxdspa.com
hxdtekf.com
hxen.com
@@ -48708,7 +48802,6 @@ hxgs.net
hxhost.com
hxhssw.com
hxiangjia.com
-hxiapp.com
hxing.com
hxinq.com
hxjbh.com
@@ -48756,6 +48849,7 @@ hxqc.mobi
hxqcgf.com
hxqcjt.com
hxqgczx.com
+hxqtedu.com
hxqu.com
hxr100.com
hxrc.com
@@ -48835,7 +48929,6 @@ hy5353.com
hy552.com
hy5553.com
hy563.com
-hy57.com
hy576.com
hy628.com
hy636.com
@@ -48852,7 +48945,6 @@ hyagv.com
hyahm.com
hyaimed.com
hyb2b.com
-hybaizhen.com
hybase.com
hybbs.net
hybbtree.com
@@ -48868,7 +48960,6 @@ hyckjic.com
hycn.com
hydarts.com
hydbest.com
-hydcn.com
hyddd.com
hydesolar.com
hydst.com
@@ -48878,7 +48969,6 @@ hydzfp.com
hydzswyxgs.com
hyec.com
hyedu.com
-hyeus.net
hyexpo.com
hyext.com
hyey.com
@@ -48903,10 +48993,10 @@ hyhqjt.com
hyhro.com
hyhscm.com
hyht.fun
-hyhudong.com
hyhuo.com
hyhxt.net
hyhy.cc
+hyhyn.com
hyilp.com
hyimmi.com
hyipchina.com
@@ -48914,7 +49004,6 @@ hyj999.com
hyjgxx.com
hyjhgy.com
hyjnpx.com
-hyjsxy.com
hyjxmx.com
hykang.com
hykcsoft.com
@@ -48951,6 +49040,7 @@ hypercachenet.com
hypercachenode.com
hypergryph.com
hypergryph.net
+hyperguestai.com
hypers.com
hypersilicon.com
hypersnap.net
@@ -48965,7 +49055,6 @@ hyqcw.com
hysbz.com
hysec.com
hyseim.com
-hyshe.cc
hyshengnian.org
hyshi.net
hysound.com
@@ -49028,7 +49117,6 @@ hz-hospital.com
hz-jsyg.com
hz-kedi.com
hz-moon.com
-hz-oa.com
hz-pharm.com
hz-polar.com
hz-spring.net
@@ -49044,7 +49132,6 @@ hz2y.com
hz3201.com
hz3ds.com
hz3y.com
-hz3yy.com
hz66.com
hz6z.com
hz7hospital.com
@@ -49113,7 +49200,6 @@ hzddwk.com
hzdelian.com
hzdely.com
hzdgjc.com
-hzdianqin.com
hzdjr.com
hzdjy.com
hzdledu.com
@@ -49135,7 +49221,6 @@ hzeg.com
hzelec.com
hzepd.com
hzeyun.com
-hzfanews.com
hzfc.cc
hzfc365.com
hzfeat.com
@@ -49166,6 +49251,7 @@ hzguode.com
hzguojiao.com
hzgwzn.com
hzgxr.com
+hzgymd.com
hzgzsoft.com
hzh0775.com
hzh1.com
@@ -49225,6 +49311,7 @@ hzjizhun.com
hzjlcs.com
hzjljt.com
hzjmjl.com
+hzjndz.com
hzjqhy.com
hzjsjl.com
hzjtfw.com
@@ -49307,6 +49394,7 @@ hzpgc.com
hzpswy.com
hzpzs.net
hzqfy.com
+hzqiuxue.com
hzqj.com
hzqjdz.net
hzqlpt.com
@@ -49371,7 +49459,6 @@ hzsun.com
hzsunup.com
hzswmotor.com
hzswysyy.com
-hzsycq.com
hzszls.com
hzszyyy.com
hztbc.com
@@ -49406,6 +49493,7 @@ hzwmw.com
hzwomenmarathon.com
hzwotu.com
hzwqscl.com
+hzwsjyjt.com
hzwtech.com
hzx.center
hzx8188.com
@@ -49419,7 +49507,6 @@ hzxiangshang.com
hzxiaoya.com
hzxinglong-ip.com
hzxiyuege.com
-hzxjhs.com
hzxqf.com
hzxsjgxx.com
hzxsjtzt.com
@@ -49450,7 +49537,6 @@ hzyys.com
hzyz.net
hzyzxx.net
hzzbco.com
-hzzbhb.com
hzzckg.com
hzzfcm.com
hzzfxx.com
@@ -49464,6 +49550,7 @@ hzzhonggang.net
hzzhonghao.com
hzzhuode.com
hzzhyl.com
+hzzhzm.com
hzzjjsgc.com
hzzkj.net
hzzp.com
@@ -49473,7 +49560,6 @@ hzzred.com
hzzrmc.com
hzzsfs.com
hzzsxh.com
-hzzszf.com
hzztkj.com
hzzuyin.com
hzzx365.com
@@ -49491,6 +49577,7 @@ i-excellence.com
i-f.work
i-fanr.com
i-firefly.com
+i-haitao.com
i-iem.com
i-ktv.com
i-lewan.com
@@ -49551,7 +49638,6 @@ i3abox.com
i3ciebwk6ixfb.com
i3done.com
i3dpworld.com
-i3f.cc
i3geek.com
i3gt.com
i3smot.com
@@ -49597,6 +49683,7 @@ iaapc.org
iacstar.com
iaddata.com
iadmob.com
+iadmore.com
iadtracker.com
iaeac.org
iagefans.com
@@ -49632,6 +49719,7 @@ iaoyou.com
iaozi.com
iape-js.com
iapijy.com
+iapkk.com
iapolo.com
iappdaily.com
iappler.net
@@ -49655,6 +49743,7 @@ iavlife.com
iazhi.com
ib-china.com
ib3-gogin.com
+ibabyjoy.com
ibadboy.net
ibailve.com
ibaiqiu.com
@@ -49694,7 +49783,6 @@ ibeta.me
ibianma.com
ibicn.com
ibidian.com
-ibidmob.com
ibiji.com
ibingniao.com
ibiquge.info
@@ -49718,13 +49806,13 @@ iblimg.com
iblog.ren
ibloger.net
iblue.com
+iblue.me
ibluefrog.com
ibluesocial.com
iblwl.com
ibm-dns.com
ibmfwqdl.com
ibmwclub.com
-ibnjl.shop
ibobscs.com
ibodao.com
ibodyhome.com
@@ -49748,9 +49836,7 @@ ibuscloud.com
ibuscloud.net
ibuychem.com
ibw.cc
-ibwm5lynb6.com
ibytedapm.com
-ibytepluses-test.com
ic-bro.com
ic-captain.com
ic-itssc.org
@@ -49760,6 +49846,7 @@ ic-leasing.com
ic-mag.com
ic-spic.com
ic-valley.com
+ic001.org
ic2china.com
ic37.com
ic72.com
@@ -49783,7 +49870,6 @@ icanvideo.com
icarbonx.com
icardfinancial.com
icaredbd.com
-icarstory.com
icasiso.com
icastlewar.com
icax.org
@@ -49872,7 +49958,6 @@ ichanyu.com
ichaoshangyue.com
ichaotao.com
ichaotu.com
-icharityngo.com
ichat800.com
ichatcn.com
ichdata.com
@@ -49959,6 +50044,7 @@ icoou.com
icoremail.net
icos8.com
icostapp.com
+icosz.com
icot.com
icourse163.com
icourse163.org
@@ -50022,6 +50108,7 @@ icz.com
iczhiku.com
iczoom.com
id-bear.com
+id-photo-verify.com
id57.com
id6.me
ida-a.org
@@ -50042,11 +50129,11 @@ idatagx.com
idataway.com
idatawz.com
idayer.com
-idazhe.net
idbhost.com
idc-icp.com
idc002.com
idc021.com
+idc027.net
idc029.com
idc123.com
idc129.com
@@ -50069,7 +50156,6 @@ idccun.com
idcdoc.com
idceb.com
idcfengye.com
-idcfx.net
idcgcloudcs.com
idchz.com
idchz.net
@@ -50120,6 +50206,7 @@ ideanote.cc
ideapool.tv
ideappt.com
idearhanyu.com
+ideasr.com
ideassoft.com
ideation.love
ideazhao.com
@@ -50191,12 +50278,12 @@ iduochong.com
iduodou.com
iduokan.net
idux-vw.com
-idwuhan.com
idwzx.com
idx365.com
ie13.com
ie515.com
ie525.com
+ie57.com
ie815.com
ie915.com
ie935.com
@@ -50352,6 +50439,7 @@ ifresh.mobi
ifromvr.com
ifscity.com
ifseclabs.com
+ifshot.com
ifundstore.com
ifunmac.com
ifutest.com
@@ -50359,7 +50447,6 @@ ifutureworks.com
ifxtx.com
ifzxs.cc
ifzzw.com
-iga-pages.com
igaichong.com
igame007.com
igame58.com
@@ -50451,7 +50538,6 @@ ihappy.vip
ihappystudio.com
ihappystudio.net
ihasl.com
-ihco3.com
ihdt.tv
ihdty.com
ihealthcoming.com
@@ -50465,6 +50551,7 @@ ihggccampaign.com
ihicon.com
ihigee.com
ihint.me
+ihisce.com
ihitui.com
ihitun.com
ihkk.net
@@ -50554,6 +50641,7 @@ iinorii.com
iiolink.com
iiong.com
iipcloud.com
+iipiano.com
iirii.com
iirpwigs.com
iis7.com
@@ -50637,6 +50725,7 @@ ikebukuro777.org
ikeled.com
ikemeng.com
ikepu.com
+ikgambwqeqnv.com
ikhimalayaniq.com
ikj123.com
ikj168.com
@@ -50644,6 +50733,7 @@ ikjds.com
ikjtao.com
ikjxc.com
ikmoo.com
+ikmt.net
ikncn.com
ikonfx.com
ikongjian.com
@@ -50665,7 +50755,6 @@ ikunac.com
ikuncdnfb.com
ikunpay.com
ikutu.com
-ikuuu.one
ikx.me
ikzybf.com
il8r.com
@@ -50684,6 +50773,7 @@ ilaw66.com
ilawpress.com
ilazycat.com
ilcweloc.com
+ilea-roswell.org
ileapcloud.com
ileci.com
ileedarson.com
@@ -50726,6 +50816,7 @@ ilucky.net
iluezhi.com
ilufan.com
iluhang.com
+ilustrepro.com
iluvatar.ai
iluvatar.com
ilux.ai
@@ -50752,11 +50843,13 @@ imageedu.com
imagefuture101.com
imagehub.cc
imagelol.com
+imageoss.com
imageplusplus.com
imageplusplus.net
imagepy.org
imagerjt.com
images-cache.com
+images.samsung.com
images3.tripcdn.com
imagestoryai.com
imageter.com
@@ -50778,6 +50871,7 @@ imao2.com
imaojiang.com
imarketchina.com
imarkr.com
+imaschina.com
imatlas.com
imayitxt.com
imazingchina.com
@@ -50821,6 +50915,7 @@ imeitou.com
imelai.com
imeme.tv
imetacloud.com
+imeyahair.com
imfirewall.com
imfooww.com
img-space.com
@@ -50838,11 +50933,11 @@ img168.net
img16888.com
img4399.com
img898.com
-img9g2026.com
imgbed.link
imgcdc.com
imgchr.com
imgcook.com
+imgdd.cc
imgdianying.com
imgdianyingoss.com
imge.cc
@@ -50983,6 +51078,7 @@ imycloud.com
imydns.net
imyfone.club
imyike.com
+imys.net
imyshare.com
imyuedu.com
imyushu.com
@@ -51030,7 +51126,6 @@ inctrip.com
ind-map.com
ind4.net
ind9ed.com
-indeedpower.com
indetek-lab.com
indexea.com
indexedu.com
@@ -51091,7 +51186,6 @@ infomorning.com
infong.net
infoobs.com
infoqstatic.com
-inforamz.com
inforbus.com
inforeenviro.com
inforguard.net
@@ -51134,7 +51228,6 @@ initaf.com
initah.com
initaj.com
initak.com
-initba.com
initbb.com
initcc.com
initdd.com
@@ -51175,7 +51268,6 @@ inkuai.com
inkwai.com
inlandschool.com
inlaylink.com
-inlaylink.net
inlishui.com
inliuzhou.com
inluckcalendar.com
@@ -51223,7 +51315,6 @@ inoneh5.com
inong.net
inoteexpress.com
inovance-automotive.com
-inovance.com
inovogen.com
inovppg.com
inovpu.com
@@ -51243,6 +51334,7 @@ inshion.com
inshotapp.com
insigma-elec.com
insistence.tech
+insmoin.com
insnail.com
insneu.com
insnex.com
@@ -51259,6 +51351,7 @@ insta360.com
instafogging.com
installgreat.com
installwage.com
+instantinfographicspresence.com
institution2.com
instome.com
instreet.com
@@ -51273,7 +51366,6 @@ int2018.com
int800.com
intaek.com
intdmp.com
-inte.net
intecheye.com
intecol-10iwc.com
intedc.com
@@ -51281,6 +51373,7 @@ integrity-funds.com
intekey.com
intel-space.com
intelcupid.com
+intellect.black
intelligen.ltd
intelligence-electricity.net
intelligentmanufactory.com
@@ -51307,7 +51400,6 @@ intmedic.com
intmes.com
intohard.com
intomod.com
-intonead.com
intopet.com
intostarry.com
intovfx.com
@@ -51319,7 +51411,6 @@ intsavi.com
intseamultiply.com
intsig.com
intsig.net
-intvolunteer.com
intwho.com
intwing.com
inuobi.com
@@ -51346,6 +51437,7 @@ inwuoo.com
inxedu.com
inxni.com
inxunoffice.com
+inyota.com
inzone-auto.com
inzotek.com
ioa365.com
@@ -51422,6 +51514,7 @@ iotxx.com
iotyeas.com
iotyes.com
iouluo.com
+ioxqm.com
ioxunyun.com
ip-guard.net
ip-hercules.com
@@ -51435,6 +51528,7 @@ ip33.com
ip3366.net
ip3a.com
ip518.com
+ip66.com
ip66.net
ip669.com
ip77.net
@@ -51523,7 +51617,6 @@ ipoceo.com
iposeidonbussiness.com
iposeidoncdn.com
iposeidongame.com
-iposl.com
ipostalcode.com
ipple.net
ipplus360.com
@@ -51606,13 +51699,13 @@ iquanwai.com
iquaveizeeru.com
ique.com
iquegui.com
+iquhuo.com
iquickfish.com
iqujing.com
iqunix.com
iqunix.store
iqupdate.com
iqxedu.com
-ir56.com
irain.in
irainone.com
iranmahanair.com
@@ -51651,10 +51744,12 @@ irlianmeng.com
irmleader.com
irobotbox.com
irockbunny.com
+iroing.com
ironfishchina.com
irongbei.com
ironghui.com
irootech.com
+irort.com
irouteros.com
irrichina.com
irs01.com
@@ -51684,6 +51779,7 @@ isagzth.com
isahome.net
isaieg.com
isamanhua.com
+isameforum.org
isawhis.com
isawhs.com
isawuhan.com
@@ -51716,7 +51812,6 @@ ishanghome.com
ishangman.com
ishangtong.com
ishangu.com
-ishanin.com
ishansong.com
ishaohuang.com
isharepc.com
@@ -51739,6 +51834,7 @@ ishubao.org
ishugui.com
ishuiyun.com
ishumei.com
+ishuocha.com
ishuqi.com
ishuqi.net
ishuquge.com
@@ -51817,9 +51913,11 @@ istoreos.com
istpei.com
istrongcloud.com
istrongcloud.net
+istylepdf.com
isuanyun.com
isudaji.com
isuike.com
+isummi.com
isun.org
isunon.com
isunton.com
@@ -51838,6 +51936,7 @@ isxtv.com
isyour.love
it-bound.com
it007.com
+it0772.net
it120.cc
it165.net
it168.com
@@ -51906,19 +52005,22 @@ itcm.com
itcn.cc
itcodemonkey.com
itcpn.net
+itcqf.org
itczh.com
itdabao.com
itdai.com
itdayang.com
itddo2page.com
itdevnow.com
-itdida.com
itdks.com
+itdog-dns.com
itdog.com
itdog.plus
itdoisp.com
+itdoor.net
itdos.com
itdos.net
+itdp-china.org
iteam-dress.com
itechate.com
itedou.com
@@ -51983,7 +52085,6 @@ itmanbu.com
itmind.net
itmoocs.com
itmop.com
-itmopcdn.com
itmuch.com
itmuke.com
itmyhome.com
@@ -52026,7 +52127,6 @@ itpux.com
itpwd.com
itqaq.com
itrace.cc
-itravelsaas.com
itredu.com
itrid.com
itrip.com
@@ -52063,11 +52163,11 @@ itutu.tv
ituun.com
ituut.com
itv.video
+itvcn.com
itwanger.com
itwlw.com
itwork.club
itwsms.com
-itwz.cc
itxe.net
itxia.club
itxp365.com
@@ -52093,6 +52193,7 @@ iu95522.com
iuban.com
iucdn.com
iuctrip.com
+iufida.com
iuinns.com
iuiu.site
iumemo.com
@@ -52124,7 +52225,6 @@ ivips.site
ivistang.com
ivixivi.com
ivknow.com
-ivolces-test.com
ivolces.com
ivon.work
ivqamtkr.com
@@ -52153,6 +52253,7 @@ iwanoutdoor.com
iwanshow.com
iwapan.com
iwatani-gz.com
+iwatch365.com
iwatertech.com
iway-tech.com
iwebad.com
@@ -52173,7 +52274,6 @@ iwhopro.com
iwhr.com
iwhr.org
iwiki.com
-iwill.vip
iwin10.net
iwingchina.com
iwiscloud.com
@@ -52183,12 +52283,14 @@ iwithu.net
iwjw.com
iwmmob.com
iwncomm.com
+iwooji.com
iwopop.com
iwordnet.com
iwordshow.com
iwosai.com
iwpai.com
iwshang.com
+iwte-expo.com
iwteexpo.com
iwuchen.com
iwurexs.info
@@ -52258,6 +52360,7 @@ iyaxin.com
iyaya.com
iyaya.info
iyb.tm
+iybtv.com
iycsky.com
iydsj.com
iydu.net
@@ -52316,7 +52419,6 @@ iyuxiyang.com
iyxing.com
iyxku.com
iyyin.com
-iyys.ltd
iyz168.com
izacholsm.com
izaodao.com
@@ -52376,17 +52478,18 @@ j-techcnc.com
j-test.com
j-ui.com
j03og.app
+j0g0.com
j1998.com
j1j5q683cj.world
j2ee.cc
j2up.com
j3cx.com
j43439.com
+j4lpr.com
j5.cc
j5k6.com
j66.net
j8.net
-j8gm.com
j8j9.com
j95a.com
j99h8.com
@@ -52394,6 +52497,7 @@ ja-cloud.com
jaadee.com
jaadee.net
jab88.com
+jabansk-auymon.com
jabizb.com
jabpark.com
jabrehoo.com
@@ -52413,6 +52517,9 @@ jademond.net
jadewd.com
jadyf.com
jaeapp.com
+jaebanke-jocelyou.com
+jaebanke-nochujapazsn20.com
+jaebanke-nochujapazsn5.com
jaecdn.com
jaedu.com
jaeger-hello.com
@@ -52456,6 +52563,7 @@ jarhu.com
jarods.org
jarvisw.com
jasangroup.com
+jasbasnkilonau6.com
jasminer.com
jasolar.com
jason-z.com
@@ -52490,6 +52598,7 @@ jay.tg
jaya.cc
jayce.icu
jayfc.com
+jayfu.tk
jayjw.com
jayxhj.com
jaz581.com
@@ -52522,7 +52631,6 @@ jbryun.com
jbs-kj.com
jbsmartcity.com
jbsx88.com
-jbsy20riz9.com
jbt.ink
jbtlj.com
jbtxy.net
@@ -52650,6 +52758,7 @@ jcyai.com
jcyes.com
jcys120.com
jcys12366.com
+jcyspt.com
jcyx2019.com
jcyxds.com
jczb.vip
@@ -52767,6 +52876,7 @@ jdfschool.com
jdfw1.com
jdfzm.com
jdgogo.com
+jdgsgl.com
jdgslb.com
jdgslb.net
jdgzf.net
@@ -52797,13 +52907,13 @@ jdlingyu.net
jdmwk.com
jdmy.com
jdnews.net
-jdo2c.com
jdon.com
jdpay.com
jdpaydns.com
jdplay.com
jdpta.com
jdreader.net
+jdrns.com
jdrq.net
jdsafe.com
jdsha.com
@@ -52813,6 +52923,7 @@ jdsry.com
jdss.cc
jdt-precision.com
jdtiot.com
+jdtjy.com
jdtxgc.com
jdunion.com
jduoduo.com
@@ -52829,6 +52940,7 @@ jdxc.net
jdxfw.com
jdxlt.com
jdxs.com
+jdxsr.com
jdxzz.com
jdy.com
jdycdn.com
@@ -52906,6 +53018,7 @@ jereh.com
jerei.com
jeremycn.com
jerpx.com
+jerryzou.com
jescard.com
jesdatools.com
jesgoo.com
@@ -52923,6 +53036,7 @@ jetgroup-cn.com
jetgroup-nb.com
jethoo.com
jethro.fun
+jetionservice.com
jetlogistic.com
jetmobo.com
jetneed.com
@@ -52955,6 +53069,7 @@ jfcoo.com
jfcoop.com
jfdaily.com
jfedu.net
+jfgjwl.com
jfgou.com
jfh.com
jfhzfsn.com
@@ -52976,7 +53091,6 @@ jfxiaopaoqi.com
jfydgame.com
jfyf.cc
jfyiyao.com
-jfyxw.com
jfz.com
jfzfund.com
jfzhcx.com
@@ -52997,12 +53111,13 @@ jgg09.com
jggame.net
jgjapp.com
jglh.com
+jglm.cc
+jgs-ds.com
jgscct.com
jgsdaily.com
jgsemicon.com
jgstour.com
jgsxfw.com
-jgtab.link
jgtc315.com
jguanjia.com
jgums.com
@@ -53027,6 +53142,7 @@ jhak.com
jhaoyou.com
jhcb.net
jhcfz.com
+jhcheku.com
jhcms.com
jhconba.com
jhctbank.com
@@ -53041,16 +53157,19 @@ jhfsata.com
jhgolfcarts.com
jhgroup525.com
jhgtgb.com
+jhgykt.com
jhhospital.com
jhhygl.com
jhi.cc
jhjt.xyz
jhjunda.com
jhkao.com
+jhkj.work
jhkuajing.com
jhltsl.com
jhm2012.com
jhmnew.com
+jhmwo.com
jhnsh.com
jhnsyh.com
jhonge.net
@@ -53082,12 +53201,13 @@ jhxms.com
jhxrmyy.com
jhxzlsgs.com
jhydns01.com
-jhydns04.com
jhydns05.com
jhygame.com
jhyongyou.com
jhypcy.com
jhytech.com
+jhyusqo.com
+jhyz.net
jhzdhjt.com
jhzhizao.com
jhzhkj.com
@@ -53186,7 +53306,6 @@ jialei168.com
jialez.com
jialiangad.com
jialianzg.com
-jialidun.vip
jialinep.com
jialiwood.com
jialiyoukuang8.com
@@ -53209,6 +53328,7 @@ jian27.com
jianada-qianzheng.com
jianae.com
jianai.love
+jianai360.com
jianavi.com
jianayangzhiguo01.com
jianbaizhan.com
@@ -53226,6 +53346,7 @@ jiancenj.com
jiancent.com
jiancepai.com
jiancepaper.com
+jianchacha.com
jianchiapp.com
jianchihu.net
jiandaima.com
@@ -53241,6 +53362,7 @@ jianfc.com
jianfei.com
jianfei.net
jianfeiba.com
+jianfeibaike.com
jianfeidaren.com
jianfengstudio.com
jiang7.com
@@ -53309,6 +53431,7 @@ jiangzheba.com
jiangzidushu.com
jiangzikanshu.com
jiangziyuedu.com
+jiangzuoku.net
jianhaobao.com
jianhuagroup.com
jianhuasheng.com
@@ -53374,6 +53497,7 @@ jianshihui.net
jianshionline.com
jianshu.com
jianshu.io
+jianshu.tech
jianshuapi.com
jianshukeji.com
jiansuji001.com
@@ -53452,7 +53576,6 @@ jiaoyibao.com
jiaoyimao.com
jiaoyin.com
jiaoyixia.com
-jiaoyiyou.com
jiaoyizhu.com
jiaoyu361.com
jiaoyuangroup.com
@@ -53461,6 +53584,7 @@ jiaoyundiandongmen.com
jiaoyunw.com
jiaoyuwo.com
jiaoyuzhan.net
+jiaozhou.net
jiapin.com
jiapu.tv
jiapuvip.com
@@ -53480,6 +53604,7 @@ jiashuba.com
jiashule.com
jiasou.cc
jiass.cc
+jiasu.work
jiasubook.com
jiasucai.com
jiasuhui.com
@@ -53501,6 +53626,7 @@ jiawin.com
jiawonongye.com
jiawutech.com
jiawuzhanzheng.org
+jiawuzi.com
jiaxianggame.com
jiaxianghudong.com
jiaxiangxm.com
@@ -53542,7 +53668,6 @@ jiazhao7.com
jiazhaoba.com
jiazhi.online
jiazhichem.com
-jiazhijia.net
jiazhoulvke.com
jiazhuang.com
jiazile.com
@@ -53619,7 +53744,6 @@ jiekon.com
jiekou.ltd
jieku.com
jielaigroup.com
-jiele.com
jieliapp.com
jielibj.com
jieligo.net
@@ -53666,7 +53790,6 @@ jieshu.me
jieshui8.com
jieshuitech.com
jieshuwang.com
-jietianz.com
jietu365.com
jietuhb.com
jietuosh.com
@@ -53736,6 +53859,7 @@ jijianzhineng.com
jijiaoyu.com
jijie168.com
jijigugu.club
+jijijijin.com
jijing.site
jijinhao.com
jijitec.com
@@ -53746,6 +53870,7 @@ jikaicai.com
jike.city
jike.com
jike.info
+jike800.com
jikecdn.com
jikedata.com
jikedingyue.com
@@ -53757,11 +53882,13 @@ jikejiang.com
jikejiazhuang.com
jikejishu.com
jikeq.com
+jiketuchuang.com
jikewan.com
jikexiaojiang.com
jikexiu.com
jikexueyuan.com
jikipedia.com
+jikklfexh.com
jikstatic.com
jikuai.work
jilailawyer.com
@@ -53793,6 +53920,7 @@ jimetec.com
jimi168.com
jimifashion.com
jimihu.com
+jimilier.com
jimingbao.com
jimistore.com
jimmoo.com
@@ -53811,7 +53939,6 @@ jin10.com
jin10x.com
jinan-marathon.com
jinan7.com
-jinangov.com
jinanhaofang.com
jinanhualian.com
jinankingyue.com
@@ -53828,7 +53955,6 @@ jinbifun.com
jinbilianmeng.com
jinbitou.net
jinbondt.com
-jinbuhuan.net
jincaicaiwu.com
jincao.com
jincaocw.com
@@ -53847,7 +53973,6 @@ jindaixx.com
jindaoshangwu.com
jindati.com
jinde-logistics.com
-jindianzi.net
jindidata.com
jindidq.com
jinding.cc
@@ -53884,7 +54009,6 @@ jingc.com
jingcai360.net
jingcaipaint.com
jingcaituijian.com
-jingcdn.net
jingchang.tv
jingchengban.com
jingchengwl.com
@@ -53894,7 +54018,9 @@ jingchurc.com
jingdajiance.com
jingdaka.com
jingdata.com
+jingdeyx.com
jingdianju.com
+jingdianlaoge.com
jingdianxitong.com
jingdiao.com
jingdigital.com
@@ -53988,7 +54114,6 @@ jingshizyy.com
jingshun-wl.com
jingshzh.com
jingsocial.com
-jingsoft.com
jingtai-group.com
jingtanggame.com
jingtao58.com
@@ -54037,7 +54162,6 @@ jingyunos.com
jingyunyilian.com
jingyuweike.com
jingzhengu.com
-jingzhi.biz
jingzhi5.com
jingzhouxw.com
jingzhu-bio.com
@@ -54111,7 +54235,6 @@ jinlishenghuo.com
jinliufu.net
jinliyang.net
jinliyu.cc
-jinlong.vip
jinlonggeishui.com
jinluowater.net
jinluzl.com
@@ -54144,6 +54267,7 @@ jinpupvc.com
jinqi2023.com
jinqiang.online
jinqiangjc.com
+jinqianguan.com
jinqianma.com
jinqiaopu.com
jinqiexia.com
@@ -54158,7 +54282,6 @@ jinr.com
jinridiaoyu.com
jinrirm.com
jinrishici.com
-jinrishuiyinxiangji.com
jinritemai-inc.com
jinritemai.com
jinritoutiao.com
@@ -54192,11 +54315,11 @@ jinshanip.cc
jinshanju.com
jinshanmz.com
jinshasitemuseum.com
-jinshaxuexiao.com
jinshengceramics.com
jinshengtang.net
jinsheyi.com
jinshi-nj.com
+jinshier66.com
jinshileasing.com
jinshisoft.com
jinshitan.com
@@ -54241,7 +54364,6 @@ jinxuliang.com
jinxun.cc
jinyaco.com
jinyafu.com
-jinyedaojia.com
jinyici.com
jinyidun.com
jinyindao.com
@@ -54258,7 +54380,6 @@ jinyunal.com
jinyunjob.com
jinyunweb.com
jinyuzd.cc
-jinzanzan.com
jinzhao.me
jinzheled.com
jinzhengjt.com
@@ -54366,6 +54487,7 @@ jitgame.com
jitianhz.com
jitriroad.com
jittbang.com
+jitucdn.com
jitukaisuo.com
jituofuture.com
jituwang.com
@@ -54406,7 +54528,6 @@ jiuhongwang.com
jiuhua0566.com
jiuhuaiwenxue.com
jiuhuang.com
-jiuhuaqifu.com
jiuhuashan.cc
jiuhuishou.com
jiuhuoba.com
@@ -54441,6 +54562,8 @@ jiuphone.com
jiuq.com
jiuqianwan.group
jiuqianwanjituan.com
+jiuqings193004.asia
+jiuqings21833.asia
jiuquan.cc
jiuqucloud.com
jiuquhe.com
@@ -54455,7 +54578,6 @@ jiushengas.com
jiushiadx.com
jiushigong.com
jiushui.tv
-jiushuyun.com
jiushuyunshop.com
jiusi.com
jiusi.net
@@ -54498,9 +54620,6 @@ jiuyezhinan.com
jiuyf.com
jiuyi120.com
jiuyiwenhe.com
-jiuyou.com
-jiuyou.net
-jiuyou.vip
jiuyue919.com
jiuyuehuyu.com
jiuyuu.com
@@ -54517,6 +54636,7 @@ jiuzhouzb.com
jiuzungame.com
jiway.net
jiweichengzhu.com
+jiweixin168.com
jiwu.com
jiwucdn.com
jixiang-ht.com
@@ -54543,6 +54663,7 @@ jixueedu.com
jixuninfo.com
jixunjsq.com
jixunlyq.com
+jiyaogroup.com
jiyi.art
jiyi.biz
jiyida-logistics.com
@@ -54552,11 +54673,9 @@ jiyili.net
jiyin-tech.com
jiyin2020.com
jiyixcx.com
-jiyixinwangluo123.com
jiyou-tech.com
jiyoujia.com
jiyouwang.com
-jiyuanmall.com
jiyuantour.com
jiyue-auto.com
jiyuncn.com
@@ -54692,6 +54811,7 @@ jk126.com
jk13.net
jk169.net
jk2h.com
+jk33zu6.org
jk37du.com
jk3a.com
jk725.com
@@ -54723,7 +54843,6 @@ jkl6.com
jkllbd.com
jklughj.work
jknanotech.com
-jknuo.net
jkouu.com
jkpan.cc
jkpj.com
@@ -54748,11 +54867,11 @@ jkydt.com
jkyule.com
jkzhilu.com
jkzl.com
-jkzlrs.com
jkzn365.com
jl-er.com
jl-jssk.com
jl0435.com
+jl0775.com
jl1mall.com
jl465.com
jl519.com
@@ -54799,7 +54918,6 @@ jlcerp.com
jlcfa.com
jlcmc.com
jlcops.com
-jlcpcb.com
jlcsj.com
jlcsmt.com
jldjam.com
@@ -54827,13 +54945,13 @@ jljnkj.com
jljob88.com
jljzzs.com
jlkfapp.com
+jlkgj.com
jlkj.cc
jlkjgroup.com
jllihua.com
jllyzxyy.com
jlmhk.com
jlmuban.com
-jlmy.com
jlnku.com
jlnls.com
jlonline.com
@@ -54887,8 +55005,8 @@ jm-machines.com
jm-talents.com
jm1ph.com
jm2046.com
+jm233333.com
jm3q.com
-jm3uvitq0.com
jmads.net
jmbao.com
jmbbs.com
@@ -54936,12 +55054,14 @@ jmrb.com
jmrcw.com
jmsqw.com
jmstatic.com
+jmstation.com
jmsxsw.com
jmt-bio.com
jmtnt.com
jmtsg.com
jmwater.com
jmxckj.com
+jmxiangyi.com
jmxw.net
jmycapacitor.com
jmycbus.com
@@ -54974,9 +55094,9 @@ jncjjt.com
jncjsgroup.com
jncncq.com
jncyx.com
-jndft28.xyz
jndfzt.com
jndwyy.com
+jndzx.com
jnec-tencentclb.cloud
jnec-tencentclb.com
jnec-tencentclb.net
@@ -54998,6 +55118,7 @@ jnhyyy.com
jnhzxx.com
jnjj.com
jnjpkj.com
+jnjszl.com
jnkason.com
jnkj.org
jnky.com
@@ -55012,12 +55133,12 @@ jnnews.tv
jnoec.com
jnpfsoft.com
jnpjyy.com
-jnpuz.com
jnqzyy.com
jnrain.com
jnreli.com
jnrmyy.com
jnruilun.com
+jnryc.com
jns168.com
jnshijia.com
jnshu.com
@@ -55034,15 +55155,17 @@ jntinchina.com
jntyhl.com
jnubio.com
jnw.cc
+jnwb.net
jnwenlian.com
jnwinner.com
+jnxdgs.com
jnxtzdh.com
+jnxydefsxx.com
jnyczx.com
jnydgm.com
jnyng.com
jnyyjt.com
jnzhuoxin.com
-jnzk.net
jnzl.com
jnzongchi.com
jnzx.cc
@@ -55167,6 +55290,7 @@ jonrmal.com
jonsbo.com
jonvie.com
jooancloud.com
+joobot.com
jooioo.com
joojcc.com
joojtech.com
@@ -55182,6 +55306,7 @@ jooyuu.com
joqoo.com
josen.net
josephcz.xyz
+joshreso.com
joshua317.com
jotop.com
jotrin.com
@@ -55214,7 +55339,6 @@ joyapi.com
joyargroup.com
joycity.mobi
joydin.com
-joydns.net
joyfire.net
joyforce.com
joygames.com
@@ -55279,6 +55403,7 @@ jp-tencentclb.work
jp.com
jp.run
jp0663.com
+jp95.com
jpbeta.net
jpcec.com
jpchinapress.com
@@ -55314,25 +55439,28 @@ jpvat.com
jpwb.cc
jpwb.net
jpwind.com
+jpwindow.com
jpwky.com
jpwxapp.com
jpxm.com
jpxue.com
+jpxww.com
jpyoo.com
jpzx.net
jpzy01.com
jq22.com
jq33.com
-jqahg.com
jqbar.com
jqgc.com
jqhtml.com
jqkgjt.com
jqlv.com
+jqnbp.com
jqncp.com
jqpress.com
jqr.com
jqr5.com
+jqrc.net
jqrc88.com
jqrkc.com
jqs4463333a7.shop
@@ -55355,6 +55483,7 @@ jqzplat.com
jqzw.com
jr-soft.com
jr123.com
+jr18.com
jr2019.com
jravity.com
jrbiopharma.com
@@ -55391,7 +55520,6 @@ jrteck.com
jrtgroup.net
jrwenku.com
jrxzj.com
-jry0.com
jryccm.com
jryghq.com
jryssj.com
@@ -55405,6 +55533,7 @@ js-cxjt.com
js-dw.com
js-emap.com
js-gear.com
+js-haiyao.com
js-jiatai.com
js-jinhua.com
js-jwt.com
@@ -55455,6 +55584,7 @@ jsbfgg.com
jsbgj.com
jsblj.com
jsbsxh.com
+jsbzwh.com
jscba.org
jsccn.com
jscdn.ink
@@ -55489,6 +55619,7 @@ jsd-jasper.com
jsd.cc
jsd2021.com
jsdagua.com
+jsdas.com
jsdcly.com
jsddbs.com
jsddhjt.com
@@ -55592,6 +55723,7 @@ jshdwh.com
jshealth.com
jshemc.com
jshfgroup.com
+jshgfm.com
jshggroup.com
jshgyb.com
jshhjkjt.com
@@ -55642,7 +55774,6 @@ jsjdrcb.com
jsjdzf.com
jsjeda.com
jsjffj.com
-jsjform.com
jsjfz.com
jsjgbxg.com
jsjgtz.com
@@ -55731,6 +55862,7 @@ jsnjck.com
jsnjjg.com
jsnkmy.com
jsnol.com
+jsnovel.com
jsntg.com
jsntgas.com
jsnx.net
@@ -55815,6 +55947,7 @@ jssltz.com
jssnrcb.com
jssoar.com
jssqwx.com
+jsssha.com
jsssrj.com
jsssy.com
jsstgs.com
@@ -55880,6 +56013,7 @@ jsweiqi.com
jsweixiu.com
jswel.com
jswenguang.com
+jswenjin.com
jswfgroup.com
jswjkj.net
jswmw.com
@@ -55894,6 +56028,7 @@ jswx-ej.com
jswxhy.com
jswxjx.com
jswxmax.com
+jswyglw.com
jswyjt.com
jswyw.com
jswzjt.com
@@ -55991,6 +56126,7 @@ jszjxh.com
jszjzf.com
jszkrz.com
jszlgjg.com
+jszmgj.com
jszmly.com
jszn.ink
jsznstny.com
@@ -56022,6 +56158,7 @@ jtbtech.com
jtcjd.com
jtcopper.com
jtexpress.com
+jtfcg.com
jtfengtou.com
jtfulfillment.com
jtg2g.com
@@ -56047,6 +56184,7 @@ jtlw.com
jtlzj.net
jtlzx.com
jtm-food.com
+jtm.pub
jtmedical.com
jtn.com
jtnsh.com
@@ -56095,6 +56233,7 @@ juchuangfushi.com
jucuiwangluo.com
judajia.com
judehahh.tech
+judns.com
judong-1.com
judouapp.com
juduoping.com
@@ -56178,7 +56317,6 @@ julanggroup.com
julanhp.com
julanling.com
julebu.co
-julebu.pw
julecn.com
julefun.com
juli-china.com
@@ -56200,7 +56338,6 @@ julong.cc
julongchina.com
julonggr.com
juluape.com
-julycloud.net
julycn.com
julydate.com
julyedu.com
@@ -56215,6 +56352,7 @@ jumengco.com
jumengren.com
jumengtbs.net
jumi-cdn.com
+jumi.com
jumi18.com
jumin.cc
juming-xz.com
@@ -56224,6 +56362,7 @@ jumold.com
jumore.com
jump-center.com
jump-game.com
+jump301.com
jumpjumpcat.com
jumple.com
jumppo.com
@@ -56289,6 +56428,7 @@ junqing360.com
junrunrenli.com
junsaozg.com
junshanggame.com
+junshencm.com
junshi.com
junshi881.com
junshidao.com
@@ -56305,6 +56445,7 @@ juntu.com
junwu262.com
junxinmed.com
junxunkji.com
+junyao.tech
junyi-auto.com
junyimeng.com
junying.com
@@ -56326,19 +56467,19 @@ jupiterlauncher.com
jupup.com
juqi.com
juqianwh.com
-juqiao1913.com
juqibike.com
juqingla.com
juqk.net
juquanquanapp.com
jurcc.net
+juren.com
jurenqi.com
jurongfangchan.com
jurongrencai.com
jurp.net
-jus475.com
jusdasr.com
juseey.com
+jusen2008.com
jusha.com
jushe.org
jushen.co
@@ -56392,7 +56533,6 @@ jutubao.com
jutuike.com
jutuilian.com
juuhe.com
-juushop.com
juvefans.com
juwa.net
juwan.com
@@ -56401,7 +56541,6 @@ juwangmedia.com
juwanhezi.com
juwanshe.com
juweixin.com
-juwinmedia.com
juxia.com
juxian.com
juxiang3d.com
@@ -56416,6 +56555,7 @@ juyang-chem.com
juyebwg.com
juyingele.com
juyingonline.com
+juyisuliao.com
juyoubao.com
juyoukuaisong.net
juyouqu.com
@@ -56426,6 +56566,7 @@ juyouxuan.vip
juyuan.com
juyuewang.net
juyun.tv
+juyutube.com
juyuweb.net
juzhen.com
juzhen.io
@@ -56438,6 +56579,7 @@ juzhongjoy.com
juzicon.com
juzicy.com
juzifenqi.com
+juzijiudian.com
juzikong.com
juzilicai.com
juzimi.cc
@@ -56458,9 +56600,8 @@ jvcxp.com
jvdebao.com
jvgnwn.sbs
jvmai.com
-jvmcc.com
-jvmee.com
jvniubi.com
+jvpin.vip
jvrong.com
jvshangwang.com
jvshi.net
@@ -56468,7 +56609,6 @@ jvtianshanuu.com
jvyou.net
jw100.net
jw1588.com
-jwangzhong.com
jwappgc.com
jwautoparts.com
jwbf.online
@@ -56476,11 +56616,13 @@ jwbl.com
jwdili.com
jwedit.net
jwetech.com
+jwfun.com
jwgb.net
jwgf.com
jwick-switch.com
jwipc.com
jwkj.site
+jwl100.com
jwsaas.com
jwsem.com
jwshy.com
@@ -56500,6 +56642,7 @@ jx116114.com
jx139.com
jx163-cname.com
jx163.com
+jx188.com
jx3box.com
jx3mogu.com
jx3pve.com
@@ -56528,7 +56671,6 @@ jxcua.com
jxdcnc.com
jxdcost.com
jxdcw.com
-jxddny.com
jxdhhbhg.com
jxdiguo.com
jxdinfo.com
@@ -56538,10 +56680,12 @@ jxdown.com
jxdx.com
jxdxxt.com
jxdyf.com
+jxdyk65ay.com
jxdyyy.com
jxeca.com
jxedgroup.com
jxedt.com
+jxedu.net
jxeduyun.com
jxenglish.com
jxep.net
@@ -56566,13 +56710,11 @@ jxgztv.com
jxh2000.net
jxheming.com
jxhesyy.com
-jxhh.com
jxhjxy.com
jxhmjx.com
jxhmxxjs.com
jxhswhcb.com
jxhuahang.com
-jxhuanyun.com
jxhxmed.com
jxhyxx.com
jxiaolan.com
@@ -56581,15 +56723,16 @@ jximage.com
jxjatv.com
jxjdgy.com
jxjee.com
+jxjia.net
jxjianwei.com
jxjktzjt.com
jxjmzc.com
jxjob.net
jxjt666.com
jxjuwentech.com
+jxjx6.com
jxjywater.com
jxkeda.com
-jxkfxz.com
jxkjzb.com
jxkp.com
jxksw.net
@@ -56603,6 +56746,7 @@ jxlwgame.com
jxlygo.com
jxmhp.com
jxmj.com
+jxmlkd.com
jxmrfire.com
jxmy18.com
jxncyy.com
@@ -56617,7 +56761,6 @@ jxphone.com
jxpp.com
jxpta.com
jxqcw.com
-jxqx.net
jxqy.city
jxqyfw.com
jxrays.com
@@ -56649,6 +56792,7 @@ jxsltz.com
jxslyw.com
jxsrjt.com
jxsrra.com
+jxssjx.com
jxssjy.com
jxstm.com
jxsuji.com
@@ -56705,7 +56849,6 @@ jxzeto.com
jxzikao.net
jxzl.cc
jxzyx.com
-jy-heju.com
jy-leasing.com
jy-sz.net
jy.cc
@@ -56728,7 +56871,6 @@ jycbank.com
jycinema.com
jycloudgslb.com
jycloudgslb.net
-jydalycs.com
jydc.com
jydj.net
jydoc.com
@@ -56750,6 +56892,7 @@ jygo.cc
jygpu.com
jygsdyrmyy.com
jyguagua.com
+jygyl.com
jygz.com
jygz.org
jyh.com
@@ -56814,7 +56957,6 @@ jysu.com
jysyyey.com
jysyzk.com
jysyzx.net
-jyszyl.com
jytaier.com
jytcdq.com
jytche.com
@@ -56880,6 +57022,7 @@ jzhfz.com
jzhkr.com
jzhlgg.com
jzhospital.com
+jzhuishou.com
jzhx.net
jzhy5.com
jzj2009.com
@@ -56890,9 +57033,9 @@ jzking.com
jzkjjt.com
jzlt100.com
jzmbti.com
+jzmjtjn.xyz
jzmlzy.com
jzmob.com
-jzmsg.com
jzmt.net
jznygf.com
jznyjt.com
@@ -56908,6 +57051,7 @@ jzrc.net
jzrsks.com
jzsbs.com
jzsbxxh.com
+jzsc.net
jzsc8.com
jzsec.com
jzsf.com
@@ -56959,6 +57103,7 @@ k1u.com
k1wave.com
k22.xyz
k2os.com
+k365.asia
k366.com
k369.com
k382.com
@@ -56966,6 +57111,7 @@ k3cdn.com
k3yes.com
k43439.com
k518.com
+k5hp4qte.work
k5n.com
k6uk.com
k73.com
@@ -56978,7 +57124,6 @@ k8smeetup.com
k8stech.net
k913.com
k99.cc
-ka016.com
ka20.com
ka5188.com
kaaass.net
@@ -57047,7 +57192,6 @@ kaihuaeva.com
kaihuia.com
kaijia-smt.com
kaijia.com
-kaijiacloud.com
kaijiage.com
kaijiejinrong.com
kaijieunion.com
@@ -57132,7 +57276,6 @@ kaiyuncare.com
kaiyunwu.net
kaizencpa.com
kaizhan.com
-kajely.com
kajicam.com
kaka.com
kaka996.com
@@ -57158,7 +57301,6 @@ kalifang.com
kaliorg.com
kalugaqueen.com
kaluli.com
-kamacoder.com
kamaqc.com
kameng98.com
kamenwang.com
@@ -57204,6 +57346,7 @@ kangbeijia.com
kangbidz.com
kangbixing.com
kangchun.com
+kangdacolorful.com
kangdaep.com
kangdajiuzhou.com
kangdalawyers.com
@@ -57225,6 +57368,7 @@ kanghuicy.com
kanghuwang.com
kangjiachildcare.com
kangjian.com
+kangjian888.com
kangjiezx.net
kangkang.com
kanglaohui.com
@@ -57282,7 +57426,6 @@ kanman.com
kanniao.com
kanong.com
kanongyun.com
-kanpinduo.com
kanqibao.com
kanqiye.com
kanqq.com
@@ -57322,6 +57465,7 @@ kao8.cc
kaoaa.com
kaobeitu.com
kaochong.com
+kaochongqing.com
kaodaojy.com
kaodongli.com
kaoersi.com
@@ -57356,7 +57500,6 @@ kaoshixing.com
kaoshizixun.com
kaosite.com
kaostedu.com
-kaouusi.com
kaowana.com
kaowang.com
kaowx.com
@@ -57428,6 +57571,7 @@ kblcdn.com
kblin.com
kbmlifesci.com
kbn-zhejiang.com
+kbnqy.com
kbobo.com
kboth.com
kbrightlaw.com
@@ -57443,6 +57587,7 @@ kc87.com
kcbebank.com
kccidc.com
kccn.net
+kcdn0.com
kcdnvip.com
kcfei.com
kchance.com
@@ -57460,7 +57605,6 @@ kcqcjt.com
kcrcb.com
kcrea.cc
kctgov.com
-kcttpa.com
kctzgroup.com
kcwiki.org
kcyuri.com
@@ -57472,6 +57616,7 @@ kd315.com
kd58.com
kd9000.com
kdadj.com
+kdaec.com
kdatacenter.com
kdcloud.com
kdclub.net
@@ -57484,6 +57629,7 @@ kdkefu.com
kdlgs.com
kdnet.net
kdniao.com
+kdpt.net
kdr163.com
kdrmd.com
kdroid.club
@@ -57647,11 +57793,11 @@ kelu.org
kelun.com
keluokelie.com
keluyjs.com
-kema.net
kema66.com
kemaicrm.com
keman.com
kemavip.com
+keme.work
kemiaotai.com
kemicro.com
kemike888.com
@@ -57697,6 +57843,7 @@ kercoras.com
kerisom.com
kerlala.com
kernel-sh.com
+kernel.cc
kernelfood.com
kernelmed.com
kernelnote.com
@@ -57717,6 +57864,7 @@ kerust.com
keruyun.com
keruyun.net
kery-pharm.com
+kerysoft.com
kesci.com
kesheng.com
keshenwei.com
@@ -57737,6 +57885,7 @@ kevinlq.com
kevke.com
kewu.cc
kewucool.com
+kexgfv.com
kexianggroup.com
kexin001.com
kexinbiotech.com
@@ -57787,6 +57936,7 @@ keyunlaser.com
keyunsoft.com
kezehb.com
kezhaozhao.com
+kezhi.tech
kf.ai
kf155yy.com
kf3msfm.com
@@ -57798,7 +57948,6 @@ kfang.xin
kfb126.com
kfb163.com
kfcbest.com
-kfcccc.com
kfcdn.com
kfcjrl.com
kfcrm.com
@@ -57885,7 +58034,6 @@ kimi.ai
kimi.com
kimi.link
kimi.pub
-kimi.site
kimiss.com
kimiss.net
kimiter.com
@@ -57895,7 +58043,6 @@ kimsom.com
kimxz.com
kina.cc
kinbull.com
-kincony.com
kindechem.com
kindlelib.com
kindobest.com
@@ -58023,16 +58170,16 @@ kisops.com
kiss998.com
kisskisso.com
kissyj.com
+kissyui.com
kit-lee.me
kitic.net
kitiu.com
kitking.com
kitontech.com
kitstown.com
+kitty.su
kituin.fun
kivend.net
-kivicube.com
-kivisense.com
kivo.fun
kivo.wiki
kiwa-tech.com
@@ -58040,7 +58187,6 @@ kiwenlau.com
kiwifarms.net
kiwifarms.st
kiwimoore.com
-kiwiot.com
kiwisec.com
kiyuu.club
kj-pcb.com
@@ -58071,6 +58217,7 @@ kjjxjy.com
kjkd.com
kjkp.com
kjks.net
+kjkxun.com
kjlww.com
kjmofang.com
kjmte.com
@@ -58084,6 +58231,7 @@ kjtbao.com
kjtianshanxu.com
kjtong.com
kjtpay.com
+kjutf-uejfncpo72u.com
kjw.cc
kjwlxt.com
kjwugx.com
@@ -58099,6 +58247,7 @@ kk-china.com
kk1.vip
kk169.com
kk18.com
+kk1bie336689.com
kk30.com
kk30.net
kk3g.net
@@ -58131,15 +58280,14 @@ kkid.vip
kkidc.com
kkj2.com
kkjiaofei.com
-kkjishu.com
kkk5.com
kkkwww.com
kkkxj.com
kklxj.com
+kkmall.org
kkmar.com
kkmh.com
kkmicro.com
-kkmm.com
kkmop.com
kkong.vip
kkrb.net
@@ -58172,7 +58320,6 @@ kldhq.com
klhpw.com
klhuyan.com
klicen.com
-kling-ai.com
klingai.com
klingxai.com
klinlee.com
@@ -58210,7 +58357,6 @@ km28.com
km5858.com
km8z.net
kmail.com
-kmaosmart.com
kmaoxx.com
kmapp.net
kmbbs.com
@@ -58229,12 +58375,12 @@ kmeecc.com
kmeila.com
kmeitu.com
kmf.com
+kmfengli.com
kmgdgs.com
kmguolv.com
kmhpc.net
kmhwtz.com
kmjt.net
-kmksy.com
kmlcl.com
kmlhh.com
kmmama.com
@@ -58253,6 +58399,7 @@ kmsz.net
kmszy.com
kmteruite.com
kmthy.com
+kmtlbj.com
kmtlfckyy.com
kmtrh.org
kmvtc.net
@@ -58297,6 +58444,7 @@ knowfashionstyle.com
knowhowedu.com
knowingclouds.com
knowingcloudvip.com
+knowingyun.com
knowledgu.com
knowlink-assets.com
knownpcb.com
@@ -58328,7 +58476,6 @@ kodakbanjara.com
kodcloud.com
koderover.com
kodmp.com
-koebpmhcce.com
koenli.com
kof-kol.club
kofficemart.com
@@ -58360,7 +58507,9 @@ konekomoe.com
konfan.net
kongai.org
kongapi.com
+kongbugushi.com
kongdao.com
+kongduan.com
kongfz.com
kongge.com
kongjibusiness.com
@@ -58375,6 +58524,8 @@ kongquecheng.com
kongqueyuzd.cc
kongrong.com
kongtiao163.com
+kongtiao365.com
+kongwu2022.com
kongzhi.net
kongzhong.com
konka.com
@@ -58406,6 +58557,7 @@ koovin.com
koowo.com
kopebe.com
kopisee.com
+kopitokein.com
koplayer.com
kopperchem.com
koreabt.com
@@ -58432,7 +58584,6 @@ koudaigou.net
koudaili.com
koudaionline.com
koudaionline.net
-koudaistory.com
koudaitiku.com
koudaitong.com
koudashijie.com
@@ -58506,16 +58657,16 @@ kr-tencentclb.com
kr-tencentclb.net
kr-tencentclb.work
kr126.com
+kra-5at.com
krahag.com
krak12.com
krd168.com
+krdrama.com
krenzheng.com
kridol.com
kriszhang.com
-krohnechina.com
krones-group.com
krones.com
-krowork.com
krpano.tech
krqcitie.com
krszf.com
@@ -58549,11 +58700,10 @@ kschuangku.com
kscloudapi.com
ksco.cc
ksdedu.com
-ksdyob.store
+ksdhgy.com
ksecit.com
ksedt.com
kseibitools.com
-ksepton.com
ksfang.com
kshahn.com
kshaoteng.com
@@ -58591,10 +58741,10 @@ ksren.com
ksrenfan.com
ksria.com
ksrmtzx.com
-ksrmyy.com
ksrmyy.org
ksrsy.com
ksruanjian.com
+kssip.msi.com
kssjkj.com
ksslxh.com
kst-cn.com
@@ -58636,6 +58786,7 @@ kszpw.com
kszxzsxh.com
kt007.com
kt10000.com
+kt286.com
kt40.com
kt5u.com
ktallong.com
@@ -58653,6 +58804,7 @@ ktmap.com
ktmv.com
ktmwan.net
ktplay.com
+ktq8e0zm.work
ktrcn.com
ktrlight.com
ktstny.com
@@ -58752,6 +58904,7 @@ kuaile800.com
kuailedo.com
kuailekaishi.com
kuailelunwen.com
+kuailepipixia.com
kuailetongyao.com
kuailexs.com
kuailexue.com
@@ -58817,6 +58970,7 @@ kuaizhang.com
kuaizhaogong.com
kuaizhe.com
kuaizhihui.com
+kuaizhou123.com
kuaizi.co
kuaizip.com
kuaizitech.com
@@ -58858,6 +59012,7 @@ kuark.com
kuashou.com
kuayuegroup.com
kubercloud.com
+kubey.cc
kubikeji.com
kuboluo.com
kuche.com
@@ -58866,13 +59021,11 @@ kuchuan.com
kucoin-in.work
kucunguanli.online
kudapp.com
-kudashi.com
kudianvip.com
kudiaoyu.com
kudingyu.com
kudou.org
kuems.com
-kufaka.com
kufangwuyou.com
kufaxian.com
kufei.com
@@ -58916,7 +59069,6 @@ kukasofa.com
kuke.com
kuke99.com
kukecloud.com
-kukongjian.com
kukseo.com
kukuda.net
kukulv.com
@@ -58946,6 +59098,7 @@ kumifeng.com
kun-pharm.com
kunchuang.com
kunduo.com
+kungfucloud.com
kungfuenglish.com
kungfumars.com
kunguankeji.com
@@ -58958,6 +59111,7 @@ kunlunaq.com
kunlunar.com
kunlunca.com
kunluncan.com
+kunlunce.com
kunlundns.com
kunlunea.com
kunlungem.com
@@ -58998,6 +59152,7 @@ kuo-yi.com
kuobuy.com
kuocaicdn.com
kuocaidns.com
+kuocaiyun.com
kuoo8.com
kuos.xyz
kuosheng.com
@@ -59032,6 +59187,7 @@ kushuzw.com
kusnc17.com
kuso.xyz
kusouji.com
+kut3974vc.com
kutj.com
kutongji.com
kutuan.com
@@ -59049,7 +59205,6 @@ kuxiaoji.com
kuxiaomiao.com
kuxiaozhu.com
kuxiuktv.com
-kuxsw.com
kuxueedu.com
kuyh.com
kuyibu.com
@@ -59073,6 +59228,7 @@ kviso.com
kvogues.com
kvov.com
kvps85.com
+kw007.com
kwai-group.com
kwai666.com
kwaiadapp.com
@@ -59139,6 +59295,7 @@ kxdw.com
kxiaoshuo77.com
kxji.com
kxjlzx.com
+kxl100.com
kxlc.com
kxll.com
kxload.com
@@ -59179,14 +59336,17 @@ kych5.com
kydev.net
kydl308015.vip
kydl308029.vip
+kydzfl.com
kye-erp.com
kye.vip
kyec.cc
kyemall.com
kyfey.com
kygroup.ltd
+kygso.com
kyhtech.com
kyhyxy.com
+kyjlhz.com
kyjxy.com
kyk.cc
kykjgroup.com
@@ -59202,6 +59362,7 @@ kylpharm.com
kymjs.com
kyo.hk
kyppt.com
+kysjhx.com
kyslb.com
kysnxt.com
kysygs.com
@@ -59211,12 +59372,9 @@ kyv5.com
kyw4y0s.com
kyxdloan.com
kyxh.com
-kyxinli.com
kyxsw.org
kyy6.com
kyzhpt.com
-kyzhsw.com
-kyzhwater.com
kyzs.com
kz.cc
kz0.cc
@@ -59224,6 +59382,7 @@ kz321.com
kzcpm.com
kzgui.com
kzmyhome.com
+kzo.moe
kzrcw.com
kzread.com
kzrqicae.com
@@ -59238,16 +59397,20 @@ l1yu.com
l2cn.com
l2h.site
l2t7.cc
+l2z4l.net
l3gt9.com
l68.net
+l6qmpykq.work
l799vk4qe2.com
l7audiolab.com
+l85r.com
l99.com
la-bbs.net
la-chinata.hk
la-technology.com
la31.com
laawoo.com
+lab-bst.com
lab-easttitan.com
lab-z.com
labaoxian.com
@@ -59303,6 +59466,7 @@ laibot.com
laichon.com
laichou.com
laichuanfeng.com
+laidacai.com
laidazi.com
laidingba.com
laidudu.com
@@ -59317,9 +59481,11 @@ laigong.com
laihua.com
laihuishequ.com
laijiawen.com
+laijishaofang.com
laijuba.com
laikan.com
laikanxia.com
+laikanxing.com
laikanxs.com
laike.net
laiketui.com
@@ -59330,6 +59496,7 @@ lailin.xyz
lailinzhihui.com
lailook.net
laimaidi.com
+lainse.store
lainzy.net
laipei.net
laiqi.net
@@ -59339,11 +59506,14 @@ laird-tek.com
laisai.com
laishui.info
laisizuji.com
+laisj.com
laitelaide.com
laituia.com
laituijian.net
laiwang.com
laiwo.com
+laiwu.net
+laiwuyizhong.com
laixi.com
laixiangzuji.com
laixiukeji.com
@@ -59388,6 +59558,7 @@ lanall.com
lanapartments.com
lanbenjia.com
lanbing510.info
+lanbinimall.com
lanbts.com
lanbula.com
lancdn.com
@@ -59458,6 +59629,7 @@ langemedtech.com
langfang.com
langfang12345.com
langfangfc.com
+langfly.com
langgine.com
langhao-medical-platform.com
langhuansoft.net
@@ -59503,6 +59675,7 @@ lanhui.com
lanin.tech
lanindex.com
lanjie100.com
+lanjie520.com
lanjingads.com
lanjinger.com
lanjingerp.com
@@ -59588,7 +59761,6 @@ lanxiongsports.com
lanxixiaowu.com
lanxum.com
lanyaa.com
-lanyikeji.asia
lanying.site
lanyingwang.com
lanyu.net
@@ -59648,7 +59820,6 @@ laoduo.net
laoduzhe.com
laoevisa.gov.la
laofengwei.com
-laofengxiang.com
laofu.online
laoge.xyz
laogongshuo.com
@@ -59665,6 +59836,7 @@ laolai.com
laolaishou.com
laolaomiyou.com
laoliang.net
+laoliboke.com
laolieren.com
laolieren.shop
laoliuceping.com
@@ -59692,10 +59864,12 @@ laowalens.com
laowuxx.com
laoxiangji.com
laoxianhui.com
+laoxiezi.com
laoxuean.com
laoxuehost.net
laoxuezhuji.com
laoy.net
+laoyancheng.com
laoyaoba.com
laoyi0773.com
laoyoujiaju.com
@@ -59738,7 +59912,9 @@ larksuiteimg-pre.com
larkworld.com
larmace.com
larryms.com
+larscheng.com
laruence.com
+lasashengdi.com
laschina.org
lascn.net
laserfair.com
@@ -59768,6 +59944,7 @@ lavago.com
lavandehotels.com
lavapm.com
lavaradio.com
+lavdrzv.xyz
law-lib.com
law-star.com
law-wei.com
@@ -59825,6 +60002,7 @@ lazada.vn
lazcdn.com
laze.cc
lazyaudio.com
+lazybios.com
lazycat.cloud
lazycatmicroserver.com
lazycomposer.com
@@ -59909,7 +60087,6 @@ lcchgg.com
lccmw.com
lccyy.com
lccz.com
-lcdfans.com
lcdhome.net
lcdtz.com
lcdushi.com
@@ -59938,6 +60115,7 @@ lckeshun.com
lckfb.com
lckiss.com
lcloudcdn.com
+lcmack.com
lcmhbl.com
lcnichia.com
lcofjp.com
@@ -59957,6 +60135,7 @@ lcsrw.com
lcsssg.com
lcsyzp.com
lctech-inc.com
+lctsggzz.com
lcux.net
lcxtgs.com
lcxwfc.com
@@ -60028,6 +60207,7 @@ le4.com
le4le.com
le5le.com
le8.com
+le855.com
le890.com
leacol.com
leadada.com
@@ -60131,6 +60311,7 @@ lecomposites.com
lecong56.com
leconiot.com
lecoo.com
+lecreperoyaloak.com
lecu8.com
lecuiwangluo.com
lecuntao.com
@@ -60180,7 +60361,6 @@ leftshadow.com
leftso.com
lefu8.com
legalsiri.com
-legaltech.cc
legend-si.com
legendsec.com
legendsemi.com
@@ -60204,6 +60384,7 @@ leiaomold.com
leibei.cc
leiboyiqi.com
leidacj.com
+leidianip.com
leigod.com
leigodjsq.com
leihetg.com
@@ -60215,6 +60396,7 @@ leikeji.com
leileiluoluo.com
leilong158.com
leimengjixie.com
+leimi.com
leimingtech.com
leimingtelab.com
leimudata.com
@@ -60245,6 +60427,7 @@ leixue.com
leiyunge.com
leiyunge.net
leji.com
+lejiachao.com
lejian.com
lejiao.tv
lejiaolexue.com
@@ -60258,6 +60441,7 @@ lejunwl.com
lekan.com
lekannews.com
lekevr.com
+lekoukou.com
lektec.com
lekuya.com
lelaer.com
@@ -60273,7 +60457,6 @@ lelelab.work
lelepyq.com
leletv.com
leletv.net
-leleyun.icu
lelinly.com
lelongpp.com
lemai.com
@@ -60291,7 +60474,7 @@ lemobar.com
lemoes.com
lemon4.club
lemonban.com
-lemonedrum.com
+lemonnovel.com
lemonpiggy.com
lemonplus.asia
lemonsay.com
@@ -60312,7 +60495,6 @@ lenget.com
lenglengyu.com
lengliwh.com
lenglv.com
-lengmo.cc
lengshuiji.org
lengxiaohua.com
lengxiaohua.net
@@ -60348,6 +60530,7 @@ lenovouat.com
lenovows.com
lenovozdl.com
lenschine.com
+lenslifephoto.com
lensuo.com
lenwoo.com
lenzhao.com
@@ -60367,16 +60550,19 @@ lepidard.com
leptv.com
lepudding.com
lepumedical.com
+leqi.us
leqian.com
leqiaobh.com
leqiaobhyy.com
leqiku.com
+leqiuba.com
lequ.com
lequanip.com
lequgo.com
lequji.com
lequz.com
lequzh.com
+lercar.com
lergle.com
lerist.dev
lers168.com
@@ -60412,7 +60598,6 @@ letabc.com
letang666.com
letao.com
letaoedu.com
-letaohuo.com
letaoren.com
letbonchina.com
leter.io
@@ -60501,12 +60686,12 @@ leyifan.com
leying.com
leying365.com
leyingtt.com
+leyishandong.com
leyixue.com
leyonb.com
leyoo.com
leyoujia.com
leyu.com
-leyuansu.com
leyue100.com
leyuglobal.com
leyun365.com
@@ -60523,6 +60708,7 @@ lezhi99.com
lezhibo.com
lezhiyun.com
lezhuan365.com
+lezhuanwang.net
lezhudai.com
lezhufenqi.com
lezhun.com
@@ -60530,6 +60716,7 @@ lezi.com
lezuan.net
lezuan11.com
lezuan9.com
+lezuocai.com
lf126.net
lf127.net
lfan.net
@@ -60538,6 +60725,7 @@ lfbxw.com
lfcharge.com
lfcmw.com
lfdjex.com
+lfekaj.help
lfex.com
lffloor.com
lfhacks.com
@@ -60548,6 +60736,7 @@ lfjsly.com
lfjx88.com
lfkjgh.com
lfksqzj.com
+lfmxc.com
lfppt.com
lfqysm.com
lfrczp.com
@@ -60634,6 +60823,7 @@ lhkgs.com
lhl.zone
lhmj.com
lhmp.cc
+lhovoxcx.work
lhp-cdn-game.online
lhp-cdn-update.online
lhpharma.com
@@ -60645,6 +60835,7 @@ lhs99.com
lhsdjxy.com
lhsoso.com
lhszyxx.com
+lhulan.com
lhvlkgbkjmrnc.com
lhwill.com
lhwytj.com
@@ -60674,12 +60865,14 @@ lianda.fun
liandaomobi.com
liande.cc
lianfawy.com
+lianfengwh.com
liang520.com
liangc.com
liangchan.net
liangchanba.com
liangduapp.com
liangduiban.com
+lianggao.com
lianghuadashi.com
liangjiangbashu.com
liangjianghu.com
@@ -60754,6 +60947,7 @@ lianqigong.com
liansaipiao.com
lianshang.com
lianshijie.com
+lianshun.cc
liansn.com
liansuo.com
liantianhong.com
@@ -60789,6 +60983,7 @@ liaochuo.com
liaogu.com
liaogx.com
liaoing.com
+liaojiu.net
liaokong.com
liaoliao.com
liaoningmoduo.com
@@ -60822,6 +61017,7 @@ liblib.cloud
liblib.tv
libmk.com
libomarathon.com
+libreofficechina.org
libsou.com
libssh.com
libsys.net
@@ -60909,7 +61105,9 @@ liewen.cc
liewen.la
liexing-ai.com
liexing.com
+lieyingjt.com
lieyou.com
+lieyouqi.com
lieyuncapital.com
lieyunwang.com
liezhe.com
@@ -60922,6 +61120,7 @@ lifediary.shop
lifeeu.com
lifefunkingdom.org
lifegc.com
+lifegreenmedical.com
lifengshoe.com
lifeofguangzhou.com
lifesense.com
@@ -60933,7 +61132,6 @@ lifeup.vip
lifevc.com
lifevccdn.com
lifeweeker.com
-lifexue.com
lifeyk.com
lifeyn.net
lifezb.com
@@ -61038,7 +61236,6 @@ lilaigroup.com
lilanz.com
lili.cc
liliangji.com
-lilihuyu.com
lilinwei.com
lilishare.com
lilisi.com
@@ -61065,7 +61262,6 @@ linakesi.com
linancity.com
linaoyiqi.com
linban.com
-linbeigame.com
linchuangsy.com
lincoc.com
lindapatent.com
@@ -61132,13 +61328,13 @@ lingkuyun.com
lingla.com
linglingkaimen.com
linglingmo.site
+linglong.dev
linglongart.com
linglonglife.com
linglongtech.com
lingmao.tech
lingmeng888.com
lingmovie.com
-lingnanlv.com
lingnanpass.com
lingo-ace.com
lingodeer.net
@@ -61155,6 +61351,7 @@ lingshangmeien.com
lingshenxl.com
lingshi.com
lingshimiyu.com
+lingshou.com
lingshunlab.com
lingsiqiwu.com
lingsky.com
@@ -61215,12 +61412,14 @@ linhuatz.com
linhuiba.com
lining.com
lining0806.com
+linjia.me
linjieapp.com
linjin.net
linjunlong.com
link-ai.tech
link-nemo.com
link-trans.com
+link27.com
link2lib.com
link2shops.com
link3.cc
@@ -61329,7 +61528,6 @@ linuoshi.com
linuottc.com
linux-code.com
linux-ren.org
-linux.sb
linux.zone
linux178.com
linux265.com
@@ -61339,6 +61537,7 @@ linuxbaike.com
linuxbaodian.com
linuxboy.net
linuxde.net
+linuxdiyf.com
linuxdot.net
linuxea.com
linuxeden.com
@@ -61413,6 +61612,8 @@ lishibu.com
lishichunqiu.com
lishicloud.com
lishiip.com
+lishiming.net
+lishimingren.com
lishixiaozhi.com
lishixinzhi.com
lishizhishi.com
@@ -61427,7 +61628,6 @@ lisp123.com
lissgx.com
listary.net
listarypro.com
-listenai.com
listeneer.com
listeningo.com
listenpa.com
@@ -61469,6 +61669,7 @@ litree.com
litten.me
little-sun.com
littleboy.net
+littlegeek.work
littlehero.xyz
littleqiu.net
littleroost.net
@@ -61509,6 +61710,7 @@ liuhanyu.com
liuhaolin.com
liuhubang.com
liujiajia.me
+liujian666.com
liujiaoyidai.com
liujijun.com
liujto.com
@@ -61530,6 +61732,7 @@ liuliangmima.club
liuliangmima.vip
liuliangzu.com
liuliguo.com
+liulin.cc
liulishuo.com
liulishuo.work
liulixuexiao.com
@@ -61543,6 +61746,7 @@ liumx.com
liunian.info
liunianbanxia.com
liunn.com
+liuqh.icu
liurq.com
liushen.fun
liushidong.com
@@ -61581,6 +61785,7 @@ liuyangfcw.com
liuyangjob.com
liuyanzhao.com
liuyifei.cc
+liuyimin4.com
liuyixiang.com
liuyua.xyz
liuyunflow.com
@@ -61603,6 +61808,7 @@ live-voip.com
live123.cc
live800.com
liveapp.ink
+livebong68.com
livecdnstatic.com
livechina.com
livecourse.com
@@ -61614,8 +61820,6 @@ livemediav.com
livemook.com
livenmall.com
liver-surgery.net
-livesaascdn.com
-livesaasvolccdn.com
livesone.net
livesupport24x7.com
liveuc.net
@@ -61624,8 +61828,8 @@ living.ai
liwai.com
liwanggui.com
liwanght.com
-liwei.biz
liweiauto.com
+liweicar.com
liweijia.com
liweijituan.com
liweiliang.com
@@ -61684,6 +61888,7 @@ liyunde.com
liyunkm.com
liyuplay.com
liyx.fun
+liyx.net
lizaberese.com
lizaike.com
lizhehaozhongyi.com
@@ -61722,7 +61927,6 @@ ljbao.net
ljbbj.com
ljcdn.com
ljclz.work
-ljcyun.xyz
ljflavor.com
ljh.cool
ljhjgc.com
@@ -61735,7 +61939,6 @@ ljjq.com
ljjyjt.com
ljk.cc
ljkangyang.com
-ljkfdx.com
ljlcd.com
ljlmdns.com
ljlqw.com
@@ -61748,6 +61951,7 @@ ljs.fun
ljsdk.com
ljsy2017.com
ljsz.xyz
+ljth.hk
ljw113.com
ljwebs.com
ljwit.com
@@ -61786,6 +61990,7 @@ lkpc.com
lkqihang.com
lksmarttech.com
lkuaiy.com
+lkxfeda.com
lkyljt.com
lkyou.com
ll-hao123.com
@@ -61795,6 +62000,7 @@ llaoyou.com
llbzy.com
llcat.tech
lldlf.com
+llever.com
llewan.com
llgjx.com
llgkm.com
@@ -61803,6 +62009,7 @@ llguangli30.com
llhlkftzjt.com
llidc.com
llinkslaw.com
+lljgame.com
lljsq.net
lljyx.com
llku.com
@@ -61830,6 +62037,7 @@ llumar-cn.com
llwx.net
llx168.com
llxj119.com
+llxx.cc
llxzl.com
llxzu.com
llyj.net
@@ -61941,7 +62149,6 @@ lnsrmyy.com
lnsslhyxh.com
lnsyzx.com
lnszyjt.com
-lntongyu.com
lntvu.com
lntycp.com
lnvipsoft.com
@@ -61954,6 +62161,7 @@ lnydjt.com
lnyxcj.com
lnyyzyxy.com
lnzcj.com
+lnzhongka.com
lnzhqy.com
lnzsks.com
lnzy-edu.com
@@ -62000,7 +62208,6 @@ logisteed-sc.com
logistics-ea.com
logisticstech.com
logo-emblem.com
-logo123.com
logo123.net
logo2008.net
logo888.com
@@ -62024,6 +62231,7 @@ logwirecloud.com
lohaa.com
lohalink.com
lohand.com
+lohasor.com
lohjs.com
lohkahhotels.com
loho88.com
@@ -62079,7 +62287,6 @@ longbridgeapp.com
longbridgehk.com
longcai.com
longcai027.com
-longcat.chat
longchangjixiekeji.com
longcheer.com
longchunbajiao.com
@@ -62175,6 +62382,7 @@ longxi-tech.net
longxianwen.net
longxinfa.com
longxinglong.com
+longxinli.com
longxintec.com
longxuan.ren
longyanbus.com
@@ -62197,6 +62405,7 @@ longzhu.tv
longzhudagroup.com
longzhulive.com
lonhcloud.net
+lonleaf.com
lonlife.org
lonmedcn.com
lonsoon.com
@@ -62235,6 +62444,7 @@ loongsin.com
loongson.org
loongsonclub.com
loongtravel.com
+loongxy.com
loonlog.com
loooooong.com
looquan.com
@@ -62260,7 +62470,6 @@ lot-ml.com
lotevision.com
lotianshangx.com
lotlab.org
-lotour.cc
lotour.com
lotour.net
lotpc.com
@@ -62301,6 +62510,7 @@ lovefree.cc
lovehaimi.com
lovehhy.net
lovehifi.com
+loveifgames.com
loveinhere.com
lovejavascript.com
lovejia.win
@@ -62323,8 +62533,8 @@ lovetan.net
loveteemo.com
loveu.life
loveuav.com
-loveutips.com
lovev.com
+lovevibe1.com
lovewith.me
lovfp.com
lovgiin.com
@@ -62359,6 +62569,7 @@ lpsckf.com
lpspt.com
lpszstv.com
lptiyu.com
+lpxinjuhui.com
lpxinke.com
lpxt.com
lpxuqi2057.vip
@@ -62369,9 +62580,9 @@ lqabr.com
lqbby.com
lqbj.com
lqbj66.com
-lqfaka.com
lqfeather.com
lqgy.com
+lqhualang.com
lqjob88.com
lqjt.com
lqlst.com
@@ -62393,10 +62604,12 @@ lqzh.me
lqzp.com
lqzwdj.com
lr-amm.com
+lr-link.com
lrc99.com
lrcb.net
lrdcq.com
lrhold.net
+lricn.com
lrist.com
lrkdzx.com
lrkj.net
@@ -62445,6 +62658,7 @@ lshdw.cc
lshfreda.com
lshitv.com
lshou.com
+lshzj.com
lsij3km.com
lsit.net
lsjgcx.com
@@ -62471,6 +62685,7 @@ lsmtjy.com
lsmzt.cc
lsnm.com
lsoos.com
+lspjy.com
lsplayer.com
lsqcjjt.com
lsqpay.com
@@ -62505,6 +62720,7 @@ lstx.vip
lsun.net
lsuoled.com
lsup.net
+lswfw.com
lswgy.com
lswld.com
lswqw.com
@@ -62536,6 +62752,7 @@ ltao.com
ltd.com
ltdcdn.com
ltdspot.com
+ltesting.net
ltfwzs.com
ltggc.com
ltggzy.com
@@ -62545,6 +62762,7 @@ lthqdl.com
ltidc.com
ltie.org
ltimg.net
+ltjczx.com
ltjianhe.com
ltkgjt.com
ltkqjt.com
@@ -62569,7 +62787,6 @@ lttvip.com
ltwkw.com
ltwy.com
ltxbbs.com
-ltxhglass.com
ltxjob.com
ltxsw.co
ltxxgcxx.com
@@ -62596,6 +62813,7 @@ luanzhougucheng.com
luastudio.net
luatos.com
luba360.com
+luban-furniture.com
lubandata.com
lubanjianye.com
lubanlebiao.com
@@ -62608,7 +62826,6 @@ lubanu.com
lubaocar.com
lubeichem.com
lubiao.com
-lubiao.wiki
lubotv.com
luboyun.com
luchengas.com
@@ -62637,7 +62854,6 @@ luckyair.net
luckychipsmaster.com
luckycoffee.com
luckyop.com
-luckyuyin.com
luckyxp.net
lucode.net
luctonchongqing.com
@@ -62683,6 +62899,7 @@ luhai.net
luhaioil.com
luhao198.com
luhaoche.com
+luhe.net
luhehospital.com
luhu.co
luhua.cc
@@ -62703,6 +62920,7 @@ lukiya.com
lukou.com
lukuanart.com
lul8.com
+lula.fun
lulala.com
lulinux.com
lulisteel.com
@@ -62790,10 +63008,10 @@ luoxudong.com
luoxue.com
luoyangdx.com
luoyangkeji.com
+luoyangmalasong.com
luoyechenfei.com
luoying66.com
luoyingsh.com
-luozhinet.com
luozhiyun.com
luozhongxu.com
luozongle.com
@@ -62905,6 +63123,7 @@ lvgangss.com
lvgou.com
lvguo.net
lvhuawei.work
+lvirahoe.com
lvjieplus.com
lvjinsuo.com
lvjiwang.com
@@ -62963,6 +63182,7 @@ lvyestudy.com
lvyetong.com
lvyidoor.com
lvyinba.com
+lvyinbar.com
lvyou168.net
lvyoubei.com
lvyouf.com
@@ -62976,6 +63196,7 @@ lvyuetravel.com
lvzeep.com
lvzheng.com
lw0634.net
+lw5188.com
lw54.com
lwccc.net
lwcj.com
@@ -62990,6 +63211,7 @@ lwhouse.com
lwinst.com
lwjl.com
lwjt.net
+lwjy.net
lwlm.com
lwlocks.com
lwlt.net
@@ -63004,6 +63226,7 @@ lwsy.org
lwtylqx.com
lwwandong.com
lwxs.com
+lwxs11.com
lwxstxt.com
lwzls.com
lx.cok.elexapp.com
@@ -63040,6 +63263,7 @@ lxg2016.com
lxhg.com
lxhkair.com
lxhro.com
+lxhuwai.com
lxhz-avionics.com
lxi.me
lxjcjg.com
@@ -63050,7 +63274,6 @@ lxlinux.net
lxns.net
lxny.vip
lxq7t234u.shop
-lxqrmyy.com
lxrcsc.com
lxsales.com
lxsec.com
@@ -63071,6 +63294,7 @@ lxybaike.com
lxydoor.com
lxyedu.com
lxyes.com
+lxykjsz.com
lxyl020.com
lxyl028.com
lxyl053.com
@@ -63112,6 +63336,7 @@ lybdfqh.com
lybol.com
lybtmy.com
lybus.com
+lybybz.com
lycheer.net
lyckw.com
lycs-arc.com
@@ -63139,6 +63364,7 @@ lyg.live
lyg001.com
lyg01.net
lyg1.com
+lyg12371.com
lyg321.com
lyg800.com
lygcec.com
@@ -63169,7 +63395,6 @@ lygrc.net
lygsgt.com
lygshjd.com
lygshlxh.com
-lygtylk.com
lygxwmarathon.com
lygxwxqrmyy.com
lygyyjt.com
@@ -63202,6 +63427,7 @@ lylhkq.com
lylme.com
lylxjxc.com
lymarathon.com
+lymmasu.xyz
lymy1684.com
lyngrhec.sbs
lynjoy.com
@@ -63225,6 +63451,7 @@ lyquanshunmall.com
lyrc.cc
lyrcw.com
lyric-robot.com
+lyrics.run
lysafety.com
lyshangdu.com
lyshark.com
@@ -63269,6 +63496,7 @@ lyyzedu.com
lyz810.com
lyzaix.com
lyzb.com
+lyzb33.app
lyzfgjj.com
lyzlzz.com
lyzp100.com
@@ -63312,6 +63540,7 @@ lzdsqcysgs.com
lzdsyy.com
lzdxb888.com
lzdxdyyy.com
+lzdymy.com
lzdyyy.com
lzetyy.com
lzeweb.com
@@ -63331,7 +63560,6 @@ lzgjschool.com
lzgkyq.com
lzgm.com
lzgps.com
-lzh2020.com
lzhanghai.com
lzhaoteng.com
lzhdtk.com
@@ -63395,6 +63623,7 @@ lzmmob.com
lzmoyin.com
lzmun.com
lzmy123.com
+lznbjz.com
lznetease.com
lznrlmxh.com
lzoam.com
@@ -63408,6 +63637,7 @@ lzprocess.com
lzqjjx.com
lzqjsm.com
lzqqpcts.com
+lzqxjx.com
lzranqi.com
lzrfc.com
lzrfhg.com
@@ -63441,7 +63671,9 @@ lzteli.com
lztlcyxx.com
lztvnet.com
lztx123.com
+lztxw.com
lztzgroup.com
+lzwg.com
lzwi.fun
lzwls.com
lzwopu.com
@@ -63501,6 +63733,7 @@ lzzy.net
lzzyy.com
m-edu.com
m-hero.com
+m.travelzoo.com
m1.run
m123.com
m1315.com
@@ -63519,6 +63752,7 @@ m2ucam.com
m3-cloud.com
m3cqjc3og6.com
m3guo.com
+m3kaiye.com
m43ocq1uoj.com
m5bn.com
m5stack.com
@@ -63531,6 +63765,7 @@ m999.com
m9dz.com
ma-china.com
ma.run
+ma3office.com
ma3you.com
ma5000.com
maa.plus
@@ -63601,7 +63836,6 @@ macxin.com
macxz.com
macz.com
maczd.com
-maczh.com
maczhi.com
maczj.com
maczl.com
@@ -63610,7 +63844,6 @@ madailicai.com
madajiefood.com
madaomall.com
madboxi.com
-made-in-china.com
madefuns.com
madeinchinastone.com
madewei.com
@@ -63633,6 +63866,7 @@ mafengwo.net
mafengwoo.com
maff.com
mag10000.com
+magadanryba.com
magaoedu.com
magcloud.net
magecorn.com
@@ -63666,12 +63900,14 @@ mahjongcup.com
mahjongcup.net
mahoupao.com
mahua.com
+mahuatalk.com
mai.com
maianhao.com
maibaapp.com
maibangbang.net
maibaokeji.com
maibuymai.com
+maichawang.com
maiche.com
maiche168.com
maicheme.com
@@ -63695,11 +63931,13 @@ maiduo.com
maifjb.com
maigoo.com
maihaoche.com
+maihaojiu.com
maihaome.com
maihaowan.com
maihaowuyou.com
maihehd.com
maihengqi.com
+maihuacha.com
maihuominiapps.com
maihuwai.com
maijia.com
@@ -63761,6 +63999,7 @@ maisucai.com
maisui1.com
maitao.com
maitaowang.com
+maitegao.com
maitewang.com
maitix.com
maitix.net
@@ -63774,6 +64013,7 @@ maixhub.com
maixiaba.com
maixiang.net
maixiaodao.com
+maixinxin.com
maiya91.com
maiyadi.com
maiyanju.com
@@ -63793,6 +64033,7 @@ majianbo.com
majiang520.com
majilive.com
majorbio.com
+majorprecious.com
majorsec.com
majsoul.com
maka.im
@@ -63804,6 +64045,7 @@ makeapp.co
makeblock.com
makedie.me
makeding.com
+makeeu.com
makefont.com
makelie.com
makelove.la
@@ -63831,6 +64073,7 @@ males120.com
malifenlawyer.com
malifuke.org
malimalihome.net
+malingguzhai.com
maliquankai.com
maliuliu.com
mall-builder.com
@@ -63863,7 +64106,6 @@ man6.org
managershare.com
manamana.net
manben.com
-manbenapi.com
manbetxoo.com
manbetxrr.com
manboker.com
@@ -63885,12 +64127,12 @@ manduhu.com
manew.com
manewvr.com
manfen.net
+manfen5.com
manfenyufa.com
manfred-auto.com
mangafuna.site
mangafuna.xyz
manganesenanhai.com
-mangdream.com
mangg.com
mangguo168.com
mangguonews.com
@@ -63903,6 +64145,7 @@ mangolm.com
mangomob.net
mangoru.site
mangren.com
+mangrovetek.com
mangrovetreeresort.com
mangtian.com
mangtuhuyu.com
@@ -63922,7 +64165,6 @@ manhuapi.com
manhuaren.com
manhuatai.com
manjiwang.com
-manjuu.com
mankebao.com
mankewenxue.cc
manlaxy.com
@@ -63962,6 +64204,7 @@ manwahholdings.com
manxing.net
manxiu-law.com
manyacan.com
+manylaw.com
manyoo.net
manyou.com
manyoujing.net
@@ -63993,6 +64236,7 @@ maogua.com
maogumaogu.com
maogx.win
maoha.com
+maohongdz.com
maojiaoque.com
maojiuxs.com
maokangbio.com
@@ -64011,6 +64255,7 @@ maopaoya.com
maopuyouxi.com
maoqitian.com
maoshanger.com
+maotao.net
maotiangroup.com
maotuan.net
maotuying.com
@@ -64029,12 +64274,10 @@ maoyidi.com
maoyigu.com
maoyingaipu.com
maoyouxi.com
-maoyt.com
maoyun.com
maoyuncloud.com
maozhishi.com
maozhuashow.com
-maozierp.com
map-tencent.com
map17.com
map456.com
@@ -64046,6 +64289,7 @@ mapfarm.com
mapgis.com
mapgx.com
maphuan.com
+mapks.com
maple-game.com
maple.ren
maplecheck.tech
@@ -64055,6 +64299,7 @@ mappn.com
maproelec.com
maptalks.com
mapvq.com
+maqingbo.com
maqinnews.com
mararun.com
marathonbm.com
@@ -64068,6 +64313,7 @@ maria23.com
mariedalgar.com
marimekko-hots.com
marine-dancer.com
+marinedancer.com
marioall.com
marioin.com
mariowap.com
@@ -64095,6 +64341,7 @@ maro6.com
marry5.com
mars-block.com
marshal-ceramics.com
+marshallscarlett.shop
marshotspot.com
marssenger.com
marstor.com
@@ -64104,6 +64351,7 @@ martin8023.com
martincl2.me
marto.cc
maryek.net
+marylandtenthcavalry.org
mas10010.com
mas300275.com
masastack.com
@@ -64152,6 +64400,8 @@ masterofmalteu.shop
masterofsoccer.com
mastersay.com
mastersim123.com
+masttoards.com
+mastv.cc
mastvnet.com
masyi.com
masyunrui.com
@@ -64201,7 +64451,6 @@ max-c.com
maxamchina.com
maxd.cloud
maxdo.net
-maxesads.com
maxfinesthair.com
maxfor-tool.com
maxgamehub.com
@@ -64243,6 +64492,7 @@ maxwealthfund.com
maxwi.com
maxxipoint.com
may.ltd
+maya09.com
maya777.com
mayabot.com
mayanchina.com
@@ -64258,7 +64508,6 @@ mayicms.com
mayihr.com
mayiic.com
mayikankan.com
-mayikt.com
mayikt.vip
mayima.net
mayishebao.com
@@ -64281,12 +64530,14 @@ maywant.com
maywonenergy.com
mazakii.com
mazarine-ap.com
+mazc.org
mazey.net
mazhan.com
mazhen.tech
mazhizuo.com
mazida.com
mb-go.com
+mb2p.com
mba518.com
mbabao.com
mbachina.com
@@ -64306,6 +64557,10 @@ mbbs.cc
mbcloud.com
mbd.pub
mbestway.com
+mbg06260pg.com
+mbg06270pg.com
+mbg06290pg.com
+mbg06301pg.com
mbgo.com
mbhcibe.com
mbhfit.com
@@ -64327,7 +64582,6 @@ mbokee.com
mbs.download.prss.microsoft.com
mbsifu.com
mbti16cc.com
-mbtics.com
mbtools.work
mbwxzx.hk
mbysrobot.com
@@ -64344,7 +64598,6 @@ mc520.com
mc91.com
mc9y.net
mcake.com
-mcar.vip
mcbaas.work
mcbang.com
mcbao.com
@@ -64352,7 +64605,6 @@ mcbbs.co
mcbbs.jp
mcbbs.net
mcbeam.pro
-mcbjd.net
mcc460.pub.3gppnetwork.org
mccbim.com
mccchina.com
@@ -64371,15 +64623,18 @@ mcfound.net
mcfun.tv
mcfxw.com
mcgsjt.com
-mcgyaht1023.com
+mchat.com
mchifi.com
mchim.net
mchost.guru
mchpk.com
mchuiji.com
mchweb.net
+mchxx.net
mcidc.net
mcit.tech
+mcjd.net
+mckumf5ii4.com
mcloudvr.com
mcmap.cc
mcmaster-asia.com
@@ -64422,11 +64677,13 @@ mcyhfl.com
mcypls.com
mcyz.com
mczhihui.com
+mczmb.org
mczsok.com
mczwlt.net
mczyz.com
mczz.net
md-hmjt.com
+md-pms.com
md5ma.com
mdaehx.com
mdbchina.com
@@ -64439,9 +64696,9 @@ mdeasydiagnosis.com
mdeer.com
mdex.co
mdex.com
+mdfkyiyuan.com
mdfors.com
mdfull.com
-mdict.net
mditie.com
mdjgjjt.com
mdkj1.com
@@ -64472,6 +64729,7 @@ mdydt.net
mdymedical.com
mdyseducation.org
mdyuepai.com
+mdzgjx.com
mdzx.net
me-city.com
me-game.com
@@ -64487,6 +64745,7 @@ meb.com
mebhaoya.com
mebo.com
mebtf.com
+mebyk.com
mechatim.com
mechina.org
mechr.com
@@ -64510,13 +64769,11 @@ medebound.com
medejob.com
medeming.com
media.paperclipclub.net
-mediaainet.com
mediastory.cc
mediatek.com
mediav.com
mediaxinan.com
medical-union.com
-medicalimagecloud.com
medicalqc.com
medicexam.net
mediecogroup.com
@@ -64574,10 +64831,12 @@ mefcl.com
mefenglife.com
mefenlife.com
megaemoji.com
+megaer.com
megagamelog.com
megagenchina.com
megahugo.net
megajoy.com
+megalithwatch.com
megarobo.com
megasig.com
megawords.cc
@@ -64593,7 +64852,6 @@ mehecointl.com
mei-shu.com
mei-shu.net
mei.com
-mei.wiki
mei1.com
mei1.info
meia.me
@@ -64621,6 +64879,7 @@ meide-casting.com
meidebi.com
meidecloud.com
meideng.net
+meidepump.net
meidongauto.com
meidusacloud.com
meierbei.com
@@ -64651,7 +64910,6 @@ meiji-icecream.com
meijia51.com
meijiadaren.com
meijiaedu.com
-meijian.com
meijiandaojia.com
meijianpin.com
meijiashang.com
@@ -64695,7 +64953,6 @@ meiligaosu.com
meilijia.com
meilijian.com
meiling.com
-meilinvps.com
meilishuo.com
meilishuo.net
meilisite.com
@@ -64770,6 +65027,7 @@ meitanwang.com
meite.com
meitegou.com
meitianhui.com
+meitianzuche.com
meitie.com
meitifagao.com
meitong-tech.com
@@ -64906,6 +65164,7 @@ meng800.com
mengaite.com
mengarchitects.com
mengat.com
+mengbige.com
mengchongzu.com
mengdian.com
mengdie.com
@@ -64925,8 +65184,10 @@ menglechong.com
menglegame.com
menglu.com
mengmei.org
+mengniang.tv
mengniuarla.com
mengniuir.com
+mengou.net
mengqingpo.com
mengqiuju.com
mengsang.com
@@ -64961,7 +65222,6 @@ menww.com
menwww.com
menxue.com
menyuannews.com
-meoo.com
meoof-pet.com
meovse.com
meow.plus
@@ -64972,7 +65232,6 @@ mepoem.com
meppon.com
meqlm.org
merach.com
-mercallure.com
mercedes-benzarena.com
merchaincargo.com
mereith.com
@@ -64989,6 +65248,7 @@ meshiot.com
mesince.com
mesnac.com
mesonart.com
+mesou.net
mesowe.com
mesresearch.com
messawith.com
@@ -65025,6 +65285,7 @@ meteric.com
metersbonwe.com
metin520.com
metispharma.com
+metmt.com
metnews.net
metong.com
metools.info
@@ -65105,6 +65366,7 @@ mggtech.vip
mgh2-lab.com
mgjianshe.com
mgkj.vip
+mgkjht.com
mgl9.com
mglhx.com
mglip.com
@@ -65116,6 +65378,7 @@ mgobe-webattle.com
mgogo.com
mgongkong.com
mgplay.com.tw
+mgs123.com
mgsdk.com
mgse.info
mgskfjfod25.com
@@ -65151,6 +65414,8 @@ mhhf.net
mhi-ac.com
mhinele.com
mhito.net
+mhkami.com
+mhkcomment.com
mhome.com
mhotels.design
mhpdf.com
@@ -65199,6 +65464,7 @@ mianbao.com
miancp.com
miandanbx.com
mianfa.org
+mianfeiic.com
mianfeiquming.com
mianfeiwendang.com
mianfeiwucan.org
@@ -65232,7 +65498,6 @@ miaokaiyun.com
miaokan.com
miaokan100.com
miaolaoshi.com
-miaolaotai.com
miaolianyunapp.com
miaolingbio.com
miaomaicar.com
@@ -65247,7 +65512,6 @@ miaomuzhan.com
miaoo.me
miaopai.com
miaoqutimes.com
-miaosdk.com
miaosha.com
miaoshou.cc
miaoshou.com
@@ -65255,6 +65519,7 @@ miaoshou.net
miaoshoucdn.com
miaoshufang.com
miaoshuwu.com
+miaoshuzhai.net
miaoso.com
miaostreet.com
miaotixing.com
@@ -65264,6 +65529,7 @@ miaoweijianfei.com
miaowenhk.com
miaowlabs.com
miaowutech.com
+miaoxiazai.com
miaoyanai.com
miaoyin.pw
miaoyun.link
@@ -65309,11 +65575,13 @@ microcardio.com
microchampion.com
microdiag.com
microdreams.com
+microesim.com
microfotos.com
microfountain.com
micronetpay.com
microrui.net
microsate.com
+microsoftsa.com
microsoftuwp.com
microstarsoft.com
microstern.com
@@ -65326,12 +65594,9 @@ microwoo.com
microwu.com
microxiang.com
microyan.com
-microzl.com
microzuji.com
-micstatic.com
mictormedical.com
micu.hk
-micun.com
micw.com
micyjz.com
mid-link.net
@@ -65340,6 +65605,7 @@ midadata.com
midainc.com
midanyi.com
midasbuy.com
+middleschoolcounselor.com
midea-buy.com
midea-group.com
midea-hotwater.com
@@ -65378,7 +65644,6 @@ miemie.la
miercn.com
mieseng.com
mifacelive.com
-mifan.cc
mifan365.com
mifangba.com
mifanli.com
@@ -65481,7 +65746,6 @@ milihua.com
milike.com
milimao.com
milimili.tv
-milinzone.com
miliol.com
miliol.org
milipictures.com
@@ -65508,6 +65772,7 @@ mimi123.vip
mimi518.com
mimidi.com
mimimeu.com
+mimixiaoke.com
mimiyc.net
mimo51.com
mimomim.com
@@ -65591,6 +65856,7 @@ mingjinglu.com
mingjiudu.com
mingjun2008.com
mingjuyoupin.com
+mingkj.com
minglian.com
minglunlaw.com
mingmen-tech.com
@@ -65634,7 +65900,6 @@ mingyuanfund.com
mingyuanmuye.com
mingyuanyun.com
mingyueqingfengshe.com
-mingyuhan.net
mingzhi-tech.com
mingzhucable.com
mingzhujs.com
@@ -65665,6 +65930,7 @@ minigameam.com
minigui.com
minigui.org
minihaowan.com
+miniluck.com
minimaituan.com
minimax.chat
minimax.io
@@ -65687,6 +65953,7 @@ miniyounger.com
minjichem.com
minkave.com
minking.cc
+minleai.com
minli.com
minmetals.com
minor-tech.com
@@ -65695,6 +65962,7 @@ minpayment.com
minqiao.com
minra.com
minretail.com
+minshangjie.com
minshengec.com
minshengjob.com
minshenglife.com
@@ -65748,7 +66016,6 @@ miraclevision.com
miraclevision.net
miracomotor.com
mirahomes.shop
-miraiemby.com
miravia.es
miredian.com
miri.site
@@ -65778,12 +66045,12 @@ missjia.net
misslele.com
misstar.com
missyuan.net
-mistfront.com
misuland.com
misunly.com
mitalk.com
mitang.com
mitangtuan.com
+mitao.bar
mitaoping.com
mitaowu.com
mitay.net
@@ -65837,7 +66104,6 @@ miyanlife.com
miyapay.com
miyateam.com
miyatech.com
-miyavip.vip
miyilink.com
miyoushe.com
miyouu.com
@@ -65888,10 +66154,8 @@ mjzhcl.com
mjzj.com
mjzq.net
mk-yiliao.com
-mk1688.shop
mk2048.com
mk5.xyz
-mkadept.com
mkaq.org
mkb0898.com
mkf.com
@@ -65950,6 +66214,7 @@ mljydoors.com
mlkmba.com
mllj.net
mlmcms.com
+mlmtz.com
mlnsoft.net
mlocso.com
mlogcn.com
@@ -65962,6 +66227,7 @@ mlsub.net
mlszp.com
mlt.pub
mltrans.net
+mlunwen.com
mlwanwan.com
mlwdpx.com
mlwed.com
@@ -65978,6 +66244,7 @@ mlzs2008.com
mm-sh.com
mm.com
mm111.net
+mm131.kim
mm1357.com
mm2hservices.com
mm3yy.com
@@ -66008,6 +66275,7 @@ mmhygame.com
mmi-shanghai.com
mmia.com
mmim8.com
+mmjbh.com
mmjynet.com
mmjzxh.com
mmkkiivv.com
@@ -66029,6 +66297,7 @@ mmsase.com
mmsccn.com
mmscoo.com
mmsfw.com
+mmsk.com
mmstat.com
mmt3000.com
mmtch.com
@@ -66050,6 +66319,7 @@ mnbvdfg.com
mnbvtgv.com
mndqlib.net
mnengine.com
+mnfqw.org
mnihyc.com
mnjj.group
mnkan.com
@@ -66061,6 +66331,14 @@ mo298.com
mo2g.com
mo7.cc
mo9.com
+moa06181ju.com
+moa06190ju.com
+moa06191ju.com
+moa06210ju.com
+moa06211ju.com
+moa06221ju.com
+moa06240ju.com
+moa06250ju.com
moage.com
moark.com
mob.com
@@ -66084,6 +66362,7 @@ mobawan.com
mobayx.com
mobcells.com
mobcloud.mobi
+mobdna.com
mobeehome.com
mobgi.com
mobgroupbuy.com
@@ -66125,6 +66404,7 @@ mocache.com
mocafilm.com
mocartoon.com
mochafengbao.com
+mochai.store
mochateam.com
mochi.website
mochiwang.com
@@ -66136,7 +66416,6 @@ moco-mall.com
mocreak.com
mocusez.site
mocuz.com
-modaiyun.com
modao.cc
modao.com
modao.io
@@ -66183,7 +66462,6 @@ moe233.org
moe321.com
moeclub.org
moedot.net
-moedu.com
moeelf.com
moefactory.com
moefantasy.com
@@ -66221,6 +66499,7 @@ mofangwang.com
mofangyu.com
mofanodes.com
mofashi.ltd
+mofavideo.com
mofazhu.com
moffettai.com
mofile.com
@@ -66281,7 +66560,6 @@ mokahr.com
mokamrp.com
mokatyper.com
mokayuedu.com
-mokexapp.tv
mokeyjay.com
moko.cc
mokra.house
@@ -66352,6 +66630,7 @@ montage-tech.com
monternet.com
montnets.com
montres8.com
+monurhineas.com
monv.com
monxin.com
moocollege.com
@@ -66359,7 +66638,6 @@ mooctest.net
moodmoon.com
moodoon.com
moogos.com
-mooho.cloud
moojing.com
moojnn.com
moolsun.com
@@ -66388,6 +66666,7 @@ moonvy.com
moonvy.cool
mooool.com
mooore.net
+moooyu.com
moore.ren
moore8.com
moorecat.com
@@ -66453,6 +66732,7 @@ morninghan.com
morninginn.com
morningwhistle.com
morong-elec.com
+morrisco.cc
morstar.net
moschat.com
moseacg.com
@@ -66502,6 +66782,9 @@ moumi.com
mounriver.com
mountor.net
mounui.com
+mouraeodor.com
+mouralanco.com
+mouratoriousi.com
mousesquadca.org
mousycoder.com
moutaichina.com
@@ -66534,6 +66817,7 @@ moxiu.net
moxuangenet.com
moyangmoyang.com
moyann.com
+moyol.com
moyoyo.com
moypk.com
moyubuluo.com
@@ -66546,6 +66830,7 @@ mozhedun.com
mozhenhau.com
mozichina.com
mozigu.net
+mozillaonline.com
mozillazg.com
moziqing.com
mozouyan.com
@@ -66566,6 +66851,7 @@ mpdsj.com
mph11.com
mphdx.com
mpiano.com
+mplus.tech
mpmc-china.com
mpnbenefits.download.prss.microsoft.com
mpnbenefitsrtl.download.prss.microsoft.com
@@ -66585,12 +66871,12 @@ mqmgroup.com
mqqurl.com
mqqy.com
mqrouter.com
-mqs983.com
mqsyr.com
mqttx.app
mquanquan.com
mqxpyy.com
mqxww.com
+mqyu.com
mqzoneapp.com
mr-ping.com
mr77.com
@@ -66607,6 +66893,7 @@ mrduan.com
mrenbaike.com
mrentea.com
mrhallacg.com
+mrhs.cc
mrjeke.com
mrjiang.com
mrjjxw.com
@@ -66619,17 +66906,18 @@ mro9.com
mroall.com
mrobao.com
mrpyq.com
+mrqf.com
mrqoxfvs.com
mrqxs.com
mrrvendor.com
mrsingsing.com
mrsjzt.com
mrsta.com
-mrtdephoto.net
mrts.com
mru-taste.com
mrutaste.com
mrvcdn.com
+mrw.so
mrwish.net
mrxiao.net
mrxwlb.com
@@ -66650,6 +66938,7 @@ msd-facing.com
msddp.com
msdkpass.com
msdn.download.prss.microsoft.com
+msdn.hk
msdnwogaosuni.com
msdnxitong.com
msdpmarathon.com
@@ -66675,6 +66964,8 @@ mshxw.com
msits.com
msjingmi.com
msjpay.com
+msjy123.com
+mskoo.com
mslmc.net
msltbio.com
mslzk.com
@@ -66685,6 +66976,7 @@ msndvr.com
msny.cc
msolok.com
mspace.cc
+mspacecd.com
mspharm.com
msproduct.download.prss.microsoft.com
msstatic.com
@@ -66695,6 +66987,8 @@ mstxx.com
msunland.com
msweekly.com
msxf.com
+msxf.net
+msxiaobing.com
msxt.com
msxxg.com
msy5.com
@@ -66735,8 +67029,8 @@ mte-shenzhen.com
mtedu.com
mtex.work
mtfpos.com
-mtftlcs.xyz
mtgchina.com
+mthlyp.com
mthreads.com
mti100.com
mtiancity.com
@@ -66774,6 +67068,7 @@ mttsq.com
mtty.com
mtv123.com
mtvip.cc
+mtw.so
mtwine.com
mtwl.net
mtxshop.com
@@ -66785,6 +67080,7 @@ mtzqb.com
mtzscp.com
mtzuichen.com
mu69.com
+muaedge.com
mubanjianli.com
mubanwan.com
mubixueyuan.com
@@ -66810,8 +67106,8 @@ muftc.com
muge.info
mugeda.com
muguang.me
+muhan.co
muhan.ltd
-muhemob.com
muhou.net
muhoujiemi.com
muhuo.chat
@@ -66840,13 +67136,13 @@ multilingual-volc.com
multimodalmatch.com
multiplym.com
mulunspring.com
-mulyclub.com
mumayi.com
mumbuy365.com
mumingfang.com
mumunv.com
mumuplayer.com
mumuxili.com
+munantonio.com
mundane.ink
muniao.com
munling.com
@@ -66867,11 +67163,11 @@ muryi.net
muse.ltd
muselab-tech.com
musenxi.com
+muser168.com
museradio.net
musestudio.net
musetransfer.com
mushafa.net
-mushroommarket.net
music4x.com
musicchina-expo.com
musiccia.com
@@ -66880,9 +67176,10 @@ musicdu.com
musicedu8.com
musiceol.com
musicgw.com
-musiclemon.net
+musiciansfriendsaleusa.shop
musiness.vip
muslimwww.com
+muspost.icu
mussgirl.store
mustangbattery.com
mustbull.com
@@ -66894,7 +67191,6 @@ mutean.com
mutian.net
mutianyugreatwall.com
mutieffect.com
-mutoglobal.vip
mutouxb.com
mutouyu.com
mutualhunter.com
@@ -66903,6 +67199,7 @@ muwaifanzhiliao.com
muwenxi.com
mux5.com
muxin.fun
+muxiulin.com
muyangkuaibao.com
muyee.com
muyer.com
@@ -66964,6 +67261,7 @@ mwrfabc.com
mwstore.com
mwtg.vip
mww.so
+mwyzhcdn.com
mwzhtc.com
mx-china.net
mx-fm.com
@@ -66972,6 +67270,7 @@ mx-xz.com
mx007.com
mx3g.com
mx520.com
+mxarts.com
mxbc.com
mxbc.net
mxchip.com
@@ -66984,7 +67283,6 @@ mxdpark-gs.com
mxdraw.com
mxdraw3d.com
mxdx.net
-mxdzlk.com
mxew.com
mxflutter.com
mxfy.com
@@ -66995,6 +67293,7 @@ mxhichina.com
mxifund.com
mxitie.com
mxitres.com
+mxj.cx
mxjd.com
mxjtedu.com
mxjyxx.com
@@ -67065,7 +67364,6 @@ myaiwecom.com
myalicdn.com
myalirtc.com
myallvalue.com
-myang.xyz
myanjian.com
myanmarembassy.com
myanmarembassybeijing.com
@@ -67092,14 +67390,12 @@ mycar58.com
mycaraok.com
mycarbar.com
mycardgame.net
-mycdnadmin.com
mychery.com
mychery.net
mychuguan.com
mychunyan.net
myckjr.com
mycleanmymac.com
-mycloudnas.com
mycloudstudy.com
myclub2.com
mycnc.org
@@ -67133,6 +67429,7 @@ mydigit.net
mydigitex.com
mydisk.work
mydnns.com
+mydnser.com
mydnspod.net
mydnsw.com
mydoc.io
@@ -67145,6 +67442,7 @@ myechannel.com
myechinese.com
myeclipsecn.com
myekp.net
+myeriri.com
myex.cc
myezdns.com
myfans.cc
@@ -67222,8 +67520,10 @@ mylibs.org
mylightsite.com
mylike.cc
mylike.com
+mylike120.com
mylikechat.com
mylikesz.com
+mylikeyk.com
mylinkapp.hk
mylitboy.com
myliwu.net
@@ -67246,7 +67546,6 @@ mymova.com
mymuwu.net
mynatapp.cc
mynb8.com
-myndj.com
mynee.com
myo.ink
myoas.com
@@ -67273,6 +67572,7 @@ mypitaya.com
mypity.com
mypiwik.com
mypm.net
+myprad.com
mypscloud.com
mypsy365.com
mypx.org
@@ -67280,6 +67580,7 @@ myqbosuppportt.com
myqcloud.com
myqcloud.net
myqee.com
+myqqdd.com
myqqjd.com
myr9.com
myra2.com
@@ -67308,6 +67609,7 @@ myshow800.com
mysinamail.com
mysipo.com
mysiteres.com
+mysm888.com
mysmth.net
mysongktv.com
mysore-yoga.com
@@ -67322,7 +67624,6 @@ mysteel.com
mysteel.net
mysteelcdn.com
mysteelcms.com
-mystery0.vip
mysticalcard.com
mysubmail.com
mysupa.com
@@ -67340,6 +67641,7 @@ mythcare.com
mythidea.com
mythroad.net
mythsman.com
+mythware.com
mythware.net
mytianchang.com
mytijian.com
@@ -67368,7 +67670,6 @@ mywirebox.com
mywl123.com
mywll.com
myworld6.com
-mywuwu.com
myxxts.club
myxxts.com
myxycjh.com
@@ -67390,6 +67691,7 @@ myzxsx.com
myzxyy.com
myzyy.com
myzyzy.com
+mz186.com
mz52.com
mz6.net
mz99.com
@@ -67403,7 +67705,6 @@ mzfile.com
mzfpay.com
mzfsm.com
mzfxw.com
-mzgjbj.com
mzgroup.vip
mzgtuan.com
mzh.ren
@@ -67463,13 +67764,11 @@ n62f.vip
n63.com
n69.com
n78785.com
-n7r65.com
n802.com
n8soft.com
n9z.net
na.ci
naaln.com
-nabel.cc
nabluemedia.com
naboyi.com
nabucuo.com
@@ -67564,6 +67863,7 @@ nanfang-pump.com
nanfangfood.com
nanfen.com
nanfu.com
+nanguache.com
nanguakexue.biz
nanguakexue.com
nanguaxia.vip
@@ -67579,6 +67879,7 @@ nanhuangic.com
nanhufund.com
nanhujianshe.com
nanhunnvjia.com
+nanhuwang.com
nanjbjjt.com
nanjet.com
nanjianggroup.com
@@ -67593,6 +67894,7 @@ nanjingelectric.com
nanjinggaopeng.com
nanjinghuihe.com
nanjinghuojia.net
+nanjinglf.org
nanjingludeng.com
nanjingtianqi114.com
nanjingttym.com
@@ -67615,6 +67917,7 @@ nanningrcw.com
nanningtech.com
nanningxiaoou.com
nanningyouhua.com
+nanningyuexing.com
nannjlnk.com
nanobody-biolab.com
nanochrom.com
@@ -67631,6 +67934,7 @@ nanputuo.com
nanqi.org
nanqiangbusiness.com
nanrentu.cc
+nanrenwa.com
nanrenwo.net
nanrenzhi.com
nanshanfuzi.net
@@ -67647,6 +67951,7 @@ nantoujituan.com
nanvi.com
nanxi.me
nanxiang.info
+nanxingmac.com
nanxinwang.com
nanxueqx.com
nanxunfb.com
@@ -67706,6 +68011,7 @@ nationalchip.com
nationalee.com
nationsky.com
nationstech.com
+nativosink.com
natnps.com
nattest-china.com
naturali.io
@@ -67752,6 +68058,7 @@ nbaqx.com
nbaxiaoshuo.com
nbbiao.com
nbbjack.com
+nbbull.com
nbbuxiutie.com
nbcbd.com
nbchao.com
@@ -67776,7 +68083,6 @@ nbenl.com
nbfeyy.com
nbfkgs.com
nbfox.com
-nbgbd.com
nbgdjt.com
nbginnovations.com
nbgjwl.com
@@ -67788,6 +68094,7 @@ nbhao.org
nbhechang.com
nbhhgroup.com
nbhky.com
+nbhxmr.com
nbhysj.com
nbimer.com
nbit6d.com
@@ -67820,7 +68127,6 @@ nbmidun.com
nbmylike.com
nbmyy.com
nbmzyl.com
-nbmzyy.com
nbnnn.xyz
nbocc.com
nbocqdm.xyz
@@ -67840,6 +68146,7 @@ nbruili.com
nbscxh.com
nbsdjyy.com
nbsfgy.com
+nbshunjian.com
nbshuoxue.com
nbshzwyy.com
nbsijian.com
@@ -67865,10 +68172,12 @@ nbunicom.com
nbuser.com
nbvps.net
nbwaf.net
+nbwan.net
nbwbw.com
nbwelldon.com
nbwetc.com
nbwhg.com
+nbwskj666.com
nbxdjt.com
nbxiaoshi.net
nbxry.com
@@ -67886,6 +68195,7 @@ nbzjpc.com
nbzsq.com
nbzxgj.com
nc-bio.com
+nc189.net
ncarzone.com
ncboo.com
ncc-cma.net
@@ -67907,7 +68217,6 @@ nchycw.com
ncidbj.com
nciyuan.com
ncjrailway.com
-ncjsyy.com
nclqq.com
ncmbio.com
ncmem.com
@@ -67922,7 +68231,6 @@ ncpssd.org
ncq8.com
ncqiche.com
ncsdyyy.com
-ncsep.com
ncshxd.com
ncsjhf.com
ncsxy.com
@@ -67972,12 +68280,12 @@ ndmh.com
ndoo.net
ndpharm.com
ndsad.com
+ndsbbs.com
ndscsoft.com
ndser.net
ndsyy.com
ndszgb.com
nduoa.com
-nduoshousi.com
nduotuan.com
ndvfxyvj.sbs
ndxlj.com
@@ -68030,6 +68338,7 @@ nellit.info
nellit.net
nellit.xyz
nelson-textiles.com
+nelsonjulia.shop
nelumbosp.com
nengapp.com
nengdarack.com
@@ -68102,6 +68411,7 @@ netbirds.com
netbooo.com
netchina100.com
netcoc.com
+netcolc.cc
netconst.com
netcoretec.com
netcute.com
@@ -68121,6 +68431,7 @@ netherlandvcenter.com
nethonghe.com
netianshannu.com
netiler.com
+netinfi.com
netinfi.net
netingcn.com
netitest.com
@@ -68140,6 +68451,7 @@ netswise.com
netsyq.com
nett.to
netvp.net
+network-hk.com
networkbench.com
networkesl.com
networklinkpro.com
@@ -68259,8 +68571,10 @@ news18a.com
newscctv.net
newseasoft.com
newsgd.com
+newsgu.com
newsgx.com
newshengwei.com
+newsighting.com
newsing.com
newskj.com
newskj.org
@@ -68288,6 +68602,7 @@ newsxy.com
newsyc.com
newszjk.com
newtab123.com
+newtalentaward.com
newtimeai.com
newtimevalve.com
newtonghua.com
@@ -68307,6 +68622,7 @@ newxitong.com
newxue.com
newyifagroup.com
newyishi.com
+newyorkerdownunder.com
newyoton.com
newyx.net
newzealandvscenter.com
@@ -68315,6 +68631,7 @@ newzhizao.com
newzhongyuan.com
nexaparty.com
nexmoe.com
+nexon.to
next-bei.com
next-playground.com
nextclass.club
@@ -68332,6 +68649,7 @@ nextvid.net
nextworkshop.net
nextyu.com
nexus-holding.com
+nexus.dell.com
nexusedgeio.com
nexushd.org
neyetwatcher.com
@@ -68398,6 +68716,7 @@ ngjjtg.com
ngkjjt.com
ngksz.com
ngmap.com
+ngmco.net
ngmyt.com
ngnice.com
ngnlink.net
@@ -68455,7 +68774,6 @@ niansir.com
niao95.com
niaobulashi.com
niaocms.com
-niaogebiji.com
niaola.com
niaoquan.fun
niaosuangao.online
@@ -68575,6 +68893,7 @@ ningmengdou.com
ningmengyun.com
ningshing.com
ningtingche.com
+ningto.com
nington.com
ningxi.com
ningxiacaijing.com
@@ -68613,6 +68932,7 @@ niuaniua.com
niuap.com
niubalun.com
niubihonghong.net
+niubilai.com
niubilety.com
niubixia.com
niubo.cc
@@ -68644,6 +68964,7 @@ niupinhui.com
niupu.com
niuqia.com
niurenqushi.com
+niurosoft.com
niuschools.com
niushe.com
niushield.online
@@ -68653,7 +68974,6 @@ niutk.com
niutoushe.com
niutrans.com
niuwk.com
-niuwoai.com
niuxgame77.com
niuxiaoer.net
niuxyun.com
@@ -68678,7 +68998,6 @@ nizkeyboard.com
nj-anruitai.com
nj-bl.com
nj-bw.com
-nj-cgp.com
nj-chishun.com
nj-control.com
nj-deli.com
@@ -68762,12 +69081,14 @@ njcl-gear.com
njclwlkj.com
njcmotor.com
njcmsj.com
+njcnmc.com
njcomptech.com
njctcm.com
njcttq.com
njcw.com
njcwlk.com
njcxj.com
+njcyt99.com
njd1.com
njdapaidang.com
njdatang.com
@@ -68880,7 +69201,6 @@ njjhjt.com
njjht.com
njjianguo.com
njjiantian.com
-njjiejuwx.com
njjienuo.com
njjifei.com
njjknkyy.com
@@ -68909,6 +69229,7 @@ njkcsj.com
njkeeryq.com
njkerun.com
njkeystone.com
+njkhhb.com
njkhly.com
njkilter.com
njklclear.com
@@ -68933,6 +69254,7 @@ njljscl.com
njlkjc.com
njlndl.com
njlofty.com
+njlonsen.com
njloyalty.net
njlrxx.com
njlsw.com
@@ -68970,13 +69292,13 @@ njnhyx.net
njnii.com
njningyi.com
njnkxt.com
+njnkzz.com
njnpfl.com
njntdj.com
njnwyy.com
njnysoft.com
njnzrs.com
njodu.com
-njonemall.com
njouman.com
njpeptide.com
njpkwater.com
@@ -69101,10 +69423,10 @@ njxjjsjt.com
njxkyy.net
njxlhd.com
njxlxx.com
-njxmeng.com
njxnjt.com
njxty.com
njxushang.com
+njxwyl.com
njxxrc.com
njxyyy.com
njxzwh.com
@@ -69118,6 +69440,7 @@ njyhznkj.com
njyjglxh.com
njyjxh.com
njyjzz.com
+njyouwin.com
njypk.com
njyqhj.com
njyqkj0ksyz.com
@@ -69190,7 +69513,6 @@ nlscan.com
nlteck.com
nlttms.com
nlxn.com
-nlyd.club
nlypx.com
nlyzzzxrmyy.com
nlzpw.com
@@ -69232,6 +69554,7 @@ nmgup.com
nmgwhly.com
nmgwxgs.com
nmgyjszx.com
+nmimi.com
nmjtzy.com
nmjyl.com
nmkjxy.com
@@ -69240,6 +69563,7 @@ nmlpa.com
nmod.net
nmpfkj.com
nmrdata.com
+nmsl.gs
nmslwsnd.com
nmt2.com
nmufh.com
@@ -69258,6 +69582,7 @@ nn2fy.com
nn2yy.com
nn3yy.com
nn4yy.com
+nn4z.com
nn5itt.com
nn5yy.com
nn6yy.com
@@ -69427,6 +69752,7 @@ nnlxs.com
nnlyjp.com
nnlzhs.com
nnmama.com
+nnmhzc.com
nnminghe.com
nnmingyuanyun.com
nnmjm.com
@@ -69517,6 +69843,8 @@ nnwytl.com
nnxcx.com
nnxczxjt.com
nnxdj.com
+nnxfz.com
+nnxiehehospital.com
nnxinxiang.com
nnxiyun.com
nnxjtf.com
@@ -69563,7 +69891,6 @@ nnzp8.com
nnzw168.com
nnzxtx.net
nnzyjob.com
-no-mad-sub.one
no-mad-world.club
no1news.com
no8ms.com
@@ -69612,6 +69939,9 @@ nologo.tech
nolovr.com
nomax.vip
nome.com
+nomuaexander.com
+nomuaheridan.com
+nomuamarcia.com
nomura-nset.com
nomuraoi-sec.com
nonfemet.com
@@ -69632,6 +69962,7 @@ nongjx.com
nongkeyu.com
nongli.com
nongli.net
+nonglirili.net
nongmintv.com
nongnet.com
nongshang.com
@@ -69641,7 +69972,6 @@ nongye.tv
nongyedns.com
nongyelu.com
nongyemen.com
-nongyeplus.com
nongyie.com
nonobank.com
noobboss.com
@@ -69655,6 +69985,7 @@ noobwatches.com
noobyard.com
noobyy.com
noobzz.net
+noomuuhapmav.com
noonaspizza.com
noonnoora.com
noontec.com
@@ -69671,7 +70002,6 @@ nordicways.com
nordkete.com
nordonfire.com
nordritools.com
-norglo.com
norinco-vehicle.com
norinco.com
norincogroup-ebuy.com
@@ -69692,7 +70022,6 @@ northsoar.com
northtexascribs.com
northtimes.com
nosec.org
-nosetime.com
nosoul99.com
nossmoke.com
nosub.net
@@ -69781,7 +70110,6 @@ nptpark.com
nptparking.com
nptwedding.com
npub.net
-npud450c.com
npxsw.com
npz.com
nq6.com
@@ -69845,7 +70173,6 @@ nsknsk.com
nskwj.com
nsm-electrical.com
nsmodel.com
-nsns.in
nsoad.com
nsqtlcdn.cc
nsqtlcdn.info
@@ -69872,10 +70199,12 @@ nswzs.com
nsxdns.com
nsxww.com
nsydt.com
+nsyhwakrkq2.com
nsynu.com
nszmz.com
nszone.com
nszxsyxx.com
+nszynd66ggbcx.com
nt.app
nt.cc
nt56.net
@@ -69906,6 +70235,7 @@ nthysp.com
nti56.com
ntiee.com
ntjgjt.com
+ntjgpx.com
ntjhbw.com
ntjhzy.com
ntjob88.com
@@ -69915,7 +70245,6 @@ ntjymall.com
ntjzyxh.com
ntkfqjy.com
ntlcjd.com
-ntlnrtx.com
ntmlxm.com
ntmyexp.com
ntp.felixc.at
@@ -69962,6 +70291,7 @@ nubia.mobi
nucc.com
nucleisys.com
nuctech.com
+nuedc-ti.com
nuedcchina.com
nufans.net
nug08010lu.com
@@ -69974,7 +70304,6 @@ nuist.pro
nulipin.com
nullice.com
nullno.com
-nulviw.com
num1dns.com
num2020.com
numans.cc
@@ -70045,8 +70374,6 @@ nvsheng.com
nvshengjie.com
nvshuyun.com
nvsip.com
-nvwalive.com
-nvwnsy.com
nvwu.com
nvzhanshen.com
nvziwu.com
@@ -70058,7 +70385,6 @@ nwdlink.com
nweon.com
nwifyuz.com
nwncd.com
-nwovo.com
nwshotel.com
nwzg.net
nx-sc.com
@@ -70100,6 +70426,7 @@ nxstjt.com
nxsyy.com
nxtf.net
nxtianshangb.com
+nxwly.com
nxxdns.com
nxxh.net
nxxhr.com
@@ -70118,12 +70445,12 @@ ny1988.com
ny2000.com
nya.ink
nyaacat.com
-nyanket.com
nyat.app
nyato.com
nybai.com
nybaidu.net
nybw.net
+nybyggx.com
nyckidsclub.com
nyd7y.com
nydsrrsh.com
@@ -70133,7 +70460,6 @@ nyhnx.com
nyhpyq.com
nyjy-china.com
nylingshang.com
-nylvy.com
nypd520.com
nysenba.com
nysgjgs.com
@@ -70177,7 +70503,6 @@ o-star.cc
o0310o.com
o0o0w.com
o136.com
-o163.com
o2123.com
o2ee.com
o2moment.com
@@ -70210,7 +70535,6 @@ oadz.com
oafocus.net
oahelp.com
oahelp.net
-oai.sb
oait360.com
oak-amc.com
oaloft.com
@@ -70235,6 +70559,7 @@ obetal.com
obins.net
obj.cc
obj6.com
+objccn.io
objcoding.com
obkoro1.com
obolee.com
@@ -70264,7 +70589,6 @@ oceancus.com
oceandatas.com
oceando.cloud
oceanengine.com
-oceanhomeplus.com
oceanhood.com
oceanol.com
oceanorama.com
@@ -70277,9 +70601,11 @@ ocft.com
ochirly.com
ocic-static.com
ocici.com
+ocideal.com
ocimg.com
oclean.com
oclkj.com
+ocn187.com
ocpuritech.com
ocsjs.com
ocsp.us.cdnetworks.com
@@ -70301,6 +70627,7 @@ octopusgame.com
octre.com
octsszj.com
octsunshine.com
+oculist.net
ocvh970428448.luxe
ocwms.com
odaily.news
@@ -70308,14 +70635,13 @@ odalong.com
odao.com
odata.cc
odeasports.com
-odh36826.com
odict.net
odinichina.com
odinjc.com
odinjilin.com
odinliu.com
odlkj.com
-odmt.net
+odohx.org
odyzj.com
oealy.com
oeasy.org
@@ -70363,7 +70689,6 @@ officecdn.microsoft.com
officectrl.com
officemkt.download.prss.microsoft.com
officemktuat.download.prss.microsoft.com
-offices163.com
officese.com
officesoftcn.com
officeweb365.com
@@ -70373,6 +70698,7 @@ offshoremedia.net
ofgame.net
ofidc.com
ofo.com
+ofopp.com
ofpay.com
ofpay365.com
ofuns.com
@@ -70391,6 +70717,8 @@ ohipic.com
ohltjt.com
ohltk.com
ohneen.com
+ohqly.com
+ohtly.com
ohtpc.com
ohyee.cc
oi-wiki.com
@@ -70417,6 +70745,7 @@ oincp.com
oinva5yl.com
oioidesign.com
oioiok.com
+oioj.net
oishi-tm.com
oiwas.com
oiz611.com
@@ -70435,7 +70764,6 @@ ok1616.com
ok165.com
ok168.com
ok183.com
-ok202.cc
ok206.com
ok3w.net
ok619.com
@@ -70457,6 +70785,7 @@ okcard.com
okcdnns.com
okchang.com
okchexian.com
+okcxo.com
okdcc.com
okdd.net
okemu.com
@@ -70505,7 +70834,6 @@ okweb.info
okwuyou.com
okxr.com
okyueche.com
-okywqapp.com
ol-cdn.com
ol-img.com
olabo.net
@@ -70519,7 +70847,6 @@ oldcat.me
oldding.net
oldj.net
oldmanemu.net
-oldmanemu.org
oldmantvg.net
oldpan.me
ole-vod.com
@@ -70533,13 +70860,11 @@ olipharma.com
oliver.ren
oliveryang.net
ollomall.com
-olo-home.com
olo4.com
olokitchen.com
oltfm.com
olxd.com
olympicmuseum-nj.org
-olympuschina.com
olymtech.com
olymvax.com
olys88.com
@@ -70562,7 +70887,6 @@ omicshare.com
omicshare.net
omifanyi.com
omigr.com
-omini-shield.com
omlzx.com
omlzz.com
ommoo.com
@@ -70625,6 +70949,7 @@ oneitfarm.com
oneiwff.com
onekey.cc
onekeyghost.com
+onekeyrom.com
oneleafchina.com
onelic.work
onelife-love.com
@@ -70655,6 +70980,7 @@ onethingtech.net
onetop.net
onetts.com
onev.cat
+onevcat.com
oneway.mobi
onewedesign.com
onewo.com
@@ -70670,11 +70996,13 @@ onezapp.com
onezh.com
onfun.net
ongoalconveying.com
+ongoaltech.com
onijiang.com
onishi-cn.com
onixhiend.com
onjobedu.com
onkocares.com
+onlady.net
online-cmcc.net
online-edu.org
online-phaidon.shop
@@ -70684,6 +71012,7 @@ onlinedown.net
onlinekr.com
onlinenic.net
onlinesjtu.com
+onlinesurvey.work
onlinexijiang.com
onlly.com
onloon.net
@@ -70707,6 +71036,7 @@ onlywem.com
onnets1.xyz
ono-bbb.com
onochem.com
+onrunningshop.com
onsiteclub.com
ontall.com
ontheroadstore.com
@@ -70742,7 +71072,6 @@ oooccc.com
ooofoo.com
ooogo.com
ooojogo.com
-ooomba.com
ooomm.com
ooooai.com
oooooooooo213.com
@@ -70790,7 +71119,6 @@ openasic.org
openatom.club
openbayes.com
openbcs.com
-openbitfun.com
opencas.org
opencitybrain.org
opencloudgpt.online
@@ -70803,7 +71131,6 @@ openedv.com
openerp.hk
openeuler.org
openeuler.sh
-openevai.com
openew.com
openfans.org
openfde.com
@@ -70840,9 +71167,10 @@ openrtbadx.com
opensoce.com
opensplendid.com
openssw.com
+openswap.space
opentrust.net
+openuc.com
openvela.com
-openviking.net
openwbs.com
openwrt.ai
openwrt.pro
@@ -70852,7 +71180,6 @@ operachina.com
opfed.com
opfibre.com
opgw-oppc.com
-opinstallinit.com
opjmw1.ren
opkjh.com
oplay.net
@@ -70908,11 +71235,11 @@ orange-ci.net
orange2h.com
orangeapk.com
orangeclk.com
-orangeconnex.com
orangelovely.com
orangemum.com
orangenews.hk
orangepi.org
+orangesgame.com
orangetage.com
orangevip.com
oraper.com
@@ -70937,7 +71264,6 @@ ordosbank.com
ordosqyjt.com
ordostonghui.com
orebotech.com
-orence.net
organo-sz.com
orgcc.com
orggd.com
@@ -70978,7 +71304,6 @@ originsilicon.com
originwater.com
origloria.com
orihard.com
-orion34g.com
oriphant.com
oritive.com
oriza.com
@@ -71047,7 +71372,6 @@ ospchina.com
ospod.com
osportsmedia.com
ospp.com
-osr-tech.com
osredm.com
osrelease.download.prss.microsoft.com
oss-cn-beijing-aliyuncs.com
@@ -71091,7 +71415,6 @@ oubauneereid.com
oubiix.lol
ouchang.net
ouchengzl.com
-oucode.com
oudapay.com
oudas.tech
oudianyun.com
@@ -71116,6 +71439,7 @@ ouluyun.com
oulvnet.com
oumaan.com
oumakspt.com
+oume.cc
oumengke.com
ouming.com
oumoo.com
@@ -71144,6 +71468,7 @@ ourchem.com
ourcm.net
ourdian.com
ourdlbs.com
+ourdomains.com
ourdvs.com
ourdvs.info
ourdvsss.com
@@ -71229,6 +71554,7 @@ ouyingyimin.com
ouyizs.com
ouyu158.com
ouzhou.cc
+ouzhougoufang.com
ov5.org
ovalechina.com
ovaqrzcw.com
@@ -71289,8 +71615,8 @@ oyalee.com
oyewifi.com
oygteapq.com
oym56lm.com
-oyn01.cc
oyohyee.com
+oyonyou.com
oyoozo.com
oyospider.com
oyoumo.com
@@ -71303,7 +71629,9 @@ ozonabc.com
ozonbigsell.com
ozoninfo.com
ozouckzr.com
+ozsmartbuy.com
ozxw.com
+ozzair.org
ozzyad.com
p-an.com
p-dragon.com
@@ -71323,9 +71651,11 @@ p12345.com
p2cdn.com
p2hp.com
p2p001.com
+p2pcq.com
p2peye.com
p2peye.net
p2psearchers.com
+p3-china.com
p4pp.com
p555.cc
p5w.net
@@ -71361,11 +71691,13 @@ packty.com
pacmantwo.com
pacs-plus.com
pactera.com
+padao.org
padasuo.net
padddy.vip
paddlepaddle.org
paddlewaver.com
padh.net
+padns.com
padtf.com
paer.work
pafj.net
@@ -71387,7 +71719,6 @@ paiangmedical.com
paiangstudy.com
paibanxia.com
paibaohy.com
-paibo365.com
paichen.net
paichi.com
paicoding.com
@@ -71420,6 +71751,7 @@ paipianbang.com
pairmb.com
paishi.com
paitol.com
+paivideo.com
paiwan.com
paixiangxian.com
paixin.com
@@ -71473,6 +71805,7 @@ panaihua.com
panasiashipping.com
panasonic-door.com
panawincn.com
+panbaidu.net
panbrake.com
panchinasports.com
panchip.com
@@ -71485,6 +71818,7 @@ panda995.xyz
pandabus.cc
pandadairy.com
pandadastudio.com
+pandafoundation.org
pandagreen.com
pandahome.org
pandainc.cc
@@ -71492,6 +71826,7 @@ pandapaint.net
pandara.xyz
pandaremit.com
pandateacher.com
+pandatv.com
pandax.wiki
pandolia.net
panduoduo.net
@@ -71502,6 +71837,7 @@ pangcheng.com
pangdago.com
pangdasc.com
pangdly.com
+pangeng.vip
panggugu.com
panghuasheng.com
pangjun.com
@@ -71535,7 +71871,7 @@ pangxieke.com
pangyuan.com
panjiayuan.com
panjin.net
-panjue.com
+panjk.com
panku.cc
panlai.com
panlan.com
@@ -71570,7 +71906,6 @@ pansou.com
pansousuo.com
pantherhealthcare.com
pantonechina.com
-pantonecn.com
pantower.com
pantrysbest.com
pantuitui.com
@@ -71595,6 +71930,7 @@ paopao.com
paopaoche.net
paopaohd.com
paopaosz.com
+paoshuba.cc
paoshuba.org
paoxue.com
paozhengtong.com
@@ -71645,13 +71981,13 @@ paperyy.com
papocket.com
papuanewguineans.com
paquapp.com
-par656.com
parallelsras.com
paratera.com
parawikis.com
parduscycle.com
parentshk.com
paris-girafe.com
+parisblackpride.org
parkbees.com
parketech.com
parkicloud.com
@@ -71728,7 +72064,6 @@ paynews.net
paypaytech.com
pb89.com
pbaohza.com
-pbaohzc.com
pbc-dcep.com
pbcan.com
pbcft.com
@@ -71747,6 +72082,7 @@ pbtxt.com
pbyz.net
pc-120.com
pc.wiki
+pc02.com
pc028.com
pc120.com
pc15.net
@@ -71766,6 +72102,7 @@ pc768.com
pc89.com
pc8h.com
pc9.com
+pcapqz.com
pcasl.com
pcauto.com
pcb-hl.com
@@ -71786,6 +72123,7 @@ pcbtime.com
pccm88.com
pccpa.hk
pccppc.com
+pcdan.net
pcdn100.com
pcdog.com
pcdrv.com
@@ -71820,11 +72158,11 @@ pcscedu.com
pcsee.org
pcsfc.com
pcshou.com
+pcsjsm.com
pct86.com
pctutu.net
pctvx.com
pcw365.com
-pcwatch.com
pcwenti.com
pcwgu.com
pcwl.com
@@ -71884,6 +72222,7 @@ pdty123.com
pduoduo.vip
pdvc.com
pdvisa.com
+pdwxo.vip
pdxx.net
pdxxg.com
pdzls.com
@@ -71909,6 +72248,7 @@ pebellows.com
peccn.com
pechoin.com
pecmgd.com
+pecoo.com
pediatrixtherapeutics.com
pediy.com
pedli.com
@@ -71977,9 +72317,11 @@ pengke.com
penglei.name
pengliao.com
pengpailaw.com
+pengqi.club
pengqian.win
pengrl.com
pengrui-ssj.com
+pengshancy.com
pengtuzm.com
penguin-logistics.space
pengxinziyuan.com
@@ -72024,6 +72366,7 @@ perfectdiary.com
perfectlingo.com
perfecttradinghk.com
perfectwatchen.com
+perfertw.com
perfma.net
peropero.net
peroperogames.com
@@ -72038,6 +72381,7 @@ pesrmyy.com
pesyun.com
pet-mri.com
pet86.com
+petaindonesia.org
petalmail.com
petalmaps.com
petalsdata.com
@@ -72074,6 +72418,7 @@ pfmmedicalchina.com
pft12301.cc
pftianshanno.com
pfwx.com
+pfzhiliao.com
pg-leak.com
pg114.net
pg245348.cc
@@ -72140,12 +72485,14 @@ phicomm.com
philanthropy.xin
philipswechat.com
philisense.com
+philjang.work
phirda.com
phirs.com
phjqs.com
phjt.com
phlexing.com
phmacn.com
+phnamedns.com
phnixhome.com
phnixpool.com
pho.so
@@ -72199,7 +72546,6 @@ phpfs.com
phpha.com
phphub.org
phpjiami.com
-phpjoy.com
phpkaiyuancms.com
phplife.net
phpor.net
@@ -72212,7 +72558,6 @@ phpweb.net
phpweblog.net
phpxs.com
phpyun.com
-phqjsw.com
phsb.com
physicalclub.com
physike.com
@@ -72241,6 +72586,7 @@ piaobing.com
piaobuy.com
piaochong.com
piaocom.com
+piaode.ren
piaodian.net
piaododo.com
piaodown.com
@@ -72313,6 +72659,7 @@ pighaihe.com
pigji.com
pigmoral.tech
pigonline.org
+pigsty.cc
pigv5.com
pigx.vip
pigyun.com
@@ -72333,6 +72680,7 @@ pimaoji.com
pimax.com
pimei.com
pimgeek.com
+pimormebwf.com
pin-color.net
pin18pin.com
pin2eat.com
@@ -72342,6 +72690,7 @@ pinbang.com
pinbayun.com
pinble.com
pinble.net
+pincai.com
pinchain.com
pinchedashi.com
pincn.com
@@ -72386,6 +72735,7 @@ pingguobaoxiu.com
pingguodj.com
pingguolv.com
pinghe.com
+pinghu.tech
pinghui-cn.com
pingjiata.com
pingmudiy.com
@@ -72402,27 +72752,29 @@ pingshu365.com
pingshu8.com
pingshuku.com
pingshuocoal.com
+pingshuxiazai.com
pingstart.com
pinguan.com
pinguo.us
pingwest.com
+pingxiangzhifa.com
pingxiaow.com
pingxuan123.com
pingxx.com
pingyin.cc
pingzicloud.com
-pingzicloudcdn.com
pingzishuo.com
pinhaohuo.com
pinhui001.com
-pinhxd.com
pinidea.co
pinjiago.com
pinjiao.com
pinjiaolian.com
+pinjie.cc
pinjieqicai.com
pinjiesj.com
pinkecity.com
+pinkehao.com
pinkertech.com
pinkoichina.com
pinkou.com
@@ -72434,6 +72786,7 @@ pinmuch.com
pinocchiowb.com
pinpai-bang.com
pinpai1.com
+pinpai37.com
pinpaihuoyuan.com
pinpailiu.com
pinpaime.com
@@ -72442,7 +72795,6 @@ pinpopt.site
pinqugongxiangktv.com
pinqukeji.com
pinshu.com
-pinshuxsw.com
pinsuodesign.com
pintangshi.com
pintechpharma.com
@@ -72450,6 +72802,7 @@ pintreel.com
pintu360.com
pintuan.com
pintuanya.com
+pintuer.com
pintuju.com
pintuxiu.net
pinuc.com
@@ -72468,6 +72821,7 @@ pioneer-pharma.com
pioneer-pku.com
pioneerchina.com
pioneerep.com
+pioneernews.cc
pipa.com
pipacoding.com
pipahealth.com
@@ -72506,6 +72860,7 @@ pixiaojiang.com
pixivic.com
pixpark.net
piyanzi.com
+piyipiba.com
pj-666.com
pj-road.com
pj.com
@@ -72521,6 +72876,7 @@ pjf.name
pjgear.com
pjhome.net
pjhubs.com
+pjjyzx.com
pjob.net
pjtime.com
pjtka.com
@@ -72537,7 +72893,6 @@ pkcity.com
pkfish.com
pkfj.xyz
pkfun.com
-pkfwealth.com
pkgame.com
pkghund.com
pkgklk.com
@@ -72614,7 +72969,6 @@ playchd.com
playcomet.jp
playcool.com
playcrab.com
-playdeltaforce.com
playerinfinite.com
playfifa.com
playgm.cc
@@ -72636,12 +72990,12 @@ plcjs.com
plcloud.com
plctlab.com
plentypolymer.com
+pleo-securelogin.com
plesk-cn.com
plex2.com
plexpt.com
plfrog.com
plll-fluid.com
-plnav.com
plob.org
plopco.com
plottersyservicioshdz.com
@@ -72729,11 +73083,13 @@ po.co
po7ryumvkx34.com
pobaby.net
pobasoft.com
+pochezu.com
pocketcloud.vip
pocketdigi.com
pocketuni.net
pockpower.com
pocomagnetic.com
+pocosite.com
pocsuite.org
podcast.xyz
podfest.tech
@@ -72744,6 +73100,7 @@ poem88.com
poemlife.com
poemschina.com
pofang.com
+pohaier.com
pohover.com
poikm.com
point-memory.com
@@ -72825,6 +73182,7 @@ popkart.tv
popkx.com
poploli.com
popmart.com
+popmartfans.cc
popoffices.com
popoho.com
popoim.com
@@ -72866,14 +73224,17 @@ posmcc.com
posn.net
pospalit.com
pospos.com
+post-delivered.today
post163.com
post183.net
postarlight.com
+postdelivered.today
posterlabs.com
postgres.fun
postgresqlchina.com
postjson.com
postpony.com
+postxin.com
posyn.com
poszjia.com
potalapalace.com
@@ -72886,11 +73247,11 @@ potomaccottage.com
potops.com
potplayercn.com
pouchcontainer.io
+pouquiagievu.com
pouser.net
pova-elc.com
power-rail.com
power-sprayer.com
-power-z.com
power86.com
power8t.com
powerapp.io
@@ -72906,7 +73267,6 @@ powerchinayun.com
powercx.com
powerde.com
powereasy.net
-poweremarket.com
powerex1.com
powerflow-tech.com
powerfulchina.com
@@ -72973,6 +73333,7 @@ ppgg.in
ppgmm.com
ppgslb.com
pphimalayanrt.com
+pphqq.com
ppia-china.com
ppinfra.com
ppio.cloud
@@ -73016,14 +73377,13 @@ ppsurl.com
ppsz.net
ppt118.com
ppt20.com
-ppt28.com
ppt360.com
ppt920.com
pptair.com
pptbest.com
pptelf.com
ppter8.com
-pptgenius.com
+ppthi-hoo.com
pptianliao.com
pptiyu.com
pptkj.net
@@ -73066,7 +73426,6 @@ pqdtcn.com
pqpo.me
pqt-bearing.com
pqtygsfkv.com
-pqxz.com
pqyhigh.com
pqylow.com
pqymiddle.com
@@ -73112,7 +73471,6 @@ printerwhy.net
printhome.com
printidea.art
printlake.com
-prism-news.com
privateapi.xyz
privatess.win
privspace.net
@@ -73200,7 +73558,7 @@ psd8.com
psdee.com
psdiv.com
pse-meti.com
-psf0404.shop
+psfjz.com
psjdhhnkjahbn.cfd
psjia.com
psjxty.com
@@ -73224,10 +73582,10 @@ psyzg.com
psznh.com
pszwatch.com
pszx.com
+pszxw.net
pt-link.com
pt597.com
pt80.net
-pt8866.xyz
pt963.com
pt97.com
ptacn.com
@@ -73248,6 +73606,7 @@ pthxuexi.com
pthxx.com
pthxxw.com
ptimg.org
+pting.club
ptkckj.com
ptkill.com
ptmind.com
@@ -73262,14 +73621,12 @@ pts-ai-texture.com
pts-testing.com
pts.games
ptshare.org
-ptsyy.com
ptszgh.org
ptteng.com
ptwbs.net
ptweixin.com
ptx123.com
ptxie.com
-ptxw.com
ptxyrcw.com
ptxz.com
ptyg.com
@@ -73293,18 +73650,19 @@ pubghelper.com
pubgkam.com
pubgtool.com
pubgzh-cn.vip
+public6.com
publiccms.com
publicdns.cc
pubmed007.com
pubmedplus.com
pubone.cc
-pubsub.tech
pubtian.com
pubukeji.com
pubwinol.com
pubyun.com
pubyun.net
pubyun.org
+pucijiankang.com
pudetouzi.com
pudie.net
pudijt.com
@@ -73335,6 +73693,7 @@ pujie.com
pujingjt888.com
pujiugame.com
pukinte.com
+pule.com
pulinmed.com
pulisi.com
pulixingfu.com
@@ -73349,7 +73708,6 @@ punaide.com
punanhospital.com
punchbox.info
pungboo.com
-puno-filter.com
puoke.com
puoraiatorcubt.icu
puppetchina.com
@@ -73416,7 +73774,6 @@ puworld.com
puxiang.com
puxindesign.com
puxun.co
-puyasemi.com
puyideshiye.com
puyimed.com
puyuan-electric.com
@@ -73434,11 +73791,12 @@ pw-partners.com
pw1999.com
pw88.com
pwand.com
-pwccn.com
pwcinema.com
pwdding.icu
pwithe.com
+pwjptdg.xyz
pwjt.com
+pwkyyb.com
pwmat.com
pwmqr.com
pwns.fun
@@ -73457,13 +73815,12 @@ px5a.com
pxb7.com
pxbgp.com
pxc33.com
+pxcn168.com
pxcoex.com
pxdier.net
pxemba.com
pxene.com
pxhuiben.com
-pxhvc.com
-pxlmxx.com
pxrczpw.com
pxsfybjy.com
pxsrmyy.com
@@ -73506,7 +73863,6 @@ pymeng.com
pymh.com
pyneo.com
pyou.com
-pyrc.net
pyshszh.com
pystar.com
pyt2021.com
@@ -73549,7 +73905,6 @@ pzhl.net
pzhol.com
pzhqz.com
pzhr.com
-pzhsz.com
pzhwater.com
pzhwyw.com
pzjdimg.com
@@ -73562,7 +73917,6 @@ pznsh.com
pzoom.com
pzpu.com
pzzc.net
-pzzgsj.com
pzzx.com
q-alumni.com
q-bakery.com
@@ -73584,17 +73938,18 @@ q6c.com
q6haqi.com
q6u.com
q77777777.com
+q83v5haaz.com
q88b.net
q88c.net
q96bq8m39p.world
qa114.com
qacctv.com
qacn.net
-qagdxs.com
qakkan.vip
qalex.com
qamemc.com
qapi.cc
+qaqa555.com
qaros.com
qast.com
qaxanyu.com
@@ -73605,6 +73960,7 @@ qaynak.com
qazasd.com
qazdsa.com
qazso.com
+qazxsdc.com
qbangmang.com
qbaobei.com
qbb6.com
@@ -73688,6 +74044,7 @@ qcly.love
qcly.xyz
qcmgkids.com
qcmoe.com
+qcmrjx.com
qcmuzhi.com
qcoco.com
qconbeijing.com
@@ -73695,6 +74052,7 @@ qconshanghai.com
qcplay.com
qcq3.com
qcql.com
+qcr.cc
qcrencai.com
qcrlvip.com
qcrqll.com
@@ -73807,6 +74165,7 @@ qdmcxh.com
qdmm.com
qdmswx.com
qdnsyh.com
+qdnxsyy.com
qdnzrmyy.com
qdpdjx.com
qdport.com
@@ -73815,6 +74174,7 @@ qdqihang.com
qdqs.com
qdrcsc.com
qdreads.com
+qdsay.com
qdsbx.com
qdsdeyljt.com
qdsdyjt.com
@@ -73825,6 +74185,7 @@ qdslcs.com
qdsmjxh.com
qdspr.com
qdsrmyy.com
+qdsysj.com
qdsyxh.com
qdtaide.com
qdtech.ai
@@ -73892,8 +74253,6 @@ qfedu.com
qfeiche.com
qfiee.com
qfihdr.com
-qfkjnb.club
-qflyinc.com
qfns1.com
qfpay.com
qfpq.com
@@ -73963,6 +74322,7 @@ qhdatongnews.com
qhdcm.com
qhderwei.com
qhdgjj.com
+qhdglc.com
qhdjgyy.com
qhdlcdn.com
qhdnews.com
@@ -74013,10 +74373,12 @@ qhsat.com
qhsdzs.com
qhsetup.com
qhsklw.com
+qhsrmyy.com
qhssyy.com
qhstatic.com
qhsxf.net
qhtdow.help
+qhtf-china.com
qhtibetan.com
qhtui.com
qhtycp.com
@@ -74050,12 +74412,15 @@ qialol.com
qian-gua.com
qian-lai.com
qian.lu
+qianaolawyer.com
qianbao.com
qianbaocard.com
qianbaogroup.com
qianbaohr.com
qianbi360.com
+qianbianapi.com
qianbianma.com
+qianbianxiazai.com
qiancangwms.com
qiancha.cc
qianchengriben.com
@@ -74079,7 +74444,6 @@ qianfan365.com
qianfanwanmu.com
qianfanyun.com
qianfeng.com
-qiangang.icu
qiangbus.com
qiangchuan.com
qiangfu.xyz
@@ -74172,7 +74536,6 @@ qianvisa.com
qianwa.com
qianwanku.com
qianwen.com
-qianwenai.com
qianxiangbank.com
qianxibj.net
qianximiye.com
@@ -74186,7 +74549,6 @@ qianxuecloud.com
qianxuew.com
qianxueyunke.com
qianxun.com
-qianxun1688.com
qianxunclub.com
qianxungroup.com
qianxuntrip.com
@@ -74272,6 +74634,7 @@ qicheedu.com
qichegeyin.com
qichehot.com
qichejingwei.com
+qichelian.com
qicheliliang.com
qichemen.com
qichemoxing.net
@@ -74282,6 +74645,7 @@ qicheq.com
qichequan.net
qichetong.com
qichexin.com
+qichezhan.net
qichuang.com
qichunfdc.com
qichunzp.com
@@ -74304,7 +74668,6 @@ qidianmm.com
qidianpw.com
qidiantu.com
qidic.com
-qiding.xin
qidisheng.com
qidiwang.com
qidong.name
@@ -74341,6 +74704,7 @@ qifeng-safety.com
qifeng.com
qifenxiao.com
qifu.me
+qifub.com
qifuip.com
qigonggate.com
qigongworld.net
@@ -74395,6 +74759,7 @@ qikegu.com
qikekeji.com
qikoo.com
qikouu.com
+qikqiak.com
qiku.com
qikuaibao.com
qikucdn.com
@@ -74421,6 +74786,7 @@ qilongyoule.com
qilu-pharma.com
qiludb.com
qiluhospital.com
+qiluhr.com
qilupaint.com
qiluyidian.mobi
qiluyidian.net
@@ -74442,15 +74808,14 @@ qiminzi.com
qimodesign.com
qimser.com
qimu86.com
-qimyu.com
qinbei.com
qinbing.com
qincai.com
qincaigame.com
-qince.com
qinchuan.com
qinchugudao.com
qinco.net
+qindaohotel.com
qinde.net
qineasy.com
qinengdongfang.com
@@ -74516,10 +74881,10 @@ qinghedaxue.com
qinghua.cc
qinghua2017.com
qinghuan.com
+qinghuaonline.com
qinghuaxuezi.com
qinghuo.net
qingicon.com
-qingjiansoft.com
qingjiaocloud.com
qingju.com
qingkai.net
@@ -74546,17 +74911,18 @@ qinglinong.com
qinglm.com
qinglue.com
qinglue.net
+qingly.ink
qingmail.com
qingmayun.com
qingmei.me
qingmh.com
-qingmings.com
qingmo.com
qingmob.com
qingmucdn.com
qingmuit.com
qingmutec.com
qingmuxinli.com
+qingnianlvxing.com
qingniantuzhai.com
qingnianwang.com
qingning88.com
@@ -74568,6 +74934,7 @@ qingqin.com
qingqingmedia.com
qingqj.com
qingque.co
+qingqujie.com
qingquyp.com
qingr.com
qingrenw.com
@@ -74579,6 +74946,7 @@ qingshou.online
qingshow.net
qingshuo.com
qingshuxuetang.com
+qingsongcdn.com
qingsongchou.com
qingsongjituan.com
qingsonngxx.com
@@ -74599,6 +74967,7 @@ qingtingjh.com
qinguanjia.com
qingui123.com
qinguoag.com
+qingwabs.com
qingwk.com
qingxianrenminyiyuan.com
qingxiaoyun.com
@@ -74678,6 +75047,7 @@ qinxue.com
qinxue100.com
qinxue365.com
qinxuye.me
+qinyangtv.com
qinyuanyang.com
qinyukehuan.com
qinzhe.com
@@ -74766,7 +75136,6 @@ qiushu.cc
qiushu.info
qiushubang.com
qiushuzw.com
-qiusu.com
qiutan.com
qiutiangear.com
qiuvps.com
@@ -74780,7 +75149,6 @@ qiuxue360.com
qiuxueshe.com
qiuyewang.com
qiuyexitong.com
-qiuyl.com
qiuyueli.com
qiuzhang.com
qiuzhijiangtang.com
@@ -74809,6 +75177,7 @@ qixinworks.com
qixiu88.com
qixiushouce.com
qixoo.com
+qixuan888.com
qixuny.com
qiye.la
qiye163.com
@@ -74847,6 +75216,7 @@ qiyuanai.com
qiyuange.com
qiyuanxuetang.net
qiyucloud.com
+qiyue.com
qiyuebio.com
qiyuesuo.com
qiyujiasu.com
@@ -74893,7 +75263,6 @@ qjis.com
qjjfin.com
qjjmw.com
qjmotor.com
-qjmotorlink.com
qjnice.com
qjrc.com
qjren.com
@@ -74907,7 +75276,6 @@ qjwenming.com
qjwh.xyz
qjwhzs.com
qjxgold.com
-qjxns.com
qjystang.com
qjzl.com
qjzyy.com
@@ -74971,7 +75339,6 @@ qlwyjy.com
qlxiaozhan.com
qlxyedu.com
qlydw.com
-qlyfhdns.com
qlyjt.com
qlyygl.com
qlyyqd.com
@@ -75000,6 +75367,7 @@ qmht.com
qmht.mobi
qmjianli.com
qmniu.com
+qmoji.net
qmqm.net
qmrms.com
qmsea.com
@@ -75070,6 +75438,7 @@ qp110.com
qp46.com
qp49.com
qpaimg.com
+qpb187.com
qpdca.com
qpdiy.com
qpgame.com
@@ -75108,6 +75477,7 @@ qq3366.net
qq499.com
qq5.com
qq52o.me
+qq5818.com
qq620.com
qq7c.com
qq933.com
@@ -75119,6 +75489,7 @@ qqan.com
qqb.pub
qqbiaoqing.com
qqbibile.com
+qqbizhi.com
qqbrowser.mobi
qqcdn.com
qqcfw.net
@@ -75132,6 +75503,7 @@ qqdiannao.com
qqdna.com
qqdr.com
qqdzzb.win
+qqe2.com
qqeml.com
qqeo.com
qqexmail.net
@@ -75161,6 +75533,7 @@ qqhubei.com
qqimage.net
qqimg.net
qqjapan.com
+qqje.com
qqjia.com
qqjjsj.com
qqjm.com
@@ -75187,10 +75560,12 @@ qqpharm.com
qqpifu.com
qqplusapp.com
qqpuke.org
+qqq.tv
qqq937.com
qqqiyemail.com
qqqiyeyouxiang.com
qqqmmm.com
+qqqv.press
qqrain.com
qqread.com
qqrizhi.com
@@ -75366,6 +75741,7 @@ qtlgslbcn.com
qtlgslbcn.info
qtlgslbcn.net
qtmojo.com
+qto-pay.com
qtonghua.com
qtool.net
qtrun.com
@@ -75383,7 +75759,6 @@ qtvnews.com
qtw555.com
qtx.com
qtyd.com
-qtyl001.com
qu2000.com
qu2345.com
qu247.com
@@ -75746,7 +76121,6 @@ qufutuan.com
qugame.com
quguonet.com
quhaidiao.com
-quhaotui.com
quheqihuo.com
quhua.com
quhuaxue.com
@@ -75766,14 +76140,15 @@ quickjoy.com
quicklaser.com
quicklyopen.com
quickpark.cc
-quickqnet.com
quicksdk.com
quicksdk.net
quickswan.com
quicktvui.com
quickwis.com
+quiksx.cfd
quilimen.com
quimg.com
+quji.com
qujiangyizhong.com
qujie365.com
qujingm.com
@@ -75790,6 +76165,7 @@ qukuai.com
qukuaila.com
qulaoshi.com
qule8.com
+quledu.net
qulianaiba.com
qulishi.com
quluying.com
@@ -75857,6 +76233,7 @@ ququyou.com
quqxphdm.com
qushixi.net
qushoumiao.com
+qushuba.com
qushuiying.net
qutaiwan.com
qutanme.com
@@ -75879,6 +76256,7 @@ quumii.com
quvisa.com
quwan.com
quwangming.com
+quweiwu.com
quwenqing.com
quwentxw.com
quwj.com
@@ -75894,7 +76272,6 @@ quxingdong.com
quxintiaodong.com
quxiu.com
quxuan.com
-quxuanshu.com
quyangyizhong.com
quyaoya.com
quyibao.com
@@ -75918,7 +76295,6 @@ qvpublish.com
qvxz.com
qw5599.com
qwbk.cc
-qwdjapp.com
qwe1e.com
qweapi.com
qweather.com
@@ -75976,6 +76352,7 @@ qxhqxh.com
qxioqq4283.vip
qxiu.com
qxjeff.com
+qxka.com
qxkjz.com
qxkp.net
qxlib.com
@@ -75992,6 +76369,7 @@ qxqxa.com
qxrcw.com
qxsdq.com
qxsfjq.com
+qxshucai.com
qxswk.com
qxteacher.com
qxtour.com
@@ -76023,12 +76401,15 @@ qy57.com
qy6.com
qyaninfo.com
qybc.com
+qybhl.com
qyc2008.com
qycn.com
qycn.net
qycname.com
qycylinder.com
+qyd-rf.com
qydimg.com
+qydqw.com
qydsj.com
qyer.com
qyerstatic.com
@@ -76041,6 +76422,7 @@ qygbet140.vip
qygbet381.vip
qygbet427.vip
qygjyey.com
+qyglzz.com
qyhgsb.com
qyhl.vip
qyhr.org
@@ -76060,6 +76442,8 @@ qyrcrs.com
qyrx.cc
qysbj.com
qysd.net
+qysgf.com
+qysport.com
qysrmyy.com
qyssgame.com
qysulian.com
@@ -76084,7 +76468,6 @@ qyxa-tencentclb.net
qyxa-tencentclb.work
qyxxpd.com
qyxzfw.com
-qyy888.com
qyyt.com
qyzba.club
qyzc.net
@@ -76157,13 +76540,12 @@ qznovelvod.com
qznxt.com
qzone.cc
qzone.com
-qzone6.com
qzoneapp.com
qzonei.com
qzqcfw.com
qzqcw.com
-qzqi.com
qzqn8.com
+qzqstudio.com
qzqxd.com
qzqxw.com
qzrbx.com
@@ -76177,6 +76559,7 @@ qzsgyxx.com
qzshangwu.com
qzshly.com
qzsmxx.com
+qzsqsnhdzx.com
qzssdy.com
qzsx168.com
qzsystem.com
@@ -76184,7 +76567,7 @@ qzsyy.com
qzt520.com
qztc.vip
qztingche.com
-qztpay.com
+qztour.com
qztszls.com
qztvxwgj.com
qzwb.com
@@ -76200,7 +76583,6 @@ qzyun.net
qzyz.com
qzzdtc.com
qzze.com
-qzzgame.com
qzzgdl.com
qzzhedu.com
qzzhonghan.com
@@ -76242,6 +76624,7 @@ rabbitbbs.com
rabbitpre.com
rabbitpre.me
rabbitserve.com
+rabook.com
rabschina.com
race604.com
racent.com
@@ -76258,6 +76641,7 @@ radida.com
radio1964.com
radio366.com
radiotj.com
+radiowar.org
radissoncollection-wuxi.com
radius-america.com
radleybagssaleuk.org
@@ -76333,7 +76717,6 @@ ranqibiao.net
rantu.com
ranwen.net
ranwen.org
-ranwen.tw
ranwena.com
ranxi.net
ranyangrent.com
@@ -76355,12 +76738,12 @@ rashost.com
rastargame.com
rat3c.com
rate2003.com
-ratetend.com
rationalwh.com
ratogh.com
ratoo.net
rauqa.net
rauto.com
+ravenna0943.xyz
raverstern.site
rawanfa.com
rawchen.com
@@ -76402,7 +76785,6 @@ raylink.live
raymage.com
raymx-micro.com
raynext.info
-rayootech.com
rayoptek.com
rayp.com
rayps.com
@@ -76467,6 +76849,7 @@ rcmxw.com
rcnep.com
rcolab.com
rcpx.cc
+rcswo.com
rcsxzx.com
rcunxyn.com
rcuts.com
@@ -76511,6 +76894,7 @@ rdyjs.com
rdzjw.com
rdzs.com
rdzx.net
+rdzy.net
reabam.com
reach-biology.com
reachace.com
@@ -76620,7 +77004,6 @@ redidc.com
redisfans.com
redmagic.com
redmart.com
-redmid.com
redmou.com
rednetdns.com
rednote.com
@@ -76637,6 +77020,7 @@ redq.cc
redraingame.com
redrcd.com
redream.com
+redredsquare.com
redsea888.com
redsh.com
redshu.com
@@ -76659,6 +77043,7 @@ reeiss.com
reeji.com
reenoo.com
reenoo.net
+refined-x.com
refineidea.com
refire.com
refond.com
@@ -76741,6 +77126,7 @@ renfei.net
renfutm.com
renguokeji.com
renhaocw.com
+renhebusiness.com
renhence.com
renhuaicode.com
renji.com
@@ -76836,6 +77222,7 @@ reservehemu.com
resheji.com
resistor.today
resnics.com
+resnowshop.com
resona-wujl.com
resone-shinab.com
resowolf.com
@@ -76857,6 +77244,7 @@ revefrance.com
revenuads.com
reviosky.com
revolut.ltd
+revolutwebapp.com
rew65.com
rewanyouxi.com
reworlder.com
@@ -76885,6 +77273,7 @@ rfhhzx.com
rfid-e.com
rfidcardcube.com
rfidfans.com
+rfidnfk.com
rfidtech.cc
rfilter.com
rfjd.com
@@ -76919,16 +77308,15 @@ rheemchina.com
rhexe.com
rhhz.net
rhine-inc.com
-rhino.auto
rhinosgamestwhk.com
rhinoxky.com
rhjoyhotel.org
rhkj.com
rhky.com
rhnewmaterials.com
+rhoadshomebuyers.com
rhonghai.com
rhphos.com
-rhrlawyer.com
rhsj520.com
rhspring.com
rhtimes.com
@@ -76983,6 +77371,7 @@ rightknights.com
rightpaddle.com
rigol.com
rigouwang.com
+riji001.com
riji100zi.com
rijigu.com
rijiwang.com
@@ -77064,6 +77453,7 @@ rizhili.com
rizhiyi.com
rizhuti.com
rj.link
+rj.net
rj668.com
rjaaa.com
rjdownd.com
@@ -77079,7 +77469,6 @@ rjlqq.com
rjoy.com
rjpharm.com
rjpharma.com
-rjqcfw.com
rjreducer.com
rjs.com
rjsjmbwx.com
@@ -77104,6 +77493,7 @@ rklive888.com
rksec.com
rkzxhyy.com
rl-consult.com
+rl1vypwyd2.com
rlair.net
rljydt.com
rlkj.com
@@ -77129,8 +77519,6 @@ rmejk.com
rmhospital.com
rmjiaju.com
rmjtxw.com
-rmk6.com
-rmlinking.com
rmny.tech
rmrbwc.com
rmrun.com
@@ -77155,7 +77543,6 @@ rnmachine.com
rnote.com
ro50.com
road-group.com
-roaderp.com
roadhb.com
roadjava.com
roadlady.com
@@ -77271,6 +77658,7 @@ ronghub.com
ronghuiad.com
ronghuisign.com
rongji.com
+rongjiagroup.com
rongkang.com
rongkao.com
rongkeyiyuan.com
@@ -77334,11 +77722,11 @@ rosecmsc.com
rosedata.com
rosefinchfund.com
rosesandgold.fun
-roseshop.asia
rosewin.com
rosin-china.com
rosirs-edu.com
rosnas.com
+rosoo.net
rossoarts.com
rossoarts.net
rossopharm.com
@@ -77398,6 +77786,7 @@ rqyy.com
rqyz.com
rr-sc.com
rr365.com
+rrajz.com
rrb365.com
rrbay.com
rrbus.com
@@ -77418,7 +77807,6 @@ rrrdai.com
rrrrdaimao.com
rrrxz.com
rrs.com
-rrsp.app
rrsurg.com
rrswl.com
rrting.net
@@ -77488,6 +77876,7 @@ rtahengtai.com
rtalink.com
rtb5.com
rtbasia.com
+rtbbox.com
rtbmax.com
rtbpb.com
rtbtmc.com
@@ -77621,7 +78010,6 @@ ruijiehuanbao.com
ruijienetworks.com
ruijiery.com
ruijieyun.com
-ruijingenergy.com
ruijinginfo.com
ruijinintl.com
ruijinyy.com
@@ -77640,6 +78028,7 @@ ruishengseal.com
ruisilc.com
ruisizt.com
ruisong.tv
+ruit56.com
ruitairt.com
ruite-tec.com
ruitengmaoyi.com
@@ -77651,6 +78040,7 @@ ruiwant.com
ruiwen.com
ruiwenruanjian.com
ruixhz.com
+ruixiangbest.com
ruixin-eht.com
ruixing.cc
ruixueys.com
@@ -77763,7 +78153,9 @@ rushiwowen.org
rushmail.com
rushui.net
russellluo.com
+rustc.cloud
rustfisher.com
+rustfs.com
rustvnt.com
rutbr.com
ruthout.com
@@ -77802,11 +78194,13 @@ rwdls.com
rwjiankang.com
rwjtgc.com
rwkv.com
+rwosf.space
rwsignal.com
rwtext.com
rwxqfbj.com
rwys.com
rx-copper.com
+rx-semi.com
rxbj.com
rxcrs.com
rxftw.com
@@ -77872,7 +78266,6 @@ rzfdc.com
rzfyu.com
rzglgc.com
rzhr.com
-rzhuce.com
rzhushou.com
rzhybh.com
rzkj999.com
@@ -77896,6 +78289,7 @@ s-famed.com
s-jl.com
s-ns.com
s-pia.org
+s-q-s.net
s-reader.com
s-ss.cc
s-tech.com
@@ -77911,10 +78305,11 @@ s10000.com
s135.com
s163.com
s1979.com
+s1blsecgerto.com
+s1blseclvira.com
s1craft.com
s1mple.cc
s1mplecode.com
-s1ths95f1r.cc
s2ceda.com
s2cinc.com
s2g2b2c.com
@@ -77948,7 +78343,6 @@ sa96.com
saaas.com
saagasports.com
saasddos.com
-saaslb.com
saasops.tech
saasruanjian.com
saasta.net
@@ -77967,6 +78361,7 @@ saegedu.com
saen.com
saf158.com
safbon.com
+safdsafea.com
safeb2b.com
safecenter.com
safeglp.com
@@ -78060,6 +78455,7 @@ sakway.com
saky.site
salabs.org
saladvideo.com
+salamatcharity.org
salasolo.com
sale8.com
saleenauto.com
@@ -78219,6 +78615,7 @@ sanqiu.org
sanquan.com
sanrangas.com
sanrengxin.com
+sanrenwenku.com
sanritzgroup.com
sansancloud.com
sansg.com
@@ -78257,7 +78654,6 @@ sanxige.com
sanxin-med.com
sanxinbook.com
sanxing.com
-sanxingelectric.com
sanxinwin.com
sanyaairport.com
sanyachloe.com
@@ -78276,7 +78672,6 @@ sanygroup.com
sanyhi.com
sanyichemical.com
sanyipos.com
-sanykj.com
sanyouco.com
sanyoumed.com
sanyoutj.com
@@ -78304,6 +78699,7 @@ saolei123.com
saolife.com
saomadc.com
saomadiancan.com
+saoniuhuo.com
saoshu.org
saoso.com
saowen.net
@@ -78320,10 +78716,10 @@ sass.hk
sasscss.com
sasseur.com
sasseur1989.com
+sassi2956.xyz
sast.fun
sast.net
sat0.net
-satellitestress.st
satgssb.com
sating-tech.com
sator.tech
@@ -78334,6 +78730,7 @@ saturnbird.com
saublenew.com
savilehotelgroup.com
savokiss.com
+savouer.com
sawenow.com
sawuatsurgical.com
saxydc.com
@@ -78346,6 +78743,7 @@ sayodevice.com
saywash.com
sayyas.com
sazeoq8158.vip
+sb1secapply4.com
sbc-mcc.com
sbf56.com
sbh15.com
@@ -78355,6 +78753,9 @@ sbjd88.com
sbjxyq.com
sbk-h5.com
sbkh5.com
+sblseceorf.com
+sblsechuorb3.net
+sblsecorgan.com
sbmscs.com
sbnkca.com
sbnkjl.com
@@ -78409,6 +78810,7 @@ scarclinic-cn.com
scardtech.com
scatc.net
scavc.com
+scbaidu.com
scbaijia.com
scbao.com
scbaopo.org
@@ -78447,7 +78849,6 @@ scdanzhao.net
scdbzzw.com
scdccb.com
scdcs.net
-scdn.cyou
scdn.im
scdn.io
scdn0077.com
@@ -78589,7 +78990,6 @@ scemrq.com
scengine.com
scenictc.com
scensmart.com
-scetc.net
scetop.com
scezju.com
scflcp.com
@@ -78646,6 +79046,7 @@ scianet.org
sciasc.com
scichina.com
scicn.net
+scidict.org
sciecure.com
sciedu.org
sciencecity.net
@@ -78712,6 +79113,7 @@ sclrjc.com
sclsnk.com
sclssz.com
sclsyz.com
+sclvb.com
sclyxw.com
sclzfq.com
scm121.com
@@ -78747,7 +79149,6 @@ scpgj.com
scpgroup.com
scpidi.com
scpolicec.com
-scqbyy.com
scqckypw.com
scqcp.com
scqjxh.com
@@ -78803,6 +79204,7 @@ sctgo.com
sctindustries.com
sctobacco.com
sctodr.com
+sctszh.com
scttwy.com
sctv-tf.com
sctv.com
@@ -78820,6 +79222,7 @@ scujj.com
scunionpay.com
scusec.org
scutech.com
+scutedu.org
scuvc.com
scw98.com
scwhx.com
@@ -78827,7 +79230,6 @@ scwj.net
scwlylqx.com
scwmwl.com
scwqxh.com
-scwsrc.com
scwy.net
scwyzx.com
scxd56.net
@@ -78843,7 +79245,6 @@ scych.org
scyesz.com
scylzx.net
scymob.com
-scyol.com
scyongqin.com
scyqfhw.com
scyqjs.com
@@ -78921,6 +79322,7 @@ sdcbcnc.com
sdccg.com
sdcclh.com
sdcfdq.net
+sdcgc.com
sdchelv.com
sdchem.net
sdcheshi.com
@@ -79018,7 +79420,6 @@ sdgykg.com
sdgyslfz.com
sdgzkg.com
sdhack.com
-sdhaike.com
sdhbcl.com
sdhdssd.com
sdhead.com
@@ -79064,6 +79465,7 @@ sdicin.com
sdicpower.com
sdicqzdefd.com
sdictktrust.com
+sdictrade.com
sdicvc.com
sdigc.com
sdiitu.com
@@ -79103,9 +79505,9 @@ sdjxgj.com
sdjys.org
sdjzgt.com
sdjzsemi.com
-sdkairun.com
sdkamaiduo.com
sdkbalance.com
+sdkclick.com
sdkdch.com
sdkeli.com
sdkjjt.com
@@ -79172,6 +79574,7 @@ sdpea.org
sdpku.com
sdplt.com
sdptem.com
+sdpua.com
sdpxyq.com
sdqcgs.com
sdqcpc.com
@@ -79211,7 +79614,6 @@ sdsenrong.com
sdseshealth.com
sdsfjy.com
sdshangya.com
-sdshdc.com
sdshgk.com
sdshihua.com
sdshitu.com
@@ -79250,7 +79652,6 @@ sdtdfz.com
sdteleiptv.com
sdteya.com
sdtianjing.com
-sdticai.com
sdtkgl.com
sdtlpm.com
sdtlyyjt.com
@@ -79343,7 +79744,6 @@ sdzpw.com
sdzpw.net
sdzrm.com
sdzs.com
-sdzs001.com
sdzsyl.com
sdztkj.com
sdztxxkj.com
@@ -79365,6 +79765,7 @@ seaide.com
sealaly.net
sealand100.com
sealandtableware.com
+sealeadbattery.com
sealien.net
sealimg.com
sealion360.com
@@ -79404,6 +79805,7 @@ seazor.com
seblong.com
sebug.net
sec-in.com
+sec-mail.cloud
sec-motor.com
sec-wiki.com
secaibi.com
@@ -79429,6 +79831,7 @@ secretgardenresorts.com
secretmine.net
secrss.com
secrui.com
+secshow.net
secsib-eliaslias.com
secsib-kendal.com
secsilo.com
@@ -79541,6 +79944,7 @@ selypan.com
sem123.com
semem99.com
semeye.com
+semgz.com
semi-casi.com
semi.design
semiconductorpower.com
@@ -79549,13 +79953,13 @@ semidata.info
semiee.com
semight.com
semigraph.net
+semiinsights.com
semir.com
semiway.com
semiwebs.com
sempk.com
semptian.com
semw-sh.com
-senachina.com
senaocargo.com
senbeijia.com
sencdn.com
@@ -79585,7 +79989,6 @@ sengzai.com
senhai.com
senhaix.com
senhe.com
-seniohr.com
senior.auto
seniverse.com
senken-international.com
@@ -79593,7 +79996,6 @@ senlianshop.com
senlinjimore.com
senmiaoliuxue.com
senmiaoschool.com
-senmuse.com
senorsen.com
senpet.com
senpian.com
@@ -79613,6 +80015,7 @@ sensorsdata.com
sensorsdatavip.com
senssun.com
sentaihb.com
+sentaiwpc.com
sentcss.com
sentdream.net
senteauto.com
@@ -79626,7 +80029,6 @@ senyao1718.com
senyou.com
senypc.com
senyuanhi.com
-senyuanqc.com
seo-lv.com
seo.tm
seo1158.com
@@ -79645,6 +80047,7 @@ seosn.com
seotcs.com
seovx.com
seowhy.com
+seoxiaoxin.com
sep.cc
sepact.com
sepcc.com
@@ -79693,6 +80096,10 @@ sevensem.com
sevnday.com
sevnz.com
sewise.com
+sex291roushipin.wiki
+sex2ribenwuma.wiki
+sex2xiaoluoli.wiki
+sex2yingtaoshipin.wiki
sexytea2013.com
seyoo.net
seyuma-cn.com
@@ -79737,6 +80144,7 @@ sfdrums.com
sfdy13168.com
sfdzh.com
sfecr.com
+sffdj.com
sfgj.org
sfgy.org
sfhaa.com
@@ -79772,6 +80180,7 @@ sftnow.com
sfund.com
sfvip1.com
sfwl.co
+sfwxf.com
sfy-gmc.com
sfyb.com
sfybee.com
@@ -79801,10 +80210,12 @@ sgccdn.com
sgcctd.com
sgcctop.com
sgcec.com
+sgchinese.com
sgcyjy.com
sgda.cc
sgdmobile.com
sge.sh
+sgfsm.com
sgjlkyjx.com
sgjq.net
sgjsgf.com
@@ -79834,6 +80245,7 @@ sgsic.com
sgsotools.com
sgst.prod.dl.playstation.net
sgsugou.com
+sgsxw.com
sgsxybiz.com
sgsyxx.net
sgt21.com
@@ -79878,11 +80290,11 @@ sh-fy.com
sh-game.com
sh-gelanlishi.com
sh-gexing.com
-sh-gffm.com
sh-gsg.com
sh-henderson-metropolitan.com
sh-hengyuan.com
sh-hilead.com
+sh-hitech.com
sh-holfer.com
sh-holiday.com
sh-hs.com
@@ -79957,6 +80369,7 @@ sh-zbfm.com
sh002.com
sh1011.com
sh112.com
+sh12320.com
sh148.org
sh17.com
sh1nk1n-shokd.com
@@ -79976,6 +80389,7 @@ sha-steel-yx.com
sha-steel.com
sha2777.com
sha990.com
+shaaidata.com
shaangu.com
shaanxigas.com
shaanxiiot.com
@@ -80080,7 +80494,6 @@ shangdian.biz
shangdiguo.com
shangdu.com
shangdu.info
-shangdu.net
shangeyun.com
shangfang56.com
shangfox.com
@@ -80176,6 +80589,7 @@ shanglischool.com
shangluo.co
shanglushan.com
shanglv51.com
+shangnaxue.cc
shangnaxue.net
shangpai123.com
shangpin.com
@@ -80202,6 +80616,7 @@ shangshuce.com
shangshuyixue.com
shangtaiw.com
shangtao.net
+shangtao360.com
shangtianhui.com
shangtongda.com
shangtuf.com
@@ -80214,7 +80629,6 @@ shangwu168.com
shangwulink.com
shangxue.com
shangxueba.com
-shangxueshuo.com
shangyejihua.com
shangyekj.com
shangyexinzhi.com
@@ -80245,6 +80659,7 @@ shankaisports.com
shankejingling.com
shanliao.com
shanliaoapp.com
+shanling.com
shanlinjinrong.com
shanlink.com
shanliulian.com
@@ -80314,7 +80729,6 @@ shanzhen.com
shanzhen.me
shanzhildq.com
shanzhonglei.com
-shanzhuhttp.com
shanzhuyou.com
shaoanlv007.com
shaoerbc.org
@@ -80330,6 +80744,7 @@ shaolvjt.com
shaomingyang.com
shaoniandream.com
shaoshangwang.org
+shaoshilei.com
shaoxiao.net
shaoxingwater.com
shaoyangnews.net
@@ -80363,6 +80778,7 @@ sharewaf.com
sharexbar.com
sharexiang.com
sharjahmadrasa.com
+sharkisland.store
sharkselection.com
sharkshopping.com
sharpbai.com
@@ -80374,6 +80790,7 @@ shatian.org
shautomuseum.com
shavpn.amd.com
shavpn2.amd.com
+shawdo.com
shawnzeng.com
shaxian.biz
shayugg.com
@@ -80405,6 +80822,7 @@ shboka.com
shbpump.com
shbqmp.com
shbtpm.com
+shbxzp.com
shbyer.com
shbyw.com
shcaco3.com
@@ -80449,7 +80867,6 @@ shdatagroup.com
shdcjt.com
shdgm.com
shdingzhidental.com
-shdjnet.com
shdjt.com
shdmic.com
shdmt.net
@@ -80463,6 +80880,7 @@ shdsd.com
shdsn.com
shdsqs.com
shdszc.com
+shdxgraphene.com
shdy.com
shdy168.com
shdyiy.com
@@ -80473,6 +80891,7 @@ she120.com
sheasyoffice.com
shebao.net
shebao100.com
+shebao5.com
shebaomi.com
shebaotong.com
shebaowang.com
@@ -80483,7 +80902,6 @@ sheca.com
shedongyun.com
shedoor.com
shedunews.com
-shedunews.net
sheec-tencentclb.cloud
sheec-tencentclb.com
sheec-tencentclb.net
@@ -80505,8 +80923,8 @@ shejidna.com
shejijia.com
shejijingsai.com
shejiku.net
-shejilogo.com
shejinu.com
+shejipi.com
shejiqun.com
shejis.com
shejiwo.net
@@ -80516,6 +80934,7 @@ shejiyue.com
sheketiandi.com
shekou.com
shelive.net
+shell.cdn.office.net
shellpub.com
shellsec.com
shelter-china.com
@@ -80524,6 +80943,7 @@ shelwee.com
shen-grh.com
shen-nao.com
shen-xi.com
+shen321.com
shenanhui.com
shenbanglawyer.com
shenbinghang.com
@@ -80583,6 +81003,7 @@ shenghuagroup.com
shenghuaxi.com
shenghui56.com
shenghuigd.com
+shenghuo365.com
shenghuojia.com
shenghuorili.com
shenghuowo.com
@@ -80599,6 +81020,7 @@ shengmaapp.com
shengmage.com
shengming.net
shengminghitech.com
+shengniuuz.com
shengpay.com
shengqian51.com
shengquan.com
@@ -80610,7 +81032,6 @@ shengshizhicheng.com
shengtai.com
shengtaigroup.net
shengtian.com
-shengtiangames.com
shengtiangroup.com
shengtongedu.com
shengtuanyouxuan.com
@@ -80707,7 +81128,6 @@ shenxingroup.com
shenxm.com
shenxuanche.com
shenyang2car.com
-shenyangbus.com
shenyangoffice.com
shenyd.com
shenyecg.com
@@ -80740,7 +81160,6 @@ shenzhentour.com
shenzhenware.com
shenzhenygx.com
shenzhenyuren.com
-shenzhong.net
shenzhoublm.com
shenzhouen.com
shenzhoufu.com
@@ -80824,14 +81243,13 @@ shhebio.com
shhella.com
shhenghesh.com
shheywow.com
-shhezhenzszy.com
shhic.com
shhigher.com
shhkcc.com
shhkfw.com
shhkyy.com
+shhl56.com
shhlgroup.com
-shhljsj.com
shhmbio.com
shhmu.net
shholdingeu.com
@@ -80882,7 +81300,6 @@ shicaidai.com
shicaizhanlan.com
shicehao.com
shichangbu.com
-shicheng6.com
shichengbao.com
shichengyi.com
shichuangsj.com
@@ -80974,7 +81391,9 @@ shilian.com
shilian.net
shilicdn.com
shilincn.com
+shilitie.net
shiliuai.com
+shiliupo.com
shiluetl.com
shiluoji.com
shimano-fishchina.com
@@ -80985,6 +81404,7 @@ shimaostargroup.com
shimaotong.com
shimaowy.com
shimen.org
+shimengcs.com
shimengyuan.com
shimengzhanghao.com
shimge.com
@@ -81001,6 +81421,7 @@ shimonote.com
shimotx.com
shimowendang.com
shin-kinojseh.com
+shinberto.com
shinco.com
shindaichem.com
shine-consultant.com
@@ -81021,7 +81442,6 @@ shinewing.com
shinewonder.com
shineyie.com
shineyue.com
-shinflow.com
shinger.com
shinianonline.com
shining-electric.com
@@ -81034,7 +81454,6 @@ shinkin-jpo-coy.com
shinkinopsae.com
shinnytech.com
shinva.net
-shinvasurgical.com
shinycg.com
shinye-ortho.com
shinyway.org
@@ -81050,6 +81469,7 @@ shipgroup.net
shiphr.com
shipin163.com
shipin520.com
+shipinzhibojian.com
shipoe.com
shippingate.com
shippingchina.com
@@ -81063,6 +81483,7 @@ shipuxiu.com
shipxy.com
shiqi.me
shiqiao.com
+shiqichuban.com
shiqitech.com
shiqu.com
shiquan56.com
@@ -81144,10 +81565,12 @@ shiyu.zone
shiyuandx.com
shiyue.com
shiyuegame.com
+shiyueliangpin.com
shiyund.com
shiyus.com
shiyutianqi.com
shizhanxia.com
+shizhiad.work
shizhuang-inc.com
shizhuolin.com
shizhuonet.com
@@ -81301,7 +81724,9 @@ shopeesz.com
shopex123.com
shopimgs.com
shopin.net
+shopjyh.com
shoplazza.com
+shopline123.com
shopmaxmb.com
shopnc.net
shoppkk.com
@@ -81318,7 +81743,6 @@ shopxx.net
shopyy.com
shorcut88.com
shorologe.com
-shortdramaop.com
shortof.com
shotnba.com
shou-qi.com
@@ -81346,10 +81770,10 @@ shoudurx.com
shoufaw.com
shoufm.com
shoufu.com
+shougongke.com
shougongke.net
shougoumingbiao.com
shouhaoche.com
-shouhou.xin
shouhougou.com
shouhui.com
shouhuigroup.com
@@ -81366,13 +81790,14 @@ shouji56.com
shoujibao.net
shoujiduoduo.com
shoujihuifu.com
+shoujikanshu.net
+shoujimi.com
shoujitouping.com
shoujiwan.com
shoujixs.net
shoukaigufen.com
shoukala.com
shoukangyiyuan.com
-shoukawa.com
shoukayun.com
shoulian.org
shoumaquan.com
@@ -81454,6 +81879,7 @@ shpingda.com
shppa.net
shps518.com
shpsncp.com
+shpyedu.com
shqec.com
shqi7.net
shqinghe.com
@@ -81465,7 +81891,6 @@ shqpxc.com
shqunlu.com
shqxjx.com
shqyg.com
-shranji.com
shrbank.com
shrca.org
shrcb.com
@@ -81581,7 +82006,6 @@ shuaji.com
shuaji.net
shuajibao.com
shuajizhijia.net
-shualian.work
shuame.com
shuang-feng.com
shuang-sen.com
@@ -81676,6 +82100,7 @@ shuibaogs.com
shuibengxinghao.com
shuicao.cc
shuichan.cc
+shuichan51.com
shuichuyu.com
shuidichou.com
shuididabingchou.net
@@ -81696,6 +82121,7 @@ shuiguobang.com
shuihulu.com
shuijing100.com
shuijingka.com
+shuijingwanwq.com
shuijingwuyu.com
shuijingyibai.com
shuijinshunzhuang.com
@@ -81721,7 +82147,7 @@ shuitexxkj.com
shuitou001.com
shuiwushi.com
shuiwushi.net
-shuixing.com
+shuixin.tech
shuiyaohuo.com
shuiye.cc
shuiyinbao.com
@@ -81777,11 +82203,11 @@ shumenol.com
shumensy.com
shumiao.com
shumiimg.com
+shumilou.org
shumo.com
shun176.com
shunanholding.com
shunbangsaifu.com
-shunbd.com
shunchangzhixing.com
shunchaojinshu.com
shuncom.com
@@ -81839,6 +82265,7 @@ shupackaging.com
shupaiyun.com
shupeng.com
shuqi.com
+shuqiandiqiu.com
shuqiaozt.com
shuqiapi.com
shuqiread.com
@@ -81904,7 +82331,6 @@ shuzixindong.com
shuziyingxiao.net
shuziyuedong.com
shuzong.com
-shuzutech.com
shwbs.org
shwdir.com
shwebspace.com
@@ -81916,7 +82342,6 @@ shwkwai.com
shwoody.com
shwpbbs.com
shwpg.com
-shws.com
shws.org
shwsfy.com
shwsg.net
@@ -82019,6 +82444,7 @@ shyxwz.com
shyy6688.com
shyygh.com
shyyp.net
+shyywz.com
shyyy.com
shyyyl.com
shyz07.com
@@ -82067,9 +82493,11 @@ si-en.com
si-era.com
si-in.com
si-win.com
+si.cdn.dell.com
sia1995.net
siad-c.com
siaedu.net
+sialiagames.com.tw
sian.cc
siaoao.com
sias-sha.com
@@ -82083,7 +82511,6 @@ sibojin.com
sibpt.com
sibsnet.org
sibuzyn.com
-sicangge.com
sicarrier.com
sicc.cc
sicent.com
@@ -82118,6 +82545,7 @@ sifangbazhu.tech
sifangclub.com
sifanggroup.com
sifangoa.com
+sifangvideo.com
sifary.com
sifayun.com
siff.com
@@ -82175,8 +82603,11 @@ sikantech.com
sikem.net
sikiedu.com
sikuwu.com
+sikuyi5838.asia
sikuyun.net
silanggame.com
+silasbuchanan.shop
+sildyn.com
sileadinc.com
silenceper.com
silexmicro.com
@@ -82210,6 +82641,7 @@ silukex.com
siluwu.com
silvmark.store
sim800.com
+simaek.com
simagic.com
simaguo.com
simanuo.com
@@ -82304,9 +82736,11 @@ singbon.com
singchy.com
singdown.com
singfosolar.com
+singfun.com
singgnetworkcdn.com
singhead.com
singlecool.com
+singlegraindatabiz.com
singmaan.com
singoo.cc
singpao.com
@@ -82441,7 +82875,6 @@ sinopharm-fj.com
sinopharm-fl.com
sinopharm-gz.com
sinopharm-henan.com
-sinopharm-yz.com
sinopharm.com
sinopharmdbj.com
sinopharmholding.com
@@ -82473,7 +82906,6 @@ sinosuntop.com
sinotau.com
sinotechline.com
sinotf.com
-sinothaizone.com
sinotide.com
sinotn.com
sinotone.net
@@ -82513,6 +82945,7 @@ sintaytour.com
sintien.com
sintoacct.com
sintu.com
+sinture.com
sinvofund.com
sinvta.com
sinyuan.com
@@ -82541,6 +82974,7 @@ siqiangame.com
siqiquan.org
siqxmg4256.vip
sir3.com
+sir66.com
siranbio.com
sireda.com
sirenyouxiang.com
@@ -82552,12 +82986,12 @@ siscmag.com
sisder.com
sisen.com
sisensing.com
+sishui123.com
sishuojixie.com
sishuok.com
sishuxuefu.com
sisi-smu.org
sisigad.com
-sisiim.com
sisp-china.com
sissiok.com
sisuts.com
@@ -82607,6 +83041,7 @@ siyanhui.com
siyetian.com
siyi007.com
siyrcw.com
+siyuan.cc
siyuan.ink
siyuan.me
siyuanedu.com
@@ -82644,7 +83079,6 @@ sjdzp.com
sjdzp.net
sjebh.com
sjetdz.com
-sjez.com
sjf029.com
sjfcdn.com
sjfh168.com
@@ -82676,9 +83110,11 @@ sjlhlawyer.com
sjlvyou.com
sjm-zdh.com
sjm.life
+sjmao.net
sjmdh.com
sjmeigao.com
sjmp3.com
+sjmwsw.com
sjono.com
sjooo.com
sjpif.net
@@ -82716,6 +83152,7 @@ sjxtcw.com
sjxydc.com
sjxyit.com
sjxysec.com
+sjxyx.com
sjxzc.com
sjy-art.org
sjy2.com
@@ -82754,6 +83191,7 @@ sjzpco.org
sjzqcrl.com
sjzrbapp.com
sjzrmyz.com
+sjzslnyhy.com
sjzswtz.com
sjzszz.com
sjztd.com
@@ -82779,7 +83217,9 @@ skatehere.com
skcto.com
skd6.com
skd62.com
+skdj5.com
skdlabs.com
+ske.cc
skeo.net
sketchupbar.com
sketchupbbs.com
@@ -82792,9 +83232,9 @@ skimit.net
skinjc.com
skinme.cc
skjcsc.com
-skktec.com
skl.net
skland.com
+sklbce.org
skldoor.com
sklinux.com
skmgc.com
@@ -82803,15 +83243,14 @@ skomart.com
skongmx.com
skp-beijing.com
skpssz.com
-skr003.cc
skrskrskrskr.com
sksdwl.com
sksight.com
skslfd.com
skstravel.com
+skswz.com
sktcdn.com
sktecfibre.com
-sktqkf.com
skuking.com
skusoft.com
skwfls.com
@@ -82851,7 +83290,6 @@ skyheng.com
skyislets.com
skyleon.com
skylerzhang.com
-skym.asia
skymoons.com
skymoons.net
skynan.com
@@ -82968,7 +83406,6 @@ slwwedding.com
slybjp.com
slyld.com
slyxmobi.com
-slyz.net
slzsxx.com
sm-check.com
sm-cq.com
@@ -83085,7 +83522,6 @@ smgpt.com
smgstar.com
smgstv.com
smgtech.net
-smh.cc
smhsw.com
smhyplay.com
smianao.com
@@ -83111,6 +83547,7 @@ smlqcl.com
smmc.com
smmiki.com
smo-clinplus.com
+smo-software.com
smoba.net
smobird.cc
smogfly.cloud
@@ -83161,6 +83598,7 @@ smtsmt.com
smtso.com
smtsvs.com
smttouch.com
+smtukuzy.com
smtul.com
smtvip.com
smtw.com
@@ -83180,6 +83618,7 @@ smxs.com
smxzls.com
smyfinancial.com
smyhvae.com
+smynn.com
smyx.net
smyxxj.com
smyz.net
@@ -83188,8 +83627,10 @@ smzdmimg.com
smzdwan.com
smzhongran.com
smzjy.cc
+smzsffb.com
smzy.com
sn180.com
+snack-show.com
snai.edu
snail.com
snail007.com
@@ -83225,6 +83666,7 @@ sndks.com
sndnt.com
sndo.com
sndvc.com
+sndzrg0.org
sneac.com
sneb3.com
snedu.com
@@ -83235,6 +83677,7 @@ snfox.com
snfzsw.com
sngct.com
snh48.com
+snhere.com
snhrm.com
snibe.com
sniec.net
@@ -83263,7 +83706,6 @@ snowballtech.com
snowbeasts.com
snowdream.tech
snowflake.pink
-snowjy.com
snowkey.com
snowlotusgroup.com
snowyimall.com
@@ -83291,7 +83733,6 @@ snupg.com
snv1.com
snxw.com
snycloud.com
-snylex.com
snynas.com
snyu.com
snzfj.net
@@ -83356,6 +83797,7 @@ sodion.net
sodocloud.com
sody123.com
sofabiao.com
+sofan.one
sofang.com
sofangche.com
sofasofa.io
@@ -83370,7 +83812,6 @@ soft50.com
soft5566.com
soft568.com
soft6.com
-soft711.com
soft778.com
soft8.net
soft808.com
@@ -83453,7 +83894,6 @@ sojiyin.com
sojoline.com
sojson.com
sojump.com
-sok100.com
soke17.com
soken-sz.com
sokoban.ws
@@ -83581,6 +84021,7 @@ sooauto.com
soochowchem.com
soocor.com
sood6.com
+sooele.com
soofel.com
soogf.com
soogif.com
@@ -83591,6 +84032,7 @@ soolinen.com
soolou.net
soolun.com
soomal.com
+soon.guru
soonku.net
soonv.com
soonwill.com
@@ -83625,7 +84067,6 @@ soqicrm.com
soquano.com
sorftime.com
soripan.net
-sorstek.com
sorswitch.com
sortdoor.com
sos919.com
@@ -83638,6 +84079,7 @@ sosoba.org
sosobtc.com
sosoled.com
sosolight.com
+sosomp.com
sosonc.com
sosonsk.com
sosoo.net
@@ -83713,12 +84155,12 @@ soundstay.com
soupf.net
soupin.com
soupingguo.com
-soupng.com
soupu.com
soupv.com
souqian.com
souqiantu.com
sour-lemon.com
+source.tutorabc.com
source3g.com
sourcecodebeat.com
sourcecodecap.com
@@ -83744,7 +84186,6 @@ southnews.cc
southnews.net
southseagy.com
southsurvey.com
-southteacher.com
southyule.com
soutiyun.com
soutudi.so
@@ -83773,7 +84214,6 @@ sowin.com
sowotech.com
sowu.com
soxpai.com
-soxsok.com
soxyc.com
soya-protein.com
soyim.com
@@ -83854,11 +84294,10 @@ speedaf.com
speedcdns.com
speedcdns.info
speedcdns.org
-speedifyvolcai.com
-speedifyvolcaiv2.com
speedmanager.net
speednt.com
speedpdf.com
+speedsz.net
speedws.com
speedws.info
speedws.org
@@ -83866,7 +84305,6 @@ speedzonerc.com
speiyou.com
sperogenix.com
spfbiotech.com
-spfhi.com
spforum.net
spfosd.com
spg-ls.com
@@ -83901,7 +84339,9 @@ splmcn.com
spmcn.com
spnchinaren.com
spochikj.com
+spoience.com
spointdesign.com
+sporposten.today
sport-syy.com
sportman.cc
sportnanoapi.com
@@ -83932,7 +84372,6 @@ spsb114.com
spsicloudport.com
spsisctgroup.com
spsisncl.com
-spst2.com
spsy.org
sptcc.com
sptccn.com
@@ -83970,7 +84409,9 @@ sqis.com
sqj888.com
sqjk123.com
sqjsxy.com
+sqjt.com
sqjtcy.com
+sqjvx.org
sqkb.com
sqklrq.com
sql110.com
@@ -84065,12 +84506,12 @@ ssawhotels.com
ssaya.win
ssbbww.com
ssbgzzs.com
+ssbjf.com
ssbjsy.com
ssbx.me
ssby.cc
ssc-mcc.com
sscanmou.com
-sscct.com
sscejia.com
sscha.com
sschengtou.com
@@ -84093,6 +84534,7 @@ ssfetsz.org
ssgedm.com
ssgeek.com
ssgsemi.com
+ssgz.com
sshr.net
ssia.cc
ssidc.net
@@ -84106,6 +84548,7 @@ ssjj2.com
ssjjss.com
ssjjtt.com
ssjlicai.com
+ssjljk.com
ssjytc.com
ssjyxx.com
sskc360.com
@@ -84147,6 +84590,7 @@ ssports.com
ssports.net
ssptqt.com
ssqgx.com
+ssqtt.com
ssqzj.com
ssrcdn.com
ssrcr.com
@@ -84156,6 +84600,7 @@ sss.wiki
sss348499.com
sss437942.com
sss495830.com
+sss850697.com
ssscdn.com
sssch.net
ssses.net
@@ -84183,10 +84628,12 @@ ssycw.com
ssydt.com
ssyer.com
ssyssf.com
+ssyxlx.com
ssyxmall.com
ssyzx.net
sszgit.com
sszhg.com
+sszjnc.com
sszsj.cc
st-jzx.com
st-recovery.com
@@ -84214,7 +84661,6 @@ standteam.net
stanlyview.com
staofchina.com
stapharma.com
-staplescn.com
star-charge.com
star-elink.com
star-engine.com
@@ -84239,7 +84685,6 @@ stardict.org
stards.com
stardust2000.com
starduster.me
-starfiread.com
starfishcloud.com
starfivetech.com
stargame.com
@@ -84258,7 +84703,6 @@ starrails.com
starrevs.com
starrockinvest.com
starrtc.com
-starryblu.com
starrydyn.com
starryfrp.com
starrymed.com
@@ -84302,6 +84746,7 @@ staticfile.net
staticfile.org
statickksmg.com
statics.cc
+statics.teams.cdn.office.net
staticsdd.com
staticsoe.com
staticsoem.com
@@ -84373,7 +84818,9 @@ steriguardmed.com
stfile.com
stg8.com
stgiantfilms.com
+stgowan.com
sthforme.com
+sthfsteel.com
sthifi.com
sthke.com
sthospital.com
@@ -84419,6 +84866,7 @@ store12.com
storeapi.net
storecorefulfillment.download.prss.microsoft.com
storeedge.microsoft.com
+storeedgefd.dsx.mp.microsoft.com
storkapp.me
stormorai.com
story520.com
@@ -84429,14 +84877,15 @@ stourweb.com
stourweb.net
stoyard.com
stpos.net
+stqiyuan.com
stql.com
+stql.org
str-mo.com
strategy-sight.com
stray-soul.com
streamax.com
streamaxtech.com
streamcomputing.com
-streamlake.com
streamlakeapi.com
streffy.com
strinova.com
@@ -84457,6 +84906,7 @@ sttcq.com
sttry.com
stu-lab.com
stu-works.com
+stu51.com
stubbornhuang.com
studa.net
studentboss.com
@@ -84475,6 +84925,7 @@ studyingtours.com
studypay.com
studyquicks.com
studytime.xin
+studyuser.com
studyvip.com
stuhome.net
stuhui.com
@@ -84568,7 +85019,6 @@ sudu-xu9b.com
sudu-y94k.com
sudu123.net
sududa.com
-sudun.com
sudundns.com
sudupower.net
sudusite.com
@@ -84577,7 +85027,6 @@ suemor.com
sueon.com
sufachina.com
sufangxu.com
-sufe.me
sufeinet.com
sufoma.com
sufont.com
@@ -84600,7 +85049,7 @@ sui.me
suibao-jiaozhu.com
suibao.com
suibiji.com
-suifengy.com
+suibo.org
suiji123.com
suijinetworks.com
suijunlaowu.com
@@ -84611,7 +85060,6 @@ suiningwang.com
suiniyi.com
suiqiao.com
suirui.com
-suishendai.vip
suishenyun.net
suishouji.com
suishouxie.com
@@ -84626,6 +85074,7 @@ suixin8.com
suixingpay.com
suixinzulin.com
suixkan.com
+suiyichong.com
suiyifa.com
suiyiju.com
suiyuanjian.com
@@ -84808,7 +85257,6 @@ sunnyplas.com
sunnypure.com
sunnyqi.com
sunnysemi.com
-sunnytextile.com
sunnyxx.com
sunocean.life
sunofbeaches.com
@@ -84854,7 +85302,6 @@ suntech-power.com
suntechospital.com
suntgj.com
suntimehousehold.com
-suntl.com
suntop168.com
suntray.com
suntrayoa.com
@@ -84864,6 +85311,7 @@ sunup3d.com
sunupcg.com
sunus-china.com
sunvim.com
+sunvio.com
sunwardcap.com
sunwatt.com
sunwaygas.com
@@ -84938,7 +85386,6 @@ supercarrier8.com
supercrm.com
superdns.org
superfix.com
-superguancai.com
superhcloud.com
superic.com
superiorscope.com
@@ -84964,6 +85411,7 @@ superstar-med.com
superstarkennel.com
superstars.vip
supertime-malting.com
+supertracker.net
supertrw.com
supervisionus.com
supervote.cc
@@ -84990,6 +85438,7 @@ supplierlist.com
supplygw.com
supplywater.com
support-cn.samsung.com
+support.amd.com
supreme-oe.com
supwisdom.com
supwk.com
@@ -84999,7 +85448,6 @@ suqing.com
suqishi.com
suqnn.com
suqun-group.com
-suredeliverses.com
surely.cool
surerp.com
surface.download.prss.microsoft.com
@@ -85035,12 +85483,9 @@ susongbbs.com
susoul.com
sustcra.com
sustech.online
-susudesu.com
susudm.com
susun.cc
susungroup.com
-sut56.com
-sut999.vip
sutanapp.com
suteidc.com
suteshop.com
@@ -85083,12 +85528,12 @@ suzhoubeili.com
suzhoubond.com
suzhoucitymarathon.com
suzhouexpo.com
+suzhoufashion.com
suzhouhengtai.com
suzhouhui.com
suzhouleasing.com
suzhoulinsen.com
suzhousj.com
-suzhoutianqi114.com
suzhouyabao.com
suzip.com
suzport.com
@@ -85164,6 +85609,7 @@ swiftfintech.com
swifthumb.com
swiftjava.com
swiftlet.net
+swijoy.com
swip.group
swirebev.com
swirecocacola.com
@@ -85216,12 +85662,14 @@ sx-moen.com
sx-seafood.com
sx1211.com
sx189.com
+sx267.com
sx311.cc
sxaec.com
sxafz.com
sxalu.com
sxand.com
sxase.com
+sxasuykzx2sq.icu
sxatcm.com
sxbada.com
sxbang.net
@@ -85229,6 +85677,7 @@ sxbawy.com
sxbctv.com
sxbdf.com
sxbest.com
+sxbjedu.com
sxbpa.com
sxbuszp.com
sxbychem.com
@@ -85243,6 +85692,8 @@ sxclassiclighting.com
sxcm.net
sxcntv.com
sxcoal.com
+sxcp.com
+sxctf.com
sxcxgf.com
sxcxldjy.com
sxcyts.com
@@ -85276,6 +85727,7 @@ sxhctv.com
sxhhwl.com
sxhhyy.com
sxhimalayanqd.com
+sxhiway.com
sxhjrc.com
sxhkxy.com
sxhlcc.com
@@ -85329,7 +85781,6 @@ sxmhgas.com
sxmty.com
sxmxwh.com
sxmyh.com
-sxnb66.xyz
sxncb.com
sxnxs.com
sxnxxny.com
@@ -85375,7 +85826,6 @@ sxsjgy.com
sxsjzyxh.com
sxslhg.com
sxslnews.com
-sxsltlyy.com
sxsme.org
sxsmtgyxh.com
sxsoft.com
@@ -85405,6 +85855,7 @@ sxwbs.com
sxwetalent.com
sxwlyhzp.com
sxworker.com
+sxwpyx.com
sxwq.com
sxwstcm.com
sxwtdyd.com
@@ -85428,7 +85879,6 @@ sxygsj.com
sxyj.net
sxyqgs.asia
sxyyc.net
-sxyygh.com
sxzhaobiao.com
sxzhongfei.com
sxzhyy.com
@@ -85533,6 +85983,7 @@ sylangyue.xyz
sylaryun.com
sylincom.com
sylixos.com
+sylm2022.com
sylnyx.com
symama.com
symarathon.com
@@ -85591,6 +86042,7 @@ sysceo.net
syscxp.com
sysdyy120.com
sysengi.com
+syshell.com
syshospital.com
syshospital.org
syshosts.net
@@ -85625,7 +86077,6 @@ sytuku.com
syuan.com
syuan.net
syue.com
-sywdsjc.com
sywg.com
sywgy.com
sywtqc.com
@@ -85634,6 +86085,7 @@ syxb.com
syxidao.com
syxjjsw.com
syxlgame.com
+syxt.cc
syxw.xyz
syxwang.com
syxwnet.com
@@ -85650,13 +86102,13 @@ syyy99.com
syyyd.com
syyyj.com
syyyking.com
+syyzhpc.com
syzdhyb.com
syzjjt.com
syzlzz.com
syzoukan.com
syzpw.com
syzsgroup.com
-syzsks.com
sz-3a.com
sz-acuvu.com
sz-amc.com
@@ -85687,7 +86139,6 @@ sz-hengdeyuan.com
sz-hiragawa.com
sz-huashi.com
sz-huayuan.com
-sz-huilian.com
sz-hyauto.com
sz-hzt.com
sz-iso.com
@@ -85725,7 +86176,6 @@ sz-ytq.com
sz-zhenghe.com
sz002329.com
sz0429.com
-sz120.com
sz121.com
sz1905.com
sz1978.com
@@ -85777,8 +86227,8 @@ szaudio.net
szaupd.com
szautism.com
szbaba.com
+szbaicao.com
szbaike.com
-szbaisc.com
szbaleng.com
szbaoly.com
szbaoming.com
@@ -85897,7 +86347,6 @@ szesens.com
szetop.com
szeua.org
szeverich.com
-szeyoung.com
szfa.com
szfachina.org
szfangzhouhd.com
@@ -85930,6 +86379,7 @@ szgays.org
szgcyy.com
szggzy.com
szghedu.com
+szghgw.com
szgjtc.com
szgky.com
szgla.com
@@ -86066,6 +86516,7 @@ szjxcft-tencentclb.work
szjxgroup.com
szjxj.com
szjyos.com
+szjys.net
szjys1888.com
szjytx.com
szjyxtech.com
@@ -86080,7 +86531,6 @@ szkinks.com
szkjcn.com
szkjjs.com
szkjxh.com
-szkke.com
szknet.com
szknk.net
szknys.com
@@ -86097,7 +86547,6 @@ szlangwei.com
szlanyou.com
szlawyers.com
szlc9.com
-szlcmb.com
szlcsc.com
szlcwy.com
szldcc.com
@@ -86235,7 +86684,6 @@ szrfstar.com
szrgsh.com
szrhg.com
szrj.net
-szrjyx.com
szrlaw.net
szrrjc.com
szrsks.com
@@ -86248,6 +86696,7 @@ szrzxh.com
szs189.com
szsaibao.com
szsailong.com
+szsaiwei.com
szsamr.com
szsandt.com
szsangbo.com
@@ -86302,6 +86751,7 @@ szsti.org
szstndzsw.com
szstyle.cc
szsuanli.com
+szsunlaser.com
szsunwin.com
szsupvan.com
szswgcjc.com
@@ -86321,6 +86771,7 @@ sztaijier.com
sztalent.org
sztanzo.com
sztara.com
+sztbjs.com
sztc.com
sztcg.com
sztd123.com
@@ -86343,7 +86794,6 @@ sztmjz.com
sztncm.com
sztongwang.com
sztopbrand.com
-sztopten.com
sztower.com
sztoys.com
sztqjf.com
@@ -86351,6 +86801,7 @@ sztreeent.com
sztspi.com
sztxcpa.com
sztxsz.com
+sztxw.com
szty56.com
sztz.org
sztzzs.com
@@ -86468,7 +86919,6 @@ szysmpay.com
szystea.com
szysxx.com
szyt-hosp.com
-szytop.com
szyuda88.com
szyundingschool.com
szyuxin.com
@@ -86578,6 +87028,8 @@ taaas.org
taagoo.com
tabalt.net
tabbitbrowser.com
+tabbypro.com
+tabbywork.com
tableauxmly.com
tabuzhe.com
tabxexplorer.com
@@ -86645,6 +87097,7 @@ taihuboiler.com
taihucn.com
taihuoniao.com
taihutour.com
+taihuwang.com
taihuwater.com
taihuxue.com
taihuyuan.com
@@ -86678,6 +87131,7 @@ tailong.com
taimei.com
taimi100.com
taimls.com
+taininge.online
taiorient.com
taiott.com
taipingyangshuiwu.com
@@ -86710,6 +87164,7 @@ taixirobot.com
taixubio.com
taixuguoji.com
taiyangd.com
+taiyanghttp.com
taiyechem.com
taiyin117.com
taiyiplus.com
@@ -86736,6 +87191,7 @@ talbrain.com
talebase.com
talegenes.com
talentable.com
+talentlin.com
talents-tech.com
talentsmag.com
talentspotgroup.com
@@ -86758,10 +87214,13 @@ talkyun.com
tallgu.com
talmdhome.com
taluo.com
+taluo5.com
taluoji.com
talzjsj.com
tamaegis.com
tamarace.com
+tamayaki.com
+tamensay.com
tamersunion.net
tamigos.com
tamigroup.com
@@ -86840,7 +87299,6 @@ tanlong.org
tanluxia.com
tanma.tech
tanmer.com
-tannel.asia
tanpaifang.com
tanpoqiuer.com
tanshudata.com
@@ -86848,10 +87306,8 @@ tansiling.com
tansoole.com
tantaly.com
tantanapp.com
-tantanscience.com
tantu.com
tantu.info
-tantu668.com
tantuw.com
tanv.com
tanwan.com
@@ -86871,9 +87327,9 @@ tao-jiujiu.com
tao-star.com
tao-studio.net
tao-wu.com
-tao.co
tao008.com
tao123.com
+tao3.cc
tao33.com
tao66.com
tao800.com
@@ -86901,7 +87357,6 @@ taocdn.com
taoche.com
taocheche.com
taoci.com
-taoci10.com
taoci163.com
taocibao.com
taocijiaju.com
@@ -87000,7 +87455,6 @@ taoxiangyoushu.com
taoxiaolu.com
taoxie.com
taoxuemiao.com
-taoyaohh.site
taoyitu.com
taoyizhu.com
taoyougou.com
@@ -87025,7 +87479,6 @@ tapdb.com
tapdb.net
tapimg.com
tapjoytech.com
-tapnow.media
tapotiexie.com
tappile.com
tapque.com
@@ -87103,7 +87556,6 @@ tbadc.com
tbadesign.org
tbankw.com
tbapp.com
-tbbbk.com
tbcache.com
tbh5.com
tbhcc.com
@@ -87127,9 +87579,9 @@ tbs321.com
tbsandbox.com
tbsite.net
tbt168.com
-tbtk.asia
tbtopc.com
tburl.in
+tbuser.com
tbxsw.com
tbyfsoft.com
tc-21.com
@@ -87166,7 +87618,6 @@ tcdnlivebak2.com
tcdnlp.com
tcdnos.com
tcdnos.net
-tcdns31.com
tcdntip.com
tcdnv3.com
tcdnvod.com
@@ -87176,10 +87627,13 @@ tcdnvp.com
tcecps.org
tced-transsion.com
tcedshare.com
+tceic.com
+tcenn.com
tceratronix.com
tcfhty.com
tcfmglobal.com
tcgcardgame.com
+tcgdxyb.xyz
tcggkj.com
tcgke.com
tcgsw.com
@@ -87284,6 +87738,7 @@ td2cn.com
td300321.com
td776.com
td98.com
+tdances.com
tdasz.com
tdatamaster.com
tdataspace.com
@@ -87400,6 +87855,7 @@ teambition.net
teambitionapis.com
teamlogs.com
teamminus.com
+teamotto.net
teamshub.com
teamtop.com
teamtopgame.com
@@ -87421,6 +87877,7 @@ tech-sonic.net
tech002.com
tech1024.com
tech110.net
+tech2ipo.com
tech2real.com
tech4joy.com
techan.com
@@ -87429,6 +87886,7 @@ techbeat.net
techbrood.com
techdow.com
techfine.net
+techgastronomy.com
techgogogo.com
techigh.net
techingrid.net
@@ -87474,6 +87932,7 @@ tedx.net
tedy.cc
teejia.com
teeqee.com
+tefact.com
tefl-china.net
tefscloud.com
tefscloud.net
@@ -87482,7 +87941,6 @@ tegongji.com
tegoushe.com
tegvzpvz.com
tehang.com
-tehlin-bj.com
tehub.com
tehuituan.com
teilei.com
@@ -87498,12 +87956,17 @@ telecomhb.com
telecomhr.com
telecomjs.com
telefen.com
+telegerlam.cc
+telegramcn.co
telegramtoke.com
+telegroiam.cc
telehr.com
teleinfoo.com
telekoml.cfd
teleland.net
+telemgrasm.cc
teleows.com
+telergaemoam.cc
televivi.com
telfri.net
teligen-cloud.com
@@ -87558,7 +88021,6 @@ tencentapis.com
tencentapp.com
tencentapps.com
tencentbh.com
-tencentbuddy.com
tencentbyod.com
tencentcc.com
tencentcdb.com
@@ -87682,8 +88144,6 @@ tencentdevices.com
tencentdigitalassistant.com
tencentdmp.com
tencentdms.com
-tencentdns.net
-tencentedge.com
tencentedi.com
tencentehs.com
tencenteiam.com
@@ -87780,10 +88240,10 @@ tendfo.com
tendis.net
tendrones.com
tendyron.com
-tenfu.com
tengamy.com
tenganxinxi.com
tengbai-it.com
+tengbenyueji.com
tengbo.cc
tengchangjiancai.com
tengchu.com
@@ -87872,14 +88332,12 @@ tequanma.com
terabuy.com
terapark.com
terapines.com
-terebratulid.com
terencemusic.com
teridge.com
terminal.icu
terminus.io
terose.com
terra-master.com
-terrabbs.ink
terran.tech
terransforce.com
terratribes.com
@@ -87887,7 +88345,6 @@ terrypacking.com
terrytec.com
teruide.net
tese5.com
-tesegu.com
tesery.com
tesexiu.com
teshenqi.com
@@ -87971,6 +88428,7 @@ tfsb.net
tfsino.com
tfsmy.com
tftplay.com
+tfvisa.com
tfxqrmyy.com
tfyum.net
tfzikao.com
@@ -87980,7 +88438,6 @@ tg-vision.net
tg0123.com
tg1234.com
tg138.com
-tgalileo.com
tgametalent.com
tgbus.com
tgcid.org
@@ -87989,13 +88446,11 @@ tgcook.com
tgcyber.com
tgect.com
tgeosmart.com
-tggfl.com
tgjh.com
tgking.net
tgkjjg.com
tgldfm.com
tgljw.com
-tglsinsure.com
tglxh.com
tgnet.com
tgo-ai.com
@@ -88017,6 +88472,7 @@ th-tencentclb.work
th-water.net
th.bing.com
th21333.com
+th38.com
th99.com
thaicn.com
thailycare.com
@@ -88058,6 +88514,7 @@ thecodeway.com
thedatasys.com
thederma.com
theduapp.com
+thedutchman.org
thefastcdns.com
thefastfile.com
thefastimg.com
@@ -88098,13 +88555,13 @@ thenextravelmarket.com
theoborn.com
theoreticalw.com
theorychina.org
+thepeak.com.my
thepoemforyou.com
thepoizon.ru
thepredictivemodel.com
thepresidentialhotel.com
thepuli.com
therasaganga.com
-theringlive.com
theseshepherd.com
thesetech.com
thesmartmelon.com
@@ -88143,7 +88600,6 @@ thinkeffective-usa.com
thinkeridea.com
thinkerride.com
thinkerx.com
-thinkgoall.com
thinkindrupal.com
thinkive.com
thinkjs.org
@@ -88159,8 +88615,8 @@ thinmoo.com
thinvent.com
this6.com
thishealthsummit.com
+thismomentinamerica.org
thisnew.com
-thispx.com
thisshop.com
thiztech.com
thjb.net
@@ -88169,6 +88625,7 @@ thjjhs.com
thjunshi.com
thkconn.com
thkill.com
+thm3u8.com
thmall.com
thmins.com
thmnet.com
@@ -88219,6 +88676,7 @@ thwpmanage.com
thxddb.com
thxdx.com
thxflt.com
+thxnr.com
thxtg.org
thxy.org
thxyy.com
@@ -88275,6 +88733,7 @@ tianfeng.cc
tianfucaijing.com
tianfugroup.com
tianfuhui.xin
+tianfupic.com
tianfusoftwarepark.com
tiangang.com
tiangen.com
@@ -88376,10 +88835,10 @@ tianrow.com
tianruihr.com
tianrunshunteng.com
tianruo.net
-tianruo.xyz
tianruoyun.com
tiansdl.com
tiansenjituan.com
+tianshanxt.com
tianshengdiyi.com
tianshenyule.com
tianshiyiyuan.com
@@ -88404,7 +88863,6 @@ tianti.com
tiantianbannixue.com
tiantiancaige.com
tiantiancaipu.com
-tiantianditu.com
tiantianfm.com
tiantianfunds.com
tiantianleshuiguo.com
@@ -88426,6 +88884,7 @@ tianxiajiaoyi.com
tianxiamaimai.com
tianxianmao.com
tianxiaquanchengapp.com
+tianxiawangxiao.com
tianxiawushi.com
tianxiawuzei.org
tianxiaxiao.net
@@ -88434,7 +88893,6 @@ tianxiayouxi.com
tianxiayouyue.com
tianxin100.vip
tianxing.com
-tianxingfengshui.com
tianxingjianyiliao.com
tianxinkeji.com
tianya.com
@@ -88590,13 +89048,14 @@ tijian123.com
tijianbao.com
tijianshangmen.com
tijianzhuanjia.com
+tijox.cc
tijox.com
tijox.hk
tijox.net
+tijox.org
tik-tokapi.com
tik2019.com
tikersport.com
-tikmob.com
tiktoknewaccount.com
tiktokrow-cdn.com
tikv.org
@@ -88607,8 +89066,6 @@ timanetworks.com
timbrd.com
time-weekly.com
time-year.com
-time163.com
-timecha.com
timecloud.us
timecoo.com
timedg.com
@@ -88648,7 +89105,6 @@ timjx.com
timmerse.com
timzuu.com
tinavi.com
-tineco.com
tinengwang.com
tinetcloud.com
tinfinite.com
@@ -88672,6 +89128,7 @@ tingmei.com
tingmimi.net
tingmubeef.com
tingniukeji.com
+tingood.com
tingpiting.com
tingroom.com
tingshubao.net
@@ -88695,12 +89152,12 @@ tinkerpatch.com
tinktek.net
tinman798.net
tinning-automation.com
-tinnitus-light.org
tinsecret.com
tinstu.com
tinwod.com
tinychen.com
tinycms.xyz
+tinyems.com
tinyfeng.com
tinyflare.com
tinygroup.org
@@ -88756,7 +89213,6 @@ tiyep.com
tiyucdn.com
tiyufeng.com
tiyuguoji.com
-tiyuhu.com
tiyule.com
tiyusaishi.com
tiyushe.com
@@ -88819,12 +89275,14 @@ tjgtgd.com
tjhgmc.com
tjhtcpvc.com
tjhyzyxy.com
+tji.io
tjian.com
tjinsuo.com
tjj.com
tjjfrh.com
tjjhqyy.com
tjjiaotong.com
+tjjinglang.com
tjjt360.com
tjjtjt.net
tjjwt.com
@@ -88860,11 +89318,13 @@ tjskqyy.com
tjsptech.com
tjst.net
tjstats.com
+tjsylhh.com
tjtele.com
tjtjshengtu.com
tjtongrentang.com
tjtrust.com
tjtvc.com
+tjubbs.net
tjumc.com
tjupdi.com
tjuzj.com
@@ -88874,17 +89334,18 @@ tjwch.org
tjwenjie.com
tjwf.com
tjwj88.com
-tjwjh888.com
tjwmschool.net
tjxinyu.com
tjxiqi.com
tjxxcl.com
tjxz.cc
+tjydyt.com
tjyun.com
tjzb.com
tjzcsj.com
tjzfcg.com
tjzhongyiyao.com
+tjzhyj.com
tjznjt.com
tjzxyy.com
tjzyec.com
@@ -89034,16 +89495,17 @@ tltesoft.com
tltuan.net
tltzg.com
tlu5.com
-tluyou.com
+tlwanjishan.com
tlwk.net
tlwok.com
tlxxw.com
+tly.cloud
tlyz.net
tlzey.com
tlzhjt.com
tlzyxy.com
tm-auto.com
-tm022.com
+tm0755.com
tm1949.com
tm401k.com
tm51.com
@@ -89066,11 +89528,11 @@ tmcdn.net
tmctool.com
tmecd.com
tmeiju.com
-tmeoa.com
tmfcloud.com
tmgdb.com
tmhong.com
tmhtour.com
+tmhttc.com
tmianyang.com
tmigrate.com
tmirob.com
@@ -89086,6 +89548,7 @@ tmqd.me
tmqmqj.com
tmrcw.com
tmrenergy.com
+tms-in.org
tms8.com
tmscnz.com
tmsemi.com
@@ -89104,7 +89567,6 @@ tmtsp.com
tmuaih.com
tmusoft.com
tmuyun.com
-tmwanba.com
tmwcn.com
tmwxxcx.com
tmwzs.com
@@ -89118,6 +89580,7 @@ tnblog.net
tnblt.com
tnbz.com
tnccdn.com
+tndsjka.com
tnebula.net
tnedu.com
tnettms.com
@@ -89129,6 +89592,7 @@ tnsou.com
tnzuwu.com
to-future.net
to2025.com
+to4f.com
to8to.com
to999.com
toast.pub
@@ -89157,6 +89621,7 @@ todayios.com
todayisp.net
todaymedtech.com
todaynic.com
+todaypublish.com
todayyj.com
todesk.com
todgo.com
@@ -89175,6 +89640,7 @@ toec-iot.com
toec.com
toecsec.com
toewin.com
+tofeat.com
tofengmi.com
tofflon.com
tofine.com
@@ -89187,6 +89653,7 @@ tohosting.net
tohours.com
toidea.com
tokcoder.com
+tokeimall080.com
token-ad.com
token-sensor.com
tokenglish.com
@@ -89211,7 +89678,6 @@ tompda.com
tomson-group.com
tomson-riviera.com
tomwx.net
-ton51.com
tone-sun.com
tonebj.com
tonechemical.com
@@ -89226,6 +89692,7 @@ tongbb.net
tongbu.com
tongbupan.com
tongbusj.com
+tongchaba.com
tongcheng.cc
tongchengbx.com
tongchengchaku.com
@@ -89261,7 +89728,6 @@ tongjiniao.com
tongkask.com
tongleer.com
tonglei.com
-tongli.net
tonglian.com
tongliangrc.com
tongliaowang.com
@@ -89325,7 +89791,6 @@ tongyicm.com
tongyidrying.com
tongyiplastic.com
tongyonggroup.com
-tongyongpe.com
tongyongpe.net
tongyongts.com
tongyongzs.com
@@ -89365,6 +89830,7 @@ toodudu.com
tool.la
tool.lu
tool56.com
+tool77.com
tooleemesse.com
toolgg.com
toolkk.com
@@ -89397,6 +89863,7 @@ top263.net
top2fun.com
top4xlc.com
top6000.com
+topbester.com
topbiol.com
topbiz360.com
topbook.cc
@@ -89418,6 +89885,7 @@ topeastic.com
topeditsci.com
topeet.com
topeetboard.com
+topexhib.net
topfisc.com
topflames.com
topfo.com
@@ -89430,8 +89898,10 @@ tophant.com
tophold.com
tophr.net
tophub.app
+tophub.fun
topideal.com
topit.pro
+topit5.com
topjoy.com
topjoycloud.com
topkhealth.com
@@ -89480,7 +89950,6 @@ toptubeco.com
topuc.com
topunix.com
topv1.com
-topvee.com
topwalk.com
topway.org
topwaysoft.com
@@ -89498,6 +89967,7 @@ topzj.com
torch.plus
torcstark.com
toromotor.com
+torovo.com
torphan.com
torrealcielo.com
toscdn.com
@@ -89510,6 +89980,7 @@ tosohbioscience.net
tosonet.com
tosound.com
tospur.com
+tosstar5117.com
tosuai.com
tosunk.com
totainfo.com
@@ -89533,7 +90004,6 @@ touchat.online
touchealth.com
touchelf.com
touchev.com
-touchgal.ink
touchjoin.com
touchjoint.com
touchmark.art
@@ -89615,6 +90085,7 @@ touwho.com
touxiang8.com
touxiang88.com
touying.com
+touzhijia.com
touzi.com
touzid.com
touzime.com
@@ -89653,6 +90124,7 @@ tpe-tencentclb.cloud
tpe-tencentclb.com
tpe-tencentclb.net
tpe-tencentclb.work
+tpfangchan.com
tphdled.com
tpimg.xyz
tpjwww.com
@@ -89665,7 +90137,6 @@ tpoxiaozhan.com
tpqxb.com
tprtc.com
tpsea.com
-tpsem.com
tpsge.com
tpshleasing.com
tpsns.com
@@ -89755,6 +90226,7 @@ tranplanet.com
trans-china.com
trans4e.com
transcendchina.com
+transcenta.com
transduck.com
transer-cn.com
transfarchem.com
@@ -89784,7 +90256,6 @@ tratao.com
travel-x.cc
travel6.co.uk
travelgo.com
-travelincaucasus.com
traveling-exhibitions.com
travellaureate.com
travellingwithhotel.com
@@ -89793,7 +90264,6 @@ travelsky.com
travelsky.net
travelwuhan.com
trawind.com
-tre528.com
treatgut.com
treazr.store
treehousesub.com
@@ -89833,9 +90303,11 @@ triowin.com
trip169.com
trip8080.com
tripbaba.com
+tripbe.com
triphr.com
tripleuuu.com
triplexservice.com
+tripnearby.com
tripodeck.com
tripolers.com
tripsanxia.net
@@ -89848,6 +90320,7 @@ tristarinc.com
triton-games.com
tritoninfo.net
trizenai.com
+trizinfo.tech
trizlaser.com
trizmed.com
trjcn.com
@@ -89912,6 +90385,7 @@ trusple.com
trust-mro.com
trust-one.com
trust400.com
+trusta-lawyer.com
trustasia.com
trustasia.net
trustcn.com
@@ -89966,7 +90440,6 @@ tsa-page3.com
tsa-page4.com
tsa-page5.com
tsa-page6.com
-tsbear.com
tsbjschool.com
tsbtv.tv
tschina.com
@@ -89982,7 +90455,6 @@ tses.net
tsflc.com
tsfqw.com
tsg-online.net
-tsgaosu.com
tsggx.com
tsgks.com
tsgyun.com
@@ -90000,7 +90472,6 @@ tsing-jn.com
tsingaero.com
tsinghua-getinfo.com
tsinghua-sz.org
-tsinghua-tj.org
tsinghua-vc.com
tsinghua-wx.org
tsinghuaic.com
@@ -90016,7 +90487,6 @@ tsingoofoods.com
tsingpost.com
tsingshang.com
tsingtek.com
-tsingtengms.com
tsingtoo.com
tsingtuo.com
tsingyangroup.com
@@ -90026,7 +90496,6 @@ tsjtsy.com
tsk-fixture.com
tslib.net
tsljzs.com
-tslnqfzxx.com
tslongtai.com
tslsmart.com
tslt.tech
@@ -90056,7 +90525,6 @@ tssyedu.com
tssyjt.com
tstvxmt.com
tsubakichina.com
-tsuiyuan.com
tsukistar.fun
tsunbull.com
tswjs.net
@@ -90091,6 +90559,7 @@ ttbbss.com
ttbyte.com
ttbyte.net
ttcad.com
+ttcl.cc
ttdailynews.com
ttdnsa.com
ttdown.com
@@ -90160,16 +90629,15 @@ ttsz8.com
tttang.com
tttarot.com
tttcykt.com
-tttdh.com
tttelephone.com
ttthing.com
tttiti.com
+tttkkt.com
ttttt22222.com
tttuangou.net
tttxf.com
tttz.com
ttunion.com
-ttvod.net
ttwanjia.com
ttwebview.com
ttwifi.net
@@ -90177,6 +90645,7 @@ ttwx.com
ttwxh.com
ttxn.com
ttxs123.net
+ttxs7.com
ttxsapp.com
ttxuanpai.com
ttxx8888.com
@@ -90190,6 +90659,7 @@ ttyongche.com
ttyqm.com
ttysq.com
ttyuyin.com
+ttyy800.vip
ttyyuuoo.com
ttz.com
ttzcw.com
@@ -90197,6 +90667,7 @@ ttzubao.com
ttzyw.com
tu54o7863tbf6.com
tu8.cc
+tu93.biz
tu960.com
tuan800.com
tuan800.net
@@ -90243,7 +90714,6 @@ tubie.art
tuboshu.com
tuboshuxinxi.xyz
tubutu.com
-tucenb.com
tuchong.com
tuchong.net
tuchuangs.com
@@ -90262,6 +90732,7 @@ tudu.com
tudu.im
tuer.me
tuer123.com
+tuf3a353.com
tuganjue.com
tugemedical.com
tugou.com
@@ -90295,6 +90766,7 @@ tuifeiapi.com
tuifish.com
tuiguang91.com
tuiguangjia.com
+tuijiantong.com
tuijianxin.com
tuijie.cc
tuikemima.com
@@ -90462,6 +90934,7 @@ tusuguanjiage.com
tusujiu.com
tutechanhb.com
tutengcloud.com
+tutengdai.com
tutuapp.com
tutucloud.com
tutudati.com
@@ -90482,7 +90955,6 @@ tuxiangyan.com
tuxiaobei.com
tuxing.art
tuxing2010.com
-tuxingis.com
tuxingren.com
tuxiu.com
tuxun.fun
@@ -90510,7 +90982,6 @@ tuzhizhijia.com
tuzhongit.com
tuzi123.com
tuzi8.com
-tuzigames.com
tuziip.com
tv002.com
tv189.com
@@ -90527,13 +90998,13 @@ tventry.com
tvfanqie.com
tvfuwu.com
tvguo.tv
-tvhcoin.ai
tvhf.com
tvhuan.com
tvjianshen.com
tvkuai.com
tvmao.com
tvmcloud.com
+tvmining.com
tvoao.com
tvodapi.com
tvodapibk.com
@@ -90548,7 +91019,7 @@ tw-joly.com
tw-yun.com
tw2sm.com
twanxi.com
-twb520.com
+twatchesmall.com
twbuild.org
twcczhu.com
twd2.me
@@ -90574,8 +91045,8 @@ twszs.com
twtime.vip
twtstudio.com
twty.vip
+twwtn.com
twyuxin.com
-twyxh.com
twyxi.com
twzilla.com
twzui6.com
@@ -90634,7 +91105,6 @@ txjhqh.com
txjscl.com
txjsjgs888.com
txjy689.com
-txkjaisa.asia
txlctong.com
txleshare.com
txlivecdn.com
@@ -90694,9 +91164,7 @@ txzuranji.com
ty-archdesign.com
ty-group.net
ty-im.com
-ty-job.com
ty-magnet.com
-ty-space.com
ty-tyre.com
ty-xxl.com
ty.ink
@@ -90735,7 +91203,6 @@ tyhjzx.com
tyi365.com
tyihome.com
tyjd.cc
-tyjdj.org
tyjnkj.com
tyjsq.com
tykd.com
@@ -90745,6 +91212,7 @@ tym001.com
tymcdn.com
tymotor.cc
tyn.cc
+tynlwx.com
tynxy.com
tyorient.com
tyouai.com
@@ -90759,6 +91227,7 @@ typora.net
typrotech.com
typstify.com
tyqian.com
+tyqxzx.com
tyrantg.com
tyrbl.com
tyrbw.com
@@ -90767,7 +91236,6 @@ tysih.com
tysj365.com
tyst.cc
tyszy.com
-tyt.net
tytgigty.com
tytlj.com
tytuyoo.com
@@ -90786,7 +91254,6 @@ tywxw.la
tyxcdn.com
tyxcdn.net
tyy6.com
-tyycsm.com
tyymt.com
tyzh.com
tyzhjx.com
@@ -90808,6 +91275,7 @@ tz777666.com
tz8733.com
tz887.com
tz8966.com
+tzada.com
tzbank.com
tzbank.net
tzbao.com
@@ -90845,7 +91313,6 @@ tzqytv.com
tzrc.com
tzres.com
tzrl.com
-tzrsks.com
tzsfhxx.com
tzshipping.net
tzsnw.com
@@ -90872,14 +91339,12 @@ tzyun.com
tzyy-sh.com
tzyyao.com
tzyyjt.com
-tzyzkj.com
tzzhkj.com
tzzhtc.com
tzzls.com
tzzp.com
tzzszb.com
tzzx.net
-tzzxrmyy.com
u-camera.com
u-carloan.com
u-cdn.net
@@ -90908,6 +91373,7 @@ u17i.com
u17t.com
u21a.com
u22e.com
+u235.net
u2j2ha.com
u2sz.com
u3dc.com
@@ -90933,13 +91399,13 @@ u8e.com
u8see.com
u8sy.com
u8yx.com
-u99tt.com
u9baoku.xyz
u9h.com
u9time.com
u9u8.com
u9u9.com
u9wan.com
+uabkrsj.xyz
uahh.site
uancf.com
uandi-wireless.com
@@ -91066,17 +91532,20 @@ ucuuc.com
ucw.pub
ucweb.com
ucxsw.com
+ucying.com
uczzd.com
uczzd.net
udache.com
udalogistic.com
udamall.com
+udangjia.com
udasauto.com
udashi.com
udbac.com
udcgroup.com
udcn.com
uddtrip.com
+udecig.com
udelivrs.com
udeskcs.com
udeskglobal.com
@@ -91109,6 +91578,7 @@ uelike.com
uemo.net
ueno-china.com
uenu.com
+ueoqex.help
ueren.com
uestcedu.com
uestcliuxue.com
@@ -91128,8 +91598,10 @@ ufhosted.com
ufida-lcwy.com
ufidaoa.com
ufileos.com
+ufirefly.com
ufizl.com
uflowx.com
+ufo.club
ufo110.net
ufoer.com
ufojoy.com
@@ -91147,19 +91619,18 @@ ugc-up-dom.net
ugdesk.com
ugdocker.link
ugdtimg.com
-ugediao.com
uggame.com
uggd.com
ugirls.tv
ugmars.com
ugmjd.com
-ugnas.cloud
ugnas.com
ugnx.net
ugo-china.com
ugojp.com
ugong.com
ugoshop.com
+ugostar.com
ugreen.cloud
ugreengroup.com
ugshare-img.com
@@ -91168,6 +91639,7 @@ ugslb.info
ugslb.net
ugslb2.net
ugsnx.com
+ugubl.net
ugurl.cc
ugxsd.com
uhabo.com
@@ -91191,6 +91663,7 @@ ui100day.com
ui63.com
uibep.com
uibhealthcare.com
+uibmm.com
uicats.com
uicmall.com
uicom.net
@@ -91254,13 +91727,13 @@ ukoo.net
ukosgolfcart.com
ukpass.org
ukpathway.com
-ukqu.com
ukrainevisacenter.com
uku6.com
ukubang.com
ukui.org
ukusk12.com
ukvisacenterd.com
+ukworldsale.com
ulab360.com
ulamps.com
ulanzou.com
@@ -91283,7 +91756,7 @@ ulikepic.com
ulikestatic.com
ulinix.com
ulinix.tv
-ulongemg.com
+ulinkcollege.com
ulpay.com
ultracachenode.com
ultraeda.com
@@ -91345,7 +91818,6 @@ unachina.org
unaming.info
unaming.net
unbank.info
-unbbs.net
unccr.com
uncfa.org
uncitys.com
@@ -91359,17 +91831,18 @@ unclenoway.net
unclenowayapi.com
uncletalk.com
unclicks.com
+uncoverman.com
under-5.shop
underfill.cc
uneed.com
-uneedx.com
unfish.net
ungifts.com
uni-cent.com
uni-perfect.com
uni-ubi.com
-uni4006.net
+unibeauty.net
unibizp.com
+unicde.com
unicloud.com
unicloudgov.com
unicloudsrv.com
@@ -91385,7 +91858,6 @@ unicompayment.org
unicomtest.com
unicon-hibar.com
unietec.net
-unifiedbus.com
unifl-networks.com
uniflows.com
unifound.net
@@ -91462,6 +91934,7 @@ unitree.work
unittec.com
unitweld.com
unitymanual.com
+unityonehold.com
univ-bio.com
university-hr.com
uniview.com
@@ -91477,6 +91950,7 @@ unlcn.com
unlgroup.com
unlimax.com
unlimithealth.com
+unlitui.com
unn114.com
unncahs.net
unnnnn.com
@@ -91489,6 +91963,7 @@ unsedu.com
unsemi.com.tw
unshan.com
unsuv.com
+unvmax.com
unwtonews.com
unyx.com
unzg.com
@@ -91504,6 +91979,7 @@ uoko.com
uokon.com
uomg.com
uomo.cc
+uonglong.store
uonline-sh.com
uonline-sh.net
uono4521.com
@@ -91538,6 +92014,7 @@ upantool.com
upashance.com
upbiao.com
upbz.net
+upc-cn.com
upcave.com
upcd.org
upcdn.net
@@ -91545,10 +92022,11 @@ upchina.com
upchinapro.com
upchinaproduct.com
upd.kaspersky.com
+update1.cyou
+update2.cyou
update8.com
updeals.com
updf.com
-updownstream.xyz
updrv.com
upe.net
upecp.com
@@ -91569,7 +92047,6 @@ upkuajing.com
uplookedu.com
uplooking.com
upluck.cc
-upma.site
upnono.com
upowerchain.com
uppershop.hk
@@ -91595,7 +92072,6 @@ upvixusa.com
upvr.net
upwater.net
upx8.com
-upxuan.com
upyun.com
upzxt.com
upzxt.net
@@ -91649,6 +92125,7 @@ urtrust.com
urumqi-air.com
urumqimarathon.com
urumqimtr.com
+us-ex.com
us-qianzheng.com
us0.me
usa-gam.com
@@ -91682,6 +92159,7 @@ useaudio.com
usecubes.com
uselesses.com
usensejn.com
+userbp.com
userhostting.com
userresearch.net
useryun.net
@@ -91712,6 +92190,7 @@ usoi.net
usonetrip.com
uspard.com
usqiaobao.com
+usst.store
ustack.com
ustalk.com
ustarl.com
@@ -91719,7 +92198,6 @@ ustbtc.com
ustc.edu
ustcers.com
ustui.com
-usunhome.com
usuredata.com
usus.ltd
usuuu.com
@@ -91745,6 +92223,7 @@ utgd.net
utiao.com
utofairy.com
utogame.com
+utom.design
utoper.com
utopiafar.com
utoppromo.com
@@ -91813,6 +92292,7 @@ uusky.com
uusoo.net
uustory.com
uustv.com
+uutils.com
uutop.com
uutrip.net
uutytp.com
@@ -91870,6 +92350,7 @@ uyang.co
uyanip.com
uyanke.com
uycnr.com
+uyesee.com
uyhjnm.com
uyiban.com
uyiqggpa.com
@@ -91883,6 +92364,7 @@ uyunbaby.com
uyuncdn.com
uyuncdn.net
uyunce.com
+uyunche.com
uzai.com
uzaicdn.com
uzhika.com
@@ -91911,6 +92393,7 @@ v15i.com
v1kf.com
v1lady.com
v1pin.com
+v1tx.com
v1zhushou.com
v2b3.com
v2ex.cc
@@ -91923,7 +92406,6 @@ v3.com
v3best.com
v3edu.org
v3mh.com
-v3x9.com
v4.cc
v479.com
v4dwkcv.com
@@ -91957,6 +92439,7 @@ v8gb.com
v977.com
v9b5n91.com
va-etong.com
+va05ex1.org
vaakwe.com
vaatn.com
vacepcvu.com
@@ -91998,6 +92481,7 @@ vanclimg.com
vanda.cc
vandream.com
vanform.com
+vangelinu.com
vangotech.com
vanjee.net
vanjoin.com
@@ -92022,6 +92506,7 @@ vanwardsmart.com
vanyee.net
vanzol.com
vaopo.com
+vapepie-web.com
vapps.me
vaptcha.com
vaptcha.net
@@ -92035,7 +92520,6 @@ vart.cc
varygroup.com
vasdgame.com
vasee.com
-vasen.com
vaslco.com
vasoon.com
vastlandsc.com
@@ -92049,7 +92533,6 @@ vautoshow.com
vaydeer.com
vayol.com
vayuan.com
-vazton.com
vazyme.com
vazymemedical.com
vbango.com
@@ -92065,7 +92548,6 @@ vbkhk.com
vbkrhk.com
vbmnmy.com
vbsemi.com
-vbw432.com
vc800.com
vcarepharmatech.com
vcbeat.net
@@ -92156,8 +92638,6 @@ vegalb.com
vegslb.com
vegtm.net
veicplive.com
-veigagslb.com
-veigagslb.net
veilytech.com
veinbase.com
veirun.com
@@ -92241,6 +92721,7 @@ vesystem.com
vetoolchain.com
vetscloud.com
vevor.net
+vez.me
vf5c.com
vfcdnrd.com
vfcsz.com
@@ -92249,6 +92730,7 @@ vfinemusic.com
vfocus.net
vftfishing.com
vfuiov.sbs
+vfuke.net
vfund.org
vfvdf.com
vfx123.com
@@ -92309,6 +92791,7 @@ vicp.cc
vicp.fun
vicp.io
vicp.net
+vicpalm.com
vicpv.com
vicrab.com
vicsdf.com
@@ -92366,6 +92849,7 @@ vikilife.com
vilives.com
villachina.com
viltd.com
+vim8.org
vimage1.com
vimage2.com
vimage3.com
@@ -92392,7 +92876,6 @@ vinsondata.com
violetgo.com
violinstudy.net
violinww.com
-vip-cdn.com
vip-chn.com
vip-lexiang.com
vip-wifi.com
@@ -92413,6 +92896,7 @@ vipabcyun.com
vipappsina.com
vipbaihe.com
vipbcw.com
+vipbla.com
vipbuluo.com
vipcaocao.com
vipchina.com
@@ -92425,6 +92909,7 @@ vipfengfei.com
vipfengxiao.com
vipfenxiang.com
vipfinal.com
+vipflonline.com
vipglobal.hk
vipgouyouhui.com
vipgs.net
@@ -92466,6 +92951,7 @@ vipskill.com
vipslib.com
vipsmt.com
vipsoft.cc
+vipsrc.com
vipstatic.com
vipstore.com
viptijian.com
@@ -92478,6 +92964,7 @@ vipxf.com
vipxs.la
vipyl.com
vipyyzz.com
+vipzhuanli.com
viqq.com
virbox.com
vircloud.net
@@ -92516,6 +93003,7 @@ visbodyfit.com
viscosefibre.com
visfarm.com
vishavideo.com
+visheng.com
vishoor.com
visinextek.com
vision-nj.com
@@ -92574,11 +93062,11 @@ vivojrkj.com
vivokb.com
vivosjpt.com
vivotc.com
-viwei.com
viwik.com
vixiu.com
vixue.com
viyouhui.com
+viyuan.com
vizo-dns.com
vjia.com
vjianshen1688.com
@@ -92640,6 +93128,7 @@ vmecum.com
vmengblog.com
vmeti.com
vmic.xyz
+vmicloud.com
vmkj.net
vmlib.com
vmoiver.com
@@ -92649,6 +93138,7 @@ vmoviercdn.com
vmsky.com
vmtdf.com
vmtnet.com
+vmuboh.com
vmuhyu.site
vmylan.com
vnadssb.com
@@ -92656,12 +93146,12 @@ vname.com
vnanke.com
vnet.com
vnet.mobi
+vniddlg.xyz
vnlin.com
vnnox.com
vnpy.com
vnvn33.com
vnzmi.com
-vo0.site
voa365.com
vobao.com
voc.ai
@@ -92722,20 +93212,13 @@ volcadvc.com
volcalb.com
volcanicengine.com
volcano-force.com
-volcanoaisearchshare.com
-volcanoarkshare.com
-volcapig.com
-volcapp.com
-volcappbuilder.com
volcautovod.com
volcbiz.com
volcca.com
-volcca.net
volccdn.com
volccdn1.com
volccdn2.com
volccloudidentity.com
-volcdcdnlb.net
volcddos.com
volcddos001.com
volcdem.com
@@ -92744,14 +93227,10 @@ volcdns-test.com
volcdns-test.net
volcdns.com
volcdns.pub
-volcdsagslb.net
-volcdsalb.net
volceapi.com
volceapplog.com
volcecr.com
volcecw.com
-volcengine-api-test.com
-volcengine-api.com
volcengine-dns.com
volcengine-dns.net
volcengine.com
@@ -92761,7 +93240,6 @@ volcengineapi.com
volcenginedns.com
volcenginedns.net
volcenginepaas.com
-volces-test.com
volces.com
volcfake.com
volcfcdn.com
@@ -92769,75 +93247,41 @@ volcfcdnbyte.com
volcfcdndvs.com
volcfcdndvs1.com
volcfcdndvs2.com
-volcfcdndvs3.com
volcfcdnplus.com
volcfcdnrd.com
volcfcdnsc.com
volcfxgjrtm.com
-volcgalb.net
volcgroup.com
-volcgslb-b.com
volcgslb-mlt.com
-volcgslb-mltb.com
volcgslb.com
-volcgtm-b.com
volcgtm.com
volchina.com
volciad.com
volcimagex.com
volcimagex.net
volcimagextest.com
-volcisms.com
-volclivebyte.com
-volclivedemo.com
volclivedvs.com
-volcliveplus.com
-volclivesaas01.com
-volclivesaas02.com
-volclivesaas03.com
-volclivesaas04.com
-volclivesaas05.com
-volclivesaasbp.com
-volclivesaascdn.com
volcmagicpage.com
volcmcdn1.com
volcmcdn2.com
volcmcdn3.com
volcmcdn4.com
volcmcdnalias.com
-volcmcdnalias1.com
-volcmcdnalias2.com
-volcmcdnsched1.com
-volcmcdnsched2.com
-volcmcp.com
-volcmedialive.com
-volcmedialivecn.com
-volcmedialivecnn.com
volcmgs.com
-volcmlt-b.com
volcmlt.com
volcmusecdn.com
volcocic.com
volcopjrtm.com
volcpartner.com
volcpartner.net
-volcpcs-test.com
-volcpcs.com
-volcproxy-boe.net
-volcproxy-test.net
-volcproxy.net
-volcsdns-test.com
volcsdns.com
-volcsdns.net
volcsirius.com
volcsiriusbd.com
volcspaceeduc.com
-volcstack.com
volctracer.com
volctrack.com
volctraffic.com
volctranscdn.com
-volcvehicle.com
volcvideo.com
volcvms.com
volcvod.com
@@ -92854,7 +93298,9 @@ voltmemo.com
vomicer.com
voming.com
vommatec.com
+voneseals.com
vonets.com
+vonng.com
vonwei.com
voo0.com
vooct.com
@@ -92915,7 +93361,6 @@ vpser.net
vpsguo.com
vpshu.com
vpsjxw.com
-vpsjyz.com
vpsno.com
vpsoff.net
vpsor.com
@@ -92939,11 +93384,13 @@ vr-cat.com
vr186.com
vr42.com
vrbeing.com
+vrbi.viveport.com
vrbig.com
vrbrothers.com
vrbt.mobi
vrcfo.com
vrdiamondtools.com
+vrindabg.com
vrjie.com
vrmajor.com
vrnew.com
@@ -92953,6 +93400,7 @@ vrqjcs.com
vrqq.org
vrrw.net
vrtyg.com
+vrupup.com
vrvlink.com
vrvmanager.com
vrwuhan.com
@@ -92961,6 +93409,7 @@ vrzhijia.com
vrzwk.com
vrzwk.net
vs-gascloud.com
+vs.cm
vs2a.com
vsaker.com
vsamhos.com
@@ -92989,6 +93438,7 @@ vsoontech.com
vsping.com
vspk.com
vsread.com
+vssou.com
vsszan.com
vstarstatic.com
vstart.net
@@ -93051,7 +93501,6 @@ vv91.net
vvbin.com
vvebo.vip
vvfeng.com
-vvghj1023.com
vvgroup.com
vvhan.com
vvhunter.com
@@ -93071,22 +93520,22 @@ vvvtt.com
vvxue.com
vvzero.com
vw888.com
+vwaycn.com
vwe5pjt0jq.com
vwhulian.com
vwkbh1674.com
vwo50.club
vwvvwv.com
vwwmsd.com
-vx.com
vx56.com
vxe.com
vxia.net
vxiaocheng.com
vxinyou.com
vxixi.com
-vxni.ink
vxo7tu.com
vxocok3197.vip
+vxras.com
vxsnk.com
vxuepin.com
vxuey.com
@@ -93100,6 +93549,7 @@ vynior.com
vyuan8.com
vyymnahi.com
vz.download.prss.microsoft.com
+vz41.com
vzan.cc
vzan.com
vzhang.net
@@ -93119,13 +93569,13 @@ w-e.cc
w-startech.com
w-zhong.com
w.biz
-w0028.cc
w032.com
w0663.com
w0y.com
w10a.com
w10xitong.com
w123w.com
+w18.net
w1989.com
w1b.com
w218.com
@@ -93142,12 +93592,14 @@ w3ctech.com
w3cways.com
w3h5.com
w3pop.com
+w3so.com
w3techservices.com
w3tt.com
w3xue.com
w4vwizxrvepq.com
w5.com
w61usi4a.org
+w6pdp.com
w7.cc
w7000.com
w918.com
@@ -93160,6 +93612,7 @@ waaku.com
waakuu.com
waasee.com
wabcw.info
+wabestdealmall.com
wabuw.com
wacai.com
wacai365.com
@@ -93178,6 +93631,7 @@ wafatea.com
wafcn.com
wafunny.com
wagen.cc
+wagonsclub.com
waha.cc
wahahakid.org
waheaven.com
@@ -93213,7 +93667,6 @@ waimai.com
waimai.zone
waimai101.com
waimai361.com
-waimaijuan.com
waimaimingtang.com
waimaiwanjia.com
waimaob2c.com
@@ -93227,6 +93680,7 @@ waipojia.com
waiqicha.com
waiqin365.com
waisnj.com
+waiting.monster
waitsun.com
waiyuedu.com
waizaowang.com
@@ -93237,6 +93691,7 @@ wakeai.tech
wakedata.com
wakeofgods.com
wakeup.fun
+wakingsands.com
wakkaa.com
wakuai.com
walanwalan.com
@@ -93249,6 +93704,7 @@ walimaker.com
walk-live.com
walker-fan.com
walkera.com
+walkingpad.com
walkkind.com
walknode.com
walkthechat.com
@@ -93284,7 +93740,6 @@ wan886.com
wan898.com
wan95.com
wanadalu.com
-wanan8888.icu
wanandroid.com
wanbaapp.com
wanbexpress.com
@@ -93338,6 +93793,7 @@ wanfangche.com
wanfangdata.com
wanfangtech.com
wanfangtech.net
+wanfantian.com
wanfayun.com
wanfoquan.com
wanfucc.com
@@ -93380,12 +93836,14 @@ wangdianmaster.com
wangdingcup.com
wangdongjie.com
wangdu.site
+wangeda.com
wangeditor.com
wangejiba.com
wangfujing.com
wanggongwang.com
wanggou.com
wangguai.com
+wanghaifeng.net
wanghanyue.com
wanghao.me
wanghe.tv
@@ -93395,6 +93853,8 @@ wanghualang.com
wanghuinet.com
wanghz.com
wangid.com
+wangjiezhe.com
+wangjm.com
wangjubao.com
wangjumeng.xin
wangjunwei.com
@@ -93415,9 +93875,7 @@ wangmei360.com
wangmeng.com
wangmingdaquan.cc
wangmou.com
-wangmtd.asia
wangniuwms.com
-wangonglue.com
wangpeiaiot.com
wangpiao.com
wangpiao.net
@@ -93431,7 +93889,6 @@ wangshu.la
wangshuashua.com
wangshugu.com
wangsu.com
-wangsu8.com
wangsucloud.com
wangsuedge.com
wangsuedge.net
@@ -93523,6 +93980,7 @@ wanjutoy.com
wankacn.com
wankacn.net
wankamall.com
+wanke123.com
wankeji.com
wanku.com
wanlaiwang.com
@@ -93531,7 +93989,6 @@ wanli.org
wanlian-group.com
wanlicd.com
wanliduo.com
-wanlin888.com
wanliniu.com
wanlitong.com
wanlongdianqi.com
@@ -93577,6 +94034,7 @@ wanshu.com
wanshuiqing.com
wanshuiwater.com
wanshulou.com
+wanshuyun.com
wansixie.com
wansongpu.com
wansusyj.com
@@ -93594,6 +94052,7 @@ wantwords.net
wantwu.com
wantxt.cc
wanwan4399.com
+wanwan88.com
wanwang.com
wanwang.space
wanwang.xin
@@ -93693,7 +94152,9 @@ wasu.tv
wasucnc.com
watch-top.net
watch4s.com
+watchadmin.com
watchdios.com
+watchds.com
watcheschep.com
watchlead.com
watchok.net
@@ -93762,6 +94223,7 @@ waypons.com
waysundata.com
waytit.com
waytoagi.com
+wayupss.store
wayzim.com
wazhuti.com
wb133.com
@@ -93799,10 +94261,10 @@ wbtech.com
wbtrans.com
wbw.im
wbwbwb.net
-wbweilicai.com
wbxcx.net
wbxinxi.com
wbzd.net
+wc44.com
wcansoft.com
wcbygame.com
wcccc.cc
@@ -93811,6 +94273,7 @@ wcd.im
wcdc.center
wcfang.com
wch-ic.com
+wch17.com
wch666.com
wcjbb.com
wcjbb.net
@@ -93832,12 +94295,15 @@ wcxsw.com
wcyecs.com
wd-ljt.com
wdace.com
+wdad.cc
wdashi.com
wdaveh5game.com
wddcn.com
wddns.net
wddream.com
wdexam.com
+wdf1tz.com
+wdf1tz.net
wdfangyi.com
wdfxw.net
wdgf.com
@@ -93846,12 +94312,14 @@ wdiyi.com
wdj21.com
wdjimg.com
wdjky.com
+wdkao.com
wdklchina.com
wdkmall.com
wdku.net
wdkud6.com
wdldl.com
wdmcake.com
+wdmuz.com
wdmyksm.com
wdnld.com
wdomob.com
@@ -93868,7 +94336,6 @@ wdtec.cc
wduw.com
wdw88.com
wdwd.com
-wdwdcdn.com
wdwlb.com
wdxmzy.com
wdxtub.com
@@ -93879,6 +94346,7 @@ wdyxgames.com
wdyy.com
wdzj.com
wdzx.com
+we-ai.work
we-pass.com
we-vmaxgroup.com
we.com
@@ -93894,6 +94362,7 @@ we54.com
we7.cc
weachat.net
weadoc.com
+weakyon.com
weand.com
weaoo.com
weapp.com
@@ -93934,6 +94403,7 @@ web89.net
web930.com
webacc.net
webacg.com
+webadminsystem66.com
webank.com
webankapp.com
webankcdn.net
@@ -93970,7 +94440,6 @@ webnovel.com
webok.me
webok.net
webond.net
-weboss.hk
webpackjs.com
webportal.cc
webportalapi.com
@@ -94123,6 +94592,7 @@ weicher-sz.com
weichewl.com
weichuanbo.com
weichuangtech.com
+weichuming.com
weico.cc
weico.com
weicogif.com
@@ -94168,6 +94638,7 @@ weiguanlaw.com
weihai.tv
weihaibsy.com
weihaicollege.com
+weihaifengji.com
weihaihaiwang.com
weihaisheng.com
weihaobang.com
@@ -94197,7 +94668,6 @@ weiju.net
weijuju.com
weikaowu.com
weikasen.com
-weikazf.com
weike.fm
weike21.com
weikeimg.com
@@ -94247,6 +94717,7 @@ weimeigu.net
weimi24.com
weimiaocaishang.com
weimibio.com
+weimingchem.com
weimingcq.com
weimingedu.com
weimingkids.com
@@ -94331,6 +94802,7 @@ weituobang.net
weitupian.com
weitushe.com
weituya.com
+weiunity.com
weivd.com
weiwall.com
weiwangpu.com
@@ -94396,7 +94868,6 @@ weiyangx.com
weiyapaper.com
weiye-alu.com
weiye.me
-weiyeac.com
weiyes.com
weiyi.com
weiyi.link
@@ -94515,12 +94986,12 @@ wendangmao.net
wendangwang.com
wendax.com
wendaxiaowu.com
-wendincdn.com
wendns.com
wendoc.com
wendougee.com
wendu.com
wenduedu.com
+wendumao.com
wenfangcn.com
wenfangjushe.com
wenfangnet.com
@@ -94550,6 +95021,7 @@ wenjingnetwork.com
wenjingzhai.com
wenjiwu.com
wenju666.com
+wenjuan.cc
wenjuan.com
wenjuan.link
wenjuan.ltd
@@ -94591,6 +95063,7 @@ wenroo.com
wenrouge.com
wenryxu.com
wensang.com
+wensb.org
wenshaktv.com
wenshannet.com
wenshen.net
@@ -94671,11 +95144,11 @@ werlchem.com
wesane.com
wescrm.com
wesdom.me
-wesemibay.com
weshaketv.com
weshape3d.com
weshine.im
weshineapp.com
+wesiedu.com
wesimiot.com
wesing-game.com
wesingapp.com
@@ -94718,7 +95191,6 @@ wetestlab.net
wetherm.com
weti.me
wetimetech.com
-wetolink.com
weton.net
wetools.com
wetools.pro
@@ -94797,6 +95269,7 @@ wfswjt.com
wfsydzxyy.com
wfsyzx.net
wftihvn.xyz
+wftvqcm.com
wfuyu.com
wfwzg.xyz
wfy.pub
@@ -94822,6 +95295,7 @@ wgnds.com
wgoic.com
wgos.com
wgppt.com
+wgpsec.org
wgtechjx.com
wgxdxx.com
wgxy.com
@@ -94860,17 +95334,17 @@ whale-plus.com
whale123.com
whalecloud.com
whalefall.space
-whalesaas.com
whaleskts.com
+whalet.com
whaleunique.com
whalipaycs.com
whampoa-design.com
+whatbuytoday.com
whatchina.com
whatfugui.com
whatsns.com
whatswebyuo.com
whattheybuy.com
-whaty.com
whaudio.com
whbahyxh.com
whbaishitong.com
@@ -94880,6 +95354,7 @@ whbcrs.com
whbear.com
whbec.com
whbester.com
+whbgy.net
whbhst.com
whbjdn.com
whbts.com
@@ -94973,6 +95448,7 @@ whguo.com
whgwbn.net
whgyt.com
whhaifang.com
+whhaiyue.com
whhdcz.com
whhdgk.com
whhdjzzl.com
@@ -94990,6 +95466,7 @@ whhksj.com
whhmgroup.com
whhmmbl.com
whhouse.com
+whhpaccp.com
whhr.com
whhryd.com
whhsg.com
@@ -95014,6 +95491,7 @@ whicu.com
whidc.com
whidf.com
whidy.net
+whiee.com
whiie-expo.com
whinfo.net
whir.net
@@ -95034,11 +95512,11 @@ whjf.com
whjh120.com
whjiahai.com
whjiaoy.com
-whjiku.com
whjinlong.com
whjkcj.com
whjkct.com
whjksyxx.com
+whjldj.com
whjm.com
whjrjjt.com
whjrjt.com
@@ -95049,7 +95527,6 @@ whjtjt.com
whjuren.com
whjxbaby.com
whjy.net
-whjyapp.com
whjyx.com
whjyxh.com
whjyxx.com
@@ -95076,6 +95553,7 @@ whlgchache.com
whlib.com
whlido.com
whljyl.com
+whlkwy.com
whlovehome.com
whlpa.com
whlrhd.com
@@ -95112,6 +95590,7 @@ whovii.com
whpantosoft.com
whpanva.com
whpcschool.com
+whphbc.com
whplmd.com
whpma.org
whptc.org
@@ -95179,6 +95658,7 @@ whtpi.com
whtpyy.com
whtpyzx.com
whtran.com
+whtryg.com
whtryine.com
whtsapp-part.team
whtto.com
@@ -95307,6 +95787,7 @@ wificstia.com
wifidog.pro
wifidown.com
wifigx.com
+wifihell.com
wifijy.com
wifilu.com
wifimsl.com
@@ -95414,6 +95895,7 @@ windmsn.com
windoor168.com
windows10.pro
windows10zj.com
+windows11.pro
windows7en.com
windowstool.net
windowszj.com
@@ -95454,7 +95936,6 @@ winhlb.com
winhong.com
winicssec.com
winjoinit.com
-winkcake.com
winkingworks.com
winkkie.com
winksi.com
@@ -95467,10 +95948,8 @@ winner9.com
winnerholding.com
winnermicro.com
winnerracing.com
-winnershang.com
winnerway.com
winnet.cc
-winning11cn.com
winningdq.com
winos.me
winotes.net
@@ -95635,11 +96114,13 @@ wjgslb.com
wjhh666.com
wjhotelgroup.com
wjhr.net
+wjhtxx.com
wjiaxing.com
wjin.cc
wjinmiao.com
wjjfjt.com
wjjyxxw.com
+wjkjxcx.com
wjlxmedia.com
wjmh8.com
wjnin.cc
@@ -95678,10 +96159,10 @@ wkdty.com
wkepu.com
wkhub.com
wkimg.com
+wkkshu.com
wklken.me
wkmic.com
wknky1296.com
-wkoooo.com
wkopen.com
wkread.com
wksc.com
@@ -95703,9 +96184,11 @@ wlai.vip
wlaiy.com
wlanadmin.com
wlanbanlv.com
+wlcbnews.com
wlcbw.com
wlcxx.com
wldbs.com
+wldlr.com
wldmarket.com
wlds.net
wldsb.com
@@ -95713,6 +96196,7 @@ wldservice.com
wlerp.com
wlfce.com
wlfimms.com
+wlgkk.com
wlgooo.com
wlgou.com
wlhcc.com
@@ -95722,16 +96206,18 @@ wlinfor.com
wljhealth.com
wlkgo.com
wlkst.com
+wlku.com
wll-xyz.com
wllxcl.com
+wllxx.com
wllxy.net
wlmf.vip
wlmq.com
wlmqedu.com
wlmqrc.com
+wlmqrsks.com
wlmqwb.com
wlnh.net
-wlnjsb.com
wlnkaep.xyz
wlnmp.com
wlnnosu.xyz
@@ -95746,7 +96232,6 @@ wlstock.com
wltieyaoban.com
wltong.com
wluotx.com
-wlups.com
wlwj.com
wlwltech.com
wlwx.com
@@ -95841,7 +96326,6 @@ wniec.com
wniecm.com
wnjdtz.com
wnkj88.com
-wnl.cc
wnlbs.com
wnlpromain.com
wnlproyunying.com
@@ -95885,7 +96369,6 @@ wo1wan.com
woa.com
woaap.com
woai310.com
-woaidiaoyu.com
woaidu.org
woaihaoyouxi.com
woaihuahua.com
@@ -95947,6 +96430,7 @@ woheschool.com
wohst8.com
wohuishou.club
woi3d.com
+woiauto.com
woiles.com
woiwrj.com
woiyu.com
@@ -95987,6 +96471,7 @@ wolongge.com
wolongmedia.com
wolongyin.com
wolongyoule.com
+wolunliuliangji.org
wolwo.ltd
wolwobiotech.com
wom186.com
@@ -96071,7 +96556,7 @@ wopop.com
woqifoundation.com
woqu.com
woquyun.com
-word2txt.com
+word666.com
wordfc.com
wordlm.com
wordplay.work
@@ -96080,11 +96565,11 @@ wordscan.net
wordscheck.com
wordstorming.com
wordsunny.com
-workbuddy.link
workchat.com
workec.com
workehr.com
workerman.net
+workhelpmanila.com
workpcb.com
worksoho.com
worktile.com
@@ -96169,7 +96654,6 @@ woxian.com
woxiaoyun.com
woxihuan.com
woxiu.com
-woxshare.com
woxuexue.com
woxuyuan.com
woyao998.com
@@ -96193,7 +96677,7 @@ wozhuan.com
wp-china-yes.net
wp-hz.com
wpan123.com
-wpbattery.com
+wpceo.com
wpcio.com
wpcsh.com
wpcy.com
@@ -96237,6 +96721,7 @@ wqchat.com
wqcsjt.com
wqdian.com
wqdian.net
+wqdsq.com
wqgp.com
wqhome.com
wqhunqing.com
@@ -96259,7 +96744,6 @@ wrcdn.com
wrdtech.com
wrfou.com
wright9.com
-wrilab.com
write-bug.com
writebp.com
writingo-editor.com
@@ -96312,6 +96796,8 @@ wsdvs.info
wsdvs.org
wsecar.com
wseen.com
+wselearning.com
+wselearning.net
wsf1234.com
wsfdl.com
wsfdn.com
@@ -96333,7 +96819,6 @@ wsgri.com
wsgtm1.com
wsgtm3.com
wshang.com
-wshbe.com
wshbzc.com
wshengda2009.com
wshenm.com
@@ -96414,6 +96899,7 @@ wtd56.com
wtdex.com
wtdms.com
wtecl.com
+wtfeng.com
wtiharbin.com
wtimm.com
wting.info
@@ -96424,6 +96910,7 @@ wtmtest.com
wtn-bearing.com
wto-btb.com
wto168.net
+wto9000.com
wtobj.com
wtoip.com
wtojob.com
@@ -96494,6 +96981,7 @@ wugongdong.com
wuguyufen.com
wugx.net
wuhaidaily.com
+wuhaijy.com
wuhan-guide.com
wuhan-tour.net
wuhan.com
@@ -96537,7 +97025,6 @@ wuhanwyg.com
wuhanyushidai.com
wuhao13.xin
wuhema.com
-wuhetumu.com
wuhexxg.com
wuhongsheng.com
wuht.net
@@ -96601,6 +97088,7 @@ wuli.wiki
wuliangroup.com
wuliannanjing.com
wuliaoo.com
+wuliaosi.com
wuliaozhuan.com
wuliapi.com
wulicdn.com
@@ -96708,7 +97196,6 @@ wuxishuangfan.com
wuxishuangyou.com
wuxisj.com
wuxitianlang.com
-wuxituozhan.com
wuxiwang.net
wuxiwanli.com
wuxiwenlv.com
@@ -96729,6 +97216,7 @@ wuyangkeji.com
wuyangmotor.com
wuyangplatform.com
wuyantonglun.org
+wuyazi.com
wuyecao.net
wuyechaorenrcw.com
wuyenews.com
@@ -96736,7 +97224,6 @@ wuyetongxin.com
wuyetoutiao.com
wuyi.link
wuyijt.com
-wuying.com
wuyishan.net
wuyixinyi.com
wuylh.com
@@ -96807,6 +97294,7 @@ wwstat.com
www-666789.com
www-76244.com
www-jabuank-co-jp.net
+www.amd.com
www.cdnetworks.com
www.cg
www.com.my
@@ -96814,10 +97302,16 @@ www.djivideos.com
www.epsonconnect.com
www.gov.mo
www.htc.com
+www.nike.com
www.redhat.com
www.st.com
www.vive.com
+www.viveport.com
+www.volvocars.com
www100789.com
+www11ic-shinkni-ib-jp.com
+www2489.com
+www48-365365.com
www9912.com
wwwer.net
wwwfkw.com
@@ -96891,7 +97385,6 @@ wxfncjd.com
wxfr.net
wxfsdff.com
wxfsgj.com
-wxfuyou.com
wxfxw.com
wxgamemini.com
wxgamemini.work
@@ -96961,6 +97454,7 @@ wxmolegames.com
wxmovie.com
wxmuseum.com
wxnacy.com
+wxngh.com
wxpangu.com
wxpayui.com
wxpmc.com
@@ -96998,6 +97492,7 @@ wxt2020.com
wxtaihujx.com
wxtcm.com
wxtcxny.com
+wxtdf.com
wxthe.com
wxtj.com
wxtj10086.com
@@ -97005,6 +97500,7 @@ wxtpb.com
wxtrirh.com
wxtrust.com
wxtyjt.com
+wxtyyy.com
wxurls.com
wxutil.com
wxw120.com
@@ -97061,6 +97557,7 @@ wyfluorine.com
wygkmitk.com
wyh138.com
wyhef.com
+wyhos.fun
wyins.cc
wyins.net
wyjianzhan.com
@@ -97239,6 +97736,7 @@ wzzbtb.com
wzzcd.com
wzzjzxx.com
wzzlovesli.com
+wzznft.com
wzzp.com
wzzpw.net
wzzqqh.com
@@ -97250,9 +97748,7 @@ x-abt.com
x-bull.com
x-cloud.cc
x-cmd.com
-x-dao.io
x-droners.com
-x-gpu.com
x-imagine.com
x-jishu.com
x-kicks.com
@@ -97265,6 +97761,7 @@ x-tetris.com
x-vsion.com
x0246.com
x0769.com
+x1106y.mobi
x118.net
x1abo.com
x23us.us
@@ -97296,7 +97793,6 @@ x86pi.com
x8ds.com
x8sb.com
xa-bank.com
-xa-junxu.com
xa-online.com
xa-psj.com
xa.com
@@ -97305,10 +97801,12 @@ xa4.com
xa8yuan.com
xa9t.com
xaaycz.com
-xabaoan.com
+xabaotu.com
+xabbs.com
xabpo.com
xacademy.cc
xacbank.com
+xacg.info
xachangda.com
xachangxing.com
xachanhe.com
@@ -97319,6 +97817,7 @@ xacnnic.com
xacsjsedu.com
xactad.net
xacxxy.com
+xacyyxq.com
xadamai.com
xadlwx.com
xadsa.com
@@ -97355,7 +97854,6 @@ xajx.com
xajxcw.com
xakaili.com
xakjgzz.com
-xaklkx.com
xakqby.com
xakrlab.com
xalanq.com
@@ -97412,13 +97910,11 @@ xaxcgx.com
xaxddz.com
xaxydr.com
xaxzlsgs.com
-xay.zone
xayabx.com
xayestar.com
xaygddc.com
xayhedu.com
xayizhou.com
-xaykxx.com
xayzjc.com
xazbts.com
xazcit.com
@@ -97431,6 +97927,7 @@ xazzs.com
xb.app
xb0.cc
xb2s.com
+xbaixing.com
xbaodi.com
xbaofun.com
xbase.cloud
@@ -97477,6 +97974,7 @@ xbjtkj.com
xbk.icu
xbkjvip.com
xblaw.com
+xblou.com
xblqb.com
xblqugex.cc
xblsign.com
@@ -97546,6 +98044,7 @@ xcjmcnc.com
xcjtjt.com
xcjyxx.com
xckfsq.com
+xckgq.com
xckpjs.com
xckssw.com
xckszx.com
@@ -97563,7 +98062,6 @@ xcode.me
xcoder.in
xcommon.com
xcoodir.com
-xcoresigma.com
xcot.com
xcpapa.site
xcpapa.xyz
@@ -97581,8 +98079,6 @@ xcultur.com
xcurrency.com
xcvec.com
xcvmbyte.com
-xcvpn.app
-xcvpn.com
xcvvs.com
xcx-x.com
xcxd-inc.com
@@ -97593,7 +98089,6 @@ xcxwo.com
xcxymw.com
xcxzww.com
xcyg.net
-xcz.im
xczhmzb.com
xczhsh.com
xczim.com
@@ -97618,7 +98113,6 @@ xdcdn.net
xdcg100.com
xddpay.com
xde.com
-xde538.com
xdebike.com
xdf99.com
xdfckjz.com
@@ -97695,6 +98189,7 @@ xdyy.net
xdyy100.com
xdyyws.com
xdzhsw.com
+xdzu.net
xe-live.com
xed.plus
xedaojia.com
@@ -97768,7 +98263,6 @@ xfjxs.com
xflapp.com
xflimg.com
xfliusheng.com
-xflowedge.com
xflstatic.com
xfltd.net
xfnano.com
@@ -97817,6 +98311,7 @@ xgdfz.com
xgdown.com
xgdq.com
xgdqsn.com
+xggj56.com
xggjj.com
xghylt.com
xgimi.com
@@ -97841,6 +98336,7 @@ xgqq.com
xgqyy.com
xgsdk.com
xgsdpm.com
+xgss.net
xgsxt.net
xgsyun.com
xgt2014.com
@@ -97885,7 +98381,6 @@ xhg.com
xhgame.com
xhgamesdk.com
xhgz.com
-xhh.club
xhh.pw
xhhd6.com
xhhdd.cc
@@ -97906,6 +98401,7 @@ xhjs168.com
xhjt.com
xhjyxxw.com
xhlcsl.com
+xhlld002.shop
xhlsgs.com
xhma.com
xhmedia.com
@@ -97923,7 +98419,6 @@ xhscdn.com
xhscdn.net
xhsd.com
xhsd.net
-xhsdzd.com
xhsf.com
xhslink.com
xhslw.com
@@ -97943,6 +98438,7 @@ xhw520.com
xhwater.com
xhwcdasha.com
xhwhouse.com
+xhwtech.com
xhwx100.com
xhwyzsd.com
xhxcedu.com
@@ -97960,6 +98456,7 @@ xhzysg.com
xi-9.com
xi-soft.com
xi.biz
+xi.su
xi5jie.com
xia1ge.com
xiaa.net
@@ -97996,7 +98493,6 @@ xiamentianqi114.com
xiamenwater.com
xiami.com
xiami.net
-xiamiapi.xyz
xiamo.fun
xiamoyun.com
xiamp4.com
@@ -98013,6 +98509,8 @@ xianchengyou.com
xiancn.com
xiandaihospital.com
xiandaimuye.com
+xiandaiyuwen.com
+xiandanjia.com
xiandengdengguan.com
xianer.net
xianfae.com
@@ -98026,6 +98524,7 @@ xiang578.com
xiangange.com
xianganquan.com
xianganyu.com
+xiangauto.com
xiangbababus.com
xiangbinmeigui.com
xiangbojiubo.com
@@ -98038,8 +98537,8 @@ xiangdian.com
xiangdian.store
xiangguo.com
xiangguohe.com
+xiangha.com
xianghuanji.com
-xianghuiin.com
xianghumarathon.com
xianghunet.com
xianghus.com
@@ -98091,7 +98590,6 @@ xianguomall.com
xiangw.com
xiangwushuo.com
xiangxiangmf.com
-xiangxinggl.com
xiangxinggroup.com
xiangxingnet.com
xiangyang-marathon.com
@@ -98154,13 +98652,14 @@ xiansimo.com
xiansuan.com
xiantao-marathon.com
xiantao.com
-xiantaohuangshan.com
+xianweizhang.com
xianxiadao.com
xianxiadao.net
xianxiazhuanjz.com
xianxueba.com
xianxwzj.com
xianyang888.com
+xianyer.com
xianyongyong.com
xianyouhe.com
xianyuange.com
@@ -98181,8 +98680,8 @@ xianzxjy.com
xiao-an.com
xiao-bo.com
xiao-new.com
-xiao-xin.net
xiao100.com
+xiao2she.com
xiao688.com
xiaoa.name
xiaoac.com
@@ -98204,24 +98703,25 @@ xiaobaitool.net
xiaobaiupin.com
xiaobaivr.com
xiaobaixitong.com
+xiaobal.com
xiaobangbaoxian.com
xiaobangguihua.com
xiaobangtouzi.com
xiaobao360.com
+xiaobaodt.com
xiaobaoming.com
xiaobaoonline.com
xiaobaostudio.com
xiaobeibike.com
xiaobeigl.com
xiaobeiyangji.com
+xiaobianli8.com
xiaobingxitong.com
xiaobool.com
xiaobot.net
xiaobu.tech
-xiaobu.xin
xiaobu121.com
xiaobuwq.com
-xiaocaiyuan.com
xiaocanapp.com
xiaocanhulian.com
xiaocantech.com
@@ -98230,12 +98730,10 @@ xiaoce.fun
xiaocen.com
xiaochamao.com
xiaoche001.com
-xiaochenbaoku.com
xiaocheng.com
xiaochengxu029.com
xiaochengxucms.com
xiaochi198.com
-xiaochi7.com
xiaochixiang.com
xiaochuanyun.com
xiaocifang.com
@@ -98344,6 +98842,7 @@ xiaoice.com
xiaoj.com
xiaoji.com
xiaoji001.com
+xiaojian.site
xiaojiaokeji.com
xiaojiaoyar.com
xiaojiaoyu.com
@@ -98351,7 +98850,6 @@ xiaojiaoyu100.com
xiaojing.work
xiaojing360.com
xiaojinzi.com
-xiaojiyun.com
xiaojl.com
xiaojp.com
xiaojuchefu.com
@@ -98364,12 +98862,14 @@ xiaokanba.com
xiaokanglongjiang.com
xiaokao.com
xiaokaxiu.com
+xiaokcdn.com
xiaokcehui.com
xiaoke.space
xiaoke101.com
xiaokeai.com
xiaokeduo.com
xiaokepu.com
+xiaokesoso.com
xiaokuihua.net
xiaokusha.com
xiaolachuxing.com
@@ -98402,12 +98902,12 @@ xiaoluyy.com
xiaoluzhidian.com
xiaolvji.com
xiaolxiao.com
+xiaoma.com
xiaoma.net
xiaomachuxing.com
xiaomagaojian.com
xiaomai.live
xiaomai5.com
-xiaomaicn.com
xiaomaidong.com
xiaomaigongkao.com
xiaomaigui.com
@@ -98425,7 +98925,6 @@ xiaomazhixing.com
xiaomei.cc
xiaomeiti.com
xiaomeng1235.com
-xiaomengai.com
xiaomi.com
xiaomi.hk
xiaomi.net
@@ -98549,6 +99048,7 @@ xiaowiba.com
xiaowm.com
xiaowuwl.com
xiaoxia.vip
+xiaoxiaapi.com
xiaoxiang.club
xiaoxiangbz.com
xiaoxianggong.com
@@ -98610,7 +99110,6 @@ xiaoyouxi100.com
xiaoyouxiqun.com
xiaoyouzb.net
xiaoyu.com
-xiaoyuan888.com
xiaoyuananquantong.com
xiaoyuankousuan.com
xiaoyuansouti.com
@@ -98619,11 +99118,11 @@ xiaoyuanyun2.com
xiaoyuanzhao.com
xiaoyuanzhaopin.net
xiaoyuer.com
-xiaoyueyun.com
xiaoyujia.com
xiaoyun.com
xiaoyusan.com
xiaoyusanchou.com
+xiaoyutiao.com
xiaoyuxitong.com
xiaoyuzhoufm.com
xiaoz.me
@@ -98631,7 +99130,6 @@ xiaozhang365.com
xiaozhao365.com
xiaozhen.com
xiaozhenpaotui.com
-xiaozhenwaimai.com
xiaozhibaoxian.com
xiaozhibo.com
xiaozhimed.com
@@ -98655,6 +99153,7 @@ xiaozuanbike.com
xiaozufan.com
xiaozujian.com
xiaozuowen.net
+xiapac.com
xiapilu.com
xiappt.com
xiapu.co
@@ -98684,6 +99183,7 @@ xiazaijidi.com
xiazais.com
xiazaitool.com
xiazaiwx.com
+xibaike.com
xibanyaqz.com
xibao100.com
xibeicanyin.com
@@ -98728,6 +99228,7 @@ xiehehp.com
xiehejx.com
xiehekjkf.com
xiehepcb.com
+xiehouit.com
xiehuiyi.com
xiejiahe.com
xiejianji.com
@@ -98788,6 +99289,7 @@ xihuan
xihuan.me
xihusgh.com
xiimoon.com
+xiinnn.com
xiji-express.com
xiji.com
xijie.com
@@ -98809,6 +99311,7 @@ xikang365.net
xikcloud.com
xikii.com
xikoutourism.com
+xikrs.com
xikuan.com
xikuqi.com
xilaijian.com
@@ -98822,6 +99325,7 @@ xileyougame.com
xili.fan
xilian-group.com
xiliangjituan.com
+xilichi.com
xiliguoji.com
xilinsi.org
xilinx-ic.com
@@ -98944,13 +99448,13 @@ xinfuhk.com
xinfushe.com
xinfuyouxi.com
xinfuyun.net
+xing73.com
xingames.com
xingaochengtai.com
xingb.net
xingbangfl.com
xingbo.tv
xingchao1.com
-xingcheclub.com
xingchenjia.com
xingcheshixian.com
xingchiauto.com
@@ -98999,9 +99503,11 @@ xingjiaoyun.com
xingjiesj.com
xingjijy.com
xingjimob.com
+xingjuhe.com
xingjun-group.com
xingkec.com
xingkeqi.com
+xingketech.com
xingkongfy.xyz
xingkongmt.com
xingkupai.com
@@ -99040,6 +99546,7 @@ xingshangnet.com
xingshawater.com
xingshen.com
xingshu.com
+xingshuishuiwu.net
xingshulin.com
xingsteel.com
xingtai.net
@@ -99055,6 +99562,7 @@ xinguad.com
xinguangjian.com
xinguge.com
xinguida.com
+xingumin.net
xinguodu.com
xingvps.com
xingwajiang.com
@@ -99102,7 +99610,6 @@ xingzi-vision.com
xingzou.art
xingzoushu.com
xingzuo.com
-xingzuobaike.com
xingzuomi.com
xingzuowu.com
xingzuoyundns.com
@@ -99140,9 +99647,9 @@ xinhuanet.ltd
xinhuapo.com
xinhuaprs.com
xinhuapub.com
+xinhuaqipai.com
xinhuashe.org
xinhuashudian.com
-xinhuaskl.com
xinhuasuye.com
xinhuawang.com
xinhuawz.com
@@ -99150,6 +99657,7 @@ xinhuaxmt.com
xinhuayimin.com
xinhuazhiyun.com
xinhuozhi.com
+xining-marathon.com
xiniu.com
xiniu3d.com
xiniugushi.com
@@ -99169,9 +99677,9 @@ xinjinqiu.com
xinjiren.com
xinjisuan.net
xinju.fun
+xinjuc.com
xinjunshi.net
xinjunshicn.net
-xinkailawyer.com
xinkuai.com
xinlangtupian.com
xinle.com
@@ -99191,7 +99699,6 @@ xinlifudao.com
xinlilw.com
xinlinghuayuan.com
xinlingletu.com
-xinlingshou.com
xinlip.com
xinlischool.com
xinlishumeng.com
@@ -99224,8 +99731,9 @@ xinnetdns.com
xinnetvip.com
xinniangjie.com
xinnianhua.com
+xinnong.com
xinnong.net
-xinnuosf.com
+xinnuodazu.com
xino-tech.com
xinorngyk.com
xinouhk.com
@@ -99300,8 +99808,8 @@ xintianw.com
xintianya.net
xintiao100.com
xintiaogroup.com
-xintiaolv.com
xintiaoyouxi.com
+xintongconference.com
xintongwang.com
xintuan.com
xintucdn.com
@@ -99377,7 +99885,6 @@ xinyou.com
xinyoudui.com
xinyour.com
xinyu-tam.com
-xinyu1234.xyz
xinyu19.com
xinyuanclub.com
xinyuanf.com
@@ -99533,10 +100040,10 @@ xiushuang.com
xiushui.net
xiusifudianji.com
xiustatic.com
+xiutuan.com
xiutv.com
xiuxiandou.com
xiuxianshipin.com
-xiuxitong.com
xiuxiu.com
xiuxiuda.com
xiuxiustatic.com
@@ -99556,6 +100063,7 @@ xiwenquan.com
xiwicloud.com
xiwnn.com
xiwuji.com
+xiwuy.com
xixhx.com
xixiangongjiao.com
xixianwatergroup.com
@@ -99564,6 +100072,7 @@ xixiarc.com
xixibobo.com
xixidoudizhu.com
xixig8.com
+xixih.cc
xixih.net
xixik.com
xixik.net
@@ -99619,6 +100128,7 @@ xizice.com
xiziiparking.com
xiziquan.com
xiziwang.net
+xj-biotech.com
xj-etyy.com
xj-tianye.com
xj-zp.com
@@ -99710,6 +100220,7 @@ xjsmwl.com
xjsy56.com
xjtcm.com
xjtjjt.com
+xjtour.com
xjtrcw.com
xjtrry.com
xjtsnews.com
@@ -99741,6 +100252,7 @@ xjzhsh.com
xjzlyy.com
xjzp.net
xk57.com
+xk857.com
xk89.com
xk9l.com
xkaxka.com
@@ -99864,6 +100376,7 @@ xm-ais.net
xm-chuang.com
xm-gzf.com
xm-olympic-museum.org
+xm002.com
xm200.com
xm51.com
xm5156.com
@@ -99878,7 +100391,6 @@ xmaibu.com
xmalaya.com
xmamiga.com
xmanblog.net
-xmaosms.com
xmasg.com
xmayitxt.com
xmbankonline.com
@@ -99907,6 +100419,7 @@ xmfish.com
xmfls.net
xmfunny.com
xmgd.com
+xmgod.site
xmgps.com
xmgsd.com
xmgslx.com
@@ -99940,11 +100453,9 @@ xmjslh.com
xmjyw.com
xmjzykj.com
xmkanshu.com
-xmkj.beer
xml-journal.net
xmldz4.com
xmlhifi.com
-xmlib.net
xmlvbarcode.com
xmmade.com
xmmama.com
@@ -99953,7 +100464,6 @@ xmmtu.com
xmmuye.com
xmnjdwx.com
xmocloud01.com
-xmoj.tech
xmonecode.com
xmos.tv
xmov.ai
@@ -99987,7 +100497,6 @@ xmsumi.com
xmsuperlite.com
xmswim.com
xmtbang.com
-xmtcm.com
xmtyy.net
xmuli.tech
xmwan.com
@@ -100050,8 +100559,7 @@ xn--55qx5d
xn--55qzsxj5y4ozkz93dswptmau4jc88dg75ctid8raf29c.com
xn--5kv317c.com
xn--5tzm5g
-xn--65qy41j.com
-xn--6fr40zm5ai2go3cnse89dtttbrb.com
+xn--6fr61zj8c92fg34d.com
xn--6frz82g
xn--6kr66fp2ep1ac5edz2hy7s2wq.com
xn--6krw3qs7jl59b.com
@@ -100078,7 +100586,6 @@ xn--9pry86bq5ex68c.org
xn--b0t462i.com
xn--b0tp7p3met2a.com
xn--b0tp7p3met2a.net
-xn--bjq584at06c.shop
xn--btvs3aw8fhtbms310k.com
xn--btvu9x9qgt8c.com
xn--bxyy83e.net
@@ -100122,7 +100629,6 @@ xn--fjq5py34j65v.com
xn--fjq720a
xn--g2xx48c
xn--glr604k.com
-xn--gmq22ktps713c.cc
xn--gmq238c5fy.com
xn--gmqr9gdtrhuf56g.com
xn--h5qy75o.vip
@@ -100138,7 +100644,6 @@ xn--it-if7c19g5s4bps5c.com
xn--jh1a128b.com
xn--jor0b302fdhgwnccw8g.com
xn--jpr47zq87axwjc0d.com
-xn--jxqz98c.com
xn--jxuv1s.net
xn--kivq8be3whsi.com
xn--kput3i
@@ -100152,7 +100657,6 @@ xn--mts196b.net
xn--n5q75cia631gba51vx4ag2a008o08l1t0adzay2skp4b.com
xn--n6qy1xeobw60f.net
xn--ncym25ahib.net
-xn--nlya.cc
xn--nmqp78hmufjwu.com
xn--ntso8dsz1borbzvfm5h.com
xn--ntsp37j.net
@@ -100175,6 +100679,7 @@ xn--ror-j59d107t.net
xn--rpv331d.com
xn--rss237b.com
xn--rss404ac6aj60e.net
+xn--rsss0ke5ghnj.com
xn--ruqs20ac8b5z7av8ir2u.net
xn--ruqz9zcojm5sf19a.com
xn--s4t325g.com
@@ -100189,7 +100694,9 @@ xn--tlq092au7hsi3a.com
xn--tlqz3aj77agil76ww4ni2k.com
xn--tqq89g2tjj5x8xs.com
xn--unup4y
+xn--vcso1ukuz.net
xn--vcsu51b3zccpm.com
+xn--vcsu9p66gy1l9vpnnbk52f.com
xn--vhq3m33sbqhpsmtnuxfq.com
xn--vhq3mr8b802a.net
xn--vhq4ut2dsxd5xqnicjxxo55a756aovhik0aunm.com
@@ -100206,7 +100713,6 @@ xn--w9q675dm1p7em.net
xn--w9qr0k.com
xn--w9qy23cc6adz7d.net
xn--wbsz85a2a.com
-xn--wlq49r6tr7zal0u.com
xn--wxtr44c.live
xn--xcry9n251cvcar5xj6r.com
xn--xhq521b
@@ -100228,7 +100734,6 @@ xn--ykr169cm1pskt.com
xn--z4q559dueav8q.com
xn--z63a11k.com
xn--zfr164b
-xn--zfru1ggxt.fun
xn0.cc
xn121.com
xna8.com
@@ -100274,6 +100779,7 @@ xnzn.net
xnzxjy.com
xnzxyy.com
xnzyyy.com
+xo58tjrol4.work
xoao.com
xoliao.com
xooooa.com
@@ -100309,6 +100815,7 @@ xpccdn.com
xpcdz.com
xpcha.com
xpchina.net
+xpdf.net
xpeae.com
xpeng.link
xpf.cc
@@ -100319,9 +100826,9 @@ xpkjpk.com
xpkongqipao.com
xplaymobile.com
xppjzs.com
-xprinter.net
xpsup.com
xpsy.net
+xptt.com
xpu93.com
xpw888.com
xpwin7.com
@@ -100373,6 +100880,7 @@ xrender.com
xresgrbw.com
xrhhg.com
xrichengapp.com
+xrjjk.com
xrkapp.com
xrkcdn.com
xrlmold.com
@@ -100392,6 +100900,7 @@ xs-servers.com
xs058.com
xs3cnc.com
xs52.com
+xs63.info
xs7.cc
xs7.com
xs7.la
@@ -100466,7 +100975,6 @@ xsnow.net
xsnsyh.com
xsool.com
xsp0311.com
-xspacexx.org
xsphs.com
xspinfo.com
xspio.com
@@ -100485,6 +100993,7 @@ xstv.net
xstx.info
xstzgs.com
xsui.com
+xsuweb.com
xswang.com
xswdcasting.com
xsxgjsw.com
@@ -100549,6 +101058,7 @@ xtrapowercn.com
xtrc.net
xtrunc.com
xtsfuke.com
+xttaff.com
xttblog.com
xttz.com
xtu2.com
@@ -100624,6 +101134,7 @@ xuanyusong.com
xuanyutech.com
xuanzhi.com
xuanzhuanmumatuwen.com
+xuavieres.com
xubei.com
xuchencq.com
xuchuang.com
@@ -100699,7 +101210,6 @@ xueleku.com
xuelema.com
xueleyun.com
xueli9.com
-xuelian.live
xueliedu.com
xueming.li
xuenarui.com
@@ -100788,7 +101298,6 @@ xuexicn.com
xuexigang.com
xuexili.com
xuexin365.com
-xuexiniu.com
xuexinjiaoshi.com
xuexito.com
xuexitong.com
@@ -100886,6 +101395,7 @@ xunlong.tv
xunlongsoft.com
xunlu-led.com
xunlugame.com
+xunmai888.com
xunmall.net
xunmei.net
xunmeinet.com
@@ -100899,7 +101409,6 @@ xunsearch.com
xunshi.cc
xunsho.com
xunshou.com
-xunshu.org
xunsl.com
xunsn.com
xunsns.com
@@ -100956,7 +101465,6 @@ xuyanmaoyi.com
xuyechem.com
xuyi.net
xuyongrongmei.com
-xuyuanyi.com
xuyueswkj.com
xuyunjt.com
xuzai.com
@@ -100973,6 +101481,7 @@ xv5.com
xvacuum.com
xvhttu3c9.com
xvista.com
+xvjhzuc.com
xvuikerk.com
xvwprdk.com
xw-chip.com
@@ -101040,6 +101549,7 @@ xxcang.com
xxccx.com
xxcig.com
xxcipharm.com
+xxcmw.com
xxdao.com
xxeden.com
xxedu123.com
@@ -101052,7 +101562,6 @@ xxhnanke.com
xxhrd.com
xxinficity.com
xxir.com
-xxjnjd.com
xxjqgs.com
xxjrjxc.com
xxjzg.com
@@ -101068,7 +101577,6 @@ xxliudsp.com
xxlsmqzs.com
xxlwin.com
xxmac.com
-xxmlyy.com
xxmyf.com
xxnet.vip
xxnets.net
@@ -101104,10 +101612,10 @@ xxtiao.com
xxtjdz.com
xxtlw.com
xxtmail.com
-xxuuuw.com
xxw001.com
xxwolo.com
xxxbiquge.com
+xxxcsf.com
xxxedu.net
xxxfeng.com
xxxhhh.com
@@ -101135,6 +101643,7 @@ xxzsgame.com
xy-asia.com
xy-ddh.com
xy-dgyx.com
+xy-display.com
xy-invite.com
xy-mp.com
xy-technology.com
@@ -101169,6 +101678,7 @@ xyclouds.com
xycms.com
xycsq.com
xyctgroup.com
+xycwei.com
xycyky.com
xyda.cc
xydcname.com
@@ -101286,6 +101796,7 @@ xywlhlh.com
xywm.com
xywy.com
xywyfw.com
+xywzs.com
xyx234.com
xyxcables.com
xyxdie.com
@@ -101366,7 +101877,6 @@ xzcykg.com
xzdag.com
xzdfcd.com
xzdfyy.com
-xzdkyq.com
xzdtjt.com
xzep.net
xzepa.com
@@ -101392,7 +101902,6 @@ xzhpck.com
xzhyjsjt.com
xzhzkd.com
xzis.org
-xzisc.com
xzjhgt.com
xzjiufa.com
xzjsxy.com
@@ -101410,9 +101919,9 @@ xzlsqy.com
xzltrq.com
xzltzc.com
xzlzf.com
+xzmai.com
xznqcc.com
xznqnews.com
-xzong.online
xzoo.org
xzpf110.com
xzpm.com
@@ -101459,8 +101968,8 @@ xzxw.com
xzxx.com
xzxxlcp.com
xzyhealth.com
+xzyjl.com
xzynyy.com
-xzyseo.com
xzzh.com
xzzhbsq.com
xzzhongye.com
@@ -101562,6 +102071,7 @@ yafeilinux.com
yafenglvsuo.com
yago-mall.com
yahacode.com
+yahaha.net
yahaizi.com
yahanmr.com
yahboom.com
@@ -101578,9 +102088,9 @@ yaiyuan.com
yajxc.com
yake123.com
yake5.com
-yakejiayuan.com
yakgamer.com
yakjhfh.com
+yakool.com
yalayi.com
yalayi.net
yalewoo.com
@@ -101608,6 +102118,7 @@ yanbinghu.com
yanbm.com
yanbmn.com
yanboyuan.com
+yance.wiki
yanchebang.com
yancheng-culture.com
yanchengdj.com
@@ -101626,7 +102137,6 @@ yanfeng.com
yanfengauto.com
yanfukun.com
yang99.fun
-yangben001.com
yangbentong.com
yangbinlvshi.com
yangchanji.com
@@ -101637,7 +102147,6 @@ yangchunjian.com
yangcong.com
yangcong345.com
yangcongchufang.com
-yangcongxueyuan.com
yangdongjia.com
yangfannie.com
yanggang-group.com
@@ -101660,6 +102169,7 @@ yangki.net
yangkun.net
yanglaocn.com
yanglaofuwu365.com
+yanglaotiandi.com
yanglee.com
yangli.com
yangliping.com
@@ -101669,7 +102179,7 @@ yangluojob.com
yangmao.info
yangmi.net
yangmingauction.com
-yangmysq.com
+yangner.com
yangnongchem.com
yangoo-global.com
yangqi.show
@@ -101706,6 +102216,7 @@ yangxiangdb.com
yangxingzhen.com
yangxinren.com
yangyangad.com
+yangyangla.com
yangyanxing.com
yangyi.vip
yangyi02.com
@@ -101749,6 +102260,7 @@ yankon.com
yankong.com
yanliang.com
yanliaofang.work
+yanlong.shop
yanmaiyingyu.com
yannv.com
yanoda.com
@@ -101792,12 +102304,12 @@ yanxishe.com
yanxiu.com
yanxurui.cc
yanyib2b.com
+yanyidakaoyan.com
yanyijingling.com
yanyin.tech
yanyiquan.com
yanyiwu.com
yanyizc.com
-yanymobi.com
yanyue.net
yanyunmail.com
yanzhaorc.com
@@ -101806,7 +102318,6 @@ yanzhihuisc.com
yanzhiwu.com
yanzhoulugang.com
yao.com
-yao07.com
yao123.com
yao51.com
yaobo.net
@@ -101818,6 +102329,7 @@ yaocaizhongzi.com
yaocdn.com
yaochengwang.com
yaochentech.com
+yaochixie.com
yaochufa.com
yaocsoft.com
yaodinongye.com
@@ -101871,6 +102383,7 @@ yaoshanly.com
yaoshimiaolianhua.com
yaotia.com
yaotiannano.com
+yaotongjn.com
yaotou.com
yaoudq.com
yaowan.com
@@ -101947,7 +102460,7 @@ yayouapp.com
yaypool.com
yayu.net
yayunjiqi.com
-yazhongzhuangshi.com
+yazhougoufang.com
yazuo.com
yazx.net
yb-able.com
@@ -101974,6 +102487,7 @@ ybcnjg.com
ybcxjd.com
ybcxz.com
ybdbz.com
+ybdlogistic.com
ybe.net
ybgkz.com
ybgz.com
@@ -101982,7 +102496,6 @@ ybi.net
ybirds.com
ybj.com
ybjjsgc.com
-ybjk.com
ybk001.com
ybk168.com
ybk6.com
@@ -102033,6 +102546,7 @@ yc8.com
yc9y.com
ycait.com
ycamlyy.com
+ycandyz.com
ycangels.com
ycaqr.com
ycb.com
@@ -102070,7 +102584,6 @@ ycgwl.com
ycgzgame.com
ychcqmu.com
ychdzxsh.com
-ychld.com
ychr.com
ychromedgeie.com
ychszh.com
@@ -102078,6 +102591,7 @@ ychxie.com
ychxiex.com
ycig.com
ycigilink.com
+yciou.com
ycis-bj.com
ycis-cq.com
ycis-schools.com
@@ -102113,6 +102627,7 @@ ycny.com
ycoa0898.com
ycool.com
ycpack.net
+ycpai.com
ycpec.com
ycphkj.com
ycpinke.com
@@ -102178,7 +102693,6 @@ yd-power.com
yd-tec.com
yd126.com
yd166.com
-yd666cdn.com
ydadmob.com
ydalison.com
ydamc.com
@@ -102215,10 +102729,10 @@ ydjt2288.com
ydjwy.net
ydjy.net
ydkj2019.com
-ydkkej.com
ydl-sh.com
ydl.com
ydlcdn.com
+ydlut.com
ydmel.com
ydmeng.com
ydmob.com
@@ -102227,6 +102741,7 @@ ydniu.com
ydr.me
ydsaso.com
ydscan.net
+ydsjjs.com
ydsjpt.com
ydsrmyy.com
ydstatic.com
@@ -102236,13 +102751,12 @@ ydt.link
ydtbl.com
ydtnotary.com
ydtqd.com
-ydtxisp.com
yduav.com
ydwatch.com
ydwgame.net
ydx2.com
+ydxphb.com
ydxrf.com
-ydxxmk.com
ydxxt.com
ydyb.com
ydycdn.com
@@ -102268,12 +102782,10 @@ yealinkvc.com
yeaosound.com
yearlygreen.com
yearnfar.com
-yeasen.com
yeastar.com
yebaike.com
yebangyu.org
yebaojiasu.com
-yebeta.com
yebinnet.com
yeboyzq.com
yebrewing.com
@@ -102347,6 +102859,7 @@ yelot.com
yemacaijing.com
yemadai.com
yemajun.com
+yemancomic.com
yemaosheji.com
yemaosoft.com
yemayun.com
@@ -102415,11 +102928,10 @@ yesxun.com
yetaidrink.com
yetianlian.cc
yetianlian.info
+yetianzi.com
yettos.com
yetu.net
-yew734.com
yewanba.com
-yewcdn.com
yewen.us
yewuyuan.com
yexinggroup.com
@@ -102494,8 +103006,8 @@ yffy120.com
yffzkl.com
yfgg.com
yfgj68.com
-yfhcname2.com
yfhex.com
+yfhhf.com
yfhl.net
yfhospital.com
yfhxtech.com
@@ -102503,6 +103015,7 @@ yfinds.com
yfiot.com
yfisher.com
yfjiakao.com
+yfjnjc.com
yfklxz.com
yflcloud.online
yfldocker.com
@@ -102512,7 +103025,6 @@ yfmhgf.com
yfmhw.com
yfp2p.net
yfpayment.com
-yfqh.tech
yfsafety.com
yfsail.net
yfscdn.net
@@ -102545,7 +103057,6 @@ ygcooler.com
ygct.com
ygdatabase.com
ygdl.com
-ygduoyi.com
yge.me
ygeer.com
ygei.com
@@ -102567,6 +103078,7 @@ ygsf.com
ygsoft.com
ygtape.com
ygtcpa.com
+ygtf.net
ygtiyu.com
ygtl.com
ygtq.net
@@ -102585,9 +103097,9 @@ yh31.com
yh598.com
yh914.com
yh99.cc
+yh999999.com
yhachina.com
yham.net
-yhans.com
yhc-card.com
yhcangchu.com
yhchj.com
@@ -102599,6 +103111,7 @@ yhcmovie.com
yhcplatform.com
yhcqw.com
yhd.com
+yhdd365.shop
yhdfa.com
yhdi.net
yhdm5.com
@@ -102648,6 +103161,7 @@ yhthing.com
yhtools.cc
yhtuchuang.com
yhtx.tv
+yhtzx.net
yhurl.com
yhwch.com
yhwins.com
@@ -102667,6 +103181,7 @@ yhz365.com
yhz66.com
yhzky.net
yhzky1.net
+yhzm.cc
yhzm.com
yhzrt.com
yhzuche.com
@@ -102693,7 +103208,6 @@ yibaijin.com
yibaixun.com
yiban.io
yiban1314.com
-yibanbianji.com
yibaogao.com
yibaojiankang.com
yibaotech.com
@@ -102703,7 +103217,9 @@ yibeiwangluo.com
yibenmanhua.com
yibentushu.com
yibiao-sh.com
+yibite.com
yiboliu.com
+yiboow.com
yiboshi.com
yibotec.com
yiboyangguang.com
@@ -102728,12 +103244,12 @@ yichengfood.net
yichengji.com
yichengnews.com
yichengwangluo.net
-yichengwlkj.com
-yichenlawfirm.com
yicheshi.com
yichi.tech
yichip.com
+yichkp.com
yichuan.net
+yichuntv.com
yichuyifan.com
yickd.com
yiclear.com
@@ -102813,6 +103329,7 @@ yifancn.com
yifanggl.com
yifanghy.com
yifanmedia.net
+yifanshangplus.com
yifanyy.com
yifatong.com
yifei.com
@@ -102854,7 +103371,6 @@ yihafo.com
yihaikerry.net
yihaiquanyi.com
yihaishijia.com
-yihaisoft.com
yihang.info
yihao.com
yihao01.com
@@ -102934,7 +103450,6 @@ yikaiye.net
yikang.work
yikang1977.com
yikanxs.com
-yikao88.com
yikaoapp.com
yikaochacha.com
yikebus.com
@@ -102964,6 +103479,7 @@ yili.com
yilianapp.com
yilianmeiti.com
yilianyixue.com
+yiliaosheji.com
yilibabyclub.com
yilicar.com
yilihuo.com
@@ -102973,6 +103489,7 @@ yilikim.com
yilingarden.com
yilingshop.com
yilingsj.com
+yilinweb.com
yiliqqstar.com
yilishiji.com
yiliwater.com
@@ -103036,7 +103553,6 @@ yinchengli.com
yinchengpai.com
yinchuanwater.com
yinchuanzxd.com
-yindo-ohm.com
yindon.com
yindu.com
yinduchina.com
@@ -103088,6 +103604,7 @@ yinghuasuan.com
yinghuiiot.com
yinghuo.art
yinghuochong.com
+yinghuochong.fun
yinghuochongjz.com
yinghuodd.com
yinghuoqingsu.com
@@ -103115,13 +103632,13 @@ yingming.net
yingnor.com
yingpaigame.com
yingpaikeji.com
+yingpengbz.com
yingpost.com
yingriliuti.com
yingrongit.com
yingshe.com
yingsheng.com
yingshi-ai.com
-yingshi.dog
yingshiyou.com
yingso.fun
yingsoft.com
@@ -103132,7 +103649,6 @@ yingt.asia
yingt.fun
yingtai.com
yingtaigroup.com
-yingtailaw.com
yingtaorelian.com
yingtaosiyue.com
yingtaoyun.com
@@ -103196,7 +103712,6 @@ yinjia.com
yinjiabio.com
yinjispace.com
yinka.co
-yinkead.com
yinlimedia.com
yinlingshuyuan.com
yinlvaa.com
@@ -103253,9 +103768,9 @@ yinzuo100.com
yioulai.com
yiovo.com
yipai360.com
+yipaiming.com
yipaogan.com
yiparts.com
-yipayer.com
yipemail.com
yipeng888.com
yipiaoyun.com
@@ -103339,6 +103854,7 @@ yiruikecorp.com
yiruituo.com
yirujs.com
yiruniot.com
+yiruwijojn1.com
yiryi.com
yisa.com
yisanban.com
@@ -103366,6 +103882,7 @@ yishun.fun
yishutang.com
yishuzi.com
yishuzi.org
+yishuziti.com
yisier.com
yisimeimaoyi.xyz
yiso.fun
@@ -103513,7 +104030,6 @@ yiyouliao.com
yiyouliuxue.com
yiyouqi.com
yiyoushu.net
-yiyouxuan.xyz
yiyu.com
yiyuan.com
yiyuanluye.com
@@ -103530,10 +104046,11 @@ yizenb.com
yizeseafood.com
yizhanapp.com
yizhang8.com
-yizhangtu.com
+yizhanhulian.com
yizhanzx.com
yizhaopin.com
yizhedian.com
+yizhengwx.com
yizhibi.com
yizhibo.com
yizhifubj.com
@@ -103547,7 +104064,6 @@ yizhiwechat.com
yizhiweixin.com
yizhiws.com
yizhixiaogame.com
-yizhiyc.com
yizhoucb.com
yizhu-tech.com
yizhuan5.com
@@ -103557,7 +104073,6 @@ yizu.org
yizu.tv
yizumi-group.com
yizumi.com
-yizuren.com
yizuxing.com
yj-fun.com
yj-zn.com
@@ -103574,9 +104089,9 @@ yjcf360.com
yjcp.com
yjctrip.com
yjdatasos.com
-yjdjfw.com
yjfy.com
yjgf.com
+yjgxcx.com
yjhbqx.com
yjhnt888.com
yjhospital.com
@@ -103588,6 +104103,7 @@ yjiyun.com
yjjsjt.com
yjk.com
yjk.im
+yjkxw.org
yjldp.com
yjlhq.com
yjlin4.com
@@ -103623,12 +104139,12 @@ yjsry.com
yjssishisi.com
yjsswjt.com
yjswsht.xyz
-yjsyy.com
yjtiyu.com
yjtvw.com
yjtw.com
yjwlnet.com
yjwlo.com
+yjwmidc.com
yjwujian.com
yjxfz.com
yjxlawyer.com
@@ -103650,6 +104166,7 @@ ykccn.com
ykccn.net
ykcer.com
ykclass.com
+ykcuqlt.com
ykdgd.com
ykelai.com
ykfc.net
@@ -103671,7 +104188,6 @@ ykrcx.com
yksdks.com
yksign.com
yksjjt.com
-yksmgs.com
yksuit.com
ykt.io
yktchina.com
@@ -103753,6 +104269,7 @@ ylmf.cc
ylmf123.com
ylmf888.com
ylmfeng.com
+ylmfwin100.com
ylmfwin8.com
ylmm.com
ylnetworks.com
@@ -103773,6 +104290,7 @@ ylsssgg.com
ylstatic.com
ylstcgz.com
ylstudy.com
+ylsw.net
ylt2008.com
yltapi.com
yltender.com
@@ -103819,18 +104337,21 @@ ym01.tech
ym23.com
ym3222333.com
ymacg.com
+ymadly.com
ymailcampaign.com
ymanz.com
ymapp.com
ymark.cc
ymars.com
ymatou.com
+ymawv.la
ymbaidu.com
ymbank.com
ymcart.com
ymcart.net
ymcsepu.com
ymdoctor.com
+ymechina.com
ymexf.com
ymfund.com
ymg.cc
@@ -103855,6 +104376,7 @@ ymnsdk.com
ympc88.com
ympcb.com
ymrcw.vip
+yms.cool
ymsoft.team
ymsteam.com
ymt.com
@@ -103862,6 +104384,7 @@ ymt123.com
ymt360.com
ymtc.com
ymtie.com
+ymtmt.com
ymtnet.com
ymuuy.com
ymvkt.com
@@ -103870,11 +104393,9 @@ ymwl.net
ymxinke.com
ymxinxi.com
ymxlass.com
-ymy9.com
ymyun.com
ymyw.net
ymyxsw.com
-ymzec.com
ymzer.com
ymzsl.com
ymzxconf.com
@@ -103898,11 +104419,13 @@ yndaily.com
yndcc.com
yndkt.com
yndzdj.com
+yneg-ev.com
yneit.com
ynet.com
ynfmly.com
ynfww.com
ynfwyy.com
+ynfxw.com
yngas.net
yngp.com
yngsxy.net
@@ -103912,6 +104435,7 @@ ynho.com
ynhotel.net
ynhouse.com
ynhr.com
+ynhthbkj.com
ynhuasong.com
ynhzm.com
yni84.com
@@ -103952,7 +104476,6 @@ ynsfhq.com
ynshangji.com
ynshhyy.com
ynshijian.com
-ynsj001.com
ynsjg.com
ynsjzyxh.com
ynsmyy.com
@@ -103998,6 +104521,7 @@ ynzs.com
ynztrq.com
ynztzh.com
ynzy-tobacco.com
+ynzzwl.com
yo4399.com
yoagoa.com
yobo.ink
@@ -104053,7 +104577,6 @@ yokemart.com
yokmob.com
yokong.com
yolanda.hk
-yolcdn.com
yolcool.com
yolewa.com
yolexi.com
@@ -104107,6 +104630,7 @@ yongmei0537.com
yongnangroup.com
yongootech.com
yongqianbao.com
+yongqischool.net
yongridt.com
yongsheng-sl.com
yongshenggroup.com
@@ -104131,6 +104655,7 @@ yongxinxuexiao.com
yongxiuren.com
yongyi-valve.com
yongyoujia.com
+yongyu.xyz
yongyuenj.com
yongzhegroup.com
yongzhentang.com
@@ -104160,6 +104685,7 @@ yooek.com
yoofh.com
yoogene.com
yoohe.net
+yoohouse.com
yoojia.com
yoojing.com
yooknet.com
@@ -104172,6 +104698,7 @@ yooxun.com
yooyo.com
yoozai.com
yoozhe.com
+yoozhibo.cc
yoozhibo.net
yoozoo.com
yopoint.cc
@@ -104190,7 +104717,6 @@ yorui.net
yoseleather.com
yostar.net
yostatic.com
-yosulife.com
yotopic.com
you-mi.net
you03.com
@@ -104305,6 +104831,7 @@ youke.com
youked.com
youkeda.com
youkego.com
+youkexueyuan.com
youkia.com
youkia.net
youking.com
@@ -104325,10 +104852,12 @@ youleliwu.com
youlesp.com
youletd.com
youleyou.com
+youlian.fun
youlianfuwu.com
youliangda.com
youlianghz.com
youliao.com
+youliao.love
youliaobaike.com
youliaoyi.com
youlingtong.com
@@ -104524,7 +105053,6 @@ youxiqun.com
youxishuo.com
youxitexiao.com
youxituoluo.com
-youxiuhr.com
youxiuhui.com
youxiwugui.com
youxixinzhi.com
@@ -104571,7 +105099,6 @@ youyuan.com
youyudf.com
youyuegame.com
youyur.com
-youyuwei.com
youyuwenhuay.com
youyuwo.com
youyy.com
@@ -104583,7 +105110,6 @@ youzhan.org
youzhanjia.com
youzhao.com
youzhenhua.com
-youzhi.com
youzhi.net
youzhi99.com
youzhicai.com
@@ -104664,9 +105190,9 @@ ypppt.com
yprh.com
ypshengxian.com
ypshop.net
-ypshuo.com
ypstech.com
ypwater.com
+ypxiixs.xyz
ypyyjt.com
ypzdw.com
ypzhushou.com
@@ -104710,7 +105236,6 @@ yqrtv.com
yqsbz.com
yqslmall.com
yqsn.com
-yqt365.com
yqtg.cc
yqtkgzbk.com
yqtsgg.com
@@ -104724,6 +105249,7 @@ yqxsge.cc
yqxxjy.com
yqy021.com
yqybzhan.com
+yqyu.com
yqzww.cc
yqzww.net
yqzwww.com
@@ -104756,6 +105282,7 @@ yrz.name
ys-fj.com
ys-oss.xin
ys.cc
+ys001.com
ys0431.net
ys121.com
ys133.com
@@ -104778,8 +105305,8 @@ ysclass.net
yscq.com
yscro.com
ysczw.com
-ysdaima.com
-ysdp.online
+ysdq8.com
+ysdwe.asia
ysedu.com
ysej.com
ysemi.com
@@ -104808,8 +105335,8 @@ yskjz.com
yskjzj.com
yslawyer.com
yslcw.com
-yslidc.com
yslpaint.com
+yslqo.com
yslw.com
yslyhr.com
ysmiji.com
@@ -104839,7 +105366,6 @@ ystencdn.com
ysts.cc
ystsx.com
ystzzy.com
-ysudunwaf.com
ysug.com
ysupan.com
ysw1950.com
@@ -104881,12 +105407,14 @@ ytcbh.com
ytccr.com
ytchangyang.com
ytcj.com
+ytcnc.net
ytcutv.com
ytdaily.com
ytdcloud.com
yte1.com
ytecn.com
ytedi.com
+ytelc.com
yteng.net
ytesting.com
ytf8888.com
@@ -104898,7 +105426,6 @@ ytgos.com
ythairui.com
ythospital.com
ythouse.com
-ytj9999.com
ytjcpj.com
ytjiage.com
ytjob.com
@@ -104937,6 +105464,7 @@ ytpowder.com
ytpp.com
ytpu.com
ytqh-electric.com
+ytrain.com
ytrcw.com
ytrlzyw.com
ytrmtzx.com
@@ -104982,6 +105510,7 @@ yuanchengroup.com
yuanchengxiezuo.com
yuanchuangyinyue.com
yuancoder.com
+yuanda-fm.com
yuandacn.com
yuandaocn.com
yuandi.com
@@ -105024,7 +105553,6 @@ yuano.cc
yuanpanguoji.com
yuanqiao.net
yuanqiao.pw
-yuanqidesk.com
yuanqilt.com
yuanqingsh.com
yuanqisenlin.com
@@ -105045,7 +105573,6 @@ yuanteng.net
yuantest.com
yuantiku.biz
yuantiku.com
-yuantk.com
yuantongyizhan.com
yuantoushuo.com
yuantu.info
@@ -105053,6 +105580,7 @@ yuantuedu.com
yuantujun.com
yuantutech.com
yuanu.com
+yuanvip.shop
yuanweish.com
yuanwind.com
yuanwsk.com
@@ -105142,6 +105670,7 @@ yueduwuxianpic.com
yueduyun.com
yuegongyutu.com
yuegowu.com
+yuegui.shop
yueguisuchong.com
yuehaifeed.com
yuehaowy.com
@@ -105176,6 +105705,7 @@ yuenwooping-truelegend.com
yuenyled.com
yuepaijia.com
yueqi.com
+yueqiji.com
yueqikan.com
yueqingchayuan.com
yueqiweixiu.com
@@ -105229,7 +105759,6 @@ yueyangyy.com
yueyat.net
yueye7.com
yueyear.com
-yueyitingxin.com
yueyouxs.com
yueyu114.com
yueyuanzhiye.com
@@ -105279,6 +105808,11 @@ yuhuanghuagong.com
yuhucoldchain.com
yuhuijob.com
yuhx.com
+yui06111shga.com
+yui06130shga.com
+yui06131shga.com
+yui06161shga.com
+yui06171shga.com
yujia.com
yujiahui.com
yujianai520.com
@@ -105286,6 +105820,7 @@ yujianpay.com
yujianxiaomian.com
yujiawuliu.com
yujiefs.com
+yujifruit.com
yujingkj.com
yujiu.vip
yujpa.com
@@ -105295,7 +105830,6 @@ yukaidi.com
yukaiprecision.com
yukeinfo.com
yukeweb.com
-yukework.com
yukexinchem.com
yukicat.net
yukicomic.com
@@ -105324,6 +105858,7 @@ yulingtianxia.com
yulinhuaran.com
yulinjue.com
yulinqj.com
+yulins.com
yulinshidefu.com
yulinyw.com
yuliqx.com
@@ -105350,7 +105885,6 @@ yumi.com
yumimobi.com
yumingguwen.com
yumingyouhui.com
-yummxx.com
yummy.tech
yumstone.com
yun
@@ -105359,13 +105893,12 @@ yun-dns.com
yun-gu.com
yun-idc.com
yun-img.com
+yun-jinrong.com
yun-jintong.com
yun-kai.com
yun-live.com
yun-wp.com
-yun.wtf
yun123.com
-yun163.net
yun5.vip
yun61.com
yun88.com
@@ -105375,7 +105908,6 @@ yunannet.com
yunaq.com
yunarm.com
yunassess.com
-yunauth.com
yunaw.com
yunba.io
yunban.com
@@ -105475,6 +106007,7 @@ yunfuwuqiba.com
yungangbj.com
yungao-ssp.com
yungao.mobi
+yungbang.com
yungengxin.com
yungongchang.com
yungotec.com
@@ -105482,6 +106015,7 @@ yungou618.com
yungouos.com
yungpu.com
yungu.org
+yunguajibao.com
yungujia.com
yunhaicangshu.com
yunhaike.com
@@ -105505,7 +106039,6 @@ yunhulu.org
yunhuotong.net
yunifang.com
yunify.com
-yunikly.com
yunio.com
yunip.com
yunipo.com
@@ -105523,6 +106056,7 @@ yunjiemi.net
yunjifarm.com
yunjiglobal.com
yunjing720.com
+yunjingdian.net
yunjinggo.com
yunjinginc.com
yunjitele.com
@@ -105576,6 +106110,7 @@ yunos.com
yunpan.com
yunpanx.com
yunparking.cloud
+yunpay.cc
yunpei.com
yunpian.com
yunpiao.net
@@ -105585,7 +106120,6 @@ yunqi6.com
yunqiba.com
yunqifly.com
yunqiju.com
-yunqin.online
yunqingugm.com
yunqishi.net
yunqishi8.com
@@ -105693,7 +106227,6 @@ yunxish.com
yunxiu.com
yunxs.com
yunxuetang.com
-yunxukeji.xyz
yunxunmedia.com
yunxya.com
yunyangwang.com
@@ -105704,7 +106237,6 @@ yunyibiji.com
yunyichong.com
yunyihudong.com
yunyin.org
-yunyin.xin
yunyingbiotech.com
yunyingdashu.com
yunyingmiao.com
@@ -105740,7 +106272,6 @@ yunzhonghe.com
yunzhu100.com
yunzhuan.com
yunzhuangbei.com
-yunzhuru.com
yunzhuxue.com
yunzitraining.com
yunzmall.com
@@ -105751,11 +106282,11 @@ yunzuoye.net
yunzz.net
yuoucn.com
yupao.com
-yupaoad.com
yupaowang.com
yupeiholdings.com
yupinny.com
yupoo.com
+yupu.com
yuqianshu.com
yuqiao.com
yuqiaolong.com
@@ -105766,6 +106297,7 @@ yuque.com
yur09130og.com
yur09140og.com
yuren.org
+yuriimg.com
yurongoptical.com
yurun.com
yusa.me
@@ -105782,6 +106314,7 @@ yushu5.com
yushunews.com
yusi.com
yusi.tv
+yusi123.com
yusii.com
yusii.net
yusinvestment.com
@@ -105793,11 +106326,13 @@ yusxz.com
yutai365.com
yutainews.com
yutaoyouxi.com
+yuteng.site
yutennet.com
yutian.cc
yutianedu.com
yutonad.com
yutong.com
+yutongplay.vip
yutongzyc.com
yutuwo.com
yuucn.com
@@ -105809,6 +106344,7 @@ yuwanjianshe.com
yuwanyouxi.com
yuweikuijianzhan.com
yuweitek.com
+yuweiyanwo.com
yuwell.com
yuwellgroup.com
yuwen.net
@@ -105816,8 +106352,8 @@ yuwen123.com
yuwen360.com
yuwenchaoshi.com
yuwennews.com
+yuwenxiandaihua.com
yux.team
-yuxian.shop
yuxianall.com
yuxiangwang0525.com
yuxiaogroup.com
@@ -105876,13 +106412,13 @@ yvzfgigpiwmofux.com
yw11.com
yw160.com
yw2005.com
-yw70.com
ywart.com
ywbank.com
ywcbs.com
ywclxp.com
ywdier.com
ywei.org
+yweisugar.com
ywfby.com
ywgc.net
ywgd.com
@@ -105937,6 +106473,7 @@ yx93.com
yx988.com
yx99.com
yxacc6.com
+yxad.com
yxaz.com
yxbabe.com
yxbao.com
@@ -105948,6 +106485,7 @@ yxc.hk
yxcal.com
yxcax.com
yxcc.net
+yxcity.com
yxcxfw.com
yxdaily.com
yxdd.com
@@ -105960,6 +106498,7 @@ yxdown.com
yxdr.com
yxduo.com
yxdwj.com
+yxecg.com
yxeht.com
yxen.net
yxflzs.com
@@ -105972,6 +106511,7 @@ yxgczx.com
yxgf.net
yxgxbike.com
yxgxw.com
+yxgxz.com
yxhao.com
yxhapi.com
yxhenan.com
@@ -105984,7 +106524,6 @@ yxholding.com
yxhqj.com
yxhy.asia
yxhyu.com
-yxhyxh.com
yxi.cc
yxiannetgz.com
yxianypin.com
@@ -105994,7 +106533,6 @@ yxilogistics.com
yximgs.com
yxin18.com
yxinbao.com
-yxingfan.com
yxintent.com
yxit.net
yxixy.com
@@ -106008,6 +106546,7 @@ yxjyy.net
yxk120.com
yxkjlcd.com
yxkxyghx.org
+yxlaba.com
yxlady.com
yxlady.net
yxle.net
@@ -106034,6 +106573,7 @@ yxqiche.com
yxrb.net
yxrcw.com
yxrj.com
+yxsc33.com
yxsea.com
yxsos.com
yxss.com
@@ -106078,6 +106618,7 @@ yy2hd.com
yy365.com
yy4080.com
yy502.com
+yy520.com
yy591.com
yy845.com
yy960.com
@@ -106101,8 +106642,8 @@ yydl-china.com
yyds.co
yyds.pink
yyds.space
+yydsmh.com
yydsok.com
-yydsym.com
yydszp.com
yydy.com
yydzh.com
@@ -106113,6 +106654,7 @@ yyfax.com
yyfdcw.com
yyfqm.com
yyfunning.com
+yyg.com
yyg120.com
yygamedev.com
yyge.com
@@ -106122,10 +106664,8 @@ yygrammar.com
yyh78.com
yyha168.com
yyhao.com
-yyhdadx.com
yyhh.com
yyhn365.com
-yyhxps.com
yyhybz.com
yyi100.com
yyijt.com
@@ -106209,6 +106749,7 @@ yyzls.com
yyzqta.com
yyzqtb.com
yyzsoft.com
+yyzxcj.com
yyzzqk.com
yyzzsem.com
yz-iot.com
@@ -106257,12 +106798,12 @@ yzfbgjj.com
yzfc8.com
yzfcdn.com
yzfchat.com
-yzfcw.com
yzfdc.net
yzfjy.com
yzfrkf.com
yzftpx.com
yzfybj.com
+yzgcsj.com
yzgcyy.com
yzggdj.com
yzgjgs.com
@@ -106271,6 +106812,7 @@ yzgzx.com
yzh.li
yzhcloud.com
yzhdyy.com
+yzhejin.com
yzhi.cc
yzhifupay.com
yzhmyy.com
@@ -106300,6 +106842,7 @@ yzjtech.com
yzjyfz.com
yzkdfcw.com
yzkhfw.com
+yzkimage.com
yzkjpcb.com
yzkos.com
yzlngi.com
@@ -106316,6 +106859,7 @@ yzmls.com
yzmoney.com
yznano.com
yzncms.com
+yznn.com
yzntv.com
yzops.net
yzpanstar.com
@@ -106337,10 +106881,10 @@ yzrshop.com
yzrsks.com
yzrss.com
yzrzgroup.com
+yzs.com
yzs.io
yzsbh.com
yzsfuer.com
-yzsgo.com
yzshkjxx.com
yzshyzz.com
yzsljz.com
@@ -106439,6 +106983,7 @@ zaifan.com
zaigl.com
zaiguahao.com
zaih.com
+zaihuangshi.com
zaijia.com
zaijiawan.com
zailaboratory.com
@@ -106468,6 +107013,7 @@ zakc.group
zaker.com
zaku.fun
zakww.com
+zalandode.com
zallcn.com
zallgo.com
zallimg.com
@@ -106568,8 +107114,10 @@ zbca.com
zbcars.com
zbchem.com
zbcyrq.com
+zbczce.com
zbdedu.com
zbdzy.com
+zbfilm.com
zbgarden.cc
zbgedu.com
zbgl.net
@@ -106650,6 +107198,7 @@ zbyz.net
zbz.com
zbzb.org
zbzdm.com
+zbzw.com
zbzw.la
zc-gs100.com
zc-ha.com
@@ -106659,7 +107208,6 @@ zc173.com
zc61.com
zcaijing.com
zcand.com
-zcanjia.com
zcbearing.com
zcbgy.net
zcccc.com
@@ -106709,12 +107257,12 @@ zcobrand.com
zcodesign.com
zcofuture.com
zcom.com
+zcomc.com
zcoming.com
zcooler.com
zcosz.com
zcowh.com
zcpc.net
-zcpin.com
zcpm.net
zcpzj.com
zcqh.com
@@ -106766,7 +107314,6 @@ zdbiogene.com
zdbnm.com
zdcgc.com
zdcjw18.com
-zdcod.com
zdctid.com
zddhr.com
zddhub.com
@@ -106818,7 +107365,6 @@ zdsju.com
zdslb.com
zdsr.net
zdtent.com
-zduo.me
zdvalves.com
zdvc.net
zdwafis.com
@@ -106866,6 +107412,7 @@ zeesin.com
zeeteq.com
zeetzj.com
zeewain.com
+zegarkirepliki.pl
zegnau.shop
zego.im
zeheng.com
@@ -106879,6 +107426,7 @@ zejunpharma.com
zeku.com
zekv.com
zelinai.com
+zemc.vip
zemismart.com
zen-est.com
zencheer.com
@@ -106889,11 +107437,11 @@ zenglong3d.com
zengrong.net
zengslb.com
zengyt.com
-zengyuanfen.com
zengzeng.net
zenha.net
zenhotspring.com
zenith-group.net
+zenithfashion.asia
zenithmining.com
zenithspace.net
zenixauto.com
@@ -106940,7 +107488,7 @@ zettlernb.com
zetyun.com
zeusai.xin
zeuux.com
-zevost.com
+zeuux.org
zexiaoqiao.com
zeyu99.com
zeyuan.shop
@@ -106948,6 +107496,7 @@ zeyuan123.com
zezhengcnc.com
zezhenwangluo.com
zezhuanggd.com
+zf313.com
zf360.net
zf3d.com
zfancy.net
@@ -106999,6 +107548,7 @@ zg163.net
zg3721.com
zg388.com
zg58.com
+zgaode.com
zgaxr.com
zgazxxw.com
zgbaili.cc
@@ -107012,8 +107562,8 @@ zgbnt.com
zgboke.com
zgbszf.com
zgby114.com
+zgbywl.com
zgc-bigdata.org
-zgc-blockchain.com
zgc261.com
zgcbank.com
zgcbb.com
@@ -107083,6 +107633,7 @@ zggwy.org
zggx100.com
zggxgp.com
zggxhj.com
+zggxlbc.com
zggxsmlt.com
zggysyw.com
zggzgg.com
@@ -107109,7 +107660,6 @@ zgjcks.com
zgjct.com
zgjgw.com
zgjhjy.com
-zgjia.com
zgjianfang.com
zgjiaoyan.com
zgjiemeng.com
@@ -107124,7 +107674,6 @@ zgjrjw.com
zgjrw.com
zgjscopper.com
zgjsdsj.com
-zgjsfz.com
zgjsks.com
zgjsqw.com
zgjsyw.com
@@ -107269,10 +107818,13 @@ zgxk.org
zgxledu.com
zgxmlsp.com
zgxnnews.com
+zgxnyhyxh.com
+zgxnyxh.com
zgxrjy.com
zgxsczdldak.com
zgxue.com
zgxytc.com
+zgxzcj.com
zgxzhjx.com
zgybsfxh.com
zgycgc.com
@@ -107334,7 +107886,6 @@ zha.co
zhads.com
zhaeec.com
zhai14.com
-zhaiad.com
zhaiba.com
zhaibao.vip
zhaibian.com
@@ -107367,7 +107918,9 @@ zhangchangfa.com
zhangchi.art
zhangdongxuan.com
zhangdu.com
+zhangdu5.net
zhangdu520.com
+zhange8.com
zhangferry.com
zhangfupeng.com
zhanggaoyuan.com
@@ -107408,6 +107961,7 @@ zhangshengcw.com
zhangshengrong.com
zhangshi.org
zhangshuchang.com
+zhangsifan.com
zhangtaiwuye.com
zhangtu.com
zhangu365.com
@@ -107470,6 +108024,7 @@ zhantai.com
zhantuo.com
zhanuan.com
zhanxingfang.com
+zhanyouyun.com
zhanyugroup.com
zhanzhanbao.com
zhanzhang.net
@@ -107529,6 +108084,7 @@ zhaopin.com
zhaopin400.com
zhaopin668.com
zhaopinbao.me
+zhaopingou.com
zhaoqianwang.com
zhaoqiufa.com
zhaoqt.net
@@ -107547,9 +108103,11 @@ zhaosheng.com
zhaosheng365.com
zhaoshixi.com
zhaoshizhou.xyz
+zhaosifang.com
zhaosuliao.com
zhaosw.com
zhaota8.com
+zhaotaicaiyin.com
zhaouc.com
zhaouc.net
zhaowenyu.com
@@ -107589,7 +108147,6 @@ zhbx.net
zhby-point.com
zhcic.com
zhcidian.com
-zhcil.com
zhckw.com
zhcnews.com
zhcommerce.com
@@ -107653,6 +108210,7 @@ zhendong365.com
zhendonggames.com
zhene.net
zhenfacloud.com
+zhenfangyuan.com
zhenfund.com
zhengbang.com
zhengben56group.com
@@ -107660,6 +108218,7 @@ zhengbiaoke.com
zhengcaimall.com
zhengcaishangcheng.com
zhengchang.com
+zhengdaijingji.com
zhengdaojiapei.com
zhengdapeanut.com
zhengdichaiqian.com
@@ -107711,6 +108270,7 @@ zhengyang-tek.com
zhengyaokeji.net
zhengyee.com
zhengyounet.com
+zhengyouyoule.com
zhengyuanfu.com
zhengyutuliao.com
zhengzai.tv
@@ -107867,7 +108427,6 @@ zhiexa.com
zhifa.cc
zhifa315.com
zhifang.com
-zhifangju.com
zhifayiyuan.com
zhifeishengwu.com
zhifengtang.com
@@ -107880,6 +108439,7 @@ zhifuquanzi.com
zhifure.com
zhifux.com
zhifuzi.com
+zhigaometal.com
zhige.net
zhigongfu.com
zhigou.com
@@ -107899,7 +108459,6 @@ zhiheiot.com
zhihejia.com
zhihejiaoyu.com
zhihemobi.com
-zhihenglawyer.com
zhihengwangchen.com
zhihepartners.com
zhihevip.com
@@ -107912,6 +108471,7 @@ zhihudsp.com
zhihuichuangyanshi.com
zhihuiep.com
zhihuifangdong.net
+zhihuihongze.com
zhihuihub.com
zhihuihuiwu.com
zhihuihutong.com
@@ -107932,7 +108492,7 @@ zhihuiyunbo.com
zhihuizeyuan.com
zhihuizhangyu.com
zhihuizp.com
-zhihupe.com
+zhihuoseo.com
zhihur.com
zhiji.com
zhijia.com
@@ -107941,6 +108501,7 @@ zhijianbao.com
zhijianchuhai.com
zhijianfengyi.com
zhijiangames.com
+zhijiannuoche.com
zhijiaow.com
zhijiaow.net
zhijiapro.com
@@ -107963,6 +108524,7 @@ zhikexun.com
zhikongyangpin.com
zhikuai.com
zhikubao.net
+zhil.cloud
zhilandaren.com
zhilehuo.com
zhileiqiye.com
@@ -107988,6 +108550,7 @@ zhimantian.com
zhimap.com
zhimapay.net
zhimaquan.net
+zhimaruanjian.com
zhimatech.com
zhimawenda.com
zhimaxkf.com
@@ -108009,6 +108572,7 @@ zhinengxiehui.com
zhinengyujia.com
zhinet.com
zhinianboke.com
+zhiniceshi.com
zhinikefu.com
zhiniu8.com
zhinvnetwork.com
@@ -108080,7 +108644,6 @@ zhixiaohuoke.com
zhixiaosj.com
zhixiaowang.com
zhixin-semi.com
-zhixing.icu
zhixingapp.com
zhixingit.com
zhixingjj88.com
@@ -108117,6 +108680,7 @@ zhiyuanshijie.com
zhiyuanxinglvye.com
zhiyuanyun.com
zhiyuanzhongyi.com
+zhiyuapp.com
zhiyun-cn.com
zhiyun-tech.com
zhiyunwang.net
@@ -108133,6 +108697,7 @@ zhizhizhi.net
zhizhonghl.com
zhizhoukeji.com
zhizhoumi.com
+zhizhu35.net
zhizhucms.com
zhizhuip.com
zhizhuma.com
@@ -108177,6 +108742,7 @@ zhlm.com
zhltech.net
zhltraffic.com
zhlyen.com
+zhlzw.com
zhmag.com
zhmedcenter.com
zhmf.com
@@ -108244,7 +108810,6 @@ zhongguogouliang.com
zhongguoguwan.com
zhongguohao123.com
zhongguohuo.com
-zhongguolaoqu.com
zhongguopeixun.net
zhongguose.com
zhongguosou.com
@@ -108252,7 +108817,6 @@ zhongguoss.com
zhongguowangshi.com
zhongguoym.com
zhonggushipping.com
-zhonghaiqishengkeji.xyz
zhonghaitech.com
zhonghaojituan.com
zhonghengyiyao.com
@@ -108276,6 +108840,7 @@ zhonghuvalve.com
zhongji.cc
zhongjian.run
zhongjiangapp.com
+zhongjianyiliao.com
zhongjiaochuxing.com
zhongjijidian.com
zhongjincc.com
@@ -108378,6 +108943,7 @@ zhongxiangwang.co
zhongxiaole.net
zhongxiaoyl.com
zhongxingglove.com
+zhongxinjzzs.com
zhongxinkeji.vip
zhongxinlm.com
zhongxinwei.net
@@ -108387,6 +108953,7 @@ zhongxues.com
zhongxuewuyou.net
zhongxuewy.net
zhongxunrunda.com
+zhongxuntv.com
zhongxuyiyuan.com
zhongyagroup.com
zhongyangkeji.com
@@ -108422,9 +108989,11 @@ zhongyue001.com
zhongyuefuwu.com
zhongyulian.com
zhongyunjt.net
+zhongyunjy.com
zhongyunqianbao.com
zhongyuyx.com
zhongzaisheng.net
+zhongzeny.com
zhongzetherapeutics.com
zhongzhaizs.com
zhongzhao.com
@@ -108459,12 +109028,13 @@ zhoujianhui.com
zhoujifood.com
zhoujunji.com
zhoukaiwen.com
+zhoulaoshi.club
zhoulingjie.com
-zhoulishan.site
zhoupu123.com
zhoupudata.com
zhouql.vip
zhouweitong.site
+zhouxiaoben.info
zhouxingchi.info
zhouxuanyu.com
zhouyi.biz
@@ -108484,6 +109054,7 @@ zhrct.com
zhrczp.com
zhrtc.com
zhsapphire.com
+zhsc.net
zhsecurity.net
zhsho.com
zhshw.com
@@ -108512,7 +109083,6 @@ zhuangbutong.com
zhuanghebm.com
zhuangji.net
zhuangjiba.com
-zhuangjidiy.com
zhuangjinshanhe.com
zhuangjizhuli.net
zhuangkou.com
@@ -108555,6 +109125,9 @@ zhuayou.com
zhuayoukong.com
zhuayuya.com
zhuazi.com
+zhubai.love
+zhubai.pub
+zhubaijia.com
zhubajie.com
zhubajie.la
zhubangbang.com
@@ -108595,6 +109168,7 @@ zhuige.com
zhuigong.com
zhuiguang.com
zhuiguangzhe.com
+zhuihuodong.com
zhuimabk.com
zhuimeng8.com
zhuimengzhu.com
@@ -108637,6 +109211,7 @@ zhujiw.com
zhujiwanjia.com
zhujiwiki.com
zhujiwu.com
+zhujizixun.com
zhukai.com
zhukang.tech
zhukao666.com
@@ -108644,6 +109219,7 @@ zhuke.com
zhul.in
zhulang.com
zhulang.net
+zhulanli.com
zhulemei.com
zhulianwines.com
zhulincat.com
@@ -108704,6 +109280,7 @@ zhuoquapp.com
zhuoqun.info
zhuoqun.xyz
zhuoqundianli.com
+zhuoshigroup.com
zhuoshixiong.com
zhuotingwl.com
zhuoyachina.com
@@ -108809,7 +109386,6 @@ zhylyy.com
zhyouliang.com
zhyourun.com
zhysdxl.com
-zhytstudio.com
zhyymall.com
zhyyz.com
zhz.com
@@ -108850,12 +109426,12 @@ zidanduanxin.com
zidanduanxin.net
zidg.com
zidiankeji.com
-zidianzaixian.com
zidoo.tv
zidootv.com
zifandiaosu.com
zifumao.com
zigaokj.com
+zige365.com
zigeer.com
zigonggroup.com
ziguhonglan.com
@@ -108915,6 +109491,7 @@ zilongshanren.com
zilrms.com
ziluolanh.com
zimilan.com
+zimlev.com
zimudashi.com
zimufy.com
zimuism.com
@@ -108980,6 +109557,7 @@ ziwuyunjiao.com
zixia.com
zixiaomao.com
zixijiaoshi.com
+zixingxinwen.com
zixueguoxue.com
zixuejie.com
zixueren.com
@@ -109019,6 +109597,7 @@ ziyuanm.com
ziyuanniao.com
ziyuanshare.cc
ziyuantun.com
+ziyuantx.com
ziyuanxiyanly.com
ziyuanyuan.com
ziyuen.com
@@ -109026,12 +109605,15 @@ ziyun.com
ziyunshanju.com
zizailvyou.com
zizdog.com
+zizhengfang.com
+zizhigx.com
zizhijie.com
zizhuauto.com
zizhuhui.com
zizhupark.com
zizhuyuangongyuan.com
zizhuyunxuan.com
+zizige.com
zizizaizai.com
zizizizizi.com
zizyw.com
@@ -109154,6 +109736,7 @@ zjcyxh.com
zjcyyy.com
zjda.com
zjdadeyy.com
+zjdashi.com
zjdata.net
zjdeju.com
zjdeluo.com
@@ -109271,7 +109854,6 @@ zjhnlianzhong.com
zjhnrb.com
zjhospital.net
zjhpyy.com
-zjhr.com
zjhrnet.com
zjhslyw.com
zjhtcm.com
@@ -109328,7 +109910,6 @@ zjjrtv.com
zjjsbank.com
zjjsit.com
zjjsjt.com
-zjjslawyer.com
zjjstzhb.com
zjjsw.com
zjjta.com
@@ -109512,6 +110093,7 @@ zjsuntex.com
zjsw.org
zjswxpx.com
zjsxkj.com
+zjsxlt.com
zjsxrz.com
zjsxss.com
zjsyyhyxh.com
@@ -109614,7 +110196,6 @@ zjxxkx.com
zjxxt.com
zjxymy.com
zjxzgrd.com
-zjyangfan.com
zjyanxing.com
zjyari.com
zjycpx.com
@@ -109638,6 +110219,7 @@ zjyzpcxx.com
zjza.com
zjzajsjt.com
zjzcec.com
+zjzcen.com
zjzcj.com
zjzfj.com
zjzfjs.com
@@ -109660,6 +110242,7 @@ zjzrzyjy.com
zjzs.net
zjzsa.com
zjzsco.com
+zjzsxb.com
zjzwlab.com
zjzy.com
zjzybiotech.com
@@ -109699,6 +110282,7 @@ zkicme.com
zking.com
zkjan.com
zkjds.com
+zkkailiaoji.com
zkl2333.com
zkmeiling.com
zkmob.net
@@ -109709,7 +110293,6 @@ zkpk.org
zkrdlab.com
zkrsks.com
zksbxhyxh.com
-zkscaiot.com
zkscgj.com
zksglaser.com
zkshare.com
@@ -109718,6 +110301,7 @@ zksps.com
zksyzy.com
zktecn.com
zkteco.com
+zkteco.xin
zktecoiot.com
zktecosj.com
zktecowebui.com
@@ -109735,7 +110319,6 @@ zkxblog.com
zkxww.com
zkyai.com
zkydib.com
-zkyg.com
zkyl.vip
zkyouxi.com
zkyxc.com
@@ -109770,6 +110353,7 @@ zlgmcu.com
zlgpy.com
zlgsj.com
zlh-zh.com
+zlhome.com
zlhospital.com
zlhui.com
zlibs.com
@@ -109784,7 +110368,6 @@ zljx.net
zlkb.net
zlketang.com
zlkj20.com
-zllinks.com
zlm4.com
zlmlt.com
zlnewlife.com
@@ -109808,6 +110391,7 @@ zlt365.com
zlttxl.com
zluren.com
zlview.com
+zlvod.com
zlwh2026.com
zlwl.vip
zlwlhse.com
@@ -109857,6 +110441,7 @@ zmgrcw.com
zmhttp.com
zmifi.com
zmingcx.com
+zmirrordemo.com
zmis.me
zmister.com
zmjiudian.com
@@ -109881,7 +110466,6 @@ zmshz.com
zmsq.com
zmssh.com
zmtpc.com
-zmtqsh.com
zmtquan.com
zmufivehospital.com
zmumu.com
@@ -109894,6 +110478,7 @@ zmyyc.com
zmzb.com
zmzjt.com
zn99.com
+znba.net
znbo.com
zncar.com
zncmjt.com
@@ -109925,11 +110510,11 @@ znlcn.org
znlerp.com
znlh.com
znmq.com
-znncb372.com
znnu.com
znonline.net
znp9.com
znpin.com
+znpla.space
znrfwy.com
znrom.com
znrsc.com
@@ -109965,6 +110550,7 @@ zocolor.com
zocoxx.com
zodgame.me
zoe360.com
+zoebon.com
zoeeasy.com
zoeess.com
zoform.com
@@ -110015,6 +110601,7 @@ zongmutech.com
zongs365.com
zongshengjituan.com
zongtiku.com
+zongxiankj.com
zongyiconverge.com
zongyifile.com
zongyigame.com
@@ -110026,7 +110613,6 @@ zonhen.com
zonsengroup.com
zonsenmotor.com
zonst.com
-zonta-suzhou.com
zontes.com
zoocer.com
zoocoffee.com
@@ -110049,7 +110635,6 @@ zootope.ink
zooyoo.cc
zoqlan.com
zoranchem.com
-zorocloud.com
zoroli.com
zorrospray.com
zorun.com
@@ -110094,6 +110679,7 @@ zpascal.net
zpb365.com
zpc-cn.com
zpcdi.com
+zpchaji.com
zpcmshopping.com
zpedu.com
zpedu.org
@@ -110107,7 +110693,6 @@ zpm.so
zpmc.com
zpmg.com
zpparts.com
-zprc.com
zpstar.com
zpt966033.com
zptq.com
@@ -110125,14 +110710,17 @@ zqcaf.com
zqcloud.com
zqcloudgame.com
zqcyzg.com
+zqdns37.vip
zqedu.net
zqfdc.net
zqgame.com
zqgjz1312.com
zqgreen.com
zqhuahui.com
+zqhuwkc.com
zqids.com
zqin758.xyz
+zqjcedu.com
zqjiese.com
zqjinneng.com
zqlian.com
@@ -110164,6 +110752,7 @@ zrahh.com
zran88.com
zrblog.com
zrblog.net
+zrbn.ltd
zrbx.com
zrcaifu.com
zrcbank.com
@@ -110214,6 +110803,7 @@ zsbeike.com
zsboai.com
zsbqgz.com
zsbsoft.com
+zsbus.wiki
zsbyw.com
zsc-group.com
zscbd.com
@@ -110282,7 +110872,6 @@ zsmls.com
zsmw.net
zsmyy.com
zsmz.com
-zsph.com
zspharm.com
zsquant.com
zsqx.com
@@ -110321,13 +110910,11 @@ zsxq100.com
zsxsoft.com
zsyanxuan.com
zsyknk.com
+zsynjt.com
zsythink.net
zsytit.com
-zsywang.com
-zsyxxc.com
zsyyart.com
zszk.net
-zsznz.com
zszq.com
zszxsz.com
zszyss.com
@@ -110533,6 +111120,7 @@ zulongacmall.com
zumbacn.com
zumulv.com
zun.com
+zun.gd
zun9.com
zunsou.com
zunxiang17.com
@@ -110584,7 +111172,6 @@ zuoyebao.com
zuoyebao.net
zuoyehezi.com
zuoyesou.com
-zuoyeti.com
zuoyou-sofa.com
zuozu.net
zupig.com
@@ -110629,6 +111216,7 @@ zwayoptik.com
zwaztizp.com
zwbdata.com
zwcad.com
+zwcctv.com
zwcnw.com
zwcsm.com
zwcuo.com
@@ -110662,6 +111250,7 @@ zwkf.net
zwlhome.com
zwoasi.com
zwoptical.com
+zwoptics.com
zwpyyds.com
zwslshy.com
zwsmds.com
@@ -110682,7 +111271,7 @@ zwzrent.com
zwzsh.net
zwzyzx.com
zx-tour.com
-zx.com
+zx-xcx.com
zx0093.com
zx017.com
zx017.net
@@ -110692,6 +111281,7 @@ zx10000.com
zx110.org
zx1234.com
zx181.com
+zx18x.com
zx350zx.com
zx42195.com
zx7b.com
@@ -110701,16 +111291,15 @@ zx990.com
zxblinux.com
zxbook.net
zxbzr.com
-zxc123zxc123.xyz
zxchemgroup.com
zxcmk.com
zxcoder.com
zxczw.com
zxd.com
zxd666.com
-zxdj.club
zxdkj.com
zxdu.net
+zxdyw.com
zxerp.com
zxfw888.com
zxfwgj.com
@@ -110824,11 +111413,13 @@ zybest.com
zybtp.com
zybuluo.com
zybwhsb.com
+zybwj.cc
zybz518.com
zyc123.com
zyccst.com
zycits.com
zycitscn.com
+zycjcrz.org
zycmmt.com
zyctd.com
zyczg.com
@@ -110852,6 +111443,7 @@ zygjtzjt.com
zygs.com
zygx8.com
zygxxs.com
+zygxy.online
zyh365.com
zyhao.com
zyhbjt.com
@@ -110865,12 +111457,14 @@ zyiis.net
zying.net
zyip.com
zyiwater.com
+zyixinx.com
zyjhzyy.com
zyjiajiao.com
zyjjt.com
zyjkwh.com
zyjoygame.com
zyjtgas.com
+zyjthb.com
zyjymall.com
zyjyxx.com
zyjyyun.com
@@ -110880,7 +111474,6 @@ zykjct.com
zykjgame.com
zykjnet.com
zykpic.com
-zyktech.com
zykths.com
zyku.net
zyl.me
@@ -110888,6 +111481,7 @@ zylianto.com
zymc1.com
zymkcdn.com
zymkshop.com
+zymreal.com
zyms8.me
zyoffice.com
zyoo.net
@@ -110898,11 +111492,13 @@ zypharm.com
zyplayer.com
zyq.today
zyq366.com
+zyqcs.com
zyqjg.com
zyqjs.com
zyqxt.com
zyrack-china.com
zyrb.com
+zyrc168.com
zyrj.org
zyrm.com
zyrykbiandao.com
@@ -110935,14 +111531,12 @@ zyxr.com
zyxxlyg.com
zyxyfy.com
zyxzyyy.com
-zyyct.com
zyydb.com
zyydjk.net
zyyfy.com
zyyimin.com
zyykj168.com
zyylee.com
-zyyun.xyz
zyz119.com
zyzhan.com
zyzl120.com
@@ -110951,6 +111545,7 @@ zz-hh.com
zz-invest.com
zz.ci
zz123456789.xyz
+zz2024.com
zz2z.com
zz314.com
zz34.com
@@ -110978,7 +111573,9 @@ zzccp.com
zzcdnx.com
zzcjby.com
zzcjxy.com
-zzclass.com
+zzcm1.com
+zzcm2.com
+zzcm5.com
zzcmjn.com
zzcomm.com
zzcrcgas.com
@@ -111015,7 +111612,6 @@ zzhfkm.com
zzhybz.com
zzicpa.com
zzidc.com
-zzimti.com
zzjdgcxx.com
zzjianyun.com
zzjidi.com
@@ -111056,14 +111652,12 @@ zzpzh.com
zzqckj.com
zzqfte.com
zzqklm.com
-zzqrgs3148.vip
zzqss.com
zzquan9.com
zzqudu.com
zzqxs.com
zzqz2024.com
zzqzz.com
-zzr.cc
zzrc.net
zzrcw.net
zzrmyy.com
@@ -111085,6 +111679,7 @@ zzsmt.com
zzsnewell.com
zzspider.com
zzsspnode.com
+zzssptop.com
zzsteel.com
zzstep.com
zzszbsw.com
@@ -111146,7 +111741,6 @@ zzzhtc.com
zzzj.com
zzzla.com
zzzlsh.com
-zzzmap.com
zzznkq.com
zzzppp.com
zzzqqp.com
@@ -111158,3 +111752,581 @@ zzzyy.com
zzzyyy.com
zzzzaaaa.com
zzzzzz.me
+2mdn-cn.net
+2mdn.net
+a1.mzstatic.com
+a2.mzstatic.com
+a3.mzstatic.com
+a4.mzstatic.com
+a5.mzstatic.com
+account-cn.alibabacloud.com
+activate.activation-v2.kaspersky.com
+activation-v2.geo.kaspersky.com
+activation-v2.kaspersky.com
+adcdownload.apple.com
+adcdownload.apple.com.akadns.net
+admob-cn.com
+adservice.google.com
+afcs.dell.com
+ai.zhaomi.cn
+alibaba.cdn.steampipe.steamcontent.com
+amp-api-edge-lb-cn.itunes-apple.com.akadns.net
+amp-api-edge-lb.itunes-apple.com.akadns.net
+amp-api-edge.apps.apple.com
+amp-api-edge.music.apple.com
+amp-api-search-edge.apps.apple.com
+amp-api-updates.apps.apple.com
+amp-api.apps.apple.com
+amp-api.media.apple.com
+amp-api.music.apple.com
+aod-ssl.itunes.apple.com
+aod.itunes.apple.com
+api-edge.apps.apple.com
+api.alibabacloud.com
+app-analytics-services.com
+app-measurement-cn.com
+app-measurement.com
+app-site-association.cdn-apple.com
+appldnld.apple.com
+appldnld.g.aaplimg.com
+appleid.cdn-apple.com
+apps.mzstatic.com
+apps5.oingo.com
+apptrailers.itunes.apple.com
+auth.music.apple.com
+avail.googleflights.net
+azuremigrate.download.prss.microsoft.com
+azuremigratetest.download.prss.microsoft.com
+azurestackhub.download.prss.microsoft.com
+azurestackhubuat.download.prss.microsoft.com
+b.c2r.ts.cdn.office.net
+bag-cdn.itunes-apple.com.akadns.net
+bag.itunes.apple.com
+beacons.gcp.gvt2.com
+beacons.gvt2.com
+beacons2.gvt2.com
+beacons3.gvt2.com
+bj1.api.bing.com
+bookkeeper.itunes.apple.com
+c.admob.com
+c.android.clients.google.com
+c.pki.goog
+cache-management-prod.google.com
+cache.pack.google.com
+cbdstest.download.prss.microsoft.com
+cdn-cn.apple-mapkit.com
+cdn-cn1.apple-mapkit.com
+cdn-cn2.apple-mapkit.com
+cdn-cn3.apple-mapkit.com
+cdn-cn4.apple-mapkit.com
+cdn.ampproject.org
+cdn.apple-mapkit.com
+cdn.globalsigncdn.com.cdn.cloudflare.net
+cdn1.apple-mapkit.com
+cdn2.apple-mapkit.com
+cdn3.apple-mapkit.com
+cdn4.apple-mapkit.com
+cds-cdn.v.aaplimg.com
+cds.apple.com
+cds.apple.com.akadns.net
+cdsassets.apple.com
+certs-lb.apple.com.akadns.net
+certs.apple.com
+checkin.gstatic.com
+cl1-cdn.origin-apple.com.akadns.net
+cl1.apple.com
+cl2-cdn.origin-apple.com.akadns.net
+cl2-cn.apple.com
+cl2.apple.com
+cl2.apple.com.edgekey.net.globalredir.akadns.net
+cl3-cdn.origin-apple.com.akadns.net
+cl3.apple.com
+cl4-cdn.origin-apple.com.akadns.net
+cl4-cn.apple.com
+cl4.apple.com
+cl5-cdn.origin-apple.com.akadns.net
+cl5.apple.com
+clickserve.cc-dt.com
+clickserve.dartsearch.net
+clickserver.googleads.com
+client-api.itunes.apple.com
+clientflow.apple.com
+clientflow.apple.com.akadns.net
+clientperipherals.dell.com
+clientservices.googleapis.com
+cma.itunes.apple.com
+cn-smp-paymentservices.apple.com
+cn.alibabacloud.com
+cn.download.nvidia.com
+cn.widevine.com
+cn.windowssearch.com
+collaborate.download.prss.microsoft.com
+collaborateppe.download.prss.microsoft.com
+communities.apple.com
+configuration.apple.com
+configuration.apple.com.akadns.net
+connectivitycheck.gstatic.com
+crashlyticsreports-pa.googleapis.com
+crl-lb.apple.com.akadns.net
+crl.apple.com
+crl.globalsign.net
+crl.kaspersky.com
+crl.pki.goog
+crls.pki.goog
+csi.gstatic.com
+cstat.apple.com
+cstat.cdn-apple.com
+ctdsb.clouddiffuse.xyz
+ctldl.windowsupdate.com
+cueme-api.quark.cn
+customization-cdn.dell.com
+dartsearch-cn.net
+dc1-cert.ksn.kaspersky-labs.com
+dc1-file.ksn.kaspersky-labs.com
+dc1-pp.ksn.kaspersky-labs.com
+dc1-st.ksn.kaspersky-labs.com
+dc1.ksn.kaspersky-labs.com
+dd-cdn.origin-apple.com.akadns.net
+dds.dell.com
+dejavu.apple.com
+developer.microsoft.com
+devimages-cdn.apple.com
+devstreaming-cdn.apple.com
+dg-meta.video.google.com
+discussionschinese.apple.com
+dl.dell.com
+dl.google.com
+dl.l.google.com
+dnl-00.geo.kaspersky.com
+dnl-01.geo.kaspersky.com
+dnl-02.geo.kaspersky.com
+dnl-03.geo.kaspersky.com
+dnl-04.geo.kaspersky.com
+dnl-05.geo.kaspersky.com
+dnl-06.geo.kaspersky.com
+dnl-07.geo.kaspersky.com
+dnl-08.geo.kaspersky.com
+dnl-09.geo.kaspersky.com
+dnl-10.geo.kaspersky.com
+dnl-11.geo.kaspersky.com
+dnl-12.geo.kaspersky.com
+dnl-13.geo.kaspersky.com
+dnl-14.geo.kaspersky.com
+dnl-15.geo.kaspersky.com
+dnl-16.geo.kaspersky.com
+dnl-17.geo.kaspersky.com
+dnl-18.geo.kaspersky.com
+dnl-19.geo.kaspersky.com
+doubleclick-cn.net
+doubleclick.net
+download.developer.apple.com
+download.microsoft.com
+download.mlcc.google.com
+download.tensorflow.google.com
+download.visualstudio.microsoft.com
+downloaddispatch.itunes.apple.com
+dreamspark.download.prss.microsoft.com
+dreamsparkuat.download.prss.microsoft.com
+ea2cn-dev-outlet.dell.com
+ea2cn-prod-outlet.dell.com
+ea2cn-staging-outlet.dell.com
+edge.geo.kaspersky.com
+emoi-cncdn.bing.com
+end-api.shallow.ink
+end.shallow.ink
+entitlements-edge.itunes.apple.com
+experiments.apple.com
+f.c2r.ts.cdn.office.net
+fcs.dell.com
+fides-pol.apple.com
+firebase-settings.crashlytics.com
+fontfiles.googleapis.com
+fonts.googleapis.com
+fonts.gstatic.com
+fpinit.itunes.apple.com
+fta.dell.com
+ftaapj.dell.com
+ftaemea.dell.com
+ftasitapj.dell.com
+g0.gstatic.com
+g1.gstatic.com
+g2.gstatic.com
+g3.gstatic.com
+gbxgateway-dev.dell.com
+gbxgateway.dell.com
+geetest.datasink.sensorsdata.cn
+gog.qtlglb.com
+gonglchuangl.net
+gongyichuangyi.net
+google-analytics-cn.com
+google-analytics.com
+googleadservices-cn.com
+googleadservices.com
+googleanalytics.com
+googleapis-cn.com
+googleapps-cn.com
+googleflights-cn.net
+googleoptimize-cn.com
+googleoptimize.com
+googlesyndication-cn.com
+googlesyndication.com
+googletagmanager-cn.com
+googletagmanager.com
+googletagservices-cn.com
+googletagservices.com
+googletraveladservices-cn.com
+googletraveladservices.com
+googlevads-cn.com
+gs-loc-cn.apple.com
+gs-loc.apple.com
+gsp10-ssl-cn.ls.apple.com
+gsp11-cn.ls.apple.com
+gsp12-cn.ls.apple.com
+gsp13-cn.ls.apple.com
+gsp4-cn.ls.apple.com
+gsp4-cn.ls.apple.com.edgekey.net.globalredir.akadns.net
+gsp5-cn.ls.apple.com
+gsp85-cn-ssl.ls.apple.com
+gspe11-2-cn-ssl.ls.apple.com
+gspe12-cn-ssl.ls.apple.com
+gspe19-2-cn-ssl.ls-apple.com.akadns.net
+gspe19-2-cn-ssl.ls.apple.com
+gspe19-cn-ssl.ls.apple.com
+gspe19-cn.ls-apple.com.akadns.net
+gspe19-cn.ls.apple.com
+gspe21-ssl.ls.apple.com
+gspe35-ssl.ls.apple.com
+gspe79-cn-ssl.ls.apple.com
+gspe85-cn-ssl.ls.apple.com
+gstatic-cn.com
+gstaticadssl.l.google.com
+gtm.oasisfeng.com
+guzzoni-apple-com.v.aaplimg.com
+guzzoni.apple.com
+guzzoni.smoot.apple.com
+hellofontpreview.oss-cn-beijing.aliyuncs.com
+hellowebfonts.oss-cn-beijing.aliyuncs.com
+hospital.pku.edu.cn
+i.dell.com
+i.pki.goog
+images-cn-8.ssl-images-amazon.com
+images-cn.ssl-images-amazon.com
+images.apple.com.edgekey.net.globalredir.akadns.net
+imasdk.googleapis.com
+inappcheck-cn.itunes-apple.com.akadns.net
+inappcheck-lb.itunes-apple.com.akadns.net
+inappcheck.itunes.apple.com
+init-kt.apple.com
+init-p01md-lb.push-apple.com.akadns.net
+init-p01md.apple.com
+init-p01st-lb.push-apple.com.akadns.net
+init-p01st.push.apple.com
+init-s01st-lb.push-apple.com.akadns.net
+init-s01st.push.apple.com
+init.ess.apple.com
+init.gc-lb.apple.com.akadns.net
+init.gc.apple.com
+init.itunes.apple.com
+iosapps.itunes.apple.com
+iosapps.itunes.g.aaplimg.com
+ipcdn.apple.com
+iphone-ld.apple.com
+iphone-ld.origin-apple.com.akadns.net
+is-ssl.mzstatic.com-cn-lb.itunes-apple.com.akadns.net
+is1-ssl.mzstatic.com
+is1.mzstatic.com
+is2-ssl.mzstatic.com
+is2.mzstatic.com
+is3-ssl.mzstatic.com
+is3.mzstatic.com
+is4-ssl.mzstatic.com
+is4.mzstatic.com
+is5-ssl.mzstatic.com
+is5.mzstatic.com
+itacademy.download.prss.microsoft.com
+itacademyuat.download.prss.microsoft.com
+itunes-apple.com.akadns.net
+itunes.apple.com
+itunesconnect.apple.com
+izattime.qcomgeo2.com
+js-cdn.music.apple.com
+km.support.apple.com
+ksn-cinfo-geo.kaspersky-labs.com
+ksn-cinfo.geoksn.kaspersky.com
+ksn-crypto-info-geo.kaspersky-labs.com
+ksn-crypto-kas-geo.kaspersky-labs.com
+ksn-crypto-tcert-geo.kaspersky-labs.com
+ksn-crypto-url-geo.kaspersky-labs.com
+ksn-crypto-verdict-geo.kaspersky-labs.com
+ksn-crypto-wifiplus-geo.kaspersky-labs.com
+ksn-crypto-wifiplus.geoksn.kaspersky.com
+ksn-dc1-cert.geoksn.kaspersky.com
+ksn-dc1-file.geoksn.kaspersky.com
+ksn-dc1.geoksn.kaspersky.com
+ksn-file-geo.kaspersky-labs.com
+ksn-file.geoksn.kaspersky.com
+ksn-info-geo.kaspersky-labs.com
+ksn-info.geoksn.kaspersky.com
+ksn-kas.geoksn.kaspersky.com
+ksn-mdr.geoksn.kaspersky.com
+ksn-tcert-geo.kaspersky-labs.com
+ksn-tcert.geoksn.kaspersky.com
+ksn-url-geo.kaspersky-labs.com
+ksn-url.geoksn.kaspersky.com
+ksn-verdict-geo.kaspersky-labs.com
+ksn-verdict.geoksn.kaspersky.com
+lex.download.prss.microsoft.com
+lexuat.download.prss.microsoft.com
+lv.queniujq.cn
+maps.apple.com
+mbs.download.prss.microsoft.com
+mdr.ksn.kaspersky-labs.com
+mensura.cdn-apple.com
+mesu-cdn.apple.com.akadns.net
+mesu-china.apple.com.akadns.net
+mesu.apple.com
+misc-assets.itunes.apple.com
+ml.cdn-apple.com
+moocs.unipus.cn
+mpnbenefits.download.prss.microsoft.com
+mpnbenefitsrtl.download.prss.microsoft.com
+mpnbenefitsrtluat.download.prss.microsoft.com
+msdn.download.prss.microsoft.com
+msdprod-ad.download.prss.microsoft.com
+msproduct.download.prss.microsoft.com
+music.apple.com
+musicstatus.music.apple.com
+mvod.itunes.apple.com
+myapp.itunes.apple.com
+myvs.download.prss.microsoft.com
+nexus.dell.com
+np-edge.itunes.apple.com
+ntp.aliyun.com
+ntp.tencent.com
+ntp1.aliyun.com
+ntp1.tencent.com
+ntp2.aliyun.com
+ntp2.tencent.com
+ntp3.aliyun.com
+ntp3.tencent.com
+ntp4.aliyun.com
+ntp4.tencent.com
+ntp5.aliyun.com
+ntp5.tencent.com
+ntp6.aliyun.com
+ntp7.aliyun.com
+o.pki.goog
+ocsp.apple.com
+ocsp.pki.goog
+ocsp2.apple.com
+oemsoc.download.prss.microsoft.com
+oemsocuat.download.prss.microsoft.com
+officecdn.microsoft.com
+officemkt.download.prss.microsoft.com
+officemktuat.download.prss.microsoft.com
+opencourse.pku.edu.cn
+oscdn.apple.com
+oscdn.origin-apple.com.akadns.net
+osrelease.download.prss.microsoft.com
+osxapps.itunes.apple.com
+osxapps.itunes.g.aaplimg.com
+p.cdn.persaas.dell.com
+p00.upd.kaspersky.com
+p01.upd.kaspersky.com
+p02.upd.kaspersky.com
+p03.upd.kaspersky.com
+p04.upd.kaspersky.com
+p05.upd.kaspersky.com
+p06.upd.kaspersky.com
+p07.upd.kaspersky.com
+p08.upd.kaspersky.com
+p09.upd.kaspersky.com
+p1-juejin.byteimg.com
+p10.upd.kaspersky.com
+p11.upd.kaspersky.com
+p12.upd.kaspersky.com
+p13.upd.kaspersky.com
+p14.upd.kaspersky.com
+p15.upd.kaspersky.com
+p16.upd.kaspersky.com
+p17.upd.kaspersky.com
+p18.upd.kaspersky.com
+p19.upd.kaspersky.com
+p2-juejin.byteimg.com
+p3-juejin.byteimg.com
+p3-novel.byteimg.com
+p4-juejin.byteimg.com
+p5-juejin.byteimg.com
+p6-juejin.byteimg.com
+p6-novel.byteimg.com
+p7-juejin.byteimg.com
+p8-juejin.byteimg.com
+p9-juejin.byteimg.com
+pagead-googlehosted.l.google.com
+pancake.apple.com
+pba0.apple.com
+pd-nk.itunes.apple.com
+pd.itunes.apple.com
+performanceparameters.googleapis.com
+pki-goog.l.google.com
+play.itunes.apple.com
+play.music.apple.com
+probe.siri.apple.com
+prod-controlbe.floonet.goog
+prod-databe.floonet.goog
+prod-support.apple-support.akadns.net
+prod.databe.floonet.goog
+publicassets.cdn-apple.com
+qiao-cn.com
+qpx.googleflights.net
+recaptcha-cn.net
+recaptcha.net
+redirector.bdn.dev
+redirector.c.chat.google.com
+redirector.c.mail.google.com
+redirector.c.pack.google.com
+redirector.c.play.google.com
+redirector.c.youtubeeducation.com
+redirector.gcpcdn.gvt1.com
+redirector.gvt1.com
+redirector.offline-maps.gvt1.com
+redirector.snap.gvt1.com
+redirector.xn--ngstr-lra8j.com
+refresh-bkg.activation-v2.kaspersky.com
+rsm.download.prss.microsoft.com
+s.mzstatic.com
+s00.upd.kaspersky.com
+s01.upd.kaspersky.com
+s02.upd.kaspersky.com
+s03.upd.kaspersky.com
+s04.upd.kaspersky.com
+s05.upd.kaspersky.com
+s06.upd.kaspersky.com
+s07.upd.kaspersky.com
+s08.upd.kaspersky.com
+s09.upd.kaspersky.com
+s1.mzstatic.com
+s10.upd.kaspersky.com
+s11.upd.kaspersky.com
+s12.upd.kaspersky.com
+s13.upd.kaspersky.com
+s14.upd.kaspersky.com
+s15.upd.kaspersky.com
+s16.upd.kaspersky.com
+s17.upd.kaspersky.com
+s18.upd.kaspersky.com
+s19.upd.kaspersky.com
+s2.mzstatic.com
+s3.mzstatic.com
+s4.mzstatic.com
+s5.mzstatic.com
+safebrowsing-cache.google.com
+safebrowsing.googleapis.com
+scene7-cdn.dell.com
+sdx.microsoft.com
+se-edge.itunes.apple.com
+se2.itunes.apple.com
+search.itunes.apple.com
+seed-sequoia.siri.apple.com
+seed-swallow.siri.apple.com
+seed.siri.apple.com
+sequoia.apple.com
+service.urchin.com
+sf-api-token-service.itunes.apple.com
+sh-pod2-smp-device.apple.com
+shazam-insights.cdn-apple.com
+shell.cdn.office.net
+si.cdn.dell.com
+sm.dell.com
+smp-device-content.apple.com
+snp.cdn.dell.com
+snpi.dell.com
+software.download.prss.microsoft.com
+sp.itunes.apple.com
+speedysub.music.apple.com
+ss.bjmu.edu.cn
+ssl-google-analytics.l.google.com
+ssl.gstatic.com
+staging-controlbe.floonet.goog
+staging-databe.floonet.goog
+staging.databe.floonet.goog
+static.gc.apple.com
+statics.teams.cdn.office.net
+status.alibabacloud.com
+stocks-sparkline-lb.apple.com.akadns.net
+stocks-sparkline.apple.com
+store.apple.com
+store.apple.com.edgekey.net
+store.apple.com.edgekey.net.globalredir.akadns.net
+store.storeimages.apple.com.akadns.net
+store.storeimages.cdn-apple.com
+storecorefulfillment.download.prss.microsoft.com
+storeedge.microsoft.com
+storeedgefd.dsx.mp.microsoft.com
+streamingaudio.itunes.apple.com
+study.163.com
+su.itunes.apple.com
+support-china.apple-support.akadns.net
+support.apple.com
+supportassist.dell.com
+surface.download.prss.microsoft.com
+surface.downloads.prss.microsoft.com
+swallow-apple-com.v.aaplimg.com
+swallow.apple.com
+swcatalog-cdn.apple.com.akadns.net
+swcatalog.apple.com
+swcdn.apple.com
+swcdn.g.aaplimg.com
+swdist.apple.com
+swdist.apple.com.akadns.net
+swscan-cdn.apple.com.akadns.net
+swscan.apple.com
+sylvan.apple.com
+sync.itunes.apple.com
+tac.googleapis.com
+tesla-cdn.thron.cn
+tf-feedback.itunes.apple.com
+time.amazonaws.cn
+time.izatcloud.net
+time.xtracloud.net
+tj-pod1-smp-device.apple.com
+tools.google.com
+tp.louisvuitton.com
+universal-activity-service.itunes.apple.com
+update.crashlytics.com
+update.googleapis.com
+updates-http.cdn-apple.com
+updates-http.cdn-apple.com.akadns.net
+updates.cdn-apple.com
+uplaypc-s-ubisoft.cdn.ubi.com
+upp.itunes.apple.com
+valid.apple.com
+valid.origin-apple.com.akadns.net
+vlportal.download.prss.microsoft.com
+volic.download.prss.microsoft.com
+vscode.download.prss.microsoft.com
+vz.download.prss.microsoft.com
+wear.googleapis.com
+weather-data.apple.com
+weather-data.apple.com.akadns.net
+weather-map.apple.com
+weather-map2.apple.com
+weatherkit.apple.com
+windbg.download.prss.microsoft.com
+www-csb.dell.com
+www-google-analytics.l.google.com
+www-googletagmanager.l.google.com
+www.amd.com
+www.apple.com
+www.apple.com.edgekey.net.globalredir.akadns.net
+www.dell.com
+www.destinationurl.com
+www.entrust.cn
+www.gstatic.com
+www.pxcc.com
+www.recaptcha-cn.net
+www.recaptcha.net
+www.support.apple.com
+xp.apple.com
+xtratime.qcomgeo2.com
+xz.pphimalayanrt.com
diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver b/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver
index 5d7e941a2..f16503908 100644
--- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver
+++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver
@@ -1 +1 @@
-202609130005
+202607052256
diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt b/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt
index d149da7b2..5a3c859c8 100644
--- a/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt
+++ b/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt
@@ -4,8 +4,6 @@
1000giri.net
10beasts.net
10musume.com
-123av.com
-123av.me
12bet.com
12vpn.com
12vpn.net
@@ -15,7 +13,6 @@
173ng.com
18board.com
18comic.org
-18comic.vip
18mh.net
1984bbs.com
1991way.com
@@ -130,7 +127,6 @@ agoogleaday.com
agro.hk
ai.dev
ai.studio
-aihub.top
aiosearch.com
aiph.net
airconsole.com
@@ -215,15 +211,18 @@ aoxvpn.com
apartmentratings.com
apartments.com
apat1989.org
+api-gl.lbkrs.com
api-secure.recaptcha.net
api-verify.recaptcha.net
api.ai
+api.futunn.com
+api.lbkrs.com
api.moomoobull.com
api.palworldgame.com
api.pureapk.com
api.recaptcha.net
-api.shuaiapi.com
api.steampowered.com
+api5.futunn.com
apiary.io
apigee.com
apk.support
@@ -295,6 +294,7 @@ atlanta168.com
atnext.com
auctions.yahoo.co.jp
audacy.com
+auntology.fandom.com
autodraw.com
av.movie
av01.tv
@@ -342,7 +342,6 @@ baramangaonline.com
barnabu.co.uk
bartender.dowjones.com
barton.de
-basemaps.arcgis.com
bastillepost.com
bayvoice.net
bb-chat.tv
@@ -561,7 +560,6 @@ break.com
breakgfw.com
breakingtweets.com
breakwall.net
-briarproject.org
brill.com
brizzly.com
broadpressinc.com
@@ -667,6 +665,7 @@ cdjp.org
cdn-images.mailchimp.com
cdn-telegram.org
cdn.arstechnica.net
+cdn.futustatic.com
cdn.jwplayer.com
cdn.printfriendly.com
cdn.seatguru.com
@@ -687,7 +686,6 @@ centauro.com.br
centerforhumanreprod.com
centralnation.com
centurys.net
-cerebras.ai
certificate-transparency.org
certificate.revocationcheck.com
cfr.org
@@ -703,7 +701,6 @@ character.ai
chat.com
chat.lmsys.org
chatgpt.com
-chatgpt.site
chatpdf.com
chaturbate.com
checkgfw.com
@@ -769,12 +766,10 @@ chrome.com
chromecast.com
chromeexperiments.com
chromestatus.com
-cht.com.tw
ci-en.jp
cia.gov
cici.com
ciciai.com
-circle19.org
cirosantilli.com
citizencn.com
citizenlab.ca
@@ -787,7 +782,6 @@ civilmedia.tw
civitai.com
cixiaoya.club
ck101.com
-clashyun.com
classicalguitarblog.net
claude.ai
claude.com
@@ -816,6 +810,7 @@ cn.fmnnow.com
cn.sandscotaicentral.com
cn.shafaqna.com
cn.theaustralian.com.au
+cn.uptodown.com
cna.com.tw
cnbbnews.wordpress.com
cnbeta.com.tw
@@ -896,7 +891,6 @@ css.pixnet.in
csuchen.de
csw.org.uk
ct.org.tw
-ctee.com.tw
ctinets.com
ctinews.com
ctinsider.com
@@ -997,7 +991,6 @@ disneyplus.com
disp.cc
disqus.com
dit-inc.us
-divdyn.com
diyin.org
dizhuzhishang.com
dl-laby.jp
@@ -1044,6 +1037,7 @@ dougscripts.com
doujincafe.com
dowjones.io
download.dappcdn.com
+download.futunn.com
dpool.top
dpp.org.tw
dpr.info
@@ -1146,7 +1140,6 @@ eromanga-kingdom.com
eromangadouzin.com
eromon.net
esg.t91y.com
-esim.redteago.com
eslite.com
esurance.com
etherdelta.com
@@ -1169,7 +1162,6 @@ exmormon.org
expatshield.com
expecthim.com
expekt.com
-experience.arcgis.com
exploader.net
expressnews.com
expressvpn.com
@@ -1209,7 +1201,6 @@ falundafaindia.org
falunhr.org
famunion.com
fanbox.cc
-fandom.com
fangeqiang.com
fanglizhi.info
fangong.org
@@ -1448,7 +1439,6 @@ geti2p.net
getlantern.org
getmalus.com
getmdl.io
-getmonero.org
getoutline.org
getsession.org
getsync.com
@@ -1838,7 +1828,6 @@ help.byspotify.com
helpeachpeople.com
helpster.de
hembed.com
-hentai.tv
heqinglian.net
heritage.org
herokuapp.com
@@ -1864,7 +1853,6 @@ himalayan-foundation.org
himemix.com
hindustantimes.com
hinet.net
-historylines.net
hitbtc.com
hitomi.la
hive.blog
@@ -1881,7 +1869,6 @@ hkcnews.com
hkcoc.com
hkcoc.weather.com.hk
hkdc.us
-hkej.com
hket.com
hkfaa.com
hkgalden.com
@@ -1905,6 +1892,7 @@ holyspiritspeaks.org
home.saxo
homedepot.com
homeservershow.com
+hongkong.fandom.com
hongkongfp.com
hongzhi.li
honven.xyz
@@ -2183,7 +2171,6 @@ kanshifang.com
kantie.org
kaotic.com
karayou.com
-kards.com
kathmandupost.com
kawaiikawaii.jp
kawase.com
@@ -2208,7 +2195,6 @@ kinmen.org.tw
kinmen.travel
kinokuniya.com
kiwi.kz
-kiwix.org
kk-whys.co.jp
kkbox.com
kknews.cc
@@ -2269,7 +2255,6 @@ lenwhite.com
leonardo.ai
lesoir.be
letscorp.net
-level-plus.net
lexica.art
lhakar.org
li.taipei
@@ -2304,7 +2289,6 @@ linkedin.com
linktr.ee
linux.do
linux.org.hk
-linux.sb
liquiditytp.com
liquidvpn.com
listennotes.com
@@ -2317,7 +2301,6 @@ liveleak.com
livemint.com
livestream.com
livevideo.com
-livingatlas.arcgis.com
livingstream.com
lmarena.ai
localbitcoins.com
@@ -2359,6 +2342,7 @@ lvv2.com
lyfhk.net
lzjscript.com
lzmtnews.org
+m.hkgalden.com
m.me
m.moegirl.org
macgamestore.com
@@ -2404,7 +2388,6 @@ mattwilcox.net
maven.neoforged.net
mcadforums.com
mcaf.ee
-mceindex.com
mcusercontent.com
md-t.org
me.me
@@ -2535,6 +2518,7 @@ mosavi.io
motherless.com
movements.org
moviefap.com
+mozilla.ai
mpettis.com
mpfinance.com
mpinews.com
@@ -2649,7 +2633,6 @@ nga.mil
nhentai.net
nic.cz.cc
nic.gov
-nicoseiga.jp
nicovideo.jp
nightswatch.top
nikke-en.com
@@ -2690,7 +2673,6 @@ ntd.tv
ntdtv.com
ntdtv.com.tw
ntdtv.cz
-nthlink.com
nuexpo.com
nurgo-software.com
nusatrip.com
@@ -2735,7 +2717,6 @@ oklink.com
okpool.me
okx.com
old.honeynet.org
-oldmapsonline.org
olehdtv.com
olelive.com
olevod.com
@@ -2767,8 +2748,12 @@ ooni.org
open.firstory.me
openai.com
openapi-quote.longbridge.cn
+openapi-quote.longbridge.com
openapi-trade.longbridge.cn
+openapi-trade.longbridge.com
+openapi.futunn.com
openapi.longbridge.cn
+openapi.longbridge.com
openart.ai
opencritic.com
opendemocracy.net
@@ -3002,6 +2987,7 @@ puffinbrowser.com
pullfolio.co
pure18.com
pureconcepts.net
+puredns.org
pureinsight.org
purepdf.com
purevpn.com
@@ -3024,8 +3010,9 @@ qmp4.com
qoos.com
qq.co.za
qstatus.com
+qtcard.futunn.com
+qtcardfthk.futufin.com
qtrac.eu
-quakemachinex.com
questvisual.com
quitccp.org
quiz.directory
@@ -3045,6 +3032,7 @@ radio.co
radio.garden
radioaustralia.net.au
radiohilight.net
+radiojar.com
radioline.co
radiovaticana.org
radiovncr.com
@@ -3116,7 +3104,6 @@ rlwlw.com
rmbl.ws
roblox.com
robustnessiskey.com
-roc-taiwan.org
rocket-inc.net
rocket.chat
rocksdb.org
@@ -3126,7 +3113,6 @@ rolia.net
rolsociety.org
ronjoneswriter.com
rou.video
-roushuwo.com
rsdlmonitor.com
rsf-chinese.org
rsf.org
@@ -3152,7 +3138,6 @@ rxhj.net
s-cute.com
s.yimg.com
s3-ap-northeast-1.amazonaws.com
-s3.dualstack.us-west-2.amazonaws.com
sacks.com
sacom.hk
sadistic-v.com
@@ -3160,6 +3145,7 @@ sadpanda.us
safechat.com
safeguarddefenders.com
safervpn.com
+sagernet.org
saintyculture.com
sakuralive.com
salvation.org.hk
@@ -3172,7 +3158,6 @@ savetibet.de
savetibet.org
savetibetstore.org
saveuighur.org
-sb.sb
sbme.me
sbti.unun.dev
schema.org
@@ -3429,7 +3414,7 @@ supchina.com
superpages.com
supervpn.net
superzooi.com
-supjav.com
+support.futunn.com
supremecourt.gov
suprememastertv.com
surfeasy.com
@@ -3450,7 +3435,6 @@ synapse.org
syncback.com
synergyse.com
syosetu.com
-sysub.com
t-g.com
t.co
t.me
@@ -3459,12 +3443,10 @@ taa-usa.org
taaze.tw
taedp.org.tw
tagwalk.com
-taiav.com
tails.net
taipeisociety.org
taipeitimes.com
taisounds.com
-taiwanembassy.org
taiwanhot.net
taiwanjustice.net
taiwanncf.org.tw
@@ -3666,7 +3648,6 @@ to-porno.com
togetter.com
token.im
tokenlon.im
-tokenplus.app
tokyo-porn-tube.com
tokyocn.com
tomp3.cc
@@ -3693,6 +3674,8 @@ totalvpn.com
tou.tv
tpi.org.tw
tracfone.com
+trade.futunn.com
+trade.longportapp.com
tradeup.com
tradingview.com
translate.goog
@@ -3706,7 +3689,6 @@ trtworld.com
truebuddha-md.org
trustwallet.com
truthsocial.com
-tryai.dev
tryheart.jp
tsdr.uspto.gov
tt1069.com
@@ -3888,7 +3870,6 @@ uyghurstudies.org
uyghurtribunal.com
uygur.fc2web.com
uymaarip.com
-v.recipes
v2.help
v2.hysteria.network
v2ex.com
@@ -4099,7 +4080,6 @@ wiktionary.org
willw.net
wilsoncenter.org
windscribe.com
-windy.com
wingamestore.com
wingy.site
wionews.com
@@ -4142,11 +4122,9 @@ woyaolian.org
wp.com
wplace.live
wpoforum.com
-write.as
writesonic.com
wsj.com
wsj.net
-wtfpass.com
wufafangwen.com
wufi.org.tw
wujieliulan.com
@@ -4157,6 +4135,7 @@ www.ajsands.com
www.antd.org
www.aolnews.com
www.bing.com
+www.clashverge.dev
www.cmoinc.org
www.dmm.com
www.eastturkistan.net
@@ -4192,7 +4171,6 @@ x.co
x.com
x.company
x3guide.com
-x86.fr
xbabe.com
xbookcn.com
xbtce.com
@@ -4335,7 +4313,6 @@ zdnet.com.tw
zello.com
zenmate.com
zenmate.com.ru
-zenmux.ai
zerohedge.com
zeronet.io
zh-hans.cfsh99.com
diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver b/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver
index 5d7e941a2..f16503908 100644
--- a/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver
+++ b/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver
@@ -1 +1 @@
-202609130005
+202607052256
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/clean_log.sh b/luci-app-homeproxy/root/etc/homeproxy/scripts/clean_log.sh
index c0d8f10b8..d2878ed0f 100755
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/clean_log.sh
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/clean_log.sh
@@ -14,6 +14,6 @@ while true; do
sleep 180
for i in "$main_log_file" "$singc_log_file" "$sings_log_file"; do
[ -s "$i" ] || continue
- [ "$(( $(ls -l "$i" | awk -F ' ' '{print $5}') / 1024 >= log_max_size))" -eq "0" ] || echo "" > "$i"
+ [ "$(( $(wc -c < "$i") / 1024 >= log_max_size))" -eq "0" ] || : > "$i"
done
done
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/firewall_post.ut b/luci-app-homeproxy/root/etc/homeproxy/scripts/firewall_post.ut
index 04a0f6d9b..37c653a55 100755
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/firewall_post.ut
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/firewall_post.ut
@@ -1,9 +1,20 @@
#!/usr/bin/utpl -S
{%-
+/*
+ * Declares every homeproxy_* fw4 chain/set. The inventory of those objects is
+ * tracked in scripts/fw4_names.sh, which init.d/homeproxy uses to clean them up
+ * on stop; add/remove entries there together with any change below.
+ * tests/ucode/test_fw4_names.sh compares both lists, and
+ * tests/ucode/test_firewall_template.sh renders this template and checks the
+ * objects actually survive into the generated nftables script.
+ *
+ * Keep this comment inside the ucode block: text placed before `{%-` has its
+ * trailing newline trimmed, which would glue it onto the first nft statement.
+ */
import { readfile } from 'fs';
import { cursor } from 'uci';
-import { isEmpty } from '/etc/homeproxy/scripts/homeproxy.uc';
+import { isEmpty, isValidCIDR } from '/etc/homeproxy/scripts/homeproxy.uc';
const fw4 = require('fw4');
@@ -25,7 +36,24 @@ function resolve_ipv6(str) {
if (ipv6.bits > -1)
return `${ipv6.addr}/${ipv6.bits}`;
else
- return `& ${ipv6.mask} == ${ipv6.addr}`;
+ return ipv6.addr;
+}
+
+/* Normalize a list of IPv6 entries into an nftables anonymous set
+ (or null when empty), so IPv6 ACLs match in a single set lookup
+ instead of one rule per address. */
+function ipv6_to_nftarr(list) {
+ if (isEmpty(list))
+ return null;
+
+ let out = [];
+ for (let ip in list) {
+ const r = resolve_ipv6(ip);
+ if (!isEmpty(r))
+ push(out, r);
+ }
+
+ return isEmpty(out) ? null : `{ ${join(', ', out)} }`;
}
function resolve_mark(str) {
@@ -182,7 +210,9 @@ set homeproxy_mainland_addr_v4 {
auto-merge
elements = {
{% for (let cnip4 in split(trim(readfile(resources_dir + '/china_ip4.txt')), /[\r\n]/)): %}
+ {% if (isValidCIDR(cnip4, 4)): %}
{{ cnip4 }},
+ {% endif %}
{% endfor %}
}
}
@@ -193,7 +223,9 @@ set homeproxy_mainland_addr_v6 {
auto-merge
elements = {
{% for (let cnip6 in split(trim(readfile(resources_dir + '/china_ip6.txt')), /[\r\n]/)): %}
+ {% if (isValidCIDR(cnip6, 6)): %}
{{ cnip6 }},
+ {% endif %}
{% endfor %}
}
}
@@ -286,9 +318,9 @@ chain homeproxy_redirect_lanac {
{% if (!isEmpty(control_info.lan_proxy_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_proxy_ipv4_ips) }} counter goto homeproxy_redirect
{% endif /* lan_proxy_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_proxy_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_redirect
- {% endfor /* lan_proxy_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_proxy_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_proxy_ipv6_ips) }} counter goto homeproxy_redirect
+ {% endif /* lan_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_proxy_mac_addrs) }} counter goto homeproxy_redirect
{% endif /* lan_proxy_mac_addrs */ %}
@@ -296,9 +328,9 @@ chain homeproxy_redirect_lanac {
{% if (!isEmpty(control_info.lan_direct_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_direct_ipv4_ips) }} counter return
{% endif /* lan_direct_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_direct_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter return
- {% endfor /* lan_direct_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_direct_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_direct_ipv6_ips) }} counter return
+ {% endif /* lan_direct_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_direct_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_direct_mac_addrs) }} counter return
{% endif /* lan_direct_mac_addrs */ %}
@@ -326,9 +358,9 @@ chain homeproxy_redirect {
{% if (!isEmpty(control_info.lan_global_proxy_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_global_proxy_ipv4_ips) }} counter goto homeproxy_redirect_proxy_port
{% endif /* lan_global_proxy_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_global_proxy_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_redirect_proxy_port
- {% endfor /* lan_global_proxy_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_global_proxy_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_global_proxy_ipv6_ips) }} counter goto homeproxy_redirect_proxy_port
+ {% endif /* lan_global_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_global_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_global_proxy_mac_addrs) }} counter goto homeproxy_redirect_proxy_port
{% endif /* lan_global_proxy_mac_addrs */ %}
@@ -359,9 +391,9 @@ chain homeproxy_redirect {
{% if (!isEmpty(control_info.lan_gaming_mode_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_gaming_mode_ipv4_ips) }} counter goto homeproxy_redirect_proxy
{% endif /* lan_gaming_mode_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_gaming_mode_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_redirect_proxy
- {% endfor /* lan_gaming_mode_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_gaming_mode_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_gaming_mode_ipv6_ips) }} counter goto homeproxy_redirect_proxy
+ {% endif /* lan_gaming_mode_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_gaming_mode_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_gaming_mode_mac_addrs) }} counter goto homeproxy_redirect_proxy
{% endif /* lan_gaming_mode_mac_addrs */ %}
@@ -409,9 +441,9 @@ chain homeproxy_mangle_lanac {
{% if (!isEmpty(control_info.lan_proxy_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_proxy_ipv4_ips) }} counter goto homeproxy_mangle_prerouting
{% endif /* lan_proxy_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_proxy_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_mangle_prerouting
- {% endfor /* lan_proxy_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_proxy_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_proxy_ipv6_ips) }} counter goto homeproxy_mangle_prerouting
+ {% endif /* lan_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_proxy_mac_addrs) }} counter goto homeproxy_mangle_prerouting
{% endif /* lan_proxy_mac_addrs */ %}
@@ -419,9 +451,9 @@ chain homeproxy_mangle_lanac {
{% if (!isEmpty(control_info.lan_direct_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_direct_ipv4_ips) }} counter return
{% endif /* lan_direct_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_direct_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter return
- {% endfor /* lan_direct_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_direct_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_direct_ipv6_ips) }} counter return
+ {% endif /* lan_direct_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_direct_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_direct_mac_addrs) }} counter return
{% endif /* lan_direct_mac_addrs */ %}
@@ -447,9 +479,9 @@ chain homeproxy_mangle_prerouting {
{% if (!isEmpty(control_info.lan_global_proxy_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_global_proxy_ipv4_ips) }} counter goto homeproxy_mangle_tproxy_port
{% endif /* lan_global_proxy_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_global_proxy_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_mangle_tproxy_port
- {% endfor /* lan_global_proxy_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_global_proxy_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_global_proxy_ipv6_ips) }} counter goto homeproxy_mangle_tproxy_port
+ {% endif /* lan_global_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_global_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_global_proxy_mac_addrs) }} counter goto homeproxy_mangle_tproxy_port
{% endif /* lan_global_proxy_mac_addrs */ %}
@@ -465,14 +497,14 @@ chain homeproxy_mangle_prerouting {
{% if (ipv6_support === '1'): %}
ip6 daddr != @homeproxy_gfw_list_v6 counter return
{% endif /* ipv6_support */ %}
- udp dport { 80, 443 } counter reject comment "!{{ cfgname }}: Fuck you QUIC"
+ udp dport { 80, 443 } counter reject comment "!{{ cfgname }}: Block QUIC (not proxyable)"
{% elif (routing_mode === 'bypass_mainland_china' || bypass_cn_traffic === '1'): %}
ip daddr @homeproxy_mainland_addr_v4 counter return
{% if (ipv6_support === '1'): %}
ip6 daddr @homeproxy_mainland_addr_v6 counter return
{% endif /* ipv6_support */ %}
{% if (routing_mode !== 'custom'): %}
- udp dport { 80, 443 } counter reject comment "!{{ cfgname }}: Fuck you QUIC"
+ udp dport { 80, 443 } counter reject comment "!{{ cfgname }}: Block QUIC (not proxyable)"
{% endif /* routing_mode */ %}
{% elif (routing_mode === 'proxy_mainland_china'): %}
ip daddr != @homeproxy_mainland_addr_v4 counter return
@@ -484,9 +516,9 @@ chain homeproxy_mangle_prerouting {
{% if (!isEmpty(control_info.lan_gaming_mode_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_gaming_mode_ipv4_ips) }} counter goto homeproxy_mangle_tproxy
{% endif /* lan_gaming_mode_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_gaming_mode_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_mangle_tproxy
- {% endfor /* lan_gaming_mode_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_gaming_mode_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_gaming_mode_ipv6_ips) }} counter goto homeproxy_mangle_tproxy
+ {% endif /* lan_gaming_mode_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_gaming_mode_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_gaming_mode_mac_addrs) }} counter goto homeproxy_mangle_tproxy
{% endif /* lan_gaming_mode_mac_addrs */ %}
@@ -555,9 +587,9 @@ chain homeproxy_mangle_lanac {
{% if (!isEmpty(control_info.lan_proxy_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_proxy_ipv4_ips) }} counter goto homeproxy_mangle_tun
{% endif /* lan_proxy_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_proxy_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_mangle_tun
- {% endfor /* lan_proxy_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_proxy_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_proxy_ipv6_ips) }} counter goto homeproxy_mangle_tun
+ {% endif /* lan_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_proxy_mac_addrs) }} counter goto homeproxy_mangle_tun
{% endif /* lan_proxy_mac_addrs */ %}
@@ -565,9 +597,9 @@ chain homeproxy_mangle_lanac {
{% if (!isEmpty(control_info.lan_direct_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_direct_ipv4_ips) }} counter return
{% endif /* lan_direct_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_direct_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter return
- {% endfor /* lan_direct_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_direct_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_direct_ipv6_ips) }} counter return
+ {% endif /* lan_direct_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_direct_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_direct_mac_addrs) }} counter return
{% endif /* lan_direct_mac_addrs */ %}
@@ -606,9 +638,9 @@ chain homeproxy_mangle_tun {
{% if (!isEmpty(control_info.lan_global_proxy_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_global_proxy_ipv4_ips) }} counter goto homeproxy_mangle_tun_mark
{% endif /* lan_global_proxy_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_global_proxy_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_mangle_tun_mark
- {% endfor /* lan_global_proxy_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_global_proxy_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_global_proxy_ipv6_ips) }} counter goto homeproxy_mangle_tun_mark
+ {% endif /* lan_global_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_global_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_global_proxy_mac_addrs) }} counter goto homeproxy_mangle_tun_mark
{% endif /* lan_global_proxy_mac_addrs */ %}
@@ -626,14 +658,14 @@ chain homeproxy_mangle_tun {
{% if (ipv6_support === '1'): %}
ip6 daddr != @homeproxy_gfw_list_v6 counter return
{% endif /* ipv6_support */ %}
- udp dport { 80, 443 } counter reject comment "!{{ cfgname }}: Fuck you QUIC"
+ udp dport { 80, 443 } counter reject comment "!{{ cfgname }}: Block QUIC (not proxyable)"
{% elif (routing_mode === 'bypass_mainland_china' || bypass_cn_traffic === '1'): %}
ip daddr @homeproxy_mainland_addr_v4 counter return
{% if (ipv6_support === '1'): %}
ip6 daddr @homeproxy_mainland_addr_v6 counter return
{% endif /* ipv6_support */ %}
{% if (routing_mode !== 'custom'): %}
- udp dport { 80, 443 } counter reject comment "!{{ cfgname }}: Fuck you QUIC"
+ udp dport { 80, 443 } counter reject comment "!{{ cfgname }}: Block QUIC (not proxyable)"
{% endif /* routing_mode */ %}
{% elif (routing_mode === 'proxy_mainland_china'): %}
ip daddr != @homeproxy_mainland_addr_v4 counter return
@@ -645,9 +677,9 @@ chain homeproxy_mangle_tun {
{% if (!isEmpty(control_info.lan_gaming_mode_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_gaming_mode_ipv4_ips) }} counter meta mark set {{ tun_mark }}
{% endif /* lan_gaming_mode_ipv4_ips */ %}
- {% for (let ipv6 in control_info.lan_gaming_mode_ipv6_ips): %}
- ip6 saddr {{ resolve_ipv6(ipv6) }} counter meta mark set {{ tun_mark }}
- {% endfor /* lan_gaming_mode_ipv6_ips */ %}
+ {% if (!isEmpty(control_info.lan_gaming_mode_ipv6_ips)): %}
+ ip6 saddr {{ ipv6_to_nftarr(control_info.lan_gaming_mode_ipv6_ips) }} counter meta mark set {{ tun_mark }}
+ {% endif /* lan_gaming_mode_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_gaming_mode_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_gaming_mode_mac_addrs) }} counter meta mark set {{ tun_mark }}
{% endif /* lan_gaming_mode_mac_addrs */ %}
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/firewall_pre.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/firewall_pre.uc
index 378df2be0..3b4bfe527 100755
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/firewall_pre.uc
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/firewall_pre.uc
@@ -4,7 +4,7 @@
import { writefile } from 'fs';
import { cursor } from 'uci';
-import { isEmpty, RUN_DIR } from 'homeproxy';
+import { isEmpty, RUN_DIR, validation } from 'homeproxy';
const cfgname = 'homeproxy';
const uci = cursor();
@@ -39,7 +39,17 @@ if (server_enabled === '1') {
if (s.enabled !== '1' || s.firewall !== '1')
return;
+ if (!validation('port', s.port)) {
+ print(`WARN: skipping server ${s['.name']}: invalid port "${s.port}".`);
+ return;
+ }
+
let proto = s.network || '{ tcp, udp }';
+ if (!(proto in ['tcp', 'udp', '{ tcp, udp }'])) {
+ print(`WARN: skipping server ${s['.name']}: invalid network "${proto}".`);
+ return;
+ }
+
push(input, `meta l4proto ${proto} th dport ${s.port} counter accept comment "!${cfgname}: accept server ${s['.name']}"`);
});
}
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/fw4_names.sh b/luci-app-homeproxy/root/etc/homeproxy/scripts/fw4_names.sh
new file mode 100644
index 000000000..cdff5ee94
--- /dev/null
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/fw4_names.sh
@@ -0,0 +1,48 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2025 ImmortalWrt.org
+#
+# Single source of truth for every fw4 chain and set owned by homeproxy.
+#
+# * root/etc/homeproxy/scripts/firewall_post.ut declares these objects and
+# decides which of them actually exist for the current proxy mode.
+# * root/etc/init.d/homeproxy flushes and deletes them on stop.
+#
+# When you add or remove a chain/set in firewall_post.ut, update this list in
+# the same commit -- tests/ucode/test_fw4_names.sh compares both sides and
+# fails when they drift.
+#
+# Each object is cleaned up independently: the cleanup loop deletes one at a
+# time so that a chain/set which does not exist in the current mode cannot
+# abort the whole batch. A single `nft -f` batch is atomic and would roll back
+# every preceding command in that case.
+
+HP_FW4_CHAINS="
+ homeproxy_output_redir
+ homeproxy_redirect
+ homeproxy_redirect_proxy
+ homeproxy_redirect_proxy_port
+ homeproxy_redirect_lanac
+ homeproxy_mangle_prerouting
+ homeproxy_mangle_output
+ homeproxy_mangle_tproxy
+ homeproxy_mangle_tproxy_port
+ homeproxy_mangle_lanac
+ homeproxy_mangle_mark
+ homeproxy_mangle_tun
+ homeproxy_mangle_tun_mark
+"
+
+HP_FW4_SETS="
+ homeproxy_local_addr_v4
+ homeproxy_local_addr_v6
+ homeproxy_gfw_list_v4
+ homeproxy_gfw_list_v6
+ homeproxy_mainland_addr_v4
+ homeproxy_mainland_addr_v6
+ homeproxy_wan_proxy_addr_v4
+ homeproxy_wan_proxy_addr_v6
+ homeproxy_wan_direct_addr_v4
+ homeproxy_wan_direct_addr_v6
+ homeproxy_routing_port
+"
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc
index 7a655d8c8..14ed6e09c 100755
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc
@@ -7,7 +7,6 @@
'use strict';
-import { md5 } from 'digest';
import { readfile, writefile } from 'fs';
import { isnan } from 'math';
import { connect } from 'ubus';
@@ -15,7 +14,8 @@ import { cursor } from 'uci';
import {
isEmpty, parseURL, strToBool, strToInt, strToTime,
- removeBlankAttrs, validation, HP_DIR, RUN_DIR
+ removeBlankAttrs, validation, buildTLSObject, buildTransportObject,
+ HP_DIR, RUN_DIR
} from 'homeproxy';
const ubus = connect();
@@ -30,10 +30,7 @@ uci.load(uciconfig);
const uciinfra = 'infra',
ucimain = 'config',
- ucicontrol = 'control',
- uciclashapi = 'clash_api',
- ucintp = 'ntp',
- ucicache = 'cache';
+ ucicontrol = 'control';
const ucidnssetting = 'dns',
ucidnsserver = 'dns_server',
@@ -45,64 +42,23 @@ const uciroutingsetting = 'routing',
const ucinode = 'node';
const uciruleset = 'ruleset';
-const RULESET_DIR = HP_DIR + '/ruleset';
const routing_mode = uci.get(uciconfig, ucimain, 'routing_mode') || 'bypass_mainland_china';
-function normalize_list(value) {
- if (isEmpty(value))
- return [];
- if (type(value) === 'array')
- return value;
- return [value];
-}
-
-function ruleset_file_name(tag, format) {
- let filename = replace(tag || 'ruleset', /[^A-Za-z0-9_.-]+/g, '_');
- if (isEmpty(filename))
- filename = 'ruleset';
-
- return filename + ((format === 'source') ? '.json' : '.srs');
-}
-
-function ruleset_default_path(tag, format) {
- return RULESET_DIR + '/' + ruleset_file_name(tag, format);
-}
-
-function ruleset_remote_path(path, tag, format) {
- if (isEmpty(path))
- return ruleset_default_path(tag, format);
-
- if (match(path, /\/$/))
- return path + ruleset_file_name(tag, format);
-
- return path;
-}
-
let wan_dns = ubus.call('network.interface', 'status', {'interface': 'wan'})?.['dns-server']?.[0];
if (!wan_dns)
- wan_dns = (routing_mode in ['proxy_mainland_china', 'global']) ? '9.9.9.9' : '223.5.5.5';
+ wan_dns = (routing_mode in ['proxy_mainland_china', 'global']) ? '8.8.8.8' : '223.5.5.5';
const dns_port = uci.get(uciconfig, uciinfra, 'dns_port') || '5333';
-let ntp_enabled = uci.get(uciconfig, ucintp, 'enabled'),
- ntp_server = uci.get(uciconfig, ucintp, 'server'),
- ntp_server_port = uci.get(uciconfig, ucintp, 'server_port'),
- ntp_interval = uci.get(uciconfig, ucintp, 'interval');
-
-if (isEmpty(ntp_enabled) && isEmpty(ntp_server)) {
- ntp_server = uci.get(uciconfig, uciinfra, 'ntp_server');
- ntp_enabled = !isEmpty(ntp_server) ? '1' : '0';
-}
+const ntp_server = uci.get(uciconfig, uciinfra, 'ntp_server') || 'time.apple.com';
const ipv6_support = uci.get(uciconfig, ucimain, 'ipv6_support') || '0';
-let cache_file_enabled, cache_file_path, cache_store_rdrc, cache_rdrc_timeout,
- main_node, main_udp_node, dedicated_udp_node, default_outbound, default_outbound_dns,
- domain_strategy, sniff_override, dns_server, china_dns_server, dns_default_strategy,
- dns_default_server, dns_disable_cache, dns_disable_cache_expire, dns_independent_cache,
- dns_client_subnet, direct_domain_list,
- proxy_domain_list;
+let main_node, main_udp_node, dedicated_udp_node, default_outbound, default_outbound_dns,
+ domain_strategy, dns_server, china_dns_server, dns_default_strategy,
+ dns_default_server, dns_disable_cache, dns_disable_cache_expire,
+ dns_client_subnet, direct_domain_list, proxy_domain_list;
if (routing_mode !== 'custom') {
main_node = uci.get(uciconfig, ucimain, 'main_node') || 'nil';
@@ -116,35 +72,35 @@ if (routing_mode !== 'custom') {
if (routing_mode === 'bypass_mainland_china') {
china_dns_server = uci.get(uciconfig, ucimain, 'china_dns_server');
if (isEmpty(china_dns_server) || type(china_dns_server) !== 'string' || china_dns_server === 'wan')
- china_dns_server = wan_dns;
+ china_dns_server = '223.5.5.5';
}
dns_default_strategy = (ipv6_support !== '1') ? 'ipv4_only' : null;
- direct_domain_list = trim(readfile(HP_DIR + '/resources/direct_list.txt'));
- if (direct_domain_list)
- direct_domain_list = split(direct_domain_list, /[\r\n]/);
+ const direct_list_raw = readfile(HP_DIR + '/resources/direct_list.txt');
+ direct_domain_list = direct_list_raw ? split(trim(direct_list_raw), /[\r\n]/) : [];
- proxy_domain_list = trim(readfile(HP_DIR + '/resources/proxy_list.txt'));
- if (proxy_domain_list)
- proxy_domain_list = split(proxy_domain_list, /[\r\n]/);
+ const proxy_list_raw = readfile(HP_DIR + '/resources/proxy_list.txt');
+ proxy_domain_list = proxy_list_raw ? split(trim(proxy_list_raw), /[\r\n]/) : [];
- sniff_override = uci.get(uciconfig, uciinfra, 'sniff_override') || '1';
} else {
/* DNS settings */
dns_default_strategy = uci.get(uciconfig, ucidnssetting, 'default_strategy');
dns_default_server = uci.get(uciconfig, ucidnssetting, 'default_server');
dns_disable_cache = uci.get(uciconfig, ucidnssetting, 'disable_cache');
dns_disable_cache_expire = uci.get(uciconfig, ucidnssetting, 'disable_cache_expire');
- dns_independent_cache = uci.get(uciconfig, ucidnssetting, 'independent_cache');
dns_client_subnet = uci.get(uciconfig, ucidnssetting, 'client_subnet');
/* Routing settings */
default_outbound = uci.get(uciconfig, uciroutingsetting, 'default_outbound') || 'nil';
default_outbound_dns = uci.get(uciconfig, uciroutingsetting, 'default_outbound_dns') || 'default-dns';
domain_strategy = uci.get(uciconfig, uciroutingsetting, 'domain_strategy');
- sniff_override = uci.get(uciconfig, uciroutingsetting, 'sniff_override');
}
+const dns_optimistic_cache = uci.get(uciconfig, ucidnssetting, 'optimistic_cache') || '0',
+ dns_optimistic_timeout = uci.get(uciconfig, ucidnssetting, 'optimistic_timeout'),
+ dns_query_timeout = uci.get(uciconfig, ucidnssetting, 'dns_timeout'),
+ dns_store_dns = uci.get(uciconfig, ucidnssetting, 'cache_file_store_dns') || '0';
+
const proxy_mode = uci.get(uciconfig, ucimain, 'proxy_mode') || 'redirect_tproxy',
default_interface = uci.get(uciconfig, ucicontrol, 'bind_interface');
@@ -152,7 +108,7 @@ const mixed_port = uci.get(uciconfig, uciinfra, 'mixed_port') || '5330';
let self_mark, redirect_port, tproxy_port, tun_name,
tun_addr4, tun_addr6, tun_mtu, tcpip_stack,
- udp_timeout;
+ endpoint_independent_nat, udp_timeout;
if (routing_mode === 'custom')
udp_timeout = uci.get(uciconfig, uciroutingsetting, 'udp_timeout');
@@ -172,21 +128,34 @@ if (match(proxy_mode, /tun/)) {
tun_addr6 = uci.get(uciconfig, uciinfra, 'tun_addr6') || 'fdfe:dcba:9876::1/126';
tun_mtu = uci.get(uciconfig, uciinfra, 'tun_mtu') || '9000';
tcpip_stack = 'system';
- if (routing_mode === 'custom')
+ if (routing_mode === 'custom') {
tcpip_stack = uci.get(uciconfig, uciroutingsetting, 'tcpip_stack') || 'system';
+ endpoint_independent_nat = uci.get(uciconfig, uciroutingsetting, 'endpoint_independent_nat');
+ }
}
const log_level = uci.get(uciconfig, ucimain, 'log_level') || 'warn';
-
-cache_file_enabled = uci.get(uciconfig, ucicache, 'enabled');
-cache_file_path = uci.get(uciconfig, ucicache, 'path');
-cache_store_rdrc = uci.get(uciconfig, ucicache, 'store_rdrc');
-cache_rdrc_timeout = uci.get(uciconfig, ucicache, 'rdrc_timeout');
-
-let clash_api = null;
/* UCI config end */
+const tun_dns_mode_raw = uci.get(uciconfig, ucimain, 'tun_dns_mode'),
+ tun_dns_address = uci.get(uciconfig, ucimain, 'tun_dns_address'),
+ udp_mapping_raw = uci.get(uciconfig, ucimain, 'udp_mapping'),
+ udp_filtering_raw = uci.get(uciconfig, ucimain, 'udp_filtering'),
+ udp_nat_max = strToInt(uci.get(uciconfig, ucimain, 'udp_nat_max'));
+
+const tun_dns_mode = (tun_dns_mode_raw === 'default') ? '' : tun_dns_mode_raw,
+ udp_mapping = (udp_mapping_raw === 'default') ? '' : udp_mapping_raw,
+ udp_filtering = (udp_filtering_raw === 'default') ? '' : udp_filtering_raw;
+
/* Config helper start */
+/*
+ * Direct-node destination override, keyed by node section name. It must be
+ * declared before the helpers that touch it: ucode resolves let/const
+ * lexically and does not hoist them, so a function defined earlier would
+ * resolve the name as an undeclared global and throw under strict mode.
+ */
+const direct_overrides = {};
+
function parse_port(strport) {
if (type(strport) !== 'array' || isEmpty(strport))
return null;
@@ -215,31 +184,6 @@ function parse_dnsserver(server_addr, default_protocol) {
}
}
-function parse_custom_dnsserver(cfg) {
- let server = cfg.server,
- server_port = (cfg.type in ['https', 'h3']) ? null : strToInt(cfg.server_port),
- path = cfg.path;
-
- if (!isEmpty(server) && match(server, /:\/\//)) {
- const server_url = parseURL(server);
-
- server = server_url.hostname;
- if (isEmpty(server_port))
- server_port = strToInt(server_url.port);
- if ((cfg.type in ['https', 'h3']) && isEmpty(path) && server_url.pathname !== '/')
- path = server_url.pathname;
- }
- if ((cfg.type in ['https', 'h3']) && isEmpty(path))
- path = '/dns-query';
-
- return {
- type: cfg.type,
- server,
- server_port,
- path
- };
-}
-
function parse_dnsquery(strquery) {
if (type(strquery) !== 'array' || isEmpty(strquery))
return null;
@@ -252,149 +196,13 @@ function parse_dnsquery(strquery) {
}
-function filter_existing_nodes(nodes) {
- if (type(nodes) !== 'array' || isEmpty(nodes))
- return [];
-
- return filter(nodes, (k) => {
- const node = uci.get_all(uciconfig, k) || {};
- return !isEmpty(node);
- });
-}
-
-function collect_group_nodes(groups, subscription_nodes, nodes, legacy_nodes) {
- let result = [];
-
- for (let group in normalize_list(groups))
- uci.foreach(uciconfig, ucinode, (cfg) => {
- if (cfg.grouphash === group && !~index(result, cfg['.name']))
- push(result, cfg['.name']);
- });
-
- for (let node in filter_existing_nodes(normalize_list(subscription_nodes)))
- if (!~index(result, node))
- push(result, node);
-
- for (let node in filter_existing_nodes(normalize_list(nodes)))
- if (!~index(result, node))
- push(result, node);
-
- for (let node in filter_existing_nodes(normalize_list(legacy_nodes)))
- if (!~index(result, node))
- push(result, node);
-
- return result;
-}
-
-function collect_policy_nodes(nodes, current) {
- let result = [];
-
- for (let node in normalize_list(nodes)) {
- if (node === current || ~index(result, node))
- continue;
-
- const outbound = uci.get_all(uciconfig, node) || {};
- if (!isEmpty(outbound) && outbound['.type'] === uciroutingnode && outbound.enabled === '1' && outbound.node in ['urltest', 'selector'])
- push(result, node);
- }
-
- return result;
-}
-
-const reserved_outbound_tags = {
- 'GLOBAL': true,
- 'main-out': true,
- 'main-udp-out': true,
- 'direct-out': true,
- 'block-out': true
-};
-
-let outbound_tag_map = {},
- outbound_tag_used = {};
-
-function normalize_outbound_tag(tag) {
- if (isEmpty(tag))
- return null;
-
- tag = trim(sprintf('%s', tag));
- tag = replace(tag, /[\r\n\t]+/g, ' ');
- tag = replace(tag, /[\/\\?#%]+/g, '-');
- tag = replace(tag, /\s+/g, ' ');
-
- return tag || null;
-}
-
-function section_display_name(section) {
- if (type(section) !== 'object' || isEmpty(section))
- return null;
-
- let label = normalize_outbound_tag(section.label);
- if (!isEmpty(label))
- return label;
-
- if (section['.type'] === ucinode) {
- const address = trim(section.override_address || section.address || '');
- const port = trim(section.override_port || section.port || '');
-
- if (address && port)
- return normalize_outbound_tag(`${address}:${port}`);
- }
-
- return null;
-}
-
-function register_outbound_tag(section_id, display_name) {
- if (isEmpty(section_id))
- return null;
-
- let tag = outbound_tag_map[section_id];
- if (!isEmpty(tag))
- return tag;
-
- const fallback_tag = `cfg-${section_id}-out`;
- const base_tag = normalize_outbound_tag(display_name) || fallback_tag;
-
- tag = base_tag;
- let suffix = 2;
- while (reserved_outbound_tags[tag] || outbound_tag_used[tag]) {
- tag = `${base_tag} (${suffix})`;
- suffix++;
- }
-
- outbound_tag_map[section_id] = tag;
- outbound_tag_used[tag] = true;
-
- return tag;
-}
-
-function get_section_outbound_tag(section_id) {
- if (isEmpty(section_id))
- return null;
-
- let tag = outbound_tag_map[section_id];
- if (!isEmpty(tag))
- return tag;
-
- const section = uci.get_all(uciconfig, section_id) || {};
- return register_outbound_tag(section_id, section_display_name(section));
-}
-
-uci.foreach(uciconfig, ucinode, (cfg) => {
- register_outbound_tag(cfg['.name'], section_display_name(cfg));
-});
-
-uci.foreach(uciconfig, uciroutingnode, (cfg) => {
- if (cfg.enabled === '1')
- register_outbound_tag(cfg['.name'], section_display_name(cfg));
-});
-
function generate_endpoint(node) {
if (type(node) !== 'object' || isEmpty(node))
return null;
const endpoint = {
type: node.type,
- tag: get_section_outbound_tag(node['.name']),
+ tag: 'cfg-' + node['.name'] + '-out',
address: node.wireguard_local_address,
mtu: strToInt(node.wireguard_mtu),
private_key: node.wireguard_private_key,
@@ -415,7 +223,10 @@ function generate_endpoint(node) {
system: (node.type === 'wireguard') ? false : null,
tcp_fast_open: strToBool(node.tcp_fast_open),
tcp_multi_path: strToBool(node.tcp_multi_path),
- udp_fragment: strToBool(node.udp_fragment)
+ udp_fragment: strToBool(node.udp_fragment),
+ udp_mapping: !isEmpty(udp_mapping) ? udp_mapping : null,
+ udp_filtering: !isEmpty(udp_filtering) ? udp_filtering : null,
+ udp_nat_max: udp_nat_max
};
return endpoint;
@@ -425,44 +236,56 @@ function generate_outbound(node) {
if (type(node) !== 'object' || isEmpty(node))
return null;
- const tls_utls_value = (node.type === 'anytls' && isEmpty(node.tls_utls)) ? 'chrome' : node.tls_utls;
const outbound = {
type: node.type,
- tag: get_section_outbound_tag(node['.name']),
+ tag: 'cfg-' + node['.name'] + '-out',
routing_mark: strToInt(self_mark),
- server: (node.type !== 'direct') ? node.address : null,
- server_port: (node.type !== 'direct') ? strToInt(node.port) : null,
+ server: node.address,
+ server_port: strToInt(node.port),
/* Hysteria(2) */
server_ports: node.hysteria_hopping_port,
username: (node.type !== 'ssh') ? node.username : null,
user: (node.type === 'ssh') ? node.username : null,
- password: node.password,
+ /* Snell authenticates with psk instead of password */
+ password: (node.type !== 'snell') ? node.password : null,
+ psk: (node.type === 'snell') ? node.password : null,
+ userkey: (node.type === 'snell') ? node.snell_userkey : null,
+ reuse: (node.type === 'snell') ? strToBool(node.snell_reuse) : null,
+ /* Snell v4: HTTP obfuscation; v6: traffic shaping mode */
+ obfs_mode: (node.type === 'snell') ? (node.snell_obfs_mode || null) : null,
+ obfs_host: (node.type === 'snell') ? (node.snell_obfs_host || null) : null,
+ mode: (node.type === 'snell') ? (node.snell_mode || null) : null,
+ /* Direct */
+ proxy_protocol: strToInt(node.proxy_protocol),
/* AnyTLS */
idle_session_check_interval: strToTime(node.anytls_idle_session_check_interval),
idle_session_timeout: strToTime(node.anytls_idle_session_timeout),
min_idle_session: strToInt(node.anytls_min_idle_session),
/* Hysteria (2) */
hop_interval: strToTime(node.hysteria_hop_interval),
+ hop_interval_max: strToTime(node.hysteria_hop_interval_max),
up_mbps: strToInt(node.hysteria_up_mbps),
down_mbps: strToInt(node.hysteria_down_mbps),
obfs: node.hysteria_obfs_type ? {
type: node.hysteria_obfs_type,
- password: node.hysteria_obfs_password
+ password: node.hysteria_obfs_password,
+ min_packet_size: strToInt(node.hysteria_obfs_min_packet_size),
+ max_packet_size: strToInt(node.hysteria_obfs_max_packet_size)
} : node.hysteria_obfs_password,
auth: (node.hysteria_auth_type === 'base64') ? node.hysteria_auth_payload : null,
auth_str: (node.hysteria_auth_type === 'string') ? node.hysteria_auth_payload : null,
- recv_window_conn: strToInt(node.hysteria_recv_window_conn),
- recv_window: strToInt(node.hysteria_revc_window),
- disable_mtu_discovery: strToBool(node.hysteria_disable_mtu_discovery),
+ /* sing-box 1.14: Hysteria2 QUIC params (Hysteria v1 recv-window tuning removed upstream) */
+ bbr_profile: (node.type === 'hysteria2') ? (node.hysteria_bbr_profile || null) : null,
+ disable_chrome_parrot: (node.type === 'hysteria2' && node.hysteria_disable_chrome_parrot === '1') ? true : null,
/* Shadowsocks */
method: node.shadowsocks_encrypt_method,
plugin: node.shadowsocks_plugin,
plugin_opts: node.shadowsocks_plugin_opts,
- /* ShadowTLS / Socks */
- version: (node.type === 'shadowtls') ? strToInt(node.shadowtls_version) : ((node.type === 'socks') ? node.socks_version : null),
+ /* ShadowTLS / Socks / Snell */
+ version: (node.type === 'shadowtls') ? strToInt(node.shadowtls_version) : ((node.type === 'socks') ? node.socks_version : ((node.type === 'snell') ? (strToInt(node.snell_version) || 4) : null)),
/* SSH */
client_version: node.ssh_client_version,
host_key: node.ssh_host_key,
@@ -497,45 +320,8 @@ function generate_outbound(node) {
down_mbps: strToInt(node.multiplex_brutal_down)
} : null
} : null,
- tls: (node.tls === '1') ? {
- enabled: true,
- server_name: node.tls_sni,
- insecure: strToBool(node.tls_insecure),
- alpn: node.tls_alpn,
- min_version: node.tls_min_version,
- max_version: node.tls_max_version,
- cipher_suites: node.tls_cipher_suites,
- certificate_path: node.tls_cert_path,
- ech: (node.tls_ech === '1') ? {
- enabled: true,
- config: node.tls_ech_config,
- config_path: node.tls_ech_config_path
- } : null,
- utls: !isEmpty(tls_utls_value) ? {
- enabled: true,
- fingerprint: tls_utls_value
- } : null,
- reality: (node.tls_reality === '1') ? {
- enabled: true,
- public_key: node.tls_reality_public_key,
- short_id: node.tls_reality_short_id
- } : null
- } : null,
- transport: !isEmpty(node.transport) ? {
- type: node.transport,
- host: node.http_host || node.httpupgrade_host,
- path: node.http_path || node.ws_path,
- headers: node.ws_host ? {
- Host: node.ws_host
- } : null,
- method: node.http_method,
- max_early_data: strToInt(node.websocket_early_data),
- early_data_header_name: node.websocket_early_data_header,
- service_name: node.grpc_servicename,
- idle_timeout: strToTime(node.http_idle_timeout),
- ping_timeout: strToTime(node.http_ping_timeout),
- permit_without_stream: strToBool(node.grpc_permit_without_stream)
- } : null,
+ tls: buildTLSObject(node, false),
+ transport: buildTransportObject(node, false),
udp_over_tcp: (node.udp_over_tcp === '1') ? {
enabled: true,
version: strToInt(node.udp_over_tcp_version)
@@ -545,6 +331,14 @@ function generate_outbound(node) {
udp_fragment: strToBool(node.udp_fragment)
};
+ /* Direct-node destination override: sing-box removed these options from
+ the direct outbound since 1.13; emit them via the route action instead */
+ if (node.type === 'direct' && (!isEmpty(node.override_address) || !isEmpty(node.override_port)))
+ direct_overrides[node['.name']] = {
+ override_address: node.override_address,
+ override_port: strToInt(node.override_port)
+ };
+
return outbound;
}
@@ -569,14 +363,28 @@ function get_outbound(cfg) {
const node = uci.get(uciconfig, cfg, 'node');
if (isEmpty(node))
die(sprintf("%s's node is missing, please check your configuration.", cfg));
- else if (node in ['urltest', 'selector'])
- return get_section_outbound_tag(cfg);
+ else if (node === 'urltest')
+ return 'cfg-' + cfg + '-out';
else
- return get_section_outbound_tag(node);
+ return 'cfg-' + node + '-out';
}
}
}
+function get_direct_override(outbound_selector) {
+ if (type(outbound_selector) === 'array' || isEmpty(outbound_selector))
+ return null;
+
+ switch (outbound_selector) {
+ case 'direct-out':
+ case 'block-out':
+ return null;
+ default:
+ const node = uci.get(uciconfig, outbound_selector, 'node');
+ return (!isEmpty(node) && node !== 'urltest') ? (direct_overrides[node] || null) : null;
+ }
+}
+
function get_resolver(cfg) {
if (isEmpty(cfg))
return null;
@@ -595,117 +403,21 @@ function get_ruleset(cfg) {
return null;
let rules = [];
- for (let i in cfg) {
- if (isEmpty(i)) {
- push(rules, null);
- continue;
- }
-
- const ruleset = uci.get_all(uciconfig, i);
- push(rules, !isEmpty(ruleset?.tag) ? ruleset.tag : ('cfg-' + i + '-rule'));
- }
+ for (let i in cfg)
+ push(rules, isEmpty(i) ? null : 'cfg-' + i + '-rule');
return rules;
}
-function subscription_provider_name(name) {
- name = trim(name || '');
- return name;
+function isDirectOutboundTag(tag) {
+ if (isEmpty(tag) || tag === 'block-out')
+ return false;
+ if (tag === 'direct-out')
+ return true;
+
+ const node_name = uci.get(uciconfig, tag, 'node') || tag;
+ const node = uci.get_all(uciconfig, node_name);
+ return !isEmpty(node) && node.type === 'direct';
}
-
-function unique_provider_name(name, used) {
- const base = name;
- let suffix = 2;
-
- while (used[name]) {
- name = sprintf('%s (%d)', base, suffix);
- suffix++;
- }
- used[name] = true;
-
- return name;
-}
-
-function get_subscription_info(group_hash) {
- const value = uci.get(uciconfig, 'subscription', 'subinfo_' + substr(group_hash, 0, 16));
- if (isEmpty(value))
- return null;
-
- try {
- const info = json(value);
- if (type(info) !== 'object')
- return null;
-
- const has_subscription_info = ('upload' in info) || ('download' in info) ||
- ('total' in info) || ('expire' in info);
-
- return {
- updated_at: info.updated_at,
- subscription_info: has_subscription_info ? {
- upload: info.upload,
- download: info.download,
- total: info.total,
- expire: info.expire
- } : null
- };
- } catch (e) {
- return null;
- }
-}
-
-function build_proxy_providers() {
- let providers = [],
- used_names = {},
- subscription_names = normalize_list(uci.get(uciconfig, 'subscription', 'subscription_name')),
- sub_index = 0;
-
- for (let suburl in normalize_list(uci.get(uciconfig, 'subscription', 'subscription_url'))) {
- const subscription_name = subscription_names[sub_index];
- sub_index++;
-
- if (isEmpty(suburl) || isEmpty(trim(subscription_name || '')))
- continue;
-
- const url = replace(suburl, /#.*$/, ''),
- group_hash = md5(url);
-
- let proxies = [];
- uci.foreach(uciconfig, ucinode, (cfg) => {
- if (cfg.grouphash !== group_hash)
- return;
-
- const tag = get_section_outbound_tag(cfg['.name']);
- if (!isEmpty(tag) && !~index(proxies, tag))
- push(proxies, tag);
- });
-
- if (isEmpty(proxies))
- continue;
-
- const subscription_info = get_subscription_info(group_hash);
-
- push(providers, {
- name: unique_provider_name(subscription_provider_name(subscription_name), used_names),
- type: 'Proxy',
- vehicle_type: 'HTTP',
- proxies: proxies,
- update_id: (routing_mode === 'custom') ? group_hash : null,
- updated_at: subscription_info?.updated_at,
- subscription_info: subscription_info?.subscription_info
- });
- }
-
- return providers;
-}
-
-clash_api = {
- external_controller: uci.get(uciconfig, uciclashapi, 'external_controller') || '127.0.0.1:9090',
- external_ui: uci.get(uciconfig, uciclashapi, 'external_ui'),
- external_ui_download_url: uci.get(uciconfig, uciclashapi, 'external_ui_download_url'),
- external_ui_download_detour: get_outbound(uci.get(uciconfig, uciclashapi, 'external_ui_download_detour')),
- secret: uci.get(uciconfig, uciclashapi, 'secret'),
- default_mode: uci.get(uciconfig, uciclashapi, 'default_mode') || 'rule',
- proxy_providers: build_proxy_providers()
-};
/* Config helper end */
const config = {};
@@ -721,10 +433,8 @@ config.log = {
/* NTP */
if (!isEmpty(ntp_server))
config.ntp = {
- enabled: ntp_enabled === '1',
+ enabled: true,
server: ntp_server,
- server_port: strToInt(ntp_server_port),
- interval: ntp_interval,
detour: 'direct-out',
domain_resolver: 'default-dns',
};
@@ -749,8 +459,12 @@ config.dns = {
strategy: dns_default_strategy,
disable_cache: strToBool(dns_disable_cache),
disable_expire: strToBool(dns_disable_cache_expire),
- independent_cache: strToBool(dns_independent_cache),
- client_subnet: dns_client_subnet
+ client_subnet: dns_client_subnet,
+ optimistic: (dns_optimistic_cache === '1') ? {
+ enabled: true,
+ timeout: !isEmpty(dns_optimistic_timeout) ? dns_optimistic_timeout : '3d'
+ } : null,
+ timeout: !isEmpty(dns_query_timeout) ? strToTime(dns_query_timeout) : null
};
if (!isEmpty(main_node)) {
@@ -773,13 +487,11 @@ if (!isEmpty(main_node)) {
server: (routing_mode === 'bypass_mainland_china') ? 'china-dns' : 'default-dns'
});
- /* Filter out SVCB/HTTPS queries for "exquisite" Apple devices */
- if (routing_mode === 'gfwlist' || length(proxy_domain_list))
- push(config.dns.rules, {
- rule_set: (routing_mode !== 'gfwlist') ? 'proxy-domain' : null,
- query_type: [64, 65],
- action: 'reject'
- });
+ /* Reject SVCB/HTTPS queries to avoid proxy DNS timeout on null domains */
+ push(config.dns.rules, {
+ query_type: [64, 65],
+ action: 'reject'
+ });
if (routing_mode === 'bypass_mainland_china') {
push(config.dns.servers, {
@@ -792,6 +504,17 @@ if (!isEmpty(main_node)) {
...parse_dnsserver(china_dns_server)
});
+ /* Route NAPTR (qtype 35) queries for SIP/ENUM domains to the ISP
+ default-dns directly: china-dns (223.5.5.5) has intermittent
+ multi-second first responses for NAPTR, causing 'context deadline
+ exceeded' (e.g. sipgz12.hbq.r.10086.cn) */
+ push(config.dns.rules, {
+ query_type: [35],
+ domain_suffix: ['r.10086.cn', '10086.cn', 'pub.3gppnetwork.org'],
+ action: 'route',
+ server: 'default-dns'
+ });
+
if (length(proxy_domain_list))
push(config.dns.rules, {
rule_set: 'proxy-domain',
@@ -802,25 +525,23 @@ if (!isEmpty(main_node)) {
push(config.dns.rules, {
rule_set: 'geosite-cn',
action: 'route',
- server: 'china-dns',
- strategy: 'prefer_ipv6'
- });
- push(config.dns.rules, {
- type: 'logical',
- mode: 'and',
- rules: [
- {
- rule_set: 'geosite-noncn',
- invert: true
- },
- {
- rule_set: 'geoip-cn'
- }
- ],
- action: 'route',
- server: 'china-dns',
- strategy: 'prefer_ipv6'
+ server: 'china-dns'
});
+
+ /* sing-box 1.14: restore CN-IP fallback via evaluate/match_response (opt-in) */
+ if (uci.get(uciconfig, ucimain, 'cn_ip_fallback') === '1') {
+ push(config.dns.rules, {
+ action: 'evaluate',
+ server: 'main-dns',
+ tag: 'cn-fallback'
+ });
+ push(config.dns.rules, {
+ match_response: 'cn-fallback',
+ rule_set: 'geoip-cn',
+ action: 'route',
+ server: 'china-dns'
+ });
+ }
}
} else if (!isEmpty(default_outbound)) {
/* DNS servers */
@@ -834,7 +555,10 @@ if (!isEmpty(main_node)) {
push(config.dns.servers, {
tag: 'cfg-' + cfg['.name'] + '-dns',
- ...parse_custom_dnsserver(cfg),
+ type: cfg.type,
+ server: cfg.server,
+ server_port: strToInt(cfg.server_port),
+ path: cfg.path,
headers: cfg.headers,
tls: cfg.tls_sni ? {
enabled: true,
@@ -849,11 +573,14 @@ if (!isEmpty(main_node)) {
});
/* DNS rules */
+ /* sing-box >= 1.14: legacy address-filter rules are auto-wrapped with an
+ evaluate action; deprecated strategy/accept_empty fields are dropped. */
+ const builtin_dns_rules = [];
uci.foreach(uciconfig, ucidnsrule, (cfg) => {
if (cfg.enabled !== '1')
return;
- push(config.dns.rules, {
+ const rule = {
ip_version: strToInt(cfg.ip_version),
query_type: parse_dnsquery(cfg.query_type),
network: cfg.network,
@@ -866,8 +593,6 @@ if (!isEmpty(main_node)) {
port_range: cfg.port_range,
source_ip_cidr: cfg.source_ip_cidr,
source_ip_is_private: strToBool(cfg.source_ip_is_private),
- ip_cidr: cfg.ip_cidr,
- ip_is_private: strToBool(cfg.ip_is_private),
source_port: parse_port(cfg.source_port),
source_port_range: cfg.source_port_range,
process_name: cfg.process_name,
@@ -877,24 +602,75 @@ if (!isEmpty(main_node)) {
rule_set: get_ruleset(cfg.rule_set),
rule_set_ip_cidr_match_source: strToBool(cfg.rule_set_ip_cidr_match_source),
invert: strToBool(cfg.invert),
- outbound: get_outbound(cfg.outbound),
+ race: strToBool(cfg.race),
+ speculative: strToBool(cfg.speculative),
action: cfg.action,
server: get_resolver(cfg.server),
- strategy: cfg.domain_strategy,
disable_cache: strToBool(cfg.dns_disable_cache),
+ disable_optimistic_cache: strToBool(cfg.disable_optimistic_cache),
rewrite_ttl: strToInt(cfg.rewrite_ttl),
+ timeout: strToTime(cfg.dns_timeout),
client_subnet: cfg.client_subnet,
+ remove_client_subnet: strToBool(cfg.remove_client_subnet),
method: cfg.reject_method,
no_drop: strToBool(cfg.reject_no_drop),
rcode: cfg.predefined_rcode,
answer: cfg.predefined_answer,
ns: cfg.predefined_ns,
extra: cfg.predefined_extra
- });
- });
+ };
- if (isEmpty(config.dns.rules))
- config.dns.rules = null;
+ if (cfg.action === 'evaluate')
+ rule.tag = cfg.evaluate_tag || null;
+
+ if (cfg.match_response && cfg.match_response !== '0')
+ rule.match_response = (cfg.match_response === '1') ? true : cfg.match_response;
+
+ rule.query_client_subnet = cfg.query_client_subnet;
+ rule.query_dnssec = strToBool(cfg.query_dnssec);
+ rule.response_rcode = cfg.response_rcode;
+ rule.response_answer = cfg.response_answer;
+ rule.response_ns = cfg.response_ns;
+ rule.response_extra = cfg.response_extra;
+ rule.source_mac_address = cfg.source_mac_address;
+ rule.source_hostname = cfg.source_hostname;
+
+ const legacy_filter = !isEmpty(cfg.ip_cidr) || strToBool(cfg.ip_is_private) === true;
+ if (legacy_filter && !rule.match_response && cfg.action === 'route') {
+ /* Wrap a legacy address-filter rule into the 1.14 evaluate/match_response
+ paradigm. Carry the original query-matching fields onto the evaluate
+ prefix rule so only queries that would have hit this rule get
+ pre-resolved; an unconditional evaluate would resolve every query. */
+ const eval_tag = '_hp_eval_' + cfg['.name'];
+ const eval_rule = {
+ action: 'evaluate',
+ server: get_resolver(cfg.server),
+ tag: eval_tag
+ };
+ const eval_match_fields = [
+ 'inbound', 'ip_version', 'query_type', 'network', 'protocol', 'auth_user',
+ 'domain', 'domain_suffix', 'domain_keyword', 'domain_regex',
+ 'port', 'port_range', 'source_ip_cidr', 'source_ip_is_private',
+ 'source_port', 'source_port_range', 'process_name', 'process_path',
+ 'process_path_regex', 'user', 'rule_set', 'rule_set_ip_cidr_match_source',
+ 'invert', 'query_client_subnet', 'query_dnssec', 'source_mac_address',
+ 'source_hostname'
+ ];
+ for (let f in eval_match_fields)
+ eval_rule[f] = rule[f];
+ push(builtin_dns_rules, eval_rule);
+ rule.match_response = eval_tag;
+ }
+
+ /* ip_cidr / ip_is_private are only valid with match_response in 1.14 */
+ if (rule.match_response) {
+ rule.ip_cidr = cfg.ip_cidr;
+ rule.ip_is_private = strToBool(cfg.ip_is_private);
+ }
+
+ push(builtin_dns_rules, rule);
+ });
+ config.dns.rules = builtin_dns_rules;
config.dns.final = get_resolver(dns_default_server);
}
@@ -935,7 +711,10 @@ if (match(proxy_mode, /tproxy/))
listen: '::',
listen_port: int(tproxy_port),
network: 'udp',
- udp_timeout: strToTime(udp_timeout)
+ udp_timeout: strToTime(udp_timeout),
+ udp_mapping: !isEmpty(udp_mapping) ? udp_mapping : null,
+ udp_filtering: !isEmpty(udp_filtering) ? udp_filtering : null,
+ udp_nat_max: udp_nat_max,
});
if (match(proxy_mode, /tun/))
push(config.inbounds, {
@@ -946,8 +725,14 @@ if (match(proxy_mode, /tun/))
address: (ipv6_support === '1') ? [tun_addr4, tun_addr6] : [tun_addr4],
mtu: strToInt(tun_mtu),
auto_route: false,
+ endpoint_independent_nat: strToBool(endpoint_independent_nat),
udp_timeout: strToTime(udp_timeout),
- stack: tcpip_stack
+ dns_mode: !isEmpty(tun_dns_mode) ? tun_dns_mode : null,
+ dns_address: !isEmpty(tun_dns_address) ? tun_dns_address : null,
+ udp_mapping: !isEmpty(udp_mapping) ? udp_mapping : null,
+ udp_filtering: !isEmpty(udp_filtering) ? udp_filtering : null,
+ udp_nat_max: udp_nat_max,
+ stack: tcpip_stack,
});
/* Inbound end */
@@ -972,16 +757,14 @@ if (!isEmpty(main_node)) {
let urltest_nodes = [];
if (main_node === 'urltest') {
- const main_urltest_nodes = filter_existing_nodes(
- normalize_list(uci.get(uciconfig, ucimain, 'main_urltest_nodes'))
- );
+ const main_urltest_nodes = filter(uci.get(uciconfig, ucimain, 'main_urltest_nodes') || [], (k) => uci.get(uciconfig, k));
const main_urltest_interval = uci.get(uciconfig, ucimain, 'main_urltest_interval');
const main_urltest_tolerance = uci.get(uciconfig, ucimain, 'main_urltest_tolerance');
push(config.outbounds, {
type: 'urltest',
tag: 'main-out',
- outbounds: map(main_urltest_nodes, (k) => get_section_outbound_tag(k)),
+ outbounds: map(main_urltest_nodes, (k) => `cfg-${k}-out`),
interval: strToTime(main_urltest_interval),
tolerance: strToInt(main_urltest_tolerance),
idle_timeout: (strToInt(main_urltest_interval) > 1800) ? `${main_urltest_interval * 2}s` : null,
@@ -990,31 +773,23 @@ if (!isEmpty(main_node)) {
} else {
const main_node_cfg = uci.get_all(uciconfig, main_node) || {};
if (main_node_cfg.type === 'wireguard') {
- const main_endpoint = generate_endpoint(main_node_cfg);
- if (main_endpoint) {
- main_endpoint.tag = 'main-out';
- push(config.endpoints, main_endpoint);
- }
+ push(config.endpoints, generate_endpoint(main_node_cfg));
+ config.endpoints[length(config.endpoints)-1].tag = 'main-out';
} else {
- const main_outbound = generate_outbound(main_node_cfg);
- if (main_outbound) {
- main_outbound.tag = 'main-out';
- push(config.outbounds, main_outbound);
- }
+ push(config.outbounds, generate_outbound(main_node_cfg));
+ config.outbounds[length(config.outbounds)-1].tag = 'main-out';
}
}
if (main_udp_node === 'urltest') {
- const main_udp_urltest_nodes = filter_existing_nodes(
- normalize_list(uci.get(uciconfig, ucimain, 'main_udp_urltest_nodes'))
- );
+ const main_udp_urltest_nodes = filter(uci.get(uciconfig, ucimain, 'main_udp_urltest_nodes') || [], (k) => uci.get(uciconfig, k));
const main_udp_urltest_interval = uci.get(uciconfig, ucimain, 'main_udp_urltest_interval');
const main_udp_urltest_tolerance = uci.get(uciconfig, ucimain, 'main_udp_urltest_tolerance');
push(config.outbounds, {
type: 'urltest',
tag: 'main-udp-out',
- outbounds: map(main_udp_urltest_nodes, (k) => get_section_outbound_tag(k)),
+ outbounds: map(main_udp_urltest_nodes, (k) => `cfg-${k}-out`),
interval: strToTime(main_udp_urltest_interval),
tolerance: strToInt(main_udp_urltest_tolerance),
idle_timeout: (strToInt(main_udp_urltest_interval) > 1800) ? `${main_udp_urltest_interval * 2}s` : null,
@@ -1023,17 +798,11 @@ if (!isEmpty(main_node)) {
} else if (dedicated_udp_node) {
const main_udp_node_cfg = uci.get_all(uciconfig, main_udp_node) || {};
if (main_udp_node_cfg.type === 'wireguard') {
- const main_udp_endpoint = generate_endpoint(main_udp_node_cfg);
- if (main_udp_endpoint) {
- main_udp_endpoint.tag = 'main-udp-out';
- push(config.endpoints, main_udp_endpoint);
- }
+ push(config.endpoints, generate_endpoint(main_udp_node_cfg));
+ config.endpoints[length(config.endpoints)-1].tag = 'main-udp-out';
} else {
- const main_udp_outbound = generate_outbound(main_udp_node_cfg);
- if (main_udp_outbound) {
- main_udp_outbound.tag = 'main-udp-out';
- push(config.outbounds, main_udp_outbound);
- }
+ push(config.outbounds, generate_outbound(main_udp_node_cfg));
+ config.outbounds[length(config.outbounds)-1].tag = 'main-udp-out';
}
}
@@ -1041,19 +810,12 @@ if (!isEmpty(main_node)) {
const urltest_node = uci.get_all(uciconfig, i) || {};
if (isEmpty(urltest_node))
continue;
-
if (urltest_node.type === 'wireguard') {
- const endpoint = generate_endpoint(urltest_node);
- if (endpoint) {
- endpoint.tag = get_section_outbound_tag(i);
- push(config.endpoints, endpoint);
- }
+ push(config.endpoints, generate_endpoint(urltest_node));
+ config.endpoints[length(config.endpoints)-1].tag = 'cfg-' + i + '-out';
} else {
- const outbound = generate_outbound(urltest_node);
- if (outbound) {
- outbound.tag = get_section_outbound_tag(i);
- push(config.outbounds, outbound);
- }
+ push(config.outbounds, generate_outbound(urltest_node));
+ config.outbounds[length(config.outbounds)-1].tag = 'cfg-' + i + '-out';
}
}
} else if (!isEmpty(default_outbound)) {
@@ -1065,63 +827,38 @@ if (!isEmpty(main_node)) {
return;
if (cfg.node === 'urltest') {
- const legacy_nodes = (isEmpty(cfg.subscription_groups) && isEmpty(cfg.subscription_nodes) && isEmpty(cfg.selected_nodes)) ? cfg.urltest_nodes : null;
- const urltest_list = collect_group_nodes(cfg.subscription_groups, cfg.subscription_nodes, cfg.selected_nodes, legacy_nodes);
+ const cfg_urltest_nodes = filter(cfg.urltest_nodes || [], (k) => uci.get(uciconfig, k));
push(config.outbounds, {
type: 'urltest',
- tag: get_section_outbound_tag(cfg['.name']),
- outbounds: map(urltest_list, (k) => get_section_outbound_tag(k)),
+ tag: 'cfg-' + cfg['.name'] + '-out',
+ outbounds: map(cfg_urltest_nodes, (k) => `cfg-${k}-out`),
url: cfg.urltest_url,
interval: strToTime(cfg.urltest_interval),
tolerance: strToInt(cfg.urltest_tolerance),
idle_timeout: strToTime(cfg.urltest_idle_timeout),
interrupt_exist_connections: strToBool(cfg.urltest_interrupt_exist_connections)
});
- urltest_nodes = [...urltest_nodes, ...filter(urltest_list, (l) => !~index(urltest_nodes, l))];
- } else if (cfg.node === 'selector') {
- const selector_node_list = collect_group_nodes(cfg.subscription_groups, cfg.subscription_nodes, cfg.selected_nodes, null);
- const selector_policy_list = collect_policy_nodes(cfg.policy_nodes, cfg['.name']);
- const selector_list = [...selector_node_list, ...filter(selector_policy_list, (l) => !~index(selector_node_list, l))];
- const selector_default = (!isEmpty(cfg.selector_default) && ~index(selector_list, cfg.selector_default)) ? cfg.selector_default : null;
- push(config.outbounds, {
- type: 'selector',
- tag: get_section_outbound_tag(cfg['.name']),
- outbounds: map(selector_list, (k) => get_section_outbound_tag(k)),
- default: selector_default ? get_section_outbound_tag(selector_default) : null,
- interrupt_exist_connections: strToBool(cfg.selector_interrupt_exist_connections)
- });
- urltest_nodes = [...urltest_nodes, ...filter(selector_node_list, (l) => !~index(urltest_nodes, l))];
+ urltest_nodes = [...urltest_nodes, ...filter(cfg_urltest_nodes, (l) => !~index(urltest_nodes, l))];
} else {
const outbound = uci.get_all(uciconfig, cfg.node) || {};
- if (isEmpty(outbound))
- return;
-
if (outbound.type === 'wireguard') {
- const endpoint = generate_endpoint(outbound);
- if (!endpoint)
- return;
-
- endpoint.bind_interface = cfg.bind_interface;
- endpoint.detour = get_outbound(cfg.outbound);
+ push(config.endpoints, generate_endpoint(outbound));
+ config.endpoints[length(config.endpoints)-1].bind_interface = cfg.bind_interface;
+ config.endpoints[length(config.endpoints)-1].detour = get_outbound(cfg.outbound);
if (cfg.domain_resolver)
- endpoint.domain_resolver = {
+ config.endpoints[length(config.endpoints)-1].domain_resolver = {
server: get_resolver(cfg.domain_resolver),
strategy: cfg.domain_strategy
};
- push(config.endpoints, endpoint);
} else {
- const routed_outbound = generate_outbound(outbound);
- if (!routed_outbound)
- return;
-
- routed_outbound.bind_interface = cfg.bind_interface;
- routed_outbound.detour = get_outbound(cfg.outbound);
+ push(config.outbounds, generate_outbound(outbound));
+ config.outbounds[length(config.outbounds)-1].bind_interface = cfg.bind_interface;
+ config.outbounds[length(config.outbounds)-1].detour = get_outbound(cfg.outbound);
if (cfg.domain_resolver)
- routed_outbound.domain_resolver = {
+ config.outbounds[length(config.outbounds)-1].domain_resolver = {
server: get_resolver(cfg.domain_resolver),
strategy: cfg.domain_strategy
};
- push(config.outbounds, routed_outbound);
}
push(routing_nodes, cfg.node);
}
@@ -1129,18 +866,10 @@ if (!isEmpty(main_node)) {
for (let i in filter(urltest_nodes, (l) => !~index(routing_nodes, l))) {
const urltest_node = uci.get_all(uciconfig, i) || {};
- if (isEmpty(urltest_node))
- continue;
-
- if (urltest_node.type === 'wireguard') {
- const endpoint = generate_endpoint(urltest_node);
- if (endpoint)
- push(config.endpoints, endpoint);
- } else {
- const outbound = generate_outbound(urltest_node);
- if (outbound)
- push(config.outbounds, outbound);
- }
+ if (urltest_node.type === 'wireguard')
+ push(config.endpoints, generate_endpoint(urltest_node));
+ else
+ push(config.outbounds, generate_outbound(urltest_node));
}
}
@@ -1157,7 +886,8 @@ config.route = {
action: 'hijack-dns'
},
{
- action: 'sniff'
+ action: 'sniff',
+ timeout: '300ms'
}
],
rule_set: [],
@@ -1167,10 +897,13 @@ config.route = {
/* Routing rules */
if (!isEmpty(main_node)) {
- /* Avoid DNS loop */
+ /* Resolve outbound server domains through the WAN default resolver.
+ Do not use china-dns here: china-dns is for resolving mainland China
+ destinations, not the proxy node itself. Coupling node bootstrap to
+ china_dns_server can break dialing when that resolver is polluted or
+ unsuitable for the node domain. */
config.route.default_domain_resolver = {
- action: 'route',
- server: (routing_mode === 'bypass_mainland_china') ? 'china-dns' : 'default-dns',
+ server: 'default-dns',
strategy: (ipv6_support !== '1') ? 'prefer_ipv4' : null
};
@@ -1182,12 +915,46 @@ if (!isEmpty(main_node)) {
outbound: 'direct-out'
});
+ /* Bypass CN traffic: resolve the destination first, then route by IP.
+ sing-box does not match an IP-based rule set (geoip-cn) against a domain
+ destination unless it is resolved first, so add an explicit resolve
+ action; geoip-cn then sends China IPs to direct and everything else falls
+ through to main-out (proxy). This avoids relying on the geosite-* domain
+ lists, which can mis-classify foreign domains (e.g. Google's gvt2.com
+ beacons) as "cn" and send them direct to time out. Keep the direct-domain
+ fast-path above for known direct domains. */
+ if (routing_mode === 'bypass_mainland_china') {
+ push(config.route.rules, {
+ action: 'resolve',
+ strategy: (ipv6_support !== '1') ? 'prefer_ipv4' : null
+ });
+ push(config.route.rules, {
+ rule_set: 'geoip-cn',
+ action: 'route',
+ outbound: 'direct-out'
+ });
+ }
+
/* Main UDP out */
- if (dedicated_udp_node)
+ if (dedicated_udp_node) {
+ const udp_override = direct_overrides[main_udp_node] || null;
push(config.route.rules, {
network: 'udp',
action: 'route',
- outbound: 'main-udp-out'
+ outbound: 'main-udp-out',
+ override_address: udp_override ? udp_override.override_address : null,
+ override_port: udp_override ? udp_override.override_port : null
+ });
+ }
+
+ /* Direct-node destination override, emitted as route-options action
+ (direct outbound options removed since sing-box 1.13) */
+ const main_override = direct_overrides[main_node] || null;
+ if (main_override)
+ push(config.route.rules, {
+ action: 'route-options',
+ override_address: main_override.override_address,
+ override_port: main_override.override_port
});
config.route.final = 'main-out';
@@ -1218,28 +985,35 @@ if (!isEmpty(main_node)) {
});
if (routing_mode === 'bypass_mainland_china') {
+ /*
+ * Fetched straight from the upstream SagerNet repositories and
+ * downloaded through the selected node. A direct fetch depends on
+ * the CDN staying reachable from mainland China, where DNS pollution
+ * makes it fail intermittently; the three files total ~250 KB per
+ * day, so proxying the download costs almost nothing.
+ */
push(config.route.rule_set, {
type: 'remote',
tag: 'geoip-cn',
format: 'binary',
- url: 'https://fastly.jsdelivr.net/gh/1715173329/IPCIDR-CHINA@rule-set/cn.srs',
- initial_path: ruleset_default_path('geoip-cn', 'binary'),
+ url: 'https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs',
+ update_interval: '24h',
download_detour: 'main-out'
});
push(config.route.rule_set, {
type: 'remote',
tag: 'geosite-cn',
format: 'binary',
- url: 'https://fastly.jsdelivr.net/gh/1715173329/sing-geosite@rule-set-unstable/geosite-geolocation-cn.srs',
- initial_path: ruleset_default_path('geosite-cn', 'binary'),
+ url: 'https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-cn.srs',
+ update_interval: '24h',
download_detour: 'main-out'
});
push(config.route.rule_set, {
type: 'remote',
tag: 'geosite-noncn',
format: 'binary',
- url: 'https://fastly.jsdelivr.net/gh/1715173329/sing-geosite@rule-set-unstable/geosite-geolocation-!cn.srs',
- initial_path: ruleset_default_path('geosite-noncn', 'binary'),
+ url: 'https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs',
+ update_interval: '24h',
download_detour: 'main-out'
});
}
@@ -1248,10 +1022,12 @@ if (!isEmpty(main_node)) {
config.route.rule_set = null;
} else if (!isEmpty(default_outbound)) {
config.route.default_domain_resolver = {
- action: 'resolve',
server: get_resolver(default_outbound_dns)
};
+ if (uci.get(uciconfig, uciroutingsetting, 'find_neighbor') === '1')
+ config.route.find_neighbor = true;
+
if (domain_strategy)
push(config.route.rules, {
action: 'resolve',
@@ -1262,10 +1038,25 @@ if (!isEmpty(main_node)) {
if (cfg.enabled !== '1')
return null;
- push(config.route.rules, {
+ const rule_outbound = get_outbound(cfg.outbound);
+ const rule_direct_override = get_direct_override(cfg.outbound);
+ let rule_override_address = cfg.override_address,
+ rule_override_port = strToInt(cfg.override_port);
+ if (isEmpty(rule_override_address) && isEmpty(rule_override_port) && rule_direct_override) {
+ rule_override_address = rule_direct_override.override_address;
+ rule_override_port = rule_direct_override.override_port;
+ }
+
+ /* sing-box routing rule: emit match fields plus action-specific fields.
+ client is the sniffed client type (only set with protocol quic/ssh);
+ resolve adds server/strategy/disable_cache/rewrite_ttl/client_subnet;
+ reject adds method/no_drop. Emitted conditionally so a given action
+ never carries fields sing-box rejects for it. */
+ const rule = {
ip_version: strToInt(cfg.ip_version),
protocol: cfg.protocol,
network: cfg.network,
+ client: cfg.client,
domain: cfg.domain,
domain_suffix: cfg.domain_suffix,
domain_keyword: cfg.domain_keyword,
@@ -1284,28 +1075,48 @@ if (!isEmpty(main_node)) {
user: cfg.user,
rule_set: get_ruleset(cfg.rule_set),
rule_set_ip_cidr_match_source: strToBool(cfg.rule_set_ip_cidr_match_source),
- rule_set_ip_cidr_accept_empty: strToBool(cfg.rule_set_ip_cidr_accept_empty),
invert: strToBool(cfg.invert),
action: cfg.action,
- outbound: (cfg.action === 'route') ? get_outbound(cfg.outbound) : null,
- server: (cfg.action === 'resolve') ? get_resolver(cfg.resolve_server) : null,
- strategy: (cfg.action === 'resolve') ? cfg.resolve_strategy : null,
- disable_cache: (cfg.action === 'resolve') ? strToBool(cfg.resolve_disable_cache) : null,
- rewrite_ttl: (cfg.action === 'resolve') ? strToInt(cfg.resolve_rewrite_ttl) : null,
- client_subnet: (cfg.action === 'resolve') ? cfg.resolve_client_subnet : null,
- override_address: (cfg.action in ['route', 'route-options']) ? cfg.override_address : null,
- override_port: (cfg.action in ['route', 'route-options']) ? strToInt(cfg.override_port) : null,
- udp_disable_domain_unmapping: (cfg.action in ['route', 'route-options']) ? strToBool(cfg.udp_disable_domain_unmapping) : null,
- udp_connect: (cfg.action in ['route', 'route-options']) ? strToBool(cfg.udp_connect) : null,
- udp_timeout: (cfg.action in ['route', 'route-options']) ? strToTime(cfg.udp_timeout) : null,
- tls_fragment: (cfg.action in ['route', 'route-options']) ? strToBool(cfg.tls_fragment) : null,
- tls_fragment_fallback_delay: (cfg.action in ['route', 'route-options']) ? strToTime(cfg.tls_fragment_fallback_delay) : null,
- tls_record_fragment: (cfg.action in ['route', 'route-options']) ? strToBool(cfg.tls_record_fragment) : null,
- method: (cfg.action === 'reject') ? cfg.reject_method : null,
- no_drop: (cfg.action === 'reject') ? strToBool(cfg.reject_no_drop) : null
- });
+ outbound: rule_outbound,
+ override_address: rule_override_address,
+ override_port: rule_override_port,
+ udp_disable_domain_unmapping: strToBool(cfg.udp_disable_domain_unmapping),
+ udp_connect: strToBool(cfg.udp_connect),
+ udp_timeout: strToTime(cfg.udp_timeout),
+ tls_fragment: strToBool(cfg.tls_fragment),
+ tls_fragment_fallback_delay: strToTime(cfg.tls_fragment_fallback_delay),
+ tls_record_fragment: strToBool(cfg.tls_record_fragment),
+ tls_spoof: cfg.tls_spoof || null,
+ tls_spoof_method: cfg.tls_spoof_method || null,
+ source_mac_address: cfg.source_mac_address,
+ source_hostname: cfg.source_hostname
+ };
+ if (cfg.action === 'resolve') {
+ rule.server = get_resolver(cfg.resolve_server);
+ rule.strategy = cfg.resolve_strategy;
+ rule.disable_cache = strToBool(cfg.resolve_disable_cache);
+ rule.disable_optimistic_cache = strToBool(cfg.resolve_disable_optimistic_cache);
+ rule.rewrite_ttl = strToInt(cfg.resolve_rewrite_ttl);
+ rule.timeout = strToTime(cfg.resolve_timeout);
+ rule.client_subnet = cfg.resolve_client_subnet;
+ }
+ if (cfg.action === 'reject') {
+ rule.method = cfg.reject_method;
+ rule.no_drop = strToBool(cfg.reject_no_drop);
+ }
+ push(config.route.rules, rule);
});
+ /* Direct-node destination override, emitted as route-options action
+ (direct outbound options removed since sing-box 1.13) */
+ const final_override = get_direct_override(default_outbound);
+ if (final_override)
+ push(config.route.rules, {
+ action: 'route-options',
+ override_address: final_override.override_address,
+ override_port: final_override.override_port
+ });
+
config.route.final = get_outbound(default_outbound);
/* Rule set */
@@ -1313,35 +1124,94 @@ if (!isEmpty(main_node)) {
if (cfg.enabled !== '1')
return null;
- const tag = !isEmpty(cfg.tag) ? cfg.tag : ('cfg-' + cfg['.name'] + '-rule');
+ const extra_tags = cfg.extra_tags || [];
+ let rs_tag = 'cfg-' + cfg['.name'] + '-rule';
+ if (length(extra_tags) && cfg.type !== 'inline') {
+ rs_tag = [rs_tag];
+ for (let t in extra_tags)
+ push(rs_tag, 'cfg-' + t + '-rule');
+ /* sing-box 1.14: multi-tag requires a {tag} placeholder in the fetch source
+ (remote: url and initial_path, local: path) */
+ const fetch_ref = (cfg.type === 'remote') ? (cfg.url || '') : (cfg.path || '');
+ if (!match(fetch_ref, /\{tag\}/))
+ warn(sprintf("homeproxy: rule-set '%s' uses extra tags but its %s source lacks a {tag} placeholder.", cfg['.name'], cfg.type));
+ if (cfg.type === 'remote' && !isEmpty(cfg.initial_path) && !match(cfg.initial_path, /\{tag\}/))
+ warn(sprintf("homeproxy: rule-set '%s' uses extra tags but its initial_path lacks a {tag} placeholder.", cfg['.name']));
+ }
- push(config.route.rule_set, {
+ const ruleset = {
type: cfg.type,
- tag: tag,
+ tag: rs_tag,
format: cfg.format,
+ path: cfg.path,
url: cfg.url,
- path: (cfg.type === 'remote') ? ruleset_remote_path(cfg.remote_path || cfg.path, tag, cfg.format) : cfg.path,
- download_detour: get_outbound(cfg.outbound),
- update_interval: (cfg.type === 'remote') ? '87600h' : null
- });
+ update_interval: cfg.update_interval
+ };
+ /* download_detour is a pre-1.14 option that only makes sense for
+ remote rule-sets; emitting it for local/inline ones makes sing-box
+ 1.14 reject the whole config. It is translated into http_clients
+ right below. */
+ if (cfg.type === 'remote')
+ ruleset.download_detour = get_outbound(cfg.outbound) || get_outbound(default_outbound);
+ if (cfg.type === 'remote' && !isEmpty(cfg.initial_path))
+ ruleset.initial_path = cfg.initial_path;
+ push(config.route.rule_set, ruleset);
});
}
+
+/* sing-box 1.14: remote rule-sets download via top-level http_clients;
+ replaces the legacy download_detour field everywhere (preset + custom). */
+const http_clients = [];
+const http_seen = {};
+for (let rs in (config.route.rule_set || [])) {
+ /* Strip the legacy field from every entry first, including the
+ local/inline ones: sing-box 1.14 rejects it everywhere except on
+ remote rule-sets, where it is replaced by http_client below. */
+ let detour = rs.download_detour;
+ delete rs.download_detour;
+
+ if (rs.type !== 'remote')
+ continue;
+
+ if (isEmpty(detour))
+ detour = (routing_mode === 'custom') ? (get_outbound(default_outbound) || 'direct-out') : 'direct-out';
+
+ const tag = 'hp-' + detour;
+ rs.http_client = tag;
+ if (!http_seen[detour]) {
+ http_seen[detour] = true;
+ /* sing-box 1.14 rejects detouring to an empty direct outbound
+ (pure TUN mode has no self_mark on direct-out). Omitting detour
+ uses the same system direct dialer, so behavior is unchanged. */
+ const client = { tag: tag };
+ if (!(isEmpty(self_mark) && isDirectOutboundTag(detour)))
+ client.detour = detour;
+ push(http_clients, client);
+ }
+}
+if (length(http_clients))
+ config.http_clients = http_clients;
/* Routing rules end */
/* Experimental start */
if (routing_mode in ['bypass_mainland_china', 'custom']) {
config.experimental = {
- clash_api,
cache_file: {
- enabled: cache_file_enabled !== '0',
- path: cache_file_path || (HP_DIR + '/cache.db'),
- store_rdrc: strToBool(cache_store_rdrc),
- rdrc_timeout: strToTime(cache_rdrc_timeout),
+ enabled: true,
+ path: '/etc/homeproxy/cache.db',
+ store_dns: (dns_store_dns === '1') ? true : null
}
};
}
/* Experimental end */
+config['$schema'] = 'https://sing-box.sagernet.org/schema.json';
+
system('mkdir -p ' + RUN_DIR);
-system('mkdir -p ' + RULESET_DIR);
-writefile(RUN_DIR + '/sing-box-c.json', sprintf('%.J\n', removeBlankAttrs(config)));
+const client_tmp = RUN_DIR + '/sing-box-c.json.tmp';
+writefile(client_tmp, sprintf('%.J\n', removeBlankAttrs(config)));
+if (system('/usr/bin/sing-box check --config ' + client_tmp) !== 0) {
+ system('rm -f ' + client_tmp);
+ exit(1);
+}
+system('mv -f ' + client_tmp + ' ' + RUN_DIR + '/sing-box-c.json');
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_server.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_server.uc
index 7941afa6f..40e0c93d4 100755
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_server.uc
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_server.uc
@@ -11,8 +11,8 @@ import { writefile } from 'fs';
import { cursor } from 'uci';
import {
- isEmpty, strToBool, strToInt, strToTime,
- removeBlankAttrs, HP_DIR, RUN_DIR
+ strToBool, strToInt, strToTime,
+ removeBlankAttrs, buildTLSObject, buildTransportObject, HP_DIR, RUN_DIR
} from 'homeproxy';
/* UCI config start */
@@ -42,6 +42,26 @@ uci.foreach(uciconfig, uciserver, (cfg) => {
if (cfg.enabled !== '1')
return;
+ /* Snell (1.14): single-psk inbound; shape differs from the generic users[] block below */
+ if (cfg.type === 'snell') {
+ push(config.inbounds, {
+ type: 'snell',
+ tag: 'cfg-' + cfg['.name'] + '-in',
+
+ listen: cfg.address || '::',
+ listen_port: strToInt(cfg.port),
+ bind_interface: cfg.bind_interface,
+ reuse_addr: strToBool(cfg.reuse_addr),
+ tcp_fast_open: strToBool(cfg.tcp_fast_open),
+ tcp_multi_path: strToBool(cfg.tcp_multi_path),
+ version: strToInt(cfg.snell_version) || 5,
+ psk: cfg.password,
+ obfs_mode: cfg.snell_obfs_mode,
+ mode: cfg.snell_mode
+ });
+ return;
+ }
+
push(config.inbounds, {
type: cfg.type,
tag: 'cfg-' + cfg['.name'] + '-in',
@@ -59,17 +79,15 @@ uci.foreach(uciconfig, uciserver, (cfg) => {
/* AnyTLS */
padding_scheme: cfg.anytls_padding_scheme,
- /* Hysteria */
+ /* Hysteria (2) */
up_mbps: strToInt(cfg.hysteria_up_mbps),
down_mbps: strToInt(cfg.hysteria_down_mbps),
obfs: cfg.hysteria_obfs_type ? {
type: cfg.hysteria_obfs_type,
- password: cfg.hysteria_obfs_password
+ password: cfg.hysteria_obfs_password,
+ min_packet_size: strToInt(cfg.hysteria_obfs_min_packet_size),
+ max_packet_size: strToInt(cfg.hysteria_obfs_max_packet_size)
} : cfg.hysteria_obfs_password,
- recv_window_conn: strToInt(cfg.hysteria_recv_window_conn),
- recv_window_client: strToInt(cfg.hysteria_recv_window_client),
- max_conn_client: strToInt(cfg.hysteria_max_conn_client),
- disable_mtu_discovery: strToBool(cfg.hysteria_disable_mtu_discovery),
ignore_client_bandwidth: strToBool(cfg.hysteria_ignore_client_bandwidth),
masquerade: cfg.hysteria_masquerade,
@@ -113,73 +131,22 @@ uci.foreach(uciconfig, uciserver, (cfg) => {
} : null
} : null,
- tls: (cfg.tls === '1') ? {
- enabled: true,
- server_name: cfg.tls_sni,
- alpn: cfg.tls_alpn,
- min_version: cfg.tls_min_version,
- max_version: cfg.tls_max_version,
- cipher_suites: cfg.tls_cipher_suites,
- certificate_path: cfg.tls_cert_path,
- key_path: cfg.tls_key_path,
- acme: (cfg.tls_acme === '1') ? {
- domain: cfg.tls_acme_domain,
- data_directory: HP_DIR + '/certs',
- default_server_name: cfg.tls_acme_dsn,
- email: cfg.tls_acme_email,
- provider: cfg.tls_acme_provider,
- disable_http_challenge: strToBool(cfg.tls_acme_dhc),
- disable_tls_alpn_challenge: (cfg.tls_acme_dtac),
- alternative_http_port: strToInt(cfg.tls_acme_ahp),
- alternative_tls_port: strToInt(cfg.tls_acme_atp),
- external_account: (cfg.tls_acme_external_account === '1') ? {
- key_id: cfg.tls_acme_ea_keyid,
- mac_key: cfg.tls_acme_ea_mackey
- } : null,
- dns01_challenge: (cfg.tls_dns01_challenge === '1') ? {
- provider: cfg.tls_dns01_provider,
- access_key_id: cfg.tls_dns01_ali_akid,
- access_key_secret: cfg.tls_dns01_ali_aksec,
- region_id: cfg.tls_dns01_ali_rid,
- api_token: cfg.tls_dns01_cf_api_token
- } : null
- } : null,
- ech: (cfg.tls_ech_key) ? {
- enabled: true,
- key: split(cfg.tls_ech_key, '\n'),
- // config: split(cfg.tls_ech_config, '\n')
- } : null,
- reality: (cfg.tls_reality === '1') ? {
- enabled: true,
- private_key: cfg.tls_reality_private_key,
- short_id: cfg.tls_reality_short_id,
- max_time_difference: strToTime(cfg.tls_reality_max_time_difference),
- handshake: {
- server: cfg.tls_reality_server_addr,
- server_port: strToInt(cfg.tls_reality_server_port)
- }
- } : null
- } : null,
+ tls: buildTLSObject(cfg, true),
- transport: !isEmpty(cfg.transport) ? {
- type: cfg.transport,
- host: cfg.http_host || cfg.httpupgrade_host,
- path: cfg.http_path || cfg.ws_path,
- headers: cfg.ws_host ? {
- Host: cfg.ws_host
- } : null,
- method: cfg.http_method,
- max_early_data: strToInt(cfg.websocket_early_data),
- early_data_header_name: cfg.websocket_early_data_header,
- service_name: cfg.grpc_servicename,
- idle_timeout: strToTime(cfg.http_idle_timeout),
- ping_timeout: strToTime(cfg.http_ping_timeout)
- } : null
+ transport: buildTransportObject(cfg, true)
});
});
if (length(config.inbounds) === 0)
exit(1);
+config['$schema'] = 'https://sing-box.sagernet.org/schema.json';
+
system('mkdir -p ' + RUN_DIR);
-writefile(RUN_DIR + '/sing-box-s.json', sprintf('%.J\n', removeBlankAttrs(config)));
+const server_tmp = RUN_DIR + '/sing-box-s.json.tmp';
+writefile(server_tmp, sprintf('%.J\n', removeBlankAttrs(config)));
+if (system('/usr/bin/sing-box check --config ' + server_tmp) !== 0) {
+ system('rm -f ' + server_tmp);
+ exit(1);
+}
+system('mv -f ' + server_tmp + ' ' + RUN_DIR + '/sing-box-s.json');
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/homeproxy.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/homeproxy.uc
old mode 100755
new mode 100644
index 8ff55bf7f..93e2d7e59
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/homeproxy.uc
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/homeproxy.uc
@@ -26,30 +26,55 @@ export function isBinary(str) {
return false;
};
+/* Close a file descriptor, swallowing secondary errors (e.g. an already
+ closed fd). ucode has no `finally` clause, so both the normal and the
+ exceptional path of executeCommand() have to close explicitly. */
+function closeFD(fd) {
+ if (fd) {
+ try {
+ fd.close();
+ } catch (e) {
+ /* already closed */
+ }
+ }
+};
+
export function executeCommand(...args) {
- let outfd = mkstemp();
- let errfd = mkstemp();
+ let outfd = null, errfd = null;
- const exitcode = system(`${join(' ', args)} >&${outfd.fileno()} 2>&${errfd.fileno()}`);
+ try {
+ outfd = mkstemp();
+ errfd = mkstemp();
- outfd.seek(0);
- errfd.seek(0);
+ const exitcode = system(`${join(' ', args)} >&${outfd.fileno()} 2>&${errfd.fileno()}`);
- const stdout = outfd.read(1024 * 512) ?? '';
- const stderr = errfd.read(1024 * 512) ?? '';
+ outfd.seek(0);
+ errfd.seek(0);
- outfd.close();
- errfd.close();
+ const stdout = outfd.read(1024 * 512) ?? '';
+ const stderr = errfd.read(1024 * 512) ?? '';
- const binary = isBinary(stdout);
+ const binary = isBinary(stdout);
- return {
- command: join(' ', args),
- stdout: binary ? null : stdout,
- stderr,
- exitcode,
- binary
- };
+ /* mkstemp() returns delete-on-close files, so closing is enough */
+ closeFD(outfd);
+ closeFD(errfd);
+
+ return {
+ command: join(' ', args),
+ stdout: binary ? null : stdout,
+ stderr,
+ exitcode,
+ binary
+ };
+ } catch (e) {
+ /* Never leak the temporary descriptors on a failing run. ucode has
+ no `finally` clause, so the exception is re-raised by hand. */
+ closeFD(outfd);
+ closeFD(errfd);
+
+ die(e);
+ }
};
export function getTime(epoch) {
@@ -66,34 +91,35 @@ export function getTime(epoch) {
};
-export function wGETResponse(url, ua) {
+/*
+ * Fetch a URL and report both the body and, on failure, the reason. The
+ * reason is wget's own stderr (whitespace collapsed, length-capped) so the
+ * caller can tell a DNS failure from a timeout or a TLS handshake error.
+ */
+export function wGETVerbose(url, ua) {
if (!url || type(url) !== 'string')
- return null;
+ return { content: null, error: 'invalid URL' };
if (!ua)
ua = 'Wget/1.21 (HomeProxy, like v2rayN)';
- const output = executeCommand(`/usr/bin/wget -O- -S --user-agent ${shellQuote(ua)} --timeout=10 ${shellQuote(url)}`) || {};
- return {
- body: trim(output.stdout),
- headers: output.stderr || '',
- exitcode: output.exitcode
- };
+ /* -nv (not -q) so wget still reports *why* a fetch failed on stderr */
+ const output = executeCommand(`/usr/bin/wget -nv -O- --user-agent ${shellQuote(ua)} --timeout=10 ${shellQuote(url)}`) || {};
+ if (output.exitcode !== 0) {
+ let reason = trim(output.stderr || '');
+ reason = reason ? replace(reason, /\s+/g, ' ') : 'no error output';
+
+ if (length(reason) > 200)
+ reason = substr(reason, 0, 200) + '...';
+
+ return { content: null, error: `wget exited with status ${output.exitcode}: ${reason}` };
+ }
+
+ return { content: trim(output.stdout), error: null };
};
export function wGET(url, ua) {
- return wGETResponse(url, ua)?.body;
-};
-
-export function wGETHeaders(url, ua) {
- if (!url || type(url) !== 'string')
- return null;
-
- if (!ua)
- ua = 'clash.meta';
-
- const output = executeCommand(`/usr/bin/wget -O /dev/null -S --user-agent ${shellQuote(ua)} --timeout=10 ${shellQuote(url)}`) || {};
- return output.stderr || '';
+ return wGETVerbose(url, ua).content;
};
/* Utilities end */
@@ -103,7 +129,7 @@ export function isEmpty(res) {
};
export function strToBool(str) {
- return (str === '1') || null;
+ return str === '1' ? true : (str === '0' ? false : null);
};
export function strToInt(str) {
@@ -111,7 +137,11 @@ export function strToInt(str) {
};
export function strToTime(str) {
- return !isEmpty(str) ? (str + 's') : null;
+ if (isEmpty(str))
+ return null;
+
+ /* Preserve values that already carry a time unit (e.g. "30s", "1m") */
+ return match(str, /[a-zA-Z]$/) ? str : (str + 's');
};
export function removeBlankAttrs(res) {
@@ -152,6 +182,77 @@ export function validation(datatype, data) {
const ret = system(`/sbin/validate_data ${shellQuote(datatype)} ${shellQuote(data)} 2>/dev/null`);
return (ret === 0);
};
+
+/* Validate IP/CIDR format to prevent nftables template injection from resource files */
+export function isValidCIDR(addr, family) {
+ if (isEmpty(addr))
+ return false;
+
+ /* Strip leading/trailing whitespace */
+ addr = trim(addr);
+ if (!addr)
+ return false;
+
+ /* Split address and optional prefix */
+ const parts = split(addr, '/');
+ const ip = parts[0];
+ const prefix = parts[1];
+
+ /* Validate IP part */
+ if (family === 4) {
+ if (!match(ip, /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/))
+ return false;
+ /* Validate octet ranges */
+ const octets = split(ip, '.');
+ for (let o in octets)
+ if (int(o) > 255)
+ return false;
+ /* Validate prefix if present */
+ if (prefix && (int(prefix) < 0 || int(prefix) > 32))
+ return false;
+ } else if (family === 6) {
+ /* Only hex digits and colons */
+ if (!match(ip, /^[0-9a-fA-F:]+$/))
+ return false;
+
+ /* At most one "::" */
+ if (match(ip, /::.*::/))
+ return false;
+
+ /* Validate group structure */
+ const dcolon = index(ip, '::');
+ if (dcolon === -1) {
+ /* Uncompressed form: exactly 8 groups of 1-4 hex digits */
+ const groups = split(ip, ':');
+ if (length(groups) !== 8)
+ return false;
+ for (let g in groups)
+ if (!match(g, /^[0-9a-fA-F]{1,4}$/))
+ return false;
+ } else {
+ /* Compressed form: "::" expands to at least one zero group */
+ let count = 0;
+ for (let part in [substr(ip, 0, dcolon), substr(ip, dcolon + 2)]) {
+ if (part === '')
+ continue;
+ for (let g in split(part, ':')) {
+ if (!match(g, /^[0-9a-fA-F]{1,4}$/))
+ return false;
+ count++;
+ }
+ }
+ if (count > 7)
+ return false;
+ }
+
+ if (prefix && (int(prefix) < 0 || int(prefix) > 128))
+ return false;
+ } else {
+ return false;
+ }
+
+ return true;
+};
/* String helper end */
/* String parser start */
@@ -160,8 +261,8 @@ export function decodeBase64Str(str) {
return null;
str = trim(str);
- str = replace(str, '_', '/');
- str = replace(str, '-', '+');
+ str = replace(str, /_/g, '/');
+ str = replace(str, /-/g, '+');
const padding = length(str) % 4;
if (padding)
@@ -247,3 +348,139 @@ export function parseURL(url) {
return objurl;
};
/* String parser end */
+
+/* Config generator helper start */
+/*
+ * Shared sing-box TLS object builder for the client outbound and the server
+ * inbound. The property order below is significant: the generated JSON keeps
+ * the insertion order of this object after removeBlankAttrs() drops the blank
+ * attributes, and both generators used to emit the fields in exactly this
+ * order. Keep client-only fields (insecure/handshake_timeout/utls) and
+ * server-only fields (key_path/certificate_provider) at their current
+ * positions when editing.
+ */
+export function buildTLSObject(cfg, is_server) {
+ if (cfg.tls !== '1')
+ return null;
+
+ return {
+ enabled: true,
+ server_name: cfg.tls_sni,
+ insecure: is_server ? null : strToBool(cfg.tls_insecure),
+ alpn: cfg.tls_alpn,
+ min_version: cfg.tls_min_version,
+ max_version: cfg.tls_max_version,
+ handshake_timeout: is_server ? null : strToTime(cfg.tls_handshake_timeout),
+ cipher_suites: cfg.tls_cipher_suites,
+ certificate_path: cfg.tls_cert_path,
+ key_path: is_server ? cfg.tls_key_path : null,
+ certificate_provider: (is_server && cfg.tls_acme === '1') ? {
+ type: 'acme',
+ domain: (type(cfg.tls_acme_domain) === 'array') ? cfg.tls_acme_domain
+ : (isEmpty(cfg.tls_acme_domain) ? [] : [cfg.tls_acme_domain]),
+ data_directory: HP_DIR + '/certs',
+ default_server_name: cfg.tls_acme_dsn,
+ email: cfg.tls_acme_email,
+ provider: cfg.tls_acme_provider,
+ account_key: cfg.tls_acme_account_key,
+ key_type: cfg.tls_acme_key_type,
+ profile: cfg.tls_acme_profile,
+ disable_http_challenge: strToBool(cfg.tls_acme_dhc),
+ disable_tls_alpn_challenge: strToBool(cfg.tls_acme_dtac),
+ alternative_http_port: strToInt(cfg.tls_acme_ahp),
+ alternative_tls_port: strToInt(cfg.tls_acme_atp),
+ external_account: (cfg.tls_acme_external_account === '1') ? {
+ key_id: cfg.tls_acme_ea_keyid,
+ mac_key: cfg.tls_acme_ea_mackey
+ } : null,
+ dns01_challenge: (cfg.tls_dns01_challenge === '1') ? {
+ provider: cfg.tls_dns01_provider,
+ access_key_id: cfg.tls_dns01_ali_akid,
+ access_key_secret: cfg.tls_dns01_ali_aksec,
+ region_id: cfg.tls_dns01_ali_rid,
+ api_token: cfg.tls_dns01_cf_api_token
+ } : null
+ } : null,
+ ech: is_server ? (cfg.tls_ech_key ? {
+ enabled: true,
+ key: split(cfg.tls_ech_key, '\n')
+ /* config: split(cfg.tls_ech_config, '\n') */
+ } : null) : ((cfg.tls_ech === '1') ? {
+ enabled: true,
+ config: cfg.tls_ech_config,
+ config_path: cfg.tls_ech_config_path
+ } : null),
+ utls: (is_server || isEmpty(cfg.tls_utls)) ? null : {
+ enabled: true,
+ fingerprint: cfg.tls_utls
+ },
+ reality: (cfg.tls_reality !== '1') ? null : (is_server ? {
+ enabled: true,
+ private_key: cfg.tls_reality_private_key,
+ short_id: cfg.tls_reality_short_id,
+ max_time_difference: strToTime(cfg.tls_reality_max_time_difference),
+ handshake: {
+ server: cfg.tls_reality_server_addr,
+ server_port: strToInt(cfg.tls_reality_server_port)
+ }
+ } : {
+ enabled: true,
+ public_key: cfg.tls_reality_public_key,
+ short_id: cfg.tls_reality_short_id
+ })
+ };
+};
+
+/* Shared sing-box transport object builder; the client transport additionally
+ supports the gRPC keepalive hint, the server one does not. */
+export function buildTransportObject(cfg, is_server) {
+ if (isEmpty(cfg.transport))
+ return null;
+
+ return {
+ type: cfg.transport,
+ host: cfg.http_host || cfg.httpupgrade_host,
+ path: cfg.http_path || cfg.ws_path,
+ headers: cfg.ws_host ? {
+ Host: cfg.ws_host
+ } : null,
+ method: cfg.http_method,
+ max_early_data: strToInt(cfg.websocket_early_data),
+ early_data_header_name: cfg.websocket_early_data_header,
+ service_name: cfg.grpc_servicename,
+ idle_timeout: strToTime(cfg.http_idle_timeout),
+ ping_timeout: strToTime(cfg.http_ping_timeout),
+ permit_without_stream: is_server ? null : strToBool(cfg.grpc_permit_without_stream)
+ };
+};
+/* Config generator helper end */
+
+/* PEM validation start */
+/*
+ * Check that `content` is a PEM certificate (is_private_key = false) or an
+ * RSA/EC private key (is_private_key = true): matching BEGIN/END boundaries
+ * with a base64 body in between. Kanged from luci-proto-openconnect; used by
+ * the rpcd certificate upload and available for future certificate features.
+ */
+export function isValidPEM(content, is_private_key) {
+ if (isEmpty(content))
+ return false;
+
+ const beg = is_private_key ? /^-----BEGIN (RSA|EC) PRIVATE KEY-----$/ : /^-----BEGIN CERTIFICATE-----$/,
+ end = is_private_key ? /^-----END (RSA|EC) PRIVATE KEY-----$/ : /^-----END CERTIFICATE-----$/,
+ lines = split(trim(content), /[\r\n]/);
+ let start = false, i;
+
+ for (i = 0; i < length(lines); i++) {
+ if (match(lines[i], beg))
+ start = true;
+ else if (start && !b64dec(lines[i]) && length(lines[i]) !== 64)
+ break;
+ }
+
+ if (!start || i < length(lines) - 1 || !match(lines[i], end))
+ return false;
+
+ return true;
+};
+/* PEM validation end */
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/migrate_config.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/migrate_config.uc
index 5f6278787..a0b9d8570 100755
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/migrate_config.uc
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/migrate_config.uc
@@ -7,34 +7,14 @@
'use strict';
-import { popen } from 'fs';
import { cursor } from 'uci';
-import { isEmpty, parseURL } from 'homeproxy';
+import { isEmpty, parseURL, validation } from 'homeproxy';
const uci = cursor();
const uciconfig = 'homeproxy';
uci.load(uciconfig);
-function random_secret() {
- const fd = popen('tr -dc "A-Za-z0-9" < /dev/urandom 2>/dev/null | head -c 16');
- let random = '';
- if (fd) {
- random = trim(fd.read('all') || '');
- fd.close();
- }
-
- if (isEmpty(random)) {
- const fallback = popen('awk \'BEGIN{srand(); printf "%06d", int(rand() * 1000000)}\'');
- if (fallback) {
- random = trim(fallback.read('all') || '');
- fallback.close();
- }
- }
-
- return random;
-}
-
const uciinfra = 'infra',
ucimigration = 'migration',
ucimain = 'config',
@@ -45,16 +25,8 @@ const uciinfra = 'infra',
ucirouting = 'routing',
uciroutingnode = 'routing_node',
uciroutingrule = 'routing_rule',
- uciclashapi = 'clash_api',
- ucintp = 'ntp',
- ucicache = 'cache',
uciserver = 'server';
-function is_update_cron(value) {
- let matched = match(value || '', /^(\d{1,2})\s+(\d{1,2})\s+\*\s+\*\s+([0-7*])$/);
- return !isEmpty(matched) && int(matched[1]) <= 59 && int(matched[2]) <= 23;
-}
-
/* chinadns-ng has been removed */
if (uci.get(uciconfig, uciinfra, 'china_dns_port'))
uci.delete(uciconfig, uciinfra, 'china_dns_port');
@@ -64,7 +36,9 @@ const china_dns_server = uci.get(uciconfig, ucimain, 'china_dns_server');
if (type(china_dns_server) === 'array') {
uci.set(uciconfig, ucimain, 'china_dns_server', china_dns_server[0]);
} else {
- if (match(china_dns_server, /,/))
+ if (china_dns_server === 'wan_114')
+ uci.set(uciconfig, ucimain, 'china_dns_server', '114.114.114.114');
+ else if (match(china_dns_server, /,/))
uci.set(uciconfig, ucimain, 'china_dns_server', split(china_dns_server, ',')[0]);
}
@@ -83,93 +57,6 @@ if (!uci.get(uciconfig, uciinfra, 'ntp_server'))
if (!isEmpty(uci.get(uciconfig, uciinfra, 'tun_gso')))
uci.delete(uciconfig, uciinfra, 'tun_gso');
-/* endpoint_independent_nat was removed in sing-box 1.13 */
-if (!isEmpty(uci.get(uciconfig, ucirouting, 'endpoint_independent_nat')))
- uci.delete(uciconfig, ucirouting, 'endpoint_independent_nat');
-
-/* direct outbound proxy_protocol was removed in sing-box 1.13 */
-uci.foreach(uciconfig, ucinode, (cfg) => {
- if (cfg.type === 'direct' && !isEmpty(cfg.proxy_protocol))
- uci.delete(uciconfig, cfg['.name'], 'proxy_protocol');
-});
-
-const legacy_panel_url = 'https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip';
-const legacy_panel_proxy_url = 'https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip';
-const old_panel_url = 'https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip';
-const old_panel_proxy_url = 'https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip';
-const default_panel_url = 'https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip';
-
-/* clash api panel options were introduced */
-if (!uci.get(uciconfig, uciclashapi))
- uci.set(uciconfig, uciclashapi, uciconfig);
-
-if (isEmpty(uci.get(uciconfig, uciclashapi, 'external_ui')))
- uci.set(uciconfig, uciclashapi, 'external_ui', '/etc/homeproxy/run/ui');
-
-const panel_url = uci.get(uciconfig, uciclashapi, 'external_ui_download_url');
-if (isEmpty(panel_url) || panel_url === legacy_panel_url || panel_url === legacy_panel_proxy_url || panel_url === old_panel_proxy_url)
- uci.set(uciconfig, uciclashapi, 'external_ui_download_url', default_panel_url);
-
-if (isEmpty(uci.get(uciconfig, uciclashapi, 'external_ui_download_detour')))
- uci.set(uciconfig, uciclashapi, 'external_ui_download_detour', 'direct-out');
-
-if (isEmpty(uci.get(uciconfig, uciclashapi, 'external_controller')))
- uci.set(uciconfig, uciclashapi, 'external_controller', '0.0.0.0:9095');
-
-if (isEmpty(uci.get(uciconfig, uciclashapi, 'secret')) || uci.get(uciconfig, uciclashapi, 'secret') === 'homeproxy') {
- let random = random_secret();
- if (!isEmpty(random))
- uci.set(uciconfig, uciclashapi, 'secret', random);
-}
-
-if (isEmpty(uci.get(uciconfig, uciclashapi, 'default_mode')))
- uci.set(uciconfig, uciclashapi, 'default_mode', 'rule');
-
-/* ntp options were moved into a dedicated section */
-if (!uci.get(uciconfig, ucintp))
- uci.set(uciconfig, ucintp, uciconfig);
-
-const legacy_ntp_server = uci.get(uciconfig, uciinfra, 'ntp_server');
-if (isEmpty(uci.get(uciconfig, ucintp, 'enabled')))
- uci.set(uciconfig, ucintp, 'enabled', '1');
-
-if (isEmpty(uci.get(uciconfig, ucintp, 'server')))
- uci.set(uciconfig, ucintp, 'server', !isEmpty(legacy_ntp_server) ? legacy_ntp_server : 'ntp.aliyun.com');
-
-if (isEmpty(uci.get(uciconfig, ucintp, 'server_port')))
- uci.set(uciconfig, ucintp, 'server_port', '123');
-
-if (isEmpty(uci.get(uciconfig, ucintp, 'interval')))
- uci.set(uciconfig, ucintp, 'interval', '30m');
-
-/* cache file options were moved into a dedicated section */
-if (!uci.get(uciconfig, ucicache))
- uci.set(uciconfig, ucicache, uciconfig);
-
-if (isEmpty(uci.get(uciconfig, ucicache, 'enabled')))
- uci.set(uciconfig, ucicache, 'enabled', '1');
-
-const old_cache_path = '/var/run/homeproxy/cache.db';
-const default_cache_path = '/etc/homeproxy/cache.db';
-const cache_path = uci.get(uciconfig, ucicache, 'path');
-if (isEmpty(cache_path) || cache_path === old_cache_path)
- uci.set(uciconfig, ucicache, 'path', default_cache_path);
-
-if (!isEmpty(uci.get(uciconfig, ucicache, 'store_fakeip')))
- uci.delete(uciconfig, ucicache, 'store_fakeip');
-
-if (isEmpty(uci.get(uciconfig, ucicache, 'store_rdrc')))
- uci.set(uciconfig, ucicache, 'store_rdrc', isEmpty(uci.get(uciconfig, ucidns, 'cache_file_store_rdrc')) ? '1' : uci.get(uciconfig, ucidns, 'cache_file_store_rdrc'));
-
-if (isEmpty(uci.get(uciconfig, ucicache, 'rdrc_timeout')) && !isEmpty(uci.get(uciconfig, ucidns, 'cache_file_rdrc_timeout')))
- uci.set(uciconfig, ucicache, 'rdrc_timeout', uci.get(uciconfig, ucidns, 'cache_file_rdrc_timeout'));
-
-if (!isEmpty(uci.get(uciconfig, ucidns, 'cache_file_store_rdrc')))
- uci.delete(uciconfig, ucidns, 'cache_file_store_rdrc');
-
-if (!isEmpty(uci.get(uciconfig, ucidns, 'cache_file_rdrc_timeout')))
- uci.delete(uciconfig, ucidns, 'cache_file_rdrc_timeout');
-
/* create migration section */
if (!uci.get(uciconfig, ucimigration))
uci.set(uciconfig, ucimigration, uciconfig);
@@ -177,7 +64,7 @@ if (!uci.get(uciconfig, ucimigration))
/* delete old crontab command */
const migration_crontab = uci.get(uciconfig, ucimigration, 'crontab');
if (!migration_crontab) {
- system('sed -i "/update_crond.sh/d" "/etc/crontabs/root" 2>"/dev/null"');
+ system('sed -i "/update_crond.sh/d" "/etc/crontabs/root" 2>/dev/null');
uci.set(uciconfig, ucimigration, 'crontab', '1');
}
@@ -188,10 +75,6 @@ if (isEmpty(uci.get(uciconfig, ucimain, 'log_level')))
if (isEmpty(uci.get(uciconfig, uciserver, 'log_level')))
uci.set(uciconfig, uciserver, 'log_level', 'warn');
-if (!isEmpty(uci.get(uciconfig, 'subscription', 'auto_update_time')) &&
- !is_update_cron(uci.get(uciconfig, 'subscription', 'auto_update_time')))
- uci.set(uciconfig, 'subscription', 'auto_update_time', '0 0 * * *');
-
/* empty value defaults to all ports now */
if (uci.get(uciconfig, ucimain, 'routing_port') === 'all')
uci.delete(uciconfig, ucimain, 'routing_port');
@@ -211,6 +94,8 @@ if (default_dns_server === 'block-dns') {
uci.set(uciconfig, '_migration_dns_final_block', 'action', 'reject');
uci.set(uciconfig, ucidns, 'default_server', 'default-dns');
}
+else if (default_dns_server === 'local-dns')
+ uci.set(uciconfig, ucidns, 'default_server', 'default-dns');
const dns_server_migration = {};
/* DNS servers options */
@@ -288,7 +173,7 @@ uci.foreach(uciconfig, ucidnsrule, (cfg) => {
uci.set(uciconfig, ucirouting, 'default_outbound_dns', cfg.server);
break;
default:
- uci.set(uciconfig, cfg.outbound, 'domain_resolver', cfg.server);
+ uci.set(uciconfig, outbound, 'domain_resolver', cfg.server);
break;
}
});
@@ -338,6 +223,29 @@ uci.foreach(uciconfig, ucinode, (cfg) => {
/* wireguard_gso was deprecated in sb 1.11 */
if (!isEmpty(cfg.wireguard_gso))
uci.delete(uciconfig, cfg['.name'], 'wireguard_gso');
+
+ /* hysteria_revc_window was a typo, renamed to hysteria_recv_window */
+ if (!isEmpty(cfg.hysteria_revc_window))
+ uci.rename(uciconfig, cfg['.name'], 'hysteria_revc_window', 'hysteria_recv_window');
+});
+
+/* sing-box 1.14: remove deprecated DNS semantics */
+if (!isEmpty(uci.get(uciconfig, ucidns, 'independent_cache')))
+ uci.delete(uciconfig, ucidns, 'independent_cache');
+
+const legacy_store_rdrc = uci.get(uciconfig, ucidns, 'cache_file_store_rdrc');
+if (!isEmpty(legacy_store_rdrc)) {
+ uci.set(uciconfig, ucidns, 'cache_file_store_dns', legacy_store_rdrc);
+ uci.delete(uciconfig, ucidns, 'cache_file_store_rdrc');
+}
+if (!isEmpty(uci.get(uciconfig, ucidns, 'cache_file_rdrc_timeout')))
+ uci.delete(uciconfig, ucidns, 'cache_file_rdrc_timeout');
+
+uci.foreach(uciconfig, ucidnsrule, (cfg) => {
+ if (!isEmpty(cfg.domain_strategy))
+ uci.delete(uciconfig, cfg['.name'], 'domain_strategy');
+ if (!isEmpty(cfg.rule_set_ip_cidr_accept_empty))
+ uci.delete(uciconfig, cfg['.name'], 'rule_set_ip_cidr_accept_empty');
});
/* routing rules options */
@@ -356,47 +264,6 @@ uci.foreach(uciconfig, uciroutingrule, (cfg) => {
}
});
-/* routing node options */
-uci.foreach(uciconfig, uciroutingnode, (cfg) => {
- if (cfg.node === 'urltest' && !isEmpty(cfg.urltest_nodes)) {
- let custom_nodes = [],
- subscription_nodes = [];
-
- for (let node in (type(cfg.urltest_nodes) === 'array' ? cfg.urltest_nodes : [ cfg.urltest_nodes ])) {
- let node_cfg = uci.get_all(uciconfig, node);
- if (isEmpty(node_cfg))
- continue;
-
- if (!isEmpty(node_cfg.grouphash))
- push(subscription_nodes, node);
- else
- push(custom_nodes, node);
- }
-
- if (isEmpty(cfg.selected_nodes) && !isEmpty(custom_nodes))
- uci.set(uciconfig, cfg['.name'], 'selected_nodes', custom_nodes);
-
- if (isEmpty(cfg.subscription_nodes) && !isEmpty(subscription_nodes))
- uci.set(uciconfig, cfg['.name'], 'subscription_nodes', subscription_nodes);
-
- uci.delete(uciconfig, cfg['.name'], 'urltest_nodes');
- }
-});
-
-/* rule set options */
-uci.foreach(uciconfig, uciruleset, (cfg) => {
- if (isEmpty(cfg.tag))
- uci.set(uciconfig, cfg['.name'], 'tag', 'cfg-' + cfg['.name'] + '-rule');
-
- if (cfg.type === 'remote') {
- if (isEmpty(cfg.auto_update))
- uci.set(uciconfig, cfg['.name'], 'auto_update', '1');
-
- if (!is_update_cron(cfg.update_interval))
- uci.set(uciconfig, cfg['.name'], 'update_interval', '0 0 * * *');
- }
-});
-
/* server options */
/* auto_firewall was moved into server options */
const auto_firewall = uci.get(uciconfig, uciserver, 'auto_firewall');
@@ -404,13 +271,6 @@ if (!isEmpty(auto_firewall))
uci.delete(uciconfig, uciserver, 'auto_firewall');
uci.foreach(uciconfig, uciserver, (cfg) => {
- if (!isEmpty(cfg.hysteria_revc_window_client) && isEmpty(cfg.hysteria_recv_window_client)) {
- uci.set(uciconfig, cfg['.name'], 'hysteria_recv_window_client', cfg.hysteria_revc_window_client);
- }
-
- if (!isEmpty(cfg.hysteria_revc_window_client))
- uci.delete(uciconfig, cfg['.name'], 'hysteria_revc_window_client');
-
/* auto_firewall was moved into server options */
if (auto_firewall === '1')
uci.set(uciconfig, cfg['.name'], 'firewall' , '1');
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/parse_uri.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/parse_uri.uc
new file mode 100644
index 000000000..8becd1721
--- /dev/null
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/parse_uri.uc
@@ -0,0 +1,500 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Copyright (C) 2023-2025 ImmortalWrt.org
+ */
+
+'use strict';
+
+import { urldecode, urlencode } from 'luci.http';
+
+import { decodeBase64Str, parseURL, isEmpty, validation } from 'homeproxy';
+
+/*
+ * Share-link parsers. Every protocol has its own parse__uri() so the
+ * branches can be read, changed and unit-tested in isolation; parse_uri() only
+ * dispatches on the scheme and applies the common address/port validation and
+ * label fallback afterwards.
+ *
+ * `features` is the sing-box feature map (with_quic/with_utls/...), `log` is a
+ * logging callback, both injected so the parsers stay free of ubus/uci.
+ */
+
+/* https://shadowsocks.org/guide/sip008.html */
+export function parse_sip008_uri(uri) {
+ return {
+ label: uri.remarks,
+ type: 'shadowsocks',
+ address: uri.server,
+ port: uri.server_port,
+ shadowsocks_encrypt_method: uri.method,
+ password: uri.password,
+ shadowsocks_plugin: uri.plugin,
+ shadowsocks_plugin_opts: uri.plugin_opts
+ };
+};
+
+/* https://github.com/anytls/anytls-go/blob/v0.0.8/docs/uri_scheme.md */
+export function parse_anytls_uri(uri) {
+ uri = split(trim(uri), '://');
+
+ const url = parseURL('http://' + uri[1]) || {};
+ const params = url.searchParams || {};
+
+ return {
+ label: url.hash ? urldecode(url.hash) : null,
+ type: 'anytls',
+ address: url.hostname,
+ port: url.port,
+ password: urldecode(url.username),
+ tls: '1',
+ tls_sni: params.sni,
+ tls_insecure: (params.insecure === '1') ? '1' : '0'
+ };
+};
+
+export function parse_http_uri(uri) {
+ uri = split(trim(uri), '://');
+
+ const url = parseURL('http://' + uri[1]) || {};
+
+ return {
+ label: url.hash ? urldecode(url.hash) : null,
+ type: 'http',
+ address: url.hostname,
+ port: url.port,
+ username: url.username ? urldecode(url.username) : null,
+ password: url.password ? urldecode(url.password) : null,
+ tls: (uri[0] === 'https') ? '1' : '0'
+ };
+};
+
+/* https://github.com/HyNetwork/hysteria/wiki/URI-Scheme */
+export function parse_hysteria_uri(uri, features, log) {
+ uri = split(trim(uri), '://');
+
+ const url = parseURL('http://' + uri[1]) || {};
+ const params = url.searchParams || {};
+
+ if (!features.with_quic || (params.protocol && params.protocol !== 'udp')) {
+ log(sprintf('Skipping unsupported %s node: %s.', uri[0], urldecode(url.hash) || url.hostname));
+ if (!features.with_quic)
+ log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
+
+ return null;
+ }
+
+ return {
+ label: url.hash ? urldecode(url.hash) : null,
+ type: 'hysteria',
+ address: url.hostname,
+ port: url.port,
+ hysteria_protocol: params.protocol || 'udp',
+ hysteria_auth_type: params.auth ? 'string' : null,
+ hysteria_auth_payload: params.auth,
+ hysteria_obfs_password: params.obfsParam,
+ hysteria_down_mbps: params.downmbps,
+ hysteria_up_mbps: params.upmbps,
+ tls: '1',
+ tls_insecure: (params.insecure in ['true', '1']) ? '1' : '0',
+ tls_sni: params.peer,
+ tls_alpn: params.alpn
+ };
+};
+
+/* https://v2.hysteria.network/docs/developers/URI-Scheme/ */
+export function parse_hysteria2_uri(uri, features, log) {
+ uri = split(trim(uri), '://');
+
+ const url = parseURL('http://' + uri[1]) || {};
+ const params = url.searchParams || {};
+
+ if (!features.with_quic) {
+ log(sprintf('Skipping unsupported %s node: %s.', uri[0], urldecode(url.hash) || url.hostname));
+ log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
+ return null;
+ }
+
+ return {
+ label: url.hash ? urldecode(url.hash) : null,
+ type: 'hysteria2',
+ address: url.hostname,
+ port: url.port,
+ password: url.username ? (
+ urldecode(url.username + (url.password ? (':' + url.password) : ''))
+ ) : null,
+ hysteria_obfs_type: params.obfs,
+ hysteria_obfs_password: params['obfs-password'],
+ tls: '1',
+ tls_insecure: (params.insecure === '1') ? '1' : '0',
+ tls_sni: params.sni
+ };
+};
+
+/* Surge Snell share link: snell://host:port?psk=..&obfs=http&obfs-host=..#name */
+export function parse_snell_uri(uri) {
+ uri = split(trim(uri), '://');
+
+ const url = parseURL('http://' + uri[1]) || {};
+ const params = url.searchParams || {};
+
+ return {
+ label: url.hash ? urldecode(url.hash) : null,
+ type: 'snell',
+ address: url.hostname,
+ port: url.port,
+ password: url.username ? urldecode(url.username)
+ : (params.psk ? urldecode(params.psk) : null),
+ snell_version: params.version || '4',
+ snell_userkey: params.userkey,
+ snell_obfs_mode: (params.obfs === 'http') ? 'http' : null,
+ snell_obfs_host: params['obfs-host'],
+ snell_reuse: (params.reuse === '1') ? '1' : '0'
+ };
+};
+
+export function parse_socks_uri(uri) {
+ uri = split(trim(uri), '://');
+
+ const url = parseURL('http://' + uri[1]) || {};
+
+ return {
+ label: url.hash ? urldecode(url.hash) : null,
+ type: 'socks',
+ address: url.hostname,
+ port: url.port,
+ username: url.username ? urldecode(url.username) : null,
+ password: url.password ? urldecode(url.password) : null,
+ socks_version: (match(uri[0], /4/)) ? '4' : '5'
+ };
+};
+
+export function parse_ss_uri(uri) {
+ uri = split(trim(uri), '://');
+
+ /* "Lovely" Shadowrocket format */
+ const ss_suri = split(uri[1], '#');
+ let ss_slabel = '';
+ if (length(ss_suri) <= 2) {
+ if (length(ss_suri) === 2)
+ ss_slabel = '#' + urlencode(ss_suri[1]);
+ if (decodeBase64Str(ss_suri[0]))
+ uri[1] = decodeBase64Str(ss_suri[0]) + ss_slabel;
+ }
+
+ /* Legacy format is not supported, it should be never appeared in modern subscriptions */
+ /* https://github.com/shadowsocks/shadowsocks-org/commit/78ca46cd6859a4e9475953ed34a2d301454f579e */
+
+ /* SIP002 format https://shadowsocks.org/guide/sip002.html */
+ const url = parseURL('http://' + uri[1]) || {};
+
+ let ss_userinfo = {};
+ if (url.username && url.password)
+ /* User info encoded with URIComponent */
+ ss_userinfo = [url.username, urldecode(url.password)];
+ else if (url.username)
+ /* User info encoded with base64 */
+ ss_userinfo = split(decodeBase64Str(urldecode(url.username)), ':', 2);
+
+ let ss_plugin, ss_plugin_opts;
+ if (url.search && url.searchParams.plugin) {
+ const ss_plugin_info = split(url.searchParams.plugin, ';', 2);
+ ss_plugin = ss_plugin_info[0];
+ if (ss_plugin === 'simple-obfs')
+ /* Fix non-standard plugin name */
+ ss_plugin = 'obfs-local';
+ ss_plugin_opts = ss_plugin_info[1];
+ }
+
+ return {
+ label: url.hash ? urldecode(url.hash) : null,
+ type: 'shadowsocks',
+ address: url.hostname,
+ port: url.port,
+ shadowsocks_encrypt_method: ss_userinfo[0],
+ password: ss_userinfo[1],
+ shadowsocks_plugin: ss_plugin,
+ shadowsocks_plugin_opts: ss_plugin_opts
+ };
+};
+
+/* https://p4gefau1t.github.io/trojan-go/developer/url/ */
+export function parse_trojan_uri(uri) {
+ uri = split(trim(uri), '://');
+
+ const url = parseURL('http://' + uri[1]) || {};
+ const params = url.searchParams || {};
+
+ const config = {
+ label: url.hash ? urldecode(url.hash) : null,
+ type: 'trojan',
+ address: url.hostname,
+ port: url.port,
+ password: urldecode(url.username),
+ transport: (params.type !== 'tcp') ? params.type : null,
+ tls: '1',
+ tls_sni: params.sni
+ };
+ switch (params.type) {
+ case 'grpc':
+ config.grpc_servicename = params.serviceName;
+ break;
+ case 'ws':
+ config.ws_host = params.host ? urldecode(params.host) : null;
+ config.ws_path = params.path ? urldecode(params.path) : null;
+ if (config.ws_path && match(config.ws_path, /\?ed=/)) {
+ config.websocket_early_data_header = 'Sec-WebSocket-Protocol';
+ config.websocket_early_data = split(config.ws_path, '?ed=')[1];
+ config.ws_path = split(config.ws_path, '?ed=')[0];
+ }
+ break;
+ }
+
+ return config;
+};
+
+/* https://github.com/daeuniverse/dae/discussions/182 */
+export function parse_tuic_uri(uri, features, log) {
+ uri = split(trim(uri), '://');
+
+ const url = parseURL('http://' + uri[1]) || {};
+ const params = url.searchParams || {};
+
+ if (!features.with_quic) {
+ log(sprintf('Skipping unsupported %s node: %s.', uri[0], urldecode(url.hash) || url.hostname));
+ log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
+
+ return null;
+ }
+
+ return {
+ label: url.hash ? urldecode(url.hash) : null,
+ type: 'tuic',
+ address: url.hostname,
+ port: url.port,
+ uuid: url.username,
+ password: url.password ? urldecode(url.password) : null,
+ tuic_congestion_control: params.congestion_control,
+ tuic_udp_relay_mode: params.udp_relay_mode,
+ tls: '1',
+ tls_sni: params.sni,
+ tls_alpn: params.alpn ? split(urldecode(params.alpn), ',') : null,
+ };
+};
+
+/* https://github.com/XTLS/Xray-core/discussions/716 */
+export function parse_vless_uri(uri, features, log) {
+ uri = split(trim(uri), '://');
+
+ const url = parseURL('http://' + uri[1]) || {};
+ const params = url.searchParams || {};
+
+ /* Unsupported protocol */
+ if (params.type === 'kcp') {
+ log(sprintf('Skipping unsupported %s node: %s.', uri[0], urldecode(url.hash) || url.hostname));
+ return null;
+ } else if (params.type === 'quic' && ((params.quicSecurity && params.quicSecurity !== 'none') || !features.with_quic)) {
+ log(sprintf('Skipping unsupported %s node: %s.', uri[0], urldecode(url.hash) || url.hostname));
+ if (!features.with_quic)
+ log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
+
+ return null;
+ }
+
+ const config = {
+ label: url.hash ? urldecode(url.hash) : null,
+ type: 'vless',
+ address: url.hostname,
+ port: url.port,
+ uuid: url.username,
+ transport: (params.type !== 'tcp') ? params.type : null,
+ tls: (params.security in ['tls', 'xtls', 'reality']) ? '1' : '0',
+ tls_sni: params.sni,
+ tls_alpn: params.alpn ? split(urldecode(params.alpn), ',') : null,
+ tls_reality: (params.security === 'reality') ? '1' : '0',
+ tls_reality_public_key: params.pbk ? urldecode(params.pbk) : null,
+ tls_reality_short_id: params.sid,
+ tls_utls: features.with_utls ? params.fp : null,
+ vless_flow: (params.security in ['tls', 'reality']) ? params.flow : null
+ };
+ switch (params.type) {
+ case 'grpc':
+ config.grpc_servicename = params.serviceName;
+ break;
+ case 'http':
+ case 'tcp':
+ if (params.type === 'http' || params.headerType === 'http') {
+ config.http_host = params.host ? split(urldecode(params.host), ',') : null;
+ config.http_path = params.path ? urldecode(params.path) : null;
+ }
+ break;
+ case 'httpupgrade':
+ config.httpupgrade_host = params.host ? urldecode(params.host) : null;
+ config.http_path = params.path ? urldecode(params.path) : null;
+ break;
+ case 'ws':
+ config.ws_host = params.host ? urldecode(params.host) : null;
+ config.ws_path = params.path ? urldecode(params.path) : null;
+ if (config.ws_path && match(config.ws_path, /\?ed=/)) {
+ config.websocket_early_data_header = 'Sec-WebSocket-Protocol';
+ config.websocket_early_data = split(config.ws_path, '?ed=')[1];
+ config.ws_path = split(config.ws_path, '?ed=')[0];
+ }
+ break;
+ }
+
+ return config;
+};
+
+/* https://github.com/2dust/v2rayN/wiki/Description-of-VMess-share-link */
+export function parse_vmess_uri(uri, features, log) {
+ uri = split(trim(uri), '://');
+
+ /* "Lovely" shadowrocket format */
+ if (match(uri, /&/)) {
+ log(sprintf('Skipping unsupported %s format.', uri[0]));
+ return null;
+ }
+
+ let payload;
+ try {
+ payload = json(decodeBase64Str(uri[1])) || {};
+ } catch(e) {
+ log(sprintf('Skipping unsupported %s format.', uri[0]));
+ return null;
+ }
+
+ if (payload.v != '2') {
+ log(sprintf('Skipping unsupported %s format.', uri[0]));
+ return null;
+ /* Unsupported protocol */
+ } else if (payload.net === 'kcp') {
+ log(sprintf('Skipping unsupported %s node: %s.', uri[0], payload.ps || payload.add));
+ return null;
+ } else if (payload.net === 'quic' && ((payload.type && payload.type !== 'none') || payload.path || !features.with_quic)) {
+ log(sprintf('Skipping unsupported %s node: %s.', uri[0], payload.ps || payload.add));
+ if (!features.with_quic)
+ log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
+
+ return null;
+ }
+ /*
+ * https://www.v2fly.org/config/protocols/vmess.html#vmess-md5-%E8%AE%A4%E8%AF%81%E4%BF%A1%E6%81%AF-%E6%B7%98%E6%B1%B0%E6%9C%BA%E5%88%B6
+ * else if (payload.aid && int(payload.aid) !== 0) {
+ * log(sprintf('Skipping unsupported %s node: %s.', uri[0], payload.ps || payload.add));
+ * return null;
+ * }
+ */
+
+ const config = {
+ label: payload.ps ? urldecode(payload.ps) : null,
+ type: 'vmess',
+ address: payload.add,
+ port: payload.port,
+ uuid: payload.id,
+ vmess_alterid: payload.aid,
+ vmess_encrypt: payload.scy || 'auto',
+ vmess_global_padding: '1',
+ transport: (payload.net !== 'tcp') ? payload.net : null,
+ tls: (payload.tls === 'tls') ? '1' : '0',
+ tls_sni: payload.sni || payload.host,
+ tls_alpn: payload.alpn ? split(payload.alpn, ',') : null,
+ tls_utls: features.with_utls ? payload.fp : null
+ };
+ switch (payload.net) {
+ case 'grpc':
+ config.grpc_servicename = payload.path;
+ break;
+ case 'h2':
+ case 'tcp':
+ if (payload.net === 'h2' || payload.type === 'http') {
+ config.transport = 'http';
+ config.http_host = payload.host ? split(payload.host, ',') : null;
+ config.http_path = payload.path;
+ }
+ break;
+ case 'httpupgrade':
+ config.httpupgrade_host = payload.host;
+ config.http_path = payload.path;
+ break;
+ case 'ws':
+ config.ws_host = payload.host;
+ config.ws_path = payload.path;
+ if (config.ws_path && match(config.ws_path, /\?ed=/)) {
+ config.websocket_early_data_header = 'Sec-WebSocket-Protocol';
+ config.websocket_early_data = split(config.ws_path, '?ed=')[1];
+ config.ws_path = split(config.ws_path, '?ed=')[0];
+ }
+ break;
+ }
+
+ return config;
+};
+
+export function parse_uri(uri, features, log) {
+ if (!features) features = {};
+ if (!log) log = function() {};
+
+ let config;
+
+ if (type(uri) === 'object') {
+ if (uri.nodetype === 'sip008')
+ config = parse_sip008_uri(uri);
+ } else if (type(uri) === 'string') {
+ switch (split(trim(uri), '://')[0]) {
+ case 'anytls':
+ config = parse_anytls_uri(uri, features, log);
+ break;
+ case 'http':
+ case 'https':
+ config = parse_http_uri(uri, features, log);
+ break;
+ case 'hysteria':
+ config = parse_hysteria_uri(uri, features, log);
+ break;
+ case 'hysteria2':
+ case 'hy2':
+ config = parse_hysteria2_uri(uri, features, log);
+ break;
+ case 'snell':
+ config = parse_snell_uri(uri, features, log);
+ break;
+ case 'socks':
+ case 'socks4':
+ case 'socks4a':
+ case 'socks5':
+ case 'socks5h':
+ config = parse_socks_uri(uri, features, log);
+ break;
+ case 'ss':
+ config = parse_ss_uri(uri, features, log);
+ break;
+ case 'trojan':
+ config = parse_trojan_uri(uri, features, log);
+ break;
+ case 'tuic':
+ config = parse_tuic_uri(uri, features, log);
+ break;
+ case 'vless':
+ config = parse_vless_uri(uri, features, log);
+ break;
+ case 'vmess':
+ config = parse_vmess_uri(uri, features, log);
+ break;
+ }
+ }
+
+ if (!isEmpty(config)) {
+ if (config.address)
+ config.address = replace(config.address, /\[|\]/g, '');
+
+ if (!validation('host', config.address) || !validation('port', config.port)) {
+ log(sprintf('Skipping invalid %s node: %s.', config.type, config.label || 'NULL'));
+ return null;
+ } else if (!config.label)
+ config.label = (validation('ip6addr', config.address) ?
+ `[${config.address}]` : config.address) + ':' + config.port;
+ }
+
+ return config;
+};
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_provider.sh b/luci-app-homeproxy/root/etc/homeproxy/scripts/update_provider.sh
deleted file mode 100644
index 76e2cfc9f..000000000
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_provider.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: GPL-2.0-only
-
-set -eu
-
-NAME="homeproxy"
-RUN_DIR="/var/run/$NAME"
-REQUEST_FILE="$RUN_DIR/provider-update-id"
-LOCK_FILE="$RUN_DIR/provider-update-v2.lock"
-LOG_FILE="$RUN_DIR/homeproxy.log"
-PROVIDER_ID="${1:-}"
-
-log() {
- printf '%s [SUBSCRIBE] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >> "$LOG_FILE"
-}
-
-case "$PROVIDER_ID" in
- *[!0-9a-f]*|'') exit 1 ;;
-esac
-[ "${#PROVIDER_ID}" -eq 32 ] || exit 1
-
-mkdir -p "$RUN_DIR"
-if ! lock -n "$LOCK_FILE" 2>/dev/null; then
- log "Another provider update is running; waiting for it to finish..."
- lock "$LOCK_FILE"
-fi
-
-umask 077
-printf '%s\n' "$PROVIDER_ID" > "$REQUEST_FILE"
-cleanup() {
- rm -f "$REQUEST_FILE"
- lock -u "$LOCK_FILE" 2>/dev/null || true
-}
-trap cleanup EXIT
-trap 'exit 130' INT
-trap 'exit 143' TERM
-
-# Give the Clash API response time to reach the panel before HomeProxy restarts.
-log "Updating provider $PROVIDER_ID from Clash API..."
-sleep 1
-if /etc/homeproxy/scripts/update_subscriptions.uc; then
- log "Provider $PROVIDER_ID update completed."
-else
- log "Provider $PROVIDER_ID update failed."
- exit 4
-fi
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_resources.sh b/luci-app-homeproxy/root/etc/homeproxy/scripts/update_resources.sh
index 83f49aef4..c100c6c18 100755
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_resources.sh
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/update_resources.sh
@@ -21,65 +21,89 @@ to_upper() {
}
check_list_update() {
- local LIST_FILE="$1"
- local REPO_NAME="$2"
- local REPO_BRANCH="$3"
- local REPO_FILE="$4"
- local LOCK_FILE="$RUN_DIR/update_resources-$LIST_FILE.lock"
- local GITHUB_TOKEN="$(uci -q get homeproxy.config.github_token)"
+ local listtype="$1"
+ local listrepo="$2"
+ local listref="$3"
+ local listname="$4"
+ local lock="$RUN_DIR/update_resources-$listtype.lock"
+ local github_token="$(uci -q get homeproxy.config.github_token)"
+ local wget="wget --timeout=10 -q"
- if ! lock -n "$LOCK_FILE" 2>"/dev/null"; then
- log "[$(to_upper "$LIST_FILE")] A task is already running."
+ exec 200>"$lock"
+ if ! flock -n 200 &> "/dev/null"; then
+ log "[$(to_upper "$listtype")] A task is already running."
return 2
fi
- local NEW_VER=$(curl -sL ${GITHUB_TOKEN:+-H "Authorization: Bearer $GITHUB_TOKEN"} "https://api.github.com/repos/$REPO_NAME/releases/latest" | jsonfilter -e "@.tag_name")
- if [ -z "$NEW_VER" ]; then
- log "[$(to_upper "$LIST_FILE")] Failed to get the latest version, please retry later."
-
- return 1
+ local github_header_file=""
+ if [ -n "$github_token" ]; then
+ github_header_file="$RUN_DIR/.gh_header_${listtype}"
+ ( umask 077; printf 'Authorization: Bearer %s\n' "$github_token" > "$github_header_file" )
+ trap "[ -n \"$github_header_file\" ] && rm -f \"$github_header_file\"" EXIT INT TERM
fi
- local OLD_VER=$(cat "$RESOURCES_DIR/$LIST_FILE.ver" 2>/dev/null || echo "NOT FOUND")
- if [ "$OLD_VER" = "$NEW_VER" ]; then
- log "[$(to_upper "$LIST_FILE")] Current version: $NEW_VER."
- log "[$(to_upper "$LIST_FILE")] You're already at the latest version."
+ local list_info="$($wget ${github_header_file:+--header-file=$github_header_file} -O- "https://api.github.com/repos/$listrepo/commits?sha=$listref&path=$listname&per_page=1")"
+ local wget_exit=$?
+ [ -n "$github_header_file" ] && rm -f "$github_header_file"
+ trap - EXIT INT TERM
+
+ if [ $wget_exit -ne 0 ]; then
+ log "[$(to_upper "$listtype")] Failed to fetch version info (wget exit $wget_exit)."
+ return 1
+ fi
+ local list_sha="$(echo -e "$list_info" | jsonfilter -qe "@[0].sha")"
+ local list_date="$(echo -e "$list_info" | jsonfilter -qe "@[0].commit.committer.date" | cut -d 'T' -f1)"
+ if [ -z "$list_sha" ]; then
+ log "[$(to_upper "$listtype")] Failed to get the latest version, please retry later."
+ return 1
+ fi
+ local list_ver="${list_date:+$list_date }$list_sha"
+
+ local local_list_ver="$(cat "$RESOURCES_DIR/$listtype.ver" 2>"/dev/null" || echo "NOT_FOUND")"
+ local local_list_sha="${local_list_ver##* }"
+ local local_list_disp="${local_list_ver%% *}"
+ if [ "$local_list_sha" = "$list_sha" ]; then
+ [ "$local_list_ver" = "$local_list_sha" ] && [ -n "$list_date" ] && \
+ echo -e "$list_ver" > "$RESOURCES_DIR/$listtype.ver"
+ log "[$(to_upper "$listtype")] Current version: ${list_ver%% *}."
+ log "[$(to_upper "$listtype")] You're already at the latest version."
return 3
else
- log "[$(to_upper "$LIST_FILE")] Local version: $OLD_VER, latest version: $NEW_VER."
+ log "[$(to_upper "$listtype")] Local version: $local_list_disp, latest version: ${list_ver%% *}."
fi
- if ! curl -sL -o "$RUN_DIR/$REPO_FILE" "https://cdn.jsdelivr.net/gh/$REPO_NAME@$REPO_BRANCH/$REPO_FILE" || [ ! -s "$RUN_DIR/$REPO_FILE" ]; then
- rm -f "$RUN_DIR/$REPO_FILE"
- log "[$(to_upper "$LIST_FILE")] Update failed."
-
+ if ! $wget "https://fastly.jsdelivr.net/gh/$listrepo@$list_sha/$listname" -O "$RUN_DIR/$listname" || [ ! -s "$RUN_DIR/$listname" ]; then
+ rm -f "$RUN_DIR/$listname"
+ log "[$(to_upper "$listtype")] Download failed."
return 1
fi
- mv -f "$RUN_DIR/$REPO_FILE" "$RESOURCES_DIR/$LIST_FILE.${REPO_FILE##*.}"
- echo -e "$NEW_VER" > "$RESOURCES_DIR/$LIST_FILE.ver"
- log "[$(to_upper "$LIST_FILE")] Successfully updated."
+ if mv -f "$RUN_DIR/$listname" "$RESOURCES_DIR/$listtype.${listname##*.}"; then
+ echo -e "$list_ver" > "$RESOURCES_DIR/$listtype.ver"
+ log "[$(to_upper "$listtype")] Successfully updated."
+ else
+ rm -f "$RUN_DIR/$listname"
+ log "[$(to_upper "$listtype")] Failed to install update (mv failed)."
+ return 1
+ fi
return 0
}
case "$1" in
"china_ip4")
- check_list_update "$1" "Loyalsoldier/surge-rules" "release" "cncidr.txt" && \
- sed -i "/IP-CIDR6,/d; s/IP-CIDR,//g" "$RESOURCES_DIR/china_ip4.txt"
+ check_list_update "$1" "1715173329/IPCIDR-CHINA" "master" "ipv4.txt"
;;
"china_ip6")
- check_list_update "$1" "Loyalsoldier/surge-rules" "release" "cncidr.txt" && \
- sed -i "/IP-CIDR,/d; s/IP-CIDR6,//g" "$RESOURCES_DIR/china_ip6.txt"
+ check_list_update "$1" "1715173329/IPCIDR-CHINA" "master" "ipv6.txt"
;;
"gfw_list")
- check_list_update "$1" "Loyalsoldier/surge-rules" "release" "gfw.txt" && \
- sed -i "s/^\.//g" "$RESOURCES_DIR/gfw_list.txt"
+ check_list_update "$1" "Loyalsoldier/v2ray-rules-dat" "release" "gfw.txt"
;;
"china_list")
- check_list_update "$1" "Loyalsoldier/surge-rules" "release" "direct.txt" && \
- sed -i "s/^\.//g" "$RESOURCES_DIR/china_list.txt"
+ check_list_update "$1" "Loyalsoldier/v2ray-rules-dat" "release" "direct-list.txt" && \
+ sed -i -e "s/full://g" -e "/:/d" "$RESOURCES_DIR/china_list.txt"
;;
*)
echo -e "Usage: $0 "
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_rulesets.sh b/luci-app-homeproxy/root/etc/homeproxy/scripts/update_rulesets.sh
deleted file mode 100644
index efba96f51..000000000
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_rulesets.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: GPL-2.0-only
-#
-# Copyright (C) 2025 ImmortalWrt.org
-
-CACHE_PATH="$(uci -q get homeproxy.cache.path)"
-[ -n "$CACHE_PATH" ] || CACHE_PATH="/etc/homeproxy/cache.db"
-
-rm -f "$CACHE_PATH"
-/etc/init.d/homeproxy restart
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc
index e824c1e03..4fcdee32e 100755
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc
@@ -8,18 +8,18 @@
'use strict';
import { md5 } from 'digest';
-import { open, readfile } from 'fs';
+import { open } from 'fs';
import { connect } from 'ubus';
import { cursor } from 'uci';
-import { urldecode, urlencode } from 'luci.http';
import { init_action } from 'luci.sys';
import {
- wGETResponse, wGETHeaders, decodeBase64Str, getTime, isEmpty, parseURL,
- validation, HP_DIR, RUN_DIR
+ wGETVerbose, decodeBase64Str, getTime, isEmpty, HP_DIR, RUN_DIR
} from 'homeproxy';
+import { parse_uri } from 'parse_uri';
+
/* UCI config start */
const uci = cursor();
@@ -34,17 +34,11 @@ const allow_insecure = uci.get(uciconfig, ucisubscription, 'allow_insecure') ||
filter_mode = uci.get(uciconfig, ucisubscription, 'filter_nodes') || 'disabled',
filter_keywords = uci.get(uciconfig, ucisubscription, 'filter_keywords') || [],
packet_encoding = uci.get(uciconfig, ucisubscription, 'packet_encoding') || 'xudp',
- all_subscription_urls = uci.get(uciconfig, ucisubscription, 'subscription_url') || [],
- user_agent = uci.get(uciconfig, ucisubscription, 'user_agent'),
- via_proxy = uci.get(uciconfig, ucisubscription, 'update_via_proxy') || '0';
+ subscription_urls = uci.get(uciconfig, ucisubscription, 'subscription_url') || [],
+ user_agent = uci.get(uciconfig, ucisubscription, 'user_agent'),
+ via_proxy = uci.get(uciconfig, ucisubscription, 'update_via_proxy') || '0';
-const provider_update_id = trim(readfile(RUN_DIR + '/provider-update-id') || '');
-let subscription_urls = all_subscription_urls;
-if (provider_update_id)
- subscription_urls = filter(all_subscription_urls, (url) =>
- md5(replace(url, /#.*$/, '')) === provider_update_id);
-
-const routing_mode = uci.get(uciconfig, ucimain, 'routing_mode') || 'bypass_mainalnd_china';
+const routing_mode = uci.get(uciconfig, ucimain, 'routing_mode') || 'bypass_mainland_china';
let main_node, main_udp_node;
if (routing_mode !== 'custom') {
main_node = uci.get(uciconfig, ucimain, 'main_node') || 'nil';
@@ -59,8 +53,14 @@ function filter_check(name) {
let ret = false;
for (let i in filter_keywords) {
- const patten = regexp(i);
- if (match(name, patten))
+ let patten;
+ try {
+ patten = regexp(i);
+ } catch(e) {
+ log(sprintf('Skipping invalid filter keyword regex: %s.', i));
+ continue;
+ }
+ if (patten && match(name, patten))
ret = true;
}
if (filter_mode === 'whitelist')
@@ -76,6 +76,8 @@ const node_cache = {},
const ubus = connect();
const sing_features = ubus.call('luci.homeproxy', 'singbox_get_features', {}) || {};
+if (isEmpty(sing_features))
+ log('Warning: Failed to query sing-box features via ubus, assuming defaults.');
/* Common var end */
/* Log */
@@ -86,1334 +88,8 @@ function log(...args) {
logfile.close();
}
-function has_value(value) {
- return value !== null && value !== '' && value !== 'nil';
-}
-
-function to_string(value) {
- return has_value(value) ? sprintf('%s', value) : null;
-}
-
-function bool_to_uci(value) {
- if (value === true)
- return '1';
- if (value === false)
- return '0';
- return null;
-}
-
-function normalize_list(value) {
- if (!has_value(value))
- return null;
- if (type(value) === 'array')
- return value;
- return [to_string(value)];
-}
-
-function normalize_alpn(value) {
- if (!has_value(value))
- return null;
- if (type(value) === 'array')
- return value;
- if (type(value) === 'string') {
- let items = map(split(value, ','), (v) => trim(v));
- items = filter(items, (v) => length(v));
- return length(items) ? items : null;
- }
- return [to_string(value)];
-}
-
-function normalize_host_list(value) {
- if (!has_value(value))
- return null;
- if (type(value) === 'array')
- return value;
- return split(to_string(value), ',');
-}
-
-function normalize_first(value) {
- if (!has_value(value))
- return null;
- if (type(value) === 'array')
- return length(value) ? value[0] : null;
- return to_string(value);
-}
-
-function normalize_hysteria_hopping_port(mport) {
- if (!has_value(mport))
- return null;
-
- let ports = [];
- for (let p in split(to_string(mport), ',')) {
- p = trim(p);
- if (!p)
- continue;
- if (match(p, /^\d+$/))
- p = p + ':' + p;
- else
- p = replace(p, '-', ':');
- push(ports, p);
- }
-
- return length(ports) ? ports : null;
-}
-
-function normalize_mihomo_ports(ports) {
- if (!has_value(ports))
- return null;
-
- if (type(ports) === 'array')
- return map(ports, (p) => {
- const v = to_string(p);
- if (match(v, /^\d+$/))
- return v + ':' + v;
- return replace(v, '-', ':');
- });
-
- return normalize_hysteria_hopping_port(to_string(ports));
-}
-
-function parse_mihomo_speed(value) {
- if (!has_value(value))
- return null;
-
- const str = to_string(value);
- const match_val = match(str, /[0-9]+(\.[0-9]+)?/);
- if (!match_val)
- return null;
-
- const num_str = type(match_val) === 'array' ? match_val[0] : match_val;
- if (!num_str)
- return null;
-
- const num = int(num_str);
- if (num === null || num != num)
- return null;
-
- return to_string(num);
-}
-
-function get_header_host(headers) {
- if (type(headers) !== 'object')
- return null;
-
- return headers.Host || headers.host || headers['HOST'];
-}
-
-function apply_transport_opts(config, proxy) {
- const network = proxy.network;
- if (!has_value(network) || network === 'tcp')
- return;
-
- let ws_opts = proxy['ws-opts'] || {};
- let grpc_opts = proxy['grpc-opts'] || {};
- let http_opts = proxy['http-opts'] || proxy['h2-opts'] || {};
- let httpupgrade_opts = proxy['http-upgrade-opts'] || {};
-
- switch (network) {
- case 'ws':
- config.transport = 'ws';
- config.ws_path = ws_opts.path ? to_string(ws_opts.path) : null;
- config.ws_host = get_header_host(ws_opts.headers);
- config.websocket_early_data = ws_opts['early-data'] ? to_string(ws_opts['early-data']) : null;
- config.websocket_early_data_header = ws_opts['early-data-header-name'] ?
- to_string(ws_opts['early-data-header-name']) : null;
- break;
- case 'grpc':
- config.transport = 'grpc';
- config.grpc_servicename = to_string(grpc_opts['grpc-service-name'] || grpc_opts['service-name']);
- break;
- case 'http':
- case 'h2':
- config.transport = 'http';
- config.http_path = normalize_first(http_opts.path);
- config.http_host = normalize_host_list(get_header_host(http_opts.headers) || http_opts.host);
- break;
- case 'httpupgrade':
- config.transport = 'httpupgrade';
- config.httpupgrade_host = get_header_host(httpupgrade_opts.headers) || httpupgrade_opts.host;
- config.http_path = normalize_first(httpupgrade_opts.path);
- break;
- }
-}
-
-function parse_mihomo_proxy(proxy) {
- if (type(proxy) !== 'object')
- return null;
-
- let config;
- const tls_sni = proxy.servername || proxy.sni;
- const tls_fingerprint = proxy['client-fingerprint'] || proxy.fingerprint;
- const tls_insecure = (proxy['skip-cert-verify'] === true || proxy.insecure === '1' || proxy.allowInsecure === true || proxy.allowInsecure === '1') ? '1'
- : (proxy['skip-cert-verify'] === false || proxy.insecure === '0' || proxy.allowInsecure === false || proxy.allowInsecure === '0') ? '0'
- : null;
-
- switch (proxy.type) {
- case 'anytls': {
- let anytls_fp = (proxy['client-fingerprint'] !== null && proxy['client-fingerprint'] !== undefined) ?
- proxy['client-fingerprint'] : proxy.fingerprint;
- anytls_fp = to_string(anytls_fp);
- if (anytls_fp === 'none' || anytls_fp === 'disable' || anytls_fp === 'disabled')
- anytls_fp = null;
- else if (!has_value(anytls_fp))
- anytls_fp = 'chrome';
- config = {
- label: proxy.name,
- type: 'anytls',
- address: proxy.server,
- port: to_string(proxy.port),
- password: proxy.password,
- tls: '1',
- tls_sni: tls_sni || proxy.peer,
- tls_alpn: normalize_alpn(proxy.alpn),
- tls_insecure,
- tls_utls: sing_features.with_utls ? anytls_fp : null,
- anytls_idle_session_check_interval: to_string(proxy['idle-session-check-interval']),
- anytls_idle_session_timeout: to_string(proxy['idle-session-timeout']),
- anytls_min_idle_session: to_string(proxy['min-idle-session']),
- tcp_fast_open: (proxy.tfo === true) ? '1' : null
- };
- break;
- }
- case 'vmess':
- config = {
- label: proxy.name,
- type: 'vmess',
- address: proxy.server,
- port: to_string(proxy.port),
- uuid: proxy.uuid,
- vmess_alterid: has_value(proxy.alterId) ? to_string(proxy.alterId) : null,
- vmess_encrypt: proxy.cipher,
- packet_encoding: proxy['packet-encoding'],
- tls: (proxy.tls === true) ? '1' : '0',
- tls_sni,
- tls_alpn: normalize_alpn(proxy.alpn),
- tls_insecure,
- tls_utls: sing_features.with_utls ? tls_fingerprint : null,
- tcp_fast_open: (proxy.tfo === true) ? '1' : null
- };
- apply_transport_opts(config, proxy);
- break;
- case 'hysteria2':
- if (!sing_features.with_quic) {
- log(sprintf('Skipping unsupported %s node: %s.', proxy.type, proxy.name || proxy.server));
- log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
- return null;
- }
- config = {
- label: proxy.name,
- type: 'hysteria2',
- address: proxy.server,
- port: to_string(proxy.port),
- password: proxy.password,
- hysteria_hopping_port: normalize_mihomo_ports(proxy.ports),
- hysteria_down_mbps: parse_mihomo_speed(proxy.down),
- hysteria_up_mbps: parse_mihomo_speed(proxy.up),
- hysteria_obfs_type: proxy.obfs,
- hysteria_obfs_password: proxy['obfs-password'],
- tls: '1',
- tls_sni,
- tls_alpn: normalize_alpn(proxy.alpn),
- tls_insecure,
- tcp_fast_open: (proxy.tfo === true) ? '1' : null
- };
- break;
- case 'hysteria':
- if (!sing_features.with_quic) {
- log(sprintf('Skipping unsupported %s node: %s.', proxy.type, proxy.name || proxy.server));
- log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
- return null;
- }
- config = {
- label: proxy.name,
- type: 'hysteria',
- address: proxy.server,
- port: to_string(proxy.port),
- hysteria_hopping_port: normalize_mihomo_ports(proxy.ports),
- hysteria_protocol: proxy.protocol,
- hysteria_auth_type: proxy['auth-str'] ? 'string' : (proxy.auth ? 'base64' : null),
- hysteria_auth_payload: proxy['auth-str'] || proxy.auth,
- hysteria_obfs_password: proxy.obfs,
- hysteria_down_mbps: parse_mihomo_speed(proxy.down),
- hysteria_up_mbps: parse_mihomo_speed(proxy.up),
- tls: '1',
- tls_sni,
- tls_alpn: normalize_alpn(proxy.alpn),
- tls_insecure,
- tcp_fast_open: (proxy.tfo === true) ? '1' : null
- };
- break;
- case 'vless':
- config = {
- label: proxy.name,
- type: 'vless',
- address: proxy.server,
- port: to_string(proxy.port),
- uuid: proxy.uuid,
- vless_flow: proxy.flow,
- packet_encoding: proxy['packet-encoding'],
- tls: (proxy.tls === true || proxy['reality-opts']) ? '1' : '0',
- tls_sni,
- tls_alpn: normalize_alpn(proxy.alpn),
- tls_insecure,
- tls_utls: sing_features.with_utls ? tls_fingerprint : null,
- tls_reality: proxy['reality-opts'] ? '1' : '0',
- tls_reality_public_key: proxy['reality-opts'] ? proxy['reality-opts']['public-key'] : null,
- tls_reality_short_id: proxy['reality-opts'] ? proxy['reality-opts']['short-id'] : null,
- tcp_fast_open: (proxy.tfo === true) ? '1' : null
- };
- apply_transport_opts(config, proxy);
- break;
- case 'trojan':
- config = {
- label: proxy.name,
- type: 'trojan',
- address: proxy.server,
- port: to_string(proxy.port),
- password: proxy.password,
- tls: (proxy.tls === false) ? '0' : '1',
- tls_sni,
- tls_alpn: normalize_alpn(proxy.alpn),
- tls_insecure,
- tls_utls: sing_features.with_utls ? tls_fingerprint : null,
- tcp_fast_open: (proxy.tfo === true) ? '1' : null
- };
- apply_transport_opts(config, proxy);
- break;
- case 'ss': {
- let ss_plugin = proxy.plugin;
- if (ss_plugin === 'simple-obfs')
- ss_plugin = 'obfs-local';
- config = {
- label: proxy.name,
- type: 'shadowsocks',
- address: proxy.server,
- port: to_string(proxy.port),
- shadowsocks_encrypt_method: proxy.cipher,
- password: proxy.password,
- shadowsocks_plugin: ss_plugin,
- shadowsocks_plugin_opts: proxy['plugin-opts'],
- udp_over_tcp: bool_to_uci(proxy['udp-over-tcp']),
- udp_over_tcp_version: to_string(proxy['udp-over-tcp-version']),
- tcp_fast_open: (proxy.tfo === true) ? '1' : null
- };
- break;
- }
- case 'ssr':
- log(sprintf('Skipping unsupported ssr node: %s.', proxy.name || proxy.server));
- return null;
- case 'socks5':
- case 'socks':
- case 'socks4':
- case 'socks4a':
- config = {
- label: proxy.name,
- type: 'socks',
- address: proxy.server,
- port: to_string(proxy.port),
- username: proxy.username,
- password: proxy.password,
- socks_version: (proxy.type === 'socks4a') ? '4a' : ((proxy.type === 'socks4') ? '4' : '5'),
- tls: (proxy.tls === true) ? '1' : '0',
- tls_sni,
- tls_insecure,
- tls_utls: sing_features.with_utls ? tls_fingerprint : null,
- tcp_fast_open: (proxy.tfo === true) ? '1' : null
- };
- break;
- case 'http':
- config = {
- label: proxy.name,
- type: 'http',
- address: proxy.server,
- port: to_string(proxy.port),
- username: proxy.username,
- password: proxy.password,
- tls: (proxy.tls === true) ? '1' : '0',
- tls_sni,
- tls_insecure,
- tls_utls: sing_features.with_utls ? tls_fingerprint : null,
- tcp_fast_open: (proxy.tfo === true) ? '1' : null
- };
- break;
- case 'tuic': {
- if (!sing_features.with_quic) {
- log(sprintf('Skipping unsupported %s node: %s.', proxy.type, proxy.name || proxy.server));
- log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
- return null;
- }
- let tuic_heartbeat = proxy['heartbeat-interval'];
- if (has_value(tuic_heartbeat)) {
- tuic_heartbeat = int(tuic_heartbeat);
- if (tuic_heartbeat >= 1000)
- tuic_heartbeat = int(tuic_heartbeat / 1000);
- }
- config = {
- label: proxy.name,
- type: 'tuic',
- address: proxy.server,
- port: to_string(proxy.port),
- uuid: proxy.uuid,
- password: proxy.password || proxy.token,
- tuic_congestion_control: proxy['congestion-controller'],
- tuic_udp_relay_mode: proxy['udp-relay-mode'],
- tuic_udp_over_stream: bool_to_uci(proxy['udp-over-stream']),
- tuic_enable_zero_rtt: bool_to_uci(proxy['zero-rtt-handshake']),
- tuic_heartbeat: has_value(tuic_heartbeat) ? to_string(tuic_heartbeat) : null,
- tls: '1',
- tls_sni: proxy['disable-sni'] ? null : tls_sni,
- tls_alpn: normalize_alpn(proxy.alpn),
- tls_insecure,
- tcp_fast_open: (proxy.tfo === true) ? '1' : null
- };
- break;
- }
- case 'ssh':
- config = {
- label: proxy.name,
- type: 'ssh',
- address: proxy.server,
- port: to_string(proxy.port),
- username: proxy.username,
- password: proxy.password,
- ssh_client_version: proxy['client-version'],
- ssh_host_key: normalize_list(proxy['host-key']),
- ssh_host_key_algo: normalize_list(proxy['host-key-algorithms']),
- ssh_priv_key: normalize_list(proxy['private-key']),
- ssh_priv_key_pp: proxy['private-key-passphrase'],
- tcp_fast_open: (proxy.tfo === true) ? '1' : null
- };
- break;
- case 'wireguard': {
- let wg_addresses = [];
- if (has_value(proxy.ip))
- push(wg_addresses, to_string(proxy.ip));
- if (has_value(proxy.ipv6))
- push(wg_addresses, to_string(proxy.ipv6));
- config = {
- label: proxy.name,
- type: 'wireguard',
- address: proxy.server,
- port: to_string(proxy.port),
- wireguard_local_address: length(wg_addresses) ? wg_addresses : null,
- wireguard_private_key: proxy['private-key'],
- wireguard_peer_public_key: proxy['public-key'],
- wireguard_pre_shared_key: proxy['pre-shared-key'],
- wireguard_reserved: normalize_list(proxy.reserved),
- wireguard_mtu: to_string(proxy.mtu),
- wireguard_persistent_keepalive_interval: to_string(proxy['persistent-keepalive'] || proxy['persistent-keepalive-interval'] || proxy.keepalive)
- };
- break;
- }
- default:
- return null;
- }
-
- return config;
-}
-
-function parse_subscription_userinfo(headers) {
- let header_value = null;
- for (let line in split(headers || '', '\n')) {
- const matched = match(line, /^\s*subscription-userinfo:\s*(.*)$/i);
- if (matched)
- header_value = trim(matched[1]);
- }
-
- if (isEmpty(header_value))
- return null;
-
- let info = {};
- for (let item in split(header_value, ';')) {
- const matched = match(trim(item), /^([a-z]+)\s*=\s*([0-9]+)$/i);
- if (!matched)
- continue;
-
- const value = int(matched[2]);
- if (value < 0)
- continue;
-
- if (match(matched[1], /^upload$/i))
- info.upload = value;
- else if (match(matched[1], /^download$/i))
- info.download = value;
- else if (match(matched[1], /^total$/i))
- info.total = value;
- else if (match(matched[1], /^expire$/i))
- info.expire = value;
- }
-
- return length(info) ? info : null;
-}
-
-function subscription_info_option(url) {
- url = replace(url || '', /#.*$/, '');
- return 'subinfo_' + substr(md5(url), 0, 16);
-}
-
-function subscription_display_name(url) {
- const names = normalize_list(uci.get(uciconfig, ucisubscription, 'subscription_name')) || [];
- let index = 0;
- for (let configured_url in all_subscription_urls) {
- if (replace(configured_url, /#.*$/, '') === replace(url, /#.*$/, '')) {
- const name = trim(names[index] || '');
- return name || substr(md5(replace(url, /#.*$/, '')), 0, 8);
- }
- index++;
- }
- return substr(md5(replace(url, /#.*$/, '')), 0, 8);
-}
-
-function previous_subscription_info(info_option) {
- const value = uci.get(uciconfig, ucisubscription, info_option);
- if (isEmpty(value))
- return null;
-
- try {
- const info = json(value);
- if (type(info) === 'object' && (('upload' in info) || ('download' in info) ||
- ('total' in info) || ('expire' in info)))
- return info;
- } catch (e) {}
-
- return null;
-}
-
-function merge_subscription_info(current, previous) {
- if (!current)
- return previous || null;
- if (!previous)
- return current;
-
- for (let field in ['upload', 'download', 'total', 'expire'])
- if (!(field in current) && (field in previous))
- current[field] = previous[field];
-
- return current;
-}
-
-function cleanup_subscription_info() {
- let active_options = {};
- for (let url in all_subscription_urls)
- active_options[subscription_info_option(url)] = true;
-
- const subscription = uci.get_all(uciconfig, ucisubscription) || {};
- for (let option in keys(subscription))
- if (match(option, /^subinfo_/) && !active_options[option])
- uci.delete(uciconfig, ucisubscription, option);
-}
-
-function apply_sing_box_tls(config, outbound) {
- const tls = outbound.tls;
- if (type(tls) !== 'object')
- return;
-
- config.tls = (tls.enabled === false) ? '0' : '1';
- config.tls_sni = tls.server_name;
- config.tls_insecure = bool_to_uci(tls.insecure);
- config.tls_alpn = normalize_alpn(tls.alpn);
- config.tls_utls = sing_features.with_utls ? tls.utls?.fingerprint : null;
- config.tls_reality = tls.reality ? '1' : '0';
- config.tls_reality_public_key = tls.reality?.public_key;
- config.tls_reality_short_id = tls.reality?.short_id;
-}
-
-function apply_sing_box_transport(config, outbound) {
- const transport = outbound.transport;
- if (type(transport) !== 'object')
- return;
-
- config.transport = transport.type;
- switch (transport.type) {
- case 'ws':
- config.ws_path = transport.path;
- config.ws_host = get_header_host(transport.headers);
- config.websocket_early_data = to_string(transport.max_early_data);
- config.websocket_early_data_header = transport.early_data_header_name;
- break;
- case 'grpc':
- config.grpc_servicename = transport.service_name;
- break;
- case 'http':
- config.http_path = normalize_first(transport.path);
- config.http_host = normalize_host_list(get_header_host(transport.headers) || transport.host);
- config.http_method = transport.method;
- break;
- case 'httpupgrade':
- config.httpupgrade_host = get_header_host(transport.headers) || transport.host;
- config.http_path = normalize_first(transport.path);
- break;
- }
-}
-
-function parse_sing_box_outbound(outbound) {
- if (type(outbound) !== 'object')
- return null;
-
- let config;
- const port = to_string(outbound.server_port || outbound.port);
-
- switch (outbound.type) {
- case 'anytls':
- config = {
- label: outbound.tag,
- type: 'anytls',
- address: outbound.server,
- port,
- password: outbound.password,
- tls: '1'
- };
- break;
- case 'vmess':
- config = {
- label: outbound.tag,
- type: 'vmess',
- address: outbound.server,
- port,
- uuid: outbound.uuid,
- vmess_alterid: to_string(outbound.alter_id),
- vmess_encrypt: outbound.security,
- packet_encoding: outbound.packet_encoding
- };
- break;
- case 'vless':
- config = {
- label: outbound.tag,
- type: 'vless',
- address: outbound.server,
- port,
- uuid: outbound.uuid,
- vless_flow: outbound.flow,
- packet_encoding: outbound.packet_encoding
- };
- break;
- case 'trojan':
- config = {
- label: outbound.tag,
- type: 'trojan',
- address: outbound.server,
- port,
- password: outbound.password,
- tls: '1'
- };
- break;
- case 'shadowsocks':
- config = {
- label: outbound.tag,
- type: 'shadowsocks',
- address: outbound.server,
- port,
- shadowsocks_encrypt_method: outbound.method,
- password: outbound.password,
- shadowsocks_plugin: outbound.plugin,
- shadowsocks_plugin_opts: outbound.plugin_opts
- };
- break;
- case 'hysteria':
- config = {
- label: outbound.tag,
- type: 'hysteria',
- address: outbound.server,
- port,
- hysteria_hopping_port: outbound.server_ports,
- hysteria_auth_type: outbound.auth_str ? 'string' : (outbound.auth ? 'base64' : null),
- hysteria_auth_payload: outbound.auth_str || outbound.auth,
- hysteria_obfs_password: outbound.obfs,
- hysteria_down_mbps: to_string(outbound.down_mbps),
- hysteria_up_mbps: to_string(outbound.up_mbps),
- tls: '1'
- };
- break;
- case 'hysteria2':
- config = {
- label: outbound.tag,
- type: 'hysteria2',
- address: outbound.server,
- port,
- password: outbound.password,
- hysteria_hopping_port: outbound.server_ports,
- hysteria_down_mbps: to_string(outbound.down_mbps),
- hysteria_up_mbps: to_string(outbound.up_mbps),
- hysteria_obfs_type: outbound.obfs?.type,
- hysteria_obfs_password: outbound.obfs?.password,
- tls: '1'
- };
- break;
- case 'tuic':
- config = {
- label: outbound.tag,
- type: 'tuic',
- address: outbound.server,
- port,
- uuid: outbound.uuid,
- password: outbound.password,
- tuic_congestion_control: outbound.congestion_control,
- tuic_udp_relay_mode: outbound.udp_relay_mode,
- tuic_udp_over_stream: bool_to_uci(outbound.udp_over_stream),
- tuic_enable_zero_rtt: bool_to_uci(outbound.zero_rtt_handshake),
- tuic_heartbeat: to_string(outbound.heartbeat),
- tls: '1'
- };
- break;
- case 'socks':
- config = {
- label: outbound.tag,
- type: 'socks',
- address: outbound.server,
- port,
- username: outbound.username,
- password: outbound.password,
- socks_version: outbound.version || '5'
- };
- break;
- case 'http':
- config = {
- label: outbound.tag,
- type: 'http',
- address: outbound.server,
- port,
- username: outbound.username,
- password: outbound.password
- };
- break;
- case 'ssh':
- config = {
- label: outbound.tag,
- type: 'ssh',
- address: outbound.server,
- port,
- username: outbound.user || outbound.username,
- password: outbound.password,
- ssh_client_version: outbound.client_version,
- ssh_host_key: normalize_list(outbound.host_key),
- ssh_host_key_algo: normalize_list(outbound.host_key_algorithms),
- ssh_priv_key: normalize_list(outbound.private_key),
- ssh_priv_key_pp: outbound.private_key_passphrase
- };
- break;
- case 'wireguard':
- config = {
- label: outbound.tag,
- type: 'wireguard',
- address: outbound.server,
- port,
- wireguard_local_address: normalize_list(outbound.local_address || outbound.address),
- wireguard_private_key: outbound.private_key,
- wireguard_peer_public_key: outbound.peer_public_key,
- wireguard_pre_shared_key: outbound.pre_shared_key,
- wireguard_reserved: normalize_list(outbound.reserved),
- wireguard_mtu: to_string(outbound.mtu),
- wireguard_persistent_keepalive_interval: to_string(outbound.persistent_keepalive_interval)
- };
- break;
- default:
- return null;
- }
-
- if (!isEmpty(config)) {
- apply_sing_box_tls(config, outbound);
- apply_sing_box_transport(config, outbound);
- config.tcp_fast_open = bool_to_uci(outbound.tcp_fast_open);
- config.tcp_multi_path = bool_to_uci(outbound.tcp_multi_path);
- config.udp_fragment = bool_to_uci(outbound.udp_fragment);
- }
-
- return config;
-}
-
-function parse_uri(uri) {
- let config, url, params;
-
- if (type(uri) === 'object') {
- if (uri.nodetype === 'mihomo') {
- return parse_mihomo_proxy(uri);
- }
- if (uri.nodetype === 'sing-box') {
- return parse_sing_box_outbound(uri);
- }
- if (uri.nodetype === 'sip008') {
- /* https://shadowsocks.org/guide/sip008.html */
- config = {
- label: uri.remarks,
- type: 'shadowsocks',
- address: uri.server,
- port: uri.server_port,
- shadowsocks_encrypt_method: uri.method,
- password: uri.password,
- shadowsocks_plugin: uri.plugin,
- shadowsocks_plugin_opts: uri.plugin_opts
- };
- }
- } else if (type(uri) === 'string') {
- uri = split(trim(uri), '://');
-
- switch (uri[0]) {
- case 'anytls':
- /* https://github.com/anytls/anytls-go/blob/v0.0.8/docs/uri_scheme.md */
- url = parseURL('http://' + uri[1]) || {};
- params = url.searchParams || {};
- let anytls_fp = params.fp || params.fingerprint;
- if (anytls_fp === 'none' || anytls_fp === 'disable' || anytls_fp === 'disabled')
- anytls_fp = null;
- else if (!has_value(anytls_fp))
- anytls_fp = 'chrome';
-
- config = {
- label: url.hash ? urldecode(url.hash) : null,
- type: 'anytls',
- address: url.hostname,
- port: url.port,
- password: urldecode(url.username),
- tls: '1',
- tls_insecure: (params.insecure === '1' || params.allowInsecure === '1') ? '1' : '0',
- tls_sni: params.sni,
- tls_utls: sing_features.with_utls ? anytls_fp : null
- };
-
- break;
- case 'http':
- case 'https':
- url = parseURL('http://' + uri[1]) || {};
-
- config = {
- label: url.hash ? urldecode(url.hash) : null,
- type: 'http',
- address: url.hostname,
- port: url.port,
- username: url.username ? urldecode(url.username) : null,
- password: url.password ? urldecode(url.password) : null,
- tls: (uri[0] === 'https') ? '1' : '0'
- };
-
- break;
- case 'hysteria':
- /* https://github.com/HyNetwork/hysteria/wiki/URI-Scheme */
- url = parseURL('http://' + uri[1]) || {};
- params = url.searchParams || {};
-
- if (!sing_features.with_quic || (params.protocol && params.protocol !== 'udp')) {
- log(sprintf('Skipping unsupported %s node: %s.', uri[0], urldecode(url.hash) || url.hostname));
- if (!sing_features.with_quic)
- log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
-
- return null;
- }
-
- config = {
- label: url.hash ? urldecode(url.hash) : null,
- type: 'hysteria',
- address: url.hostname,
- port: url.port,
- hysteria_hopping_port: normalize_hysteria_hopping_port(params.mport),
- hysteria_protocol: params.protocol || 'udp',
- hysteria_auth_type: params.auth ? 'string' : null,
- hysteria_auth_payload: params.auth,
- hysteria_obfs_password: params.obfsParam,
- hysteria_down_mbps: params.downmbps,
- hysteria_up_mbps: params.upmbps,
- tls: '1',
- tls_insecure: (params.insecure === '1' || params.allowInsecure === '1') ? '1' : '0',
- tls_sni: params.peer,
- tls_alpn: params.alpn
- };
-
- break;
- case 'hysteria2':
- case 'hy2':
- /* https://v2.hysteria.network/docs/developers/URI-Scheme/ */
- url = parseURL('http://' + uri[1]) || {};
- params = url.searchParams || {};
-
- if (!sing_features.with_quic) {
- log(sprintf('Skipping unsupported %s node: %s.', uri[0], urldecode(url.hash) || url.hostname));
- log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
- return null;
- }
-
- config = {
- label: url.hash ? urldecode(url.hash) : null,
- type: 'hysteria2',
- address: url.hostname,
- port: url.port,
- password: url.username ? (
- urldecode(url.username + (url.password ? (':' + url.password) : ''))
- ) : null,
- hysteria_hopping_port: normalize_hysteria_hopping_port(params.mport),
- hysteria_obfs_type: params.obfs,
- hysteria_obfs_password: params['obfs-password'],
- tls: '1',
- tls_insecure: (params.insecure === '1' || params.allowInsecure === '1') ? '1' : '0',
- tls_sni: params.sni
- };
-
- break;
- case 'socks':
- case 'socks4':
- case 'socks4a':
- case 'socsk5':
- case 'socks5h':
- url = parseURL('http://' + uri[1]) || {};
-
- config = {
- label: url.hash ? urldecode(url.hash) : null,
- type: 'socks',
- address: url.hostname,
- port: url.port,
- username: url.username ? urldecode(url.username) : null,
- password: url.password ? urldecode(url.password) : null,
- socks_version: (match(uri[0], /4/)) ? '4' : '5'
- };
-
- break;
- case 'ss':
- /* "Lovely" Shadowrocket format */
- const ss_suri = split(uri[1], '#');
- let ss_slabel = '';
- if (length(ss_suri) <= 2) {
- if (length(ss_suri) === 2)
- ss_slabel = '#' + urlencode(ss_suri[1]);
- if (decodeBase64Str(ss_suri[0]))
- uri[1] = decodeBase64Str(ss_suri[0]) + ss_slabel;
- }
-
- /* Legacy format is not supported, it should be never appeared in modern subscriptions */
- /* https://github.com/shadowsocks/shadowsocks-org/commit/78ca46cd6859a4e9475953ed34a2d301454f579e */
-
- /* SIP002 format https://shadowsocks.org/guide/sip002.html */
- url = parseURL('http://' + uri[1]) || {};
-
- let ss_userinfo = {};
- if (url.username && url.password)
- /* User info encoded with URIComponent */
- ss_userinfo = [url.username, urldecode(url.password)];
- else if (url.username)
- /* User info encoded with base64 */
- ss_userinfo = split(decodeBase64Str(urldecode(url.username)), ':', 2);
-
- let ss_plugin, ss_plugin_opts;
- if (url.search && url.searchParams.plugin) {
- const ss_plugin_info = split(url.searchParams.plugin, ';', 2);
- ss_plugin = ss_plugin_info[0];
- if (ss_plugin === 'simple-obfs')
- /* Fix non-standard plugin name */
- ss_plugin = 'obfs-local';
- ss_plugin_opts = ss_plugin_info[1];
- }
-
- config = {
- label: url.hash ? urldecode(url.hash) : null,
- type: 'shadowsocks',
- address: url.hostname,
- port: url.port,
- shadowsocks_encrypt_method: ss_userinfo[0],
- password: ss_userinfo[1],
- shadowsocks_plugin: ss_plugin,
- shadowsocks_plugin_opts: ss_plugin_opts
- };
-
- break;
- case 'trojan':
- /* https://p4gefau1t.github.io/trojan-go/developer/url/ */
- url = parseURL('http://' + uri[1]) || {};
- params = url.searchParams || {};
-
- config = {
- label: url.hash ? urldecode(url.hash) : null,
- type: 'trojan',
- address: url.hostname,
- port: url.port,
- password: urldecode(url.username),
- transport: (params.type !== 'tcp') ? params.type : null,
- tls: '1',
- tls_insecure: (params.insecure === '1' || params.allowInsecure === '1') ? '1' : '0',
- tls_sni: params.sni
- };
- switch(params.type) {
- case 'grpc':
- config.grpc_servicename = params.serviceName;
- break;
- case 'ws':
- config.ws_host = params.host ? urldecode(params.host) : null;
- config.ws_path = params.path ? urldecode(params.path) : null;
- if (config.ws_path && match(config.ws_path, /\?ed=/)) {
- config.websocket_early_data_header = 'Sec-WebSocket-Protocol';
- config.websocket_early_data = split(config.ws_path, '?ed=')[1];
- config.ws_path = split(config.ws_path, '?ed=')[0];
- }
- break;
- }
-
- break;
- case 'tuic':
- /* https://github.com/daeuniverse/dae/discussions/182 */
- url = parseURL('http://' + uri[1]) || {};
- params = url.searchParams || {};
-
- if (!sing_features.with_quic) {
- log(sprintf('Skipping unsupported %s node: %s.', uri[0], urldecode(url.hash) || url.hostname));
- log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
-
- return null;
- }
-
- config = {
- label: url.hash ? urldecode(url.hash) : null,
- type: 'tuic',
- address: url.hostname,
- port: url.port,
- uuid: url.username,
- password: url.password ? urldecode(url.password) : null,
- tuic_congestion_control: params.congestion_control,
- tuic_udp_relay_mode: params.udp_relay_mode,
- tls: '1',
- tls_insecure: (params.insecure === '1' || params.allowInsecure === '1') ? '1' : '0',
- tls_sni: params.sni,
- tls_alpn: params.alpn ? split(urldecode(params.alpn), ',') : null,
- };
-
- break;
- case 'vless':
- /* https://github.com/XTLS/Xray-core/discussions/716 */
- url = parseURL('http://' + uri[1]) || {};
- params = url.searchParams || {};
-
- /* Unsupported protocol */
- if (params.type === 'kcp') {
- log(sprintf('Skipping sunsupported %s node: %s.', uri[0], urldecode(url.hash) || url.hostname));
- return null;
- } else if (params.type === 'quic' && ((params.quicSecurity && params.quicSecurity !== 'none') || !sing_features.with_quic)) {
- log(sprintf('Skipping sunsupported %s node: %s.', uri[0], urldecode(url.hash) || url.hostname));
- if (!sing_features.with_quic)
- log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
-
- return null;
- }
-
- config = {
- label: url.hash ? urldecode(url.hash) : null,
- type: 'vless',
- address: url.hostname,
- port: url.port,
- uuid: url.username,
- transport: (params.type !== 'tcp') ? params.type : null,
- tls: (params.security in ['tls', 'xtls', 'reality']) ? '1' : '0',
- tls_insecure: (params.insecure === '1' || params.allowInsecure === '1') ? '1' : '0',
- tls_sni: params.sni,
- tls_alpn: params.alpn ? split(urldecode(params.alpn), ',') : null,
- tls_reality: (params.security === 'reality') ? '1' : '0',
- tls_reality_public_key: params.pbk ? urldecode(params.pbk) : null,
- tls_reality_short_id: params.sid,
- tls_utls: sing_features.with_utls ? params.fp : null,
- vless_flow: (params.security in ['tls', 'reality']) ? params.flow : null
- };
- switch(params.type) {
- case 'grpc':
- config.grpc_servicename = params.serviceName;
- break;
- case 'http':
- case 'tcp':
- if (params.type === 'http' || params.headerType === 'http') {
- config.http_host = params.host ? split(urldecode(params.host), ',') : null;
- config.http_path = params.path ? urldecode(params.path) : null;
- }
- break;
- case 'httpupgrade':
- config.httpupgrade_host = params.host ? urldecode(params.host) : null;
- config.http_path = params.path ? urldecode(params.path) : null;
- break;
- case 'ws':
- config.ws_host = params.host ? urldecode(params.host) : null;
- config.ws_path = params.path ? urldecode(params.path) : null;
- if (config.ws_path && match(config.ws_path, /\?ed=/)) {
- config.websocket_early_data_header = 'Sec-WebSocket-Protocol';
- config.websocket_early_data = split(config.ws_path, '?ed=')[1];
- config.ws_path = split(config.ws_path, '?ed=')[0];
- }
- break;
- }
-
- break;
- case 'vmess':
- /* "Lovely" shadowrocket format */
- if (match(uri, /&/)) {
- log(sprintf('Skipping unsupported %s format.', uri[0]));
- return null;
- }
-
- /* https://github.com/2dust/v2rayN/wiki/Description-of-VMess-share-link */
- try {
- uri = json(decodeBase64Str(uri[1])) || {};
- } catch(e) {
- log(sprintf('Skipping unsupported %s format.', uri[0]));
- return null;
- }
-
- if (uri.v != '2') {
- log(sprintf('Skipping unsupported %s format.', uri[0]));
- return null;
- /* Unsupported protocol */
- } else if (uri.net === 'kcp') {
- log(sprintf('Skipping unsupported %s node: %s.', uri[0], uri.ps || uri.add));
- return null;
- } else if (uri.net === 'quic' && ((uri.type && uri.type !== 'none') || uri.path || !sing_features.with_quic)) {
- log(sprintf('Skipping unsupported %s node: %s.', uri[0], uri.ps || uri.add));
- if (!sing_features.with_quic)
- log(sprintf('Please rebuild sing-box with %s support!', 'QUIC'));
-
- return null;
- }
- /*
- * https://www.v2fly.org/config/protocols/vmess.html#vmess-md5-%E8%AE%A4%E8%AF%81%E4%BF%A1%E6%81%AF-%E6%B7%98%E6%B1%B0%E6%9C%BA%E5%88%B6
- * else if (uri.aid && int(uri.aid) !== 0) {
- * log(sprintf('Skipping unsupported %s node: %s.', uri[0], uri.ps || uri.add));
- * return null;
- * }
- */
-
- config = {
- label: uri.ps ? urldecode(uri.ps) : null,
- type: 'vmess',
- address: uri.add,
- port: uri.port,
- uuid: uri.id,
- vmess_alterid: uri.aid,
- vmess_encrypt: uri.scy || 'auto',
- vmess_global_padding: '1',
- transport: (uri.net !== 'tcp') ? uri.net : null,
- tls: (uri.tls === 'tls') ? '1' : '0',
- tls_sni: uri.sni || uri.host,
- tls_alpn: uri.alpn ? split(uri.alpn, ',') : null,
- tls_utls: sing_features.with_utls ? uri.fp : null
- };
- switch (uri.net) {
- case 'grpc':
- config.grpc_servicename = uri.path;
- break;
- case 'h2':
- case 'tcp':
- if (uri.net === 'h2' || uri.type === 'http') {
- config.transport = 'http';
- config.http_host = uri.host ? split(uri.host, ',') : null;
- config.http_path = uri.path;
- }
- break;
- case 'httpupgrade':
- config.httpupgrade_host = uri.host;
- config.http_path = uri.path;
- break;
- case 'ws':
- config.ws_host = uri.host;
- config.ws_path = uri.path;
- if (config.ws_path && match(config.ws_path, /\?ed=/)) {
- config.websocket_early_data_header = 'Sec-WebSocket-Protocol';
- config.websocket_early_data = split(config.ws_path, '?ed=')[1];
- config.ws_path = split(config.ws_path, '?ed=')[0];
- }
- break;
- }
-
- break;
- }
- }
-
- if (!isEmpty(config)) {
- if (config.address)
- config.address = replace(config.address, /\[|\]/g, '');
-
- if (!validation('host', config.address) || !validation('port', config.port)) {
- log(sprintf('Skipping invalid %s node: %s.', config.type, config.label || 'NULL'));
- return null;
- } else if (!config.label)
- config.label = (validation('ip6addr', config.address) ?
- `[${config.address}]` : config.address) + ':' + config.port;
- }
-
- return config;
-}
-
-function split_top_level(str, separator) {
- let items = [], current = '', quote = null, depth = 0;
-
- for (let i = 0; i < length(str); i++) {
- const ch = substr(str, i, 1);
-
- if (quote) {
- current += ch;
- if (ch === quote)
- quote = null;
- continue;
- }
-
- if (ch === '"' || ch === "'") {
- quote = ch;
- current += ch;
- continue;
- }
-
- if (ch === '[' || ch === '{')
- depth++;
- else if (ch === ']' || ch === '}')
- depth--;
-
- if (ch === separator && depth === 0) {
- push(items, trim(current));
- current = '';
- } else {
- current += ch;
- }
- }
-
- if (length(trim(current)))
- push(items, trim(current));
-
- return items;
-}
-
-function strip_yaml_quotes(value) {
- value = trim(value);
- if ((match(value, /^".*"$/) || match(value, /^'.*'$/)) && length(value) >= 2)
- return substr(value, 1, length(value) - 2);
-
- return value;
-}
-
-function parse_yaml_value(value) {
- value = trim(value || '');
- if (value === '' || value === 'null' || value === '~')
- return null;
-
- if (match(value, /^\[.*\]$/)) {
- let arr = [];
- const inner = substr(value, 1, length(value) - 2);
- for (let item in split_top_level(inner, ','))
- push(arr, parse_yaml_value(item));
- return arr;
- }
-
- if (match(value, /^\{.*\}$/))
- return parse_yaml_inline_object(value);
-
- value = strip_yaml_quotes(value);
- if (value === 'true')
- return true;
- if (value === 'false')
- return false;
-
- return value;
-}
-
-function parse_yaml_key_value(line) {
- const m = match(line, /^([^:]+):\s*(.*)$/);
- if (!m)
- return null;
-
- return {
- key: strip_yaml_quotes(trim(m[1])),
- value: m[2]
- };
-}
-
-function parse_yaml_inline_object(text) {
- let obj = {};
- text = trim(text);
- text = substr(text, 1, length(text) - 2);
-
- for (let part in split_top_level(text, ',')) {
- const kv = parse_yaml_key_value(part);
- if (kv)
- obj[kv.key] = parse_yaml_value(kv.value);
- }
-
- return obj;
-}
-
-function yaml_indent(line) {
- const m = match(line, /^(\s*)/);
- return m ? length(m[1]) : 0;
-}
-
-function stack_pop(stack) {
- let next = [];
- for (let i = 0; i < length(stack) - 1; i++)
- push(next, stack[i]);
- return next;
-}
-
-function parse_mihomo_yaml(text) {
- if (isEmpty(text) || type(text) !== 'string')
- return null;
-
- let in_proxies = false, proxies = [], current = null, stack = [];
-
- for (let raw_line in split(text, '\n')) {
- raw_line = replace(raw_line, /\r$/, '');
- let line = trim(raw_line);
-
- if (!line || match(line, /^#/))
- continue;
-
- if (line === 'proxies:' || match(line, /^proxies:\s*$/)) {
- in_proxies = true;
- continue;
- }
- if (!in_proxies)
- continue;
-
- if (yaml_indent(raw_line) === 0 && match(line, /^[A-Za-z0-9_-]+:\s*$/))
- break;
-
- if (match(line, /^-\s*/)) {
- if (current)
- push(proxies, current);
-
- current = {};
- stack = [{ indent: yaml_indent(raw_line), obj: current }];
- line = replace(line, /^-\s*/, '');
-
- if (!line)
- continue;
-
- if (match(line, /^\{.*\}$/)) {
- current = parse_yaml_inline_object(line);
- current.nodetype = 'mihomo';
- stack = [{ indent: yaml_indent(raw_line), obj: current }];
- continue;
- }
- }
-
- if (!current)
- continue;
-
- const kv = parse_yaml_key_value(line);
- if (!kv)
- continue;
-
- const indent = yaml_indent(raw_line);
- while (length(stack) > 1 && indent <= stack[length(stack) - 1].indent)
- stack = stack_pop(stack);
-
- const parent = stack[length(stack) - 1].obj;
- if (trim(kv.value) === '') {
- parent[kv.key] = {};
- push(stack, { indent, obj: parent[kv.key] });
- } else {
- parent[kv.key] = parse_yaml_value(kv.value);
- }
- }
-
- if (current)
- push(proxies, current);
-
- for (let proxy in proxies)
- proxy.nodetype = 'mihomo';
-
- return length(proxies) ? proxies : null;
-}
-
function main() {
- cleanup_subscription_info();
-
- if (via_proxy !== '1' && !provider_update_id) {
+ if (via_proxy !== '1') {
log('Stopping service...');
init_action('homeproxy', 'stop');
}
@@ -1423,61 +99,38 @@ function main() {
const groupHash = md5(url);
node_cache[groupHash] = {};
- const response = wGETResponse(url, user_agent),
- res = response?.body;
- if (isEmpty(res)) {
- log(sprintf('Failed to fetch resources from %s.', url));
+ const fetched = wGETVerbose(url, user_agent);
+ if (isEmpty(fetched.content)) {
+ log(sprintf('Failed to fetch resources from %s: %s', url, fetched.error || 'empty response'));
continue;
}
+ const res = fetched.content;
let nodes;
try {
- const parsed = json(res);
- if (type(parsed?.servers) === 'array') {
- nodes = parsed.servers;
+ nodes = json(res).servers || json(res);
- /* Shadowsocks SIP008 format */
- if (nodes[0].server && nodes[0].method)
- map(nodes, (_, i) => nodes[i].nodetype = 'sip008');
- } else if (type(parsed?.proxies) === 'array') {
- nodes = parsed.proxies;
- map(nodes, (_, i) => nodes[i].nodetype = 'mihomo');
- } else if (type(parsed?.outbounds) === 'array') {
- nodes = parsed.outbounds;
- map(nodes, (_, i) => nodes[i].nodetype = 'sing-box');
- } else if (type(parsed) === 'array') {
- nodes = parsed;
- if (nodes[0]?.server && nodes[0]?.method)
- map(nodes, (_, i) => nodes[i].nodetype = 'sip008');
- else if (nodes[0]?.type && nodes[0]?.server)
- map(nodes, (_, i) => nodes[i].nodetype = 'sing-box');
- } else {
- nodes = [];
- }
+ /* Shadowsocks SIP008 format */
+ if (nodes[0].server && nodes[0].method)
+ map(nodes, (_, i) => nodes[i].nodetype = 'sip008');
} catch(e) {
- nodes = parse_mihomo_yaml(res);
- if (isEmpty(nodes)) {
- nodes = decodeBase64Str(res);
- const decoded_nodes = parse_mihomo_yaml(nodes);
- if (!isEmpty(decoded_nodes))
- nodes = decoded_nodes;
- else
- nodes = nodes ? split(trim(replace(nodes, / /g, '_')), '\n') : [];
- }
+ log(sprintf('JSON parse failed for %s, trying base64: %s', url, e.message));
+ nodes = decodeBase64Str(res);
+ nodes = nodes ? split(trim(nodes), '\n') : [];
}
let count = 0;
for (let node in nodes) {
let config;
if (!isEmpty(node))
- config = parse_uri(node);
+ config = parse_uri(node, sing_features, log);
if (isEmpty(config))
continue;
const label = config.label;
config.label = null;
const confHash = md5(sprintf('%J', config)),
- nameHash = md5(label);
+ nameHash = md5(groupHash + label);
config.label = label;
if (filter_check(config.label))
@@ -1487,7 +140,7 @@ function main() {
else {
if (config.tls === '1' && allow_insecure === '1')
config.tls_insecure = '1';
- if (config.type in ['vless', 'vmess'] && isEmpty(config.packet_encoding))
+ if (config.type in ['vless', 'vmess'])
config.packet_encoding = packet_encoding;
config.grouphash = groupHash;
@@ -1500,53 +153,16 @@ function main() {
}
}
- if (count == 0)
+ if (count === 0)
log(sprintf('No valid node found in %s.', url));
- else {
- const info_option = subscription_info_option(url),
- display_name = subscription_display_name(url);
- const previous_info = previous_subscription_info(info_option);
- let subscription_info = parse_subscription_userinfo(response.headers);
-
- if (!subscription_info || !('total' in subscription_info) || !('expire' in subscription_info)) {
- const fallback_headers = wGETHeaders(url, 'clash.meta');
- const fallback_info = parse_subscription_userinfo(fallback_headers);
- if (fallback_info) {
- if (subscription_info)
- log(sprintf('Supplemented subscription user info for %s with Clash Meta user agent.', display_name));
- else
- log(sprintf('Fetched subscription user info for %s with Clash Meta user agent.', display_name));
- subscription_info = merge_subscription_info(subscription_info, fallback_info);
- }
- }
-
- if (!subscription_info) {
- subscription_info = previous_info || {};
- if (length(subscription_info))
- log(sprintf('Subscription %s did not return user info; keeping the previous values.', display_name));
- else
- log(sprintf('Subscription %s did not return Subscription-Userinfo.', display_name));
- } else {
- if (!('expire' in subscription_info))
- log(sprintf('Subscription %s returned traffic data without an expire value%s.', display_name,
- previous_info && ('expire' in previous_info) ? '; keeping the previous value' : ''));
- if (!('total' in subscription_info))
- log(sprintf('Subscription %s returned user info without a total value%s.', display_name,
- previous_info && ('total' in previous_info) ? '; keeping the previous value' : ''));
- subscription_info = merge_subscription_info(subscription_info, previous_info);
- }
-
- subscription_info.updated_at = getTime();
- uci.set(uciconfig, ucisubscription, info_option, sprintf('%.J', subscription_info));
-
+ else
log(sprintf('Successfully fetched %s nodes of total %s from %s.', count, length(nodes), url));
- }
}
if (isEmpty(node_result)) {
log('Failed to update subscriptions: no valid node found.');
- if (via_proxy !== '1' && !provider_update_id) {
+ if (via_proxy !== '1') {
log('Starting service...');
init_action('homeproxy', 'start');
}
@@ -1560,15 +176,11 @@ function main() {
if (!cfg.grouphash)
return null;
- /* A provider update must not touch nodes from other subscriptions. */
- if (!(cfg.grouphash in node_cache))
+ /* Empty object - failed to fetch nodes, or subscription URL not yet processed */
+ if (!node_cache[cfg.grouphash] || length(node_cache[cfg.grouphash]) === 0)
return null;
- /* Empty object - failed to fetch nodes */
- if (length(node_cache[cfg.grouphash]) === 0)
- return null;
-
- if (!node_cache[cfg.grouphash] || !node_cache[cfg.grouphash][cfg['.name']]) {
+ if (!node_cache[cfg.grouphash][cfg['.name']]) {
uci.delete(uciconfig, cfg['.name']);
removed++;
@@ -1588,7 +200,7 @@ function main() {
if (node.isExisting)
return null;
- const nameHash = md5(node.label);
+ const nameHash = md5(node.grouphash + node.label);
uci.set(uciconfig, nameHash, 'node');
map(keys(node), (v) => uci.set(uciconfig, nameHash, v, node[v]));
@@ -1597,19 +209,25 @@ function main() {
});
uci.commit(uciconfig);
- let need_restart = (via_proxy !== '1') || !!provider_update_id;
+ let need_restart = (via_proxy !== '1');
if (!isEmpty(main_node)) {
const first_server = uci.get_first(uciconfig, ucinode);
if (first_server) {
let main_urltest_nodes;
if (main_node === 'urltest') {
- main_urltest_nodes = filter(uci.get(uciconfig, ucimain, 'main_urltest_nodes'), (v) => {
+ const old_urltest_nodes = uci.get(uciconfig, ucimain, 'main_urltest_nodes') || [];
+ main_urltest_nodes = filter(old_urltest_nodes, (v) => {
if (!uci.get(uciconfig, v)) {
log(sprintf('Node %s is gone, removing from urltest list.', v));
return false;
}
return true;
});
+ if (length(main_urltest_nodes) !== length(old_urltest_nodes)) {
+ uci.set(uciconfig, ucimain, 'main_urltest_nodes', main_urltest_nodes);
+ uci.commit(uciconfig);
+ need_restart = true;
+ }
}
if ((main_node === 'urltest') ? !length(main_urltest_nodes) : !uci.get(uciconfig, main_node)) {
@@ -1623,13 +241,19 @@ function main() {
if (!isEmpty(main_udp_node) && main_udp_node !== 'same') {
let main_udp_urltest_nodes;
if (main_udp_node === 'urltest') {
- main_udp_urltest_nodes = filter(uci.get(uciconfig, ucimain, 'main_udp_urltest_nodes'), (v) => {
+ const old_udp_urltest_nodes = uci.get(uciconfig, ucimain, 'main_udp_urltest_nodes') || [];
+ main_udp_urltest_nodes = filter(old_udp_urltest_nodes, (v) => {
if (!uci.get(uciconfig, v)) {
log(sprintf('Node %s is gone, removing from urltest list.', v));
return false;
}
return true;
});
+ if (length(main_udp_urltest_nodes) !== length(old_udp_urltest_nodes)) {
+ uci.set(uciconfig, ucimain, 'main_udp_urltest_nodes', main_udp_urltest_nodes);
+ uci.commit(uciconfig);
+ need_restart = true;
+ }
}
if ((main_udp_node === 'urltest') ? !length(main_udp_urltest_nodes) : !uci.get(uciconfig, main_udp_node)) {
@@ -1650,6 +274,21 @@ function main() {
}
}
+ /* Scrub stale urltest member references in custom routing nodes */
+ uci.foreach(uciconfig, 'routing_node', (cfg) => {
+ if (cfg.node !== 'urltest' || isEmpty(cfg.urltest_nodes))
+ return null;
+
+ const cleaned_nodes = filter(cfg.urltest_nodes, (v) => uci.get(uciconfig, v));
+ if (length(cleaned_nodes) !== length(cfg.urltest_nodes)) {
+ uci.set(uciconfig, cfg['.name'], 'urltest_nodes', cleaned_nodes);
+ uci.commit(uciconfig);
+ need_restart = true;
+
+ log(sprintf('Routing node %s: removed gone nodes from urltest list.', cfg['.name']));
+ }
+ });
+
if (need_restart) {
log('Restarting service...');
init_action('homeproxy', 'stop');
@@ -1660,15 +299,9 @@ function main() {
log('Successfully updated subscriptions.');
}
-if (provider_update_id && isEmpty(subscription_urls)) {
- log(sprintf('Provider %s does not match any subscription.', provider_update_id));
- exit(1);
-}
-
if (!isEmpty(subscription_urls))
try {
- if (call(main) === false)
- exit(1);
+ call(main);
} catch(e) {
log('[FATAL ERROR] An error occurred during updating subscriptions:');
log(sprintf('%s: %s', e.type, e.message));
@@ -1677,5 +310,4 @@ if (!isEmpty(subscription_urls))
log('Restarting service...');
init_action('homeproxy', 'stop');
init_action('homeproxy', 'start');
- exit(1);
}
diff --git a/luci-app-homeproxy/root/etc/init.d/homeproxy b/luci-app-homeproxy/root/etc/init.d/homeproxy
index ae3e64721..7784c5148 100755
--- a/luci-app-homeproxy/root/etc/init.d/homeproxy
+++ b/luci-app-homeproxy/root/etc/init.d/homeproxy
@@ -15,94 +15,60 @@ HP_DIR="/etc/homeproxy"
RUN_DIR="/var/run/homeproxy"
LOG_PATH="$RUN_DIR/homeproxy.log"
-# we don't know which is the default server, just take the first one
-DNSMASQ_UCI_CONFIG="$(uci -q show "dhcp.@dnsmasq[0]" | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')"
-if [ -f "/tmp/etc/dnsmasq.conf.$DNSMASQ_UCI_CONFIG" ]; then
- DNSMASQ_DIR="$(awk -F '=' '/^conf-dir=/ {print $2}' "/tmp/etc/dnsmasq.conf.$DNSMASQ_UCI_CONFIG")/dnsmasq-homeproxy.d"
-else
- DNSMASQ_DIR="/tmp/dnsmasq.d/dnsmasq-homeproxy.d"
-fi
+# fw4 chain/set inventory; single source of truth shared with firewall_post.ut
+[ -f "$HP_DIR/scripts/fw4_names.sh" ] && . "$HP_DIR/scripts/fw4_names.sh"
log() {
echo -e "$(date "+%Y-%m-%d %H:%M:%S") [DAEMON] $*" >> "$LOG_PATH"
}
-init_logs() {
- mkdir -p "$RUN_DIR"
- mkdir -p "$HP_DIR/run/ui"
- touch "$LOG_PATH" "$RUN_DIR/sing-box-c.log" "$RUN_DIR/sing-box-s.log"
- chown -R sing-box:sing-box "$RUN_DIR" 2>"/dev/null"
- chown -R sing-box:sing-box "$HP_DIR/run" 2>"/dev/null"
-}
+# Locate the directory dnsmasq reads the homeproxy snippets from. The UCI
+# section name of the dnsmasq config is part of /tmp/etc/dnsmasq.conf.,
+# but `uci get` cannot return a section name (there is no `__name__`), so it is
+# derived from the first `uci show` line. Either step can fail on an unusual
+# setup; fall back to the generic directory and say so in the log instead of
+# silently writing dnsmasq snippets nobody reads.
+DNSMASQ_UCI_CONFIG="$(uci -q show "dhcp.@dnsmasq[0]" 2>"/dev/null" | head -n1)"
+DNSMASQ_UCI_CONFIG="${DNSMASQ_UCI_CONFIG#*.}"
+DNSMASQ_UCI_CONFIG="${DNSMASQ_UCI_CONFIG%%=*}"
-valid_update_cron() {
- echo "$1" | grep -Eq '^([0-9]|[0-5][0-9]) ([0-9]|[01][0-9]|2[0-3]) \* \* ([0-7]|\*)$'
-}
+DNSMASQ_DIR=""
+if [ -n "$DNSMASQ_UCI_CONFIG" ] && [ -f "/tmp/etc/dnsmasq.conf.$DNSMASQ_UCI_CONFIG" ]; then
+ DNSMASQ_CONF_DIR="$(awk -F '=' '/^conf-dir=/ {print $2; exit}' "/tmp/etc/dnsmasq.conf.$DNSMASQ_UCI_CONFIG")"
+ [ -n "$DNSMASQ_CONF_DIR" ] && DNSMASQ_DIR="$DNSMASQ_CONF_DIR/dnsmasq-homeproxy.d"
+fi
-has_ruleset_cron() {
- printf '%s\n' "$ruleset_cron_list" | grep -Fxq -- "$1"
-}
+if [ -z "$DNSMASQ_DIR" ]; then
+ log "WARNING: unable to derive the dnsmasq conf-dir (section '${DNSMASQ_UCI_CONFIG:-unknown}'), using /tmp/dnsmasq.d/dnsmasq-homeproxy.d."
+ DNSMASQ_DIR="/tmp/dnsmasq.d/dnsmasq-homeproxy.d"
+fi
-add_ruleset_cron() {
- local section="$1"
- local enabled auto_update type update_time
-
- config_get_bool enabled "$section" "enabled" "0"
- config_get_bool auto_update "$section" "auto_update" "1"
- config_get type "$section" "type" "local"
- config_get update_time "$section" "update_interval" ""
-
- [ "$enabled" = "1" ] || return
- [ "$auto_update" = "1" ] || return
- [ "$type" = "remote" ] || return
- [ -n "$update_time" ] || return
- valid_update_cron "$update_time" || return
- has_ruleset_cron "$update_time" && return
-
- echo -e "$update_time sh $HP_DIR/scripts/update_rulesets.sh #${CONF}_autosetup" >> "/etc/crontabs/root"
- ruleset_cron_list="${ruleset_cron_list}
-${update_time}"
- cron_reload="1"
-}
-
-setup_auto_update_cron() {
- local cron_reload="0"
- mkdir -p "/etc/crontabs"
- touch "/etc/crontabs/root"
- grep -q "#${CONF}_autosetup" "/etc/crontabs/root" 2>"/dev/null" && cron_reload="1"
- sed -i "/#${CONF}_autosetup/d" "/etc/crontabs/root" 2>"/dev/null"
-
- local auto_update auto_update_time
- config_get_bool auto_update "subscription" "auto_update" "0"
- if [ "$auto_update" = "1" ]; then
- config_get auto_update_time "subscription" "auto_update_time" "0 0 * * *"
- if valid_update_cron "$auto_update_time"; then
- echo -e "$auto_update_time sh $HP_DIR/scripts/update_crond.sh #${CONF}_autosetup" >> "/etc/crontabs/root"
- cron_reload="1"
- fi
- fi
-
- local ruleset_cron_list=""
- config_foreach add_ruleset_cron "ruleset"
- [ "$cron_reload" = "1" ] && /etc/init.d/cron restart
+restore_upnp_mappings() {
+ [ -x /etc/init.d/miniupnpd ] && /etc/init.d/miniupnpd enabled && /etc/init.d/miniupnpd running \
+ && /etc/init.d/miniupnpd restart >"/dev/null" 2>&1
}
start_service() {
- init_logs
-
config_load "$CONF"
- setup_auto_update_cron
+
+ local sb_ver sb_major sb_minor
+ sb_ver="$(sing-box version -n 2>/dev/null)"
+ if [ -z "$sb_ver" ]; then
+ log "Error: cannot detect sing-box version, abort."
+ return 1
+ fi
+ sb_major="${sb_ver%%.*}"
+ sb_minor="${sb_ver#*.}"
+ sb_minor="${sb_minor%%.*}"
+ if [ "$sb_major" -lt 1 ] || { [ "$sb_major" -eq 1 ] && [ "$sb_minor" -lt 14 ]; }; then
+ log "Error: sing-box >= 1.14.0 required, found ${sb_ver}."
+ return 1
+ fi
local routing_mode proxy_mode
config_get routing_mode "config" "routing_mode" "bypass_mainland_china"
config_get proxy_mode "config" "proxy_mode" "redirect_tproxy"
- local cache_path
- config_get cache_path "cache" "path" "$HP_DIR/cache.db"
- mkdir -p "$(dirname "$cache_path")"
- [ -e "$cache_path" ] || touch "$cache_path"
- chown sing-box:sing-box "$cache_path" 2>"/dev/null"
-
local outbound_node
if [ "$routing_mode" != "custom" ]; then
config_get outbound_node "config" "main_node" "nil"
@@ -114,11 +80,28 @@ start_service() {
config_get_bool server_enabled "server" "enabled" "0"
if [ "$outbound_node" = "nil" ] && [ "$server_enabled" = "0" ]; then
+ log "Neither client nor server is configured. Service not started."
return 1
fi
+ mkdir -p "$RUN_DIR"
+
+ local disable_gso=0
+ uname -r | grep -Eq "^6\.6" && disable_gso=1
+
if [ "$outbound_node" != "nil" ]; then
- # Generate/Validate client config
+ local wan_waited=0
+ while ! { ip route show default 2>"/dev/null" | grep -q . \
+ || ip -6 route show default 2>"/dev/null" | grep -q . \
+ || ifstatus wan 2>"/dev/null" | grep -q '"up": true'; }; do
+ wan_waited=$((wan_waited + 1))
+ if [ "$wan_waited" -ge 60 ]; then
+ log "WARNING: No network route after 60s, starting sing-box anyway."
+ break
+ fi
+ sleep 1
+ done
+
ucode -S "$HP_DIR/scripts/generate_client.uc" 2>>"$LOG_PATH"
if [ ! -e "$RUN_DIR/sing-box-c.json" ]; then
@@ -129,15 +112,26 @@ start_service() {
return 1
fi
- # DNSMasq rules
+ local auto_update auto_update_time
+ config_get_bool auto_update "subscription" "auto_update" "0"
+ if [ "$auto_update" = "1" ]; then
+ config_get auto_update_time "subscription" "auto_update_time" "2"
+ sed -i "/#${CONF}_autosetup/d" "/etc/crontabs/root" 2>"/dev/null" \
+ || log "Warning: failed to drop the previous auto-update cron entry."
+ echo -e "0 $auto_update_time * * * $HP_DIR/scripts/update_crond.sh #${CONF}_autosetup" >> "/etc/crontabs/root" \
+ || log "Warning: failed to install the auto-update cron entry."
+ /etc/init.d/cron restart >"/dev/null" 2>&1 || log "Warning: failed to restart cron."
+ fi
+
local ipv6_support dns_port
config_get_bool ipv6_support "config" "ipv6_support" "0"
config_get dns_port "infra" "dns_port" "5333"
- mkdir -p "$DNSMASQ_DIR"
- echo -e "conf-dir=$DNSMASQ_DIR" > "$DNSMASQ_DIR/../dnsmasq-homeproxy.conf"
+ mkdir -p "$DNSMASQ_DIR" || log "Warning: failed to create ${DNSMASQ_DIR}."
+ echo -e "conf-dir=$DNSMASQ_DIR" > "$DNSMASQ_DIR/../dnsmasq-homeproxy.conf" \
+ || log "Warning: failed to write the dnsmasq conf-dir file."
case "$routing_mode" in
"bypass_mainland_china"|"custom"|"global")
- cat <<-EOF >> "$DNSMASQ_DIR/redirect-dns.conf"
+ cat <<-EOF > "$DNSMASQ_DIR/redirect-dns.conf"
no-poll
no-resolv
server=127.0.0.1#$dns_port
@@ -161,7 +155,9 @@ start_service() {
sed -r -e '/^\s*$/d' -e "s/(.*)/server=\/\1\/127.0.0.1#$dns_port\nnftset=\/\1\\/4#inet#fw4#homeproxy_wan_proxy_addr_v4$wan_nftset_v6/g" \
"$HP_DIR/resources/proxy_list.txt" > "$DNSMASQ_DIR/proxy_list.conf"
fi
- # Setup routing table
+ /etc/init.d/dnsmasq restart >"/dev/null" 2>&1 \
+ || log "Warning: failed to restart dnsmasq, DNS-based routing may be stale."
+
local table_mark
config_get table_mark "infra" "table_mark" "100"
case "$proxy_mode" in
@@ -172,12 +168,16 @@ start_service() {
local tproxy_mark
config_get tproxy_mark "infra" "tproxy_mark" "101"
- ip rule add fwmark "$tproxy_mark" table "$table_mark"
- ip route add local 0.0.0.0/0 dev lo table "$table_mark"
+ ip rule add fwmark "$tproxy_mark" table "$table_mark" 2>"/dev/null" \
+ || log "Error: failed to add the tproxy ip rule (fwmark ${tproxy_mark}, table ${table_mark})."
+ ip route add local 0.0.0.0/0 dev lo table "$table_mark" 2>"/dev/null" \
+ || log "Error: failed to add the tproxy local route (table ${table_mark})."
if [ "$ipv6_support" -eq "1" ]; then
- ip -6 rule add fwmark "$tproxy_mark" table "$table_mark"
- ip -6 route add local ::/0 dev lo table "$table_mark"
+ ip -6 rule add fwmark "$tproxy_mark" table "$table_mark" 2>"/dev/null" \
+ || log "Error: failed to add the tproxy IPv6 rule (fwmark ${tproxy_mark}, table ${table_mark})."
+ ip -6 route add local ::/0 dev lo table "$table_mark" 2>"/dev/null" \
+ || log "Error: failed to add the tproxy IPv6 local route (table ${table_mark})."
fi
fi
;;
@@ -186,33 +186,38 @@ start_service() {
config_get tun_name "infra" "tun_name" "singtun0"
config_get tun_mark "infra" "tun_mark" "102"
- ip tuntap add mode tun user root name "$tun_name"
+ ip tuntap add mode tun user root name "$tun_name" 2>"/dev/null" \
+ || log "Error: failed to create the TUN device ${tun_name}."
sleep 1s
- ip link set "$tun_name" up
+ ip link set "$tun_name" up 2>"/dev/null" \
+ || log "Error: failed to bring up the TUN device ${tun_name}."
- ip route replace default dev "$tun_name" table "$table_mark"
- ip rule add fwmark "$tun_mark" lookup "$table_mark"
+ ip route replace default dev "$tun_name" table "$table_mark" 2>"/dev/null" \
+ || log "Error: failed to set the TUN default route (table ${table_mark})."
+ ip rule add fwmark "$tun_mark" lookup "$table_mark" 2>"/dev/null" \
+ || log "Error: failed to add the TUN ip rule (fwmark ${tun_mark}, table ${table_mark})."
- ip -6 route replace default dev "$tun_name" table "$table_mark"
- ip -6 rule add fwmark "$tun_mark" lookup "$table_mark"
+ if [ "$ipv6_support" -eq "1" ]; then
+ ip -6 route replace default dev "$tun_name" table "$table_mark" 2>"/dev/null" \
+ || log "Error: failed to set the TUN IPv6 default route (table ${table_mark})."
+ ip -6 rule add fwmark "$tun_mark" lookup "$table_mark" 2>"/dev/null" \
+ || log "Error: failed to add the TUN IPv6 rule (fwmark ${tun_mark}, table ${table_mark})."
+ fi
;;
esac
- # sing-box (client)
procd_open_instance "sing-box-c"
procd_set_param command "$PROG"
procd_append_param command run --config "$RUN_DIR/sing-box-c.json"
- # QUIC-GO GSO is broken on kernel 6.6 currently
- uname -r | grep -Eq "^6\.6" && procd_set_param env "QUIC_GO_DISABLE_GSO"="true"
+ [ "$disable_gso" -eq "1" ] && procd_set_param env "QUIC_GO_DISABLE_GSO"="true"
if [ -x "/sbin/ujail" ] && [ "$routing_mode" != "custom" ] && ! grep -Eq '"type": "(wireguard|tun)"' "$RUN_DIR/sing-box-c.json"; then
procd_add_jail "sing-box-c" log procfs
procd_add_jail_mount "$RUN_DIR/sing-box-c.json"
procd_add_jail_mount_rw "$RUN_DIR/sing-box-c.log"
- procd_add_jail_mount_rw "$cache_path"
- procd_add_jail_mount_rw "$HP_DIR/run/"
+ [ "$routing_mode" != "bypass_mainland_china" ] || procd_add_jail_mount_rw "$HP_DIR/cache.db"
procd_add_jail_mount "$HP_DIR/certs/"
procd_add_jail_mount "/etc/ssl/"
procd_add_jail_mount "/etc/localtime"
@@ -232,7 +237,6 @@ start_service() {
fi
if [ "$server_enabled" = "1" ]; then
- # Generate/Validate server config
ucode -S "$HP_DIR/scripts/generate_server.uc" 2>>"$LOG_PATH"
if [ ! -e "$RUN_DIR/sing-box-s.json" ]; then
@@ -243,14 +247,12 @@ start_service() {
return 1
fi
- # sing-box (server)
procd_open_instance "sing-box-s"
procd_set_param command "$PROG"
procd_append_param command run --config "$RUN_DIR/sing-box-s.json"
- # QUIC-GO GSO is broken on kernel 6.6 currently
- uname -r | grep -Eq "^6\.6" && procd_set_param env "QUIC_GO_DISABLE_GSO"="true"
+ [ "$disable_gso" -eq "1" ] && procd_set_param env "QUIC_GO_DISABLE_GSO"="true"
if [ -x "/sbin/ujail" ]; then
procd_add_jail "sing-box-s" log procfs
@@ -275,43 +277,46 @@ start_service() {
procd_close_instance
fi
- # log-cleaner
procd_open_instance "log-cleaner"
procd_set_param command "$HP_DIR/scripts/clean_log.sh"
procd_set_param respawn
procd_close_instance
case "$routing_mode" in
+ "bypass_mainland_china")
+ [ -e "$HP_DIR/cache.db" ] || touch "$HP_DIR/cache.db" \
+ || log "Warning: failed to create ${HP_DIR}/cache.db."
+ ;;
"custom")
- # Prepare ruleset directory
- [ -d "$HP_DIR/ruleset" ] || mkdir -p "$HP_DIR/ruleset"
+ [ -d "$HP_DIR/ruleset" ] || mkdir -p "$HP_DIR/ruleset" \
+ || log "Warning: failed to create ${HP_DIR}/ruleset."
;;
esac
- [ "$outbound_node" = "nil" ] || : > "$RUN_DIR/sing-box-c.log"
+ [ "$outbound_node" = "nil" ] || echo > "$RUN_DIR/sing-box-c.log"
if [ "$server_enabled" = "1" ]; then
- : > "$RUN_DIR/sing-box-s.log"
- mkdir -p "$HP_DIR/certs"
+ echo > "$RUN_DIR/sing-box-s.log"
+ mkdir -p "$HP_DIR/certs" || log "Warning: failed to create ${HP_DIR}/certs."
fi
- # Update permissions for ujail
- chown -R sing-box:sing-box "$RUN_DIR"
+ chown sing-box:sing-box "$RUN_DIR"/sing-box-*.json "$RUN_DIR"/sing-box-*.log "$HP_DIR"/cache.db 2>"/dev/null" \
+ || log "Warning: failed to change the ownership of the runtime files to sing-box."
- # Setup firewall
- ucode "$HP_DIR/scripts/firewall_pre.uc"
- [ "$outbound_node" = "nil" ] || utpl -S "$HP_DIR/scripts/firewall_post.ut" > "$RUN_DIR/fw4_post.nft"
- fw4 reload >"/dev/null" 2>&1
- /etc/init.d/dnsmasq restart >"/dev/null" 2>&1
+ ucode "$HP_DIR/scripts/firewall_pre.uc" 2>"/dev/null" || log "Error: firewall pre-script failed."
+ if [ "$outbound_node" != "nil" ]; then
+ utpl -S "$HP_DIR/scripts/firewall_post.ut" > "$RUN_DIR/fw4_post.nft" 2>"/dev/null" || log "Error: firewall post-script failed."
+ fi
+ fw4 reload >"/dev/null" 2>&1 || log "Error: fw4 reload failed."
+ restore_upnp_mappings
- log "sing-box $(sing-box version -n) started."
+ log "sing-box $(sing-box version -n 2>/dev/null || echo "unknown") started."
}
stop_service() {
- sed -i "/#${CONF}_autosetup/d" "/etc/crontabs/root" 2>"/dev/null"
- /etc/init.d/cron restart >"/dev/null" 2>&1
+ sed -i "/#${CONF}_autosetup/d" "/etc/crontabs/root" 2>"/dev/null" \
+ || log "Warning: failed to drop the auto-update cron entry."
+ /etc/init.d/cron restart >"/dev/null" 2>&1 || log "Warning: failed to restart cron."
- # Setup firewall
- # Load config
config_load "$CONF"
local table_mark tproxy_mark tun_mark tun_name
config_get table_mark "infra" "table_mark" "100"
@@ -319,61 +324,53 @@ stop_service() {
config_get tun_mark "infra" "tun_mark" "102"
config_get tun_name "infra" "tun_name" "singtun0"
- # Tproxy
- ip rule del fwmark "$tproxy_mark" table "$table_mark" 2>"/dev/null"
+ # ip rule del removes a single matching rule, so a repeated start (or an
+ # upgrade that starts before the old instance stopped) leaves duplicates
+ # behind. Delete every match instead of only the first one.
+ while ip rule del fwmark "$tproxy_mark" table "$table_mark" 2>"/dev/null"; do :; done
ip route del local 0.0.0.0/0 dev lo table "$table_mark" 2>"/dev/null"
- ip -6 rule del fwmark "$tproxy_mark" table "$table_mark" 2>"/dev/null"
+ while ip -6 rule del fwmark "$tproxy_mark" table "$table_mark" 2>"/dev/null"; do :; done
ip -6 route del local ::/0 dev lo table "$table_mark" 2>"/dev/null"
- # TUN
ip route del default dev "$tun_name" table "$table_mark" 2>"/dev/null"
- ip rule del fwmark "$tun_mark" table "$table_mark" 2>"/dev/null"
+ while ip rule del fwmark "$tun_mark" table "$table_mark" 2>"/dev/null"; do :; done
ip -6 route del default dev "$tun_name" table "$table_mark" 2>"/dev/null"
- ip -6 rule del fwmark "$tun_mark" table "$table_mark" 2>"/dev/null"
+ while ip -6 rule del fwmark "$tun_mark" table "$table_mark" 2>"/dev/null"; do :; done
- # Nftables rules
- for i in "homeproxy_dstnat_redir" "homeproxy_output_redir" \
- "homeproxy_redirect" "homeproxy_redirect_proxy" \
- "homeproxy_redirect_proxy_port" "homeproxy_redirect_lanac" \
- "homeproxy_mangle_prerouting" "homeproxy_mangle_output" \
- "homeproxy_mangle_tproxy" "homeproxy_mangle_tproxy_port" \
- "homeproxy_mangle_tproxy_lanac" "homeproxy_mangle_mark" \
- "homeproxy_mangle_tun" "homeproxy_mangle_tun_mark"; do
- nft flush chain inet fw4 "$i"
- nft delete chain inet fw4 "$i"
- done 2>"/dev/null"
- for i in "homeproxy_local_addr_v4" "homeproxy_local_addr_v6" \
- "homeproxy_gfw_list_v4" "homeproxy_gfw_list_v6" \
- "homeproxy_mainland_addr_v4" "homeproxy_mainland_addr_v6" \
- "homeproxy_wan_proxy_addr_v4" "homeproxy_wan_proxy_addr_v6" \
- "homeproxy_wan_direct_addr_v4" "homeproxy_wan_direct_addr_v6" \
- "homeproxy_routing_port"; do
- nft flush set inet fw4 "$i"
- nft delete set inet fw4 "$i"
- done 2>"/dev/null"
- echo 2>"/dev/null" > "$RUN_DIR/fw4_forward.nft"
- echo 2>"/dev/null" > "$RUN_DIR/fw4_input.nft"
- echo 2>"/dev/null" > "$RUN_DIR/fw4_post.nft"
- fw4 reload >"/dev/null" 2>&1
+ # Flush and delete every fw4 object homeproxy owns. Deleting one at a
+ # time matters: `nft -f` batches are atomic, so a single object that
+ # does not exist in the current proxy mode would roll back the rest.
+ local fw4_name
+ for fw4_name in $HP_FW4_CHAINS; do
+ nft flush chain inet fw4 "$fw4_name" 2>"/dev/null"
+ nft delete chain inet fw4 "$fw4_name" 2>"/dev/null"
+ done
+ for fw4_name in $HP_FW4_SETS; do
+ nft flush set inet fw4 "$fw4_name" 2>"/dev/null"
+ nft delete set inet fw4 "$fw4_name" 2>"/dev/null"
+ done
+ : > "$RUN_DIR/fw4_forward.nft"
+ : > "$RUN_DIR/fw4_input.nft"
+ : > "$RUN_DIR/fw4_post.nft"
+ fw4 reload >"/dev/null" 2>&1 || log "Warning: fw4 reload failed during stop."
+ restore_upnp_mappings
- # Remove DNS hijack
rm -rf "$DNSMASQ_DIR/../dnsmasq-homeproxy.conf" "$DNSMASQ_DIR"
- /etc/init.d/dnsmasq restart >"/dev/null" 2>&1
+ /etc/init.d/dnsmasq restart >"/dev/null" 2>&1 \
+ || log "Warning: failed to restart dnsmasq after removing the homeproxy snippets."
- rm -f "$RUN_DIR/sing-box-c.json" "$RUN_DIR/sing-box-s.json"
- init_logs
+ rm -f "$RUN_DIR/sing-box-c.json" "$RUN_DIR/sing-box-c.log" \
+ "$RUN_DIR/sing-box-s.json" "$RUN_DIR/sing-box-s.log"
log "Service stopped."
}
service_stopped() {
- # Load config
config_load "$CONF"
local tun_name
config_get tun_name "infra" "tun_name" "singtun0"
- # TUN
ip link set "$tun_name" down 2>"/dev/null"
ip tuntap del mode tun name "$tun_name" 2>"/dev/null"
}
@@ -381,6 +378,35 @@ service_stopped() {
reload_service() {
log "Reloading service..."
+ config_load "$CONF"
+ local routing_mode
+ config_get routing_mode "config" "routing_mode" "bypass_mainland_china"
+
+ local outbound_node
+ if [ "$routing_mode" != "custom" ]; then
+ config_get outbound_node "config" "main_node" "nil"
+ else
+ config_get outbound_node "routing" "default_outbound" "nil"
+ fi
+
+ if [ "$outbound_node" != "nil" ]; then
+ ucode -S "$HP_DIR/scripts/generate_client.uc" 2>>"$LOG_PATH"
+ if ! "$PROG" check --config "$RUN_DIR/sing-box-c.json" 2>>"$LOG_PATH"; then
+ log "Error: new client config is invalid, reload aborted."
+ return 1
+ fi
+ fi
+
+ local server_enabled
+ config_get_bool server_enabled "server" "enabled" "0"
+ if [ "$server_enabled" = "1" ]; then
+ ucode -S "$HP_DIR/scripts/generate_server.uc" 2>>"$LOG_PATH"
+ if ! "$PROG" check --config "$RUN_DIR/sing-box-s.json" 2>>"$LOG_PATH"; then
+ log "Error: new server config is invalid, reload aborted."
+ return 1
+ fi
+ fi
+
stop
start
}
diff --git a/luci-app-homeproxy/root/etc/uci-defaults/luci-homeproxy b/luci-app-homeproxy/root/etc/uci-defaults/luci-homeproxy
old mode 100755
new mode 100644
index 8d8cbf913..fb6ebb36a
--- a/luci-app-homeproxy/root/etc/uci-defaults/luci-homeproxy
+++ b/luci-app-homeproxy/root/etc/uci-defaults/luci-homeproxy
@@ -3,36 +3,6 @@
[ -f "/www/luci-static/resources/icons/loading.gif" ] && \
sed -i "s,/loading.svg,/loading.gif,g" "/www/luci-static/resources/view/homeproxy/status.js"
-uci -q set luci.main.lang='zh_cn'
-uci -q commit luci
-
-api_secret="$(uci -q get homeproxy.clash_api.secret)"
-if [ -z "$api_secret" ] || [ "$api_secret" = "homeproxy" ]; then
- api_secret="$(tr -dc 'A-Za-z0-9' < /dev/urandom 2>"/dev/null" | head -c 16)"
- [ -n "$api_secret" ] || api_secret="$(awk 'BEGIN{srand(); printf "%06d", int(rand() * 1000000)}')"
- uci -q set homeproxy.clash_api.secret="$api_secret"
- uci -q commit homeproxy
-fi
-
-legacy_panel_url="https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip"
-legacy_panel_proxy_url="https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip"
-old_panel_url="https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip"
-old_panel_proxy_url="https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip"
-default_panel_url="https://gh-proxy.com/https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip"
-panel_url="$(uci -q get homeproxy.clash_api.external_ui_download_url)"
-if [ -z "$panel_url" ] || [ "$panel_url" = "$legacy_panel_url" ] || [ "$panel_url" = "$legacy_panel_proxy_url" ] || [ "$panel_url" = "$old_panel_proxy_url" ]; then
- uci -q set homeproxy.clash_api.external_ui_download_url="$default_panel_url"
- uci -q commit homeproxy
-fi
-
-rm -f /tmp/luci-indexcache /tmp/luci-modulecache/* 2>"/dev/null"
-
-mkdir -p /var/run/homeproxy
-touch /var/run/homeproxy/homeproxy.log \
- /var/run/homeproxy/sing-box-c.log \
- /var/run/homeproxy/sing-box-s.log
-chown -R sing-box:sing-box /var/run/homeproxy 2>"/dev/null"
-
uci -q batch <<-EOF >"/dev/null"
delete firewall.homeproxy_pre
diff --git a/luci-app-homeproxy/root/etc/uci-defaults/luci-homeproxy-migration b/luci-app-homeproxy/root/etc/uci-defaults/luci-homeproxy-migration
old mode 100755
new mode 100644
diff --git a/luci-app-homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json b/luci-app-homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json
index d65e15e06..b4b97ea84 100644
--- a/luci-app-homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json
+++ b/luci-app-homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json
@@ -9,7 +9,6 @@
"/var/run/homeproxy/sing-box-s.log": [ "read" ]
},
"ubus": {
- "rc": [ "*" ],
"service": [ "list" ],
"luci.homeproxy": [ "*" ]
},
@@ -17,11 +16,7 @@
},
"write": {
"file": {
- "/tmp/homeproxy_certificate.tmp": [ "write" ],
- "/tmp/homeproxy_panel.tmp": [ "write" ]
- },
- "ubus": {
- "rc": [ "*" ]
+ "/tmp/homeproxy_certificate.tmp": [ "write" ]
},
"uci": [ "homeproxy" ]
}
diff --git a/luci-app-homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy b/luci-app-homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy
index f0292ebac..fe1f0aa98 100644
--- a/luci-app-homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy
+++ b/luci-app-homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy
@@ -8,7 +8,8 @@
'use strict';
import { access, error, lstat, popen, readfile, writefile } from 'fs';
-import { cursor } from 'uci';
+
+import { isBinary, isValidPEM } from '/etc/homeproxy/scripts/homeproxy.uc';
/* Kanged from ucode/luci */
function shellquote(s) {
@@ -22,72 +23,6 @@ function hasKernelModule(kmod) {
const HP_DIR = '/etc/homeproxy';
const RUN_DIR = '/var/run/homeproxy';
-function getClashAPIConfig(uci) {
- const external_controller = trim(uci.get('homeproxy', 'clash_api', 'external_controller') || '127.0.0.1:9090');
- const secret = trim(uci.get('homeproxy', 'clash_api', 'secret') || '');
- const matched = match(external_controller, /:(\d+)$/);
- const port = matched ? matched[1] : '9090';
-
- return {
- base_url: `http://127.0.0.1:${port}`,
- secret
- };
-}
-
-function readProcess(fd) {
- let payload = '', line;
- for (line = fd.read('line'); length(line); line = fd.read('line'))
- payload += line;
- fd.close();
-
- return payload;
-}
-
-function clashAPIRequest(api, method, path, timeout) {
- const auth = api.secret ? `--header ${shellquote(`Authorization: Bearer ${api.secret}`)} ` : '';
- const post = (method === 'POST') ? "--post-data='' " : '';
- const fd = popen(`/usr/bin/wget -qO- -T ${timeout || 10} ${auth}${post}${shellquote(api.base_url + path)} 2>"/dev/null"`);
-
- if (!fd)
- return null;
-
- return readProcess(fd);
-}
-
-function getPanelDir(uci) {
- return trim(uci.get('homeproxy', 'clash_api', 'external_ui') || `${HP_DIR}/run/ui`);
-}
-
-function hasDirectoryContent(directory) {
- return (system(`[ -d ${shellquote(directory)} ] && [ -n "$(ls -A ${shellquote(directory)} 2>/dev/null)" ]`) === 0);
-}
-
-function preparePanelBackup(panel_dir, backup_dir) {
- const parent_dir = replace(panel_dir, /\/[^/]+$/, '') || '/';
-
- system(`rm -rf ${shellquote(backup_dir)}`);
- system(`mkdir -p ${shellquote(parent_dir)}`);
-
- if (hasDirectoryContent(panel_dir)) {
- if (system(`mv ${shellquote(panel_dir)} ${shellquote(backup_dir)}`) !== 0)
- return false;
- }
-
- return (system(`mkdir -p ${shellquote(panel_dir)}`) === 0);
-}
-
-function restorePanelBackup(panel_dir, backup_dir) {
- if (!access(backup_dir))
- return true;
-
- system(`rm -rf ${shellquote(panel_dir)}`);
- return (system(`mv ${shellquote(backup_dir)} ${shellquote(panel_dir)}`) === 0);
-}
-
-function cleanupPanelBackup(backup_dir) {
- system(`rm -rf ${shellquote(backup_dir)}`);
-}
-
const methods = {
acllist_read: {
args: { type: 'type' },
@@ -114,6 +49,15 @@ const methods = {
content = replace(content, /\r\n?/g, '\n');
if (!match(content, /\n$/))
content += '\n';
+
+ /* Domains only: reject lines that could break the downstream
+ dnsmasq/nftset injection (whitespace / shell or directive chars). */
+ for (let line in split(content, /\n/)) {
+ if (!trim(line))
+ continue;
+ if (match(line, /[ \t\/\\;<>="'|]/))
+ return { result: false, error: 'invalid character in domain list' };
+ }
}
system(`mkdir -p ${HP_DIR}/resources`);
@@ -136,25 +80,13 @@ const methods = {
}
let filecontent = readfile(tmpcert);
- if (is_binary(filecontent)) {
+ if (isBinary(filecontent)) {
system(`rm -f ${tmpcert}`);
return { result: false, error: 'illegal file type: binary' };
}
- /* Kanged from luci-proto-openconnect */
- const beg = priv ? /^-----BEGIN (RSA|EC) PRIVATE KEY-----$/ : /^-----BEGIN CERTIFICATE-----$/,
- end = priv ? /^-----END (RSA|EC) PRIVATE KEY-----$/ : /^-----END CERTIFICATE-----$/,
- lines = split(trim(filecontent), /[\r\n]/);
- let start = false, i;
-
- for (i = 0; i < length(lines); i++) {
- if (match(lines[i], beg))
- start = true;
- else if (start && !b64dec(lines[i]) && length(lines[i]) !== 64)
- break;
- }
-
- if (!start || i < length(lines) - 1 || !match(lines[i], end)) {
+ /* Validate the PEM structure before storing it */
+ if (!isValidPEM(filecontent, priv)) {
system(`rm -f ${tmpcert}`);
return { result: false, error: 'this does not look like a correct PEM file' };
}
@@ -197,1106 +129,14 @@ const methods = {
url = 'https://www.baidu.com';
break;
case 'google':
- url = 'https://www.google.com/generate_204';
- break;
- case 'github':
- url = 'https://github.com';
- break;
- case 'youtube':
- url = 'https://www.youtube.com';
+ url = 'https://www.google.com';
break;
default:
return { result: false, error: 'illegal site' };
break;
}
- const fd = popen(`/usr/bin/curl --connect-timeout 3 --max-time 5 -o /dev/null -I -skL -w "%{http_code}:%{time_pretransfer}" ${shellquote(url)} 2>"/dev/null"`);
- if (!fd)
- return { result: false };
-
- const output = trim(readProcess(fd) || '');
- const parts = split(output, ':');
- const code = int(parts[0] || 0);
- const parsed = match(parts[1] || '', /^([0-9]+)(\.([0-9]+))?$/);
-
- if (code > 0 && parsed) {
- const sec = int(parsed[1]);
- const frac = ((parsed[3] || '') + '00000');
- const centims = sec * 100000 + int(substr(frac, 0, 5));
-
- return {
- result: true,
- latency: sprintf('%d.%02d', int(centims / 100), centims % 100),
- type: 'curl'
- };
- }
-
- return { result: false };
- }
- },
-
- current_node_get: {
- call: function() {
- const uci = cursor();
- uci.load('homeproxy');
-
- const formatNode = (section_id, fallback_name) => {
- if (!section_id || section_id in ['nil', 'same'])
- return { id: section_id, label: fallback_name || section_id, type: null };
-
- const section = uci.get_all('homeproxy', section_id);
- if (!section || section['.type'] !== 'node')
- return { id: section_id, label: fallback_name || section_id, type: null };
-
- const address = trim(section.override_address || section.address || '');
- const port = trim(section.override_port || section.port || '');
- const label = trim(section.label || '') || ((address && port) ? `${address}:${port}` : section_id);
- return {
- id: section_id,
- label,
- type: section.type || null
- };
- };
-
- const normalizeOutboundTag = (tag) => {
- if (!tag)
- return null;
-
- tag = trim(sprintf('%s', tag));
- tag = replace(tag, /[\r\n\t]+/g, ' ');
- tag = replace(tag, /[\/\\?#%]+/g, '-');
- tag = replace(tag, /\s+/g, ' ');
-
- return tag || null;
- };
-
- const sectionDisplayName = (section) => {
- if (!section)
- return null;
-
- let label = normalizeOutboundTag(section.label);
- if (label)
- return label;
-
- if (section['.type'] === 'node') {
- const address = trim(section.override_address || section.address || '');
- const port = trim(section.override_port || section.port || '');
-
- if (address && port)
- return normalizeOutboundTag(`${address}:${port}`);
- }
-
- return null;
- };
-
- const buildOutboundTagMap = () => {
- const reserved_tags = {
- 'GLOBAL': true,
- 'main-out': true,
- 'main-udp-out': true,
- 'direct-out': true,
- 'block-out': true
- };
- let tag_map = {},
- used_tags = {};
-
- const register = (section_id, display_name) => {
- if (!section_id || tag_map[section_id])
- return;
-
- const fallback_tag = `cfg-${section_id}-out`;
- const base_tag = normalizeOutboundTag(display_name) || fallback_tag;
- let tag = base_tag,
- suffix = 2;
-
- while (reserved_tags[tag] || used_tags[tag]) {
- tag = `${base_tag} (${suffix})`;
- suffix++;
- }
-
- tag_map[section_id] = tag;
- used_tags[tag] = true;
- };
-
- uci.foreach('homeproxy', 'node', (section) => {
- register(section['.name'], sectionDisplayName(section));
- });
-
- uci.foreach('homeproxy', 'routing_node', (section) => {
- if (section.enabled === '1')
- register(section['.name'], sectionDisplayName(section));
- });
-
- let reverse_map = {};
- for (let section_id in tag_map)
- reverse_map[tag_map[section_id]] = section_id;
-
- return reverse_map;
- };
-
- const main_node = trim(uci.get('homeproxy', 'config', 'main_node') || 'nil');
- if (main_node !== 'urltest')
- return {
- mode: main_node,
- active: formatNode(main_node, (main_node === 'nil') ? '禁用' : null),
- error: null
- };
-
- const payload = clashAPIRequest(getClashAPIConfig(uci), 'GET', '/proxies/main-out', 3);
- if (payload === null)
- return {
- mode: 'urltest',
- active: { id: 'urltest', label: '自动选择', type: 'urltest' },
- error: 'clash_api_unavailable'
- };
-
- let data = null;
- try {
- data = json(payload);
- } catch (e) {}
-
- const tag = trim(data?.now || '');
- if (!tag)
- return {
- mode: 'urltest',
- active: { id: 'urltest', label: '自动选择', type: 'urltest' },
- error: 'missing_current_proxy'
- };
-
- const tag_map = buildOutboundTagMap();
- const matched = match(tag, /^cfg-(.*)-out$/);
- const section_id = tag_map[tag] || (matched ? matched[1] : tag);
-
- return {
- mode: 'urltest',
- active: formatNode(section_id, tag),
- error: null
- };
- }
- },
- clash_api_update_panel: {
- call: function() {
- const uci = cursor();
- uci.load('homeproxy');
- const panel_dir = getPanelDir(uci);
- const backup_dir = `${panel_dir}.backup`;
-
- if (!preparePanelBackup(panel_dir, backup_dir))
- return { result: false, error: 'panel_backup_failed' };
-
- const payload = clashAPIRequest(getClashAPIConfig(uci), 'POST', '/upgrade/ui', 120);
- if (payload === null) {
- restorePanelBackup(panel_dir, backup_dir);
- return { result: false, error: 'clash_api_unavailable' };
- }
-
- let data = null;
- try {
- data = json(payload);
- } catch (e) {}
-
- if (data?.status === 'ok') {
- cleanupPanelBackup(backup_dir);
- return { result: true };
- }
-
- if (!restorePanelBackup(panel_dir, backup_dir))
- return { result: false, error: 'panel_restore_failed' };
-
- return {
- result: false,
- error: data?.message || data?.error || 'update_panel_failed'
- };
- }
- },
- clash_api_install_panel: {
- call: function() {
- const uci = cursor();
- uci.load('homeproxy');
-
- const tmpzip = '/tmp/homeproxy_panel.tmp';
- const filestat = lstat(tmpzip);
- if (!filestat || filestat.type !== 'file' || filestat.size <= 0) {
- system(`rm -f ${shellquote(tmpzip)}`);
- return { result: false, error: 'empty_panel_zip' };
- }
-
- if (system('command -v unzip >/dev/null 2>&1') !== 0) {
- system(`rm -f ${shellquote(tmpzip)}`);
- return { result: false, error: 'unzip_unavailable' };
- }
-
- const panel_dir = getPanelDir(uci);
- const backup_dir = `${panel_dir}.backup`;
- const extract_dir = '/tmp/homeproxy_panel_extract';
- const stage_dir = '/tmp/homeproxy_panel_stage';
- const install_cmd = `
- set -e
- rm -rf ${shellquote(extract_dir)} ${shellquote(stage_dir)}
- mkdir -p ${shellquote(extract_dir)} ${shellquote(stage_dir)}
- unzip -oq ${shellquote(tmpzip)} -d ${shellquote(extract_dir)} >/dev/null
- src_dir=${shellquote(extract_dir)}
- for depth in 1 2 3; do
- [ -f "$src_dir/index.html" ] && break
- first_entry=""
- entry_count=0
- for entry in "$src_dir"/* "$src_dir"/.[!.]* "$src_dir"/..?*; do
- [ -e "$entry" ] || continue
- case "$(basename "$entry")" in
- __MACOSX|.DS_Store) continue ;;
- esac
- entry_count=$((entry_count + 1))
- [ -n "$first_entry" ] || first_entry="$entry"
- done
- if [ "$entry_count" -eq 1 ] && [ -d "$first_entry" ]; then
- src_dir="$first_entry"
- else
- break
- fi
- done
- copied=0
- for entry in "$src_dir"/* "$src_dir"/.[!.]* "$src_dir"/..?*; do
- [ -e "$entry" ] || continue
- cp -a "$entry" ${shellquote(stage_dir)}/
- copied=1
- done
- [ "$copied" -eq 1 ]
- `;
-
- if (system(install_cmd) !== 0) {
- system(`rm -f ${shellquote(tmpzip)}`);
- system(`rm -rf ${shellquote(extract_dir)} ${shellquote(stage_dir)}`);
- return { result: false, error: 'invalid_panel_zip' };
- }
-
- if (!preparePanelBackup(panel_dir, backup_dir)) {
- system(`rm -f ${shellquote(tmpzip)}`);
- system(`rm -rf ${shellquote(extract_dir)} ${shellquote(stage_dir)}`);
- return { result: false, error: 'panel_backup_failed' };
- }
-
- const replace_cmd = `
- set -e
- rm -rf ${shellquote(panel_dir)}
- mkdir -p ${shellquote(panel_dir)}
- cp -a ${shellquote(stage_dir)}/. ${shellquote(panel_dir)}/
- chown -R sing-box:sing-box ${shellquote(panel_dir)} 2>/dev/null || true
- `;
-
- let result = { result: true };
- if (system(replace_cmd) !== 0) {
- if (!restorePanelBackup(panel_dir, backup_dir))
- result = { result: false, error: 'panel_restore_failed' };
- else
- result = { result: false, error: 'panel_install_failed' };
- } else {
- cleanupPanelBackup(backup_dir);
- }
-
- system(`rm -f ${shellquote(tmpzip)}`);
- system(`rm -rf ${shellquote(extract_dir)} ${shellquote(stage_dir)}`);
- return result;
- }
- },
-
- node_latency_test: {
- args: { node: 'node', mode: 'mode' },
- call: function(req) {
- const error_codes = {
- invalid_node: 'invalid_node',
- invalid_mode: 'invalid_mode',
- mode_mismatch: 'mode_mismatch',
- rp_invalid_outbound: 'rp_invalid_outbound',
- rp_runtime_prepare_failed: 'rp_runtime_prepare_failed',
- rp_runtime_launch_failed: 'rp_runtime_launch_failed',
- rp_runtime_timeout: 'rp_runtime_timeout',
- rp_delay_timeout: 'rp_delay_timeout',
- rp_delay_failed: 'rp_delay_failed',
- icmp_probe_unavailable: 'icmp_probe_unavailable',
- icmp_timeout: 'icmp_timeout',
- icmp_failed: 'icmp_failed',
- probe_timeout: 'probe_timeout',
- backend_execution_failed: 'backend_execution_failed',
- probe_failed: 'probe_failed'
- };
- const probe_timeout_s = 3;
- const probe_timeout_ms = probe_timeout_s * 1000;
- const probe_system_timeout_ms = probe_timeout_ms + 250;
- const rp_probe_url = 'https://cp.cloudflare.com/generate_204';
- const rp_probe_url_encoded = 'https%3A%2F%2Fcp.cloudflare.com%2Fgenerate_204';
- const rp_delay_timeout_ms = 5000;
-
- const formatResult = (node, state, latency_ms, err, extras) => ({
- node,
- state,
- latency_ms,
- measured_at: time(),
- error: err,
- icmp_latency_ms: (extras && extras.icmp_latency_ms != null) ? extras.icmp_latency_ms : null,
- icmp_error: (extras && extras.icmp_error) ? extras.icmp_error : null,
- rp_runtime: (extras && extras.rp_runtime) ? extras.rp_runtime : null
- });
-
- const strToBool = (str) => ((str === '1') || null);
- const strToInt = (str) => (str != null && trim(sprintf('%s', str)) !== '') ? (int(str) || null) : null;
- const strToTime = (str) => (str != null && trim(sprintf('%s', str)) !== '') ? (str + 's') : null;
-
- function removeBlankAttrs(res) {
- let content;
-
- if (type(res) === 'object') {
- content = {};
- map(keys(res), (k) => {
- if (type(res[k]) in ['array', 'object'])
- content[k] = removeBlankAttrs(res[k]);
- else if (res[k] !== null && res[k] !== '')
- content[k] = res[k];
- });
- } else if (type(res) === 'array') {
- content = [];
- map(res, (k) => {
- if (type(k) in ['array', 'object'])
- push(content, removeBlankAttrs(k));
- else if (k !== null && k !== '')
- push(content, k);
- });
- } else
- return res;
-
- return content;
- }
-
- const parse_port = (strport) => {
- if (type(strport) !== 'array' || length(strport) === 0)
- return null;
-
- let ports = [];
- for (let i = 0; i < length(strport); i++)
- push(ports, int(strport[i]));
-
- return ports;
- };
-
- const generate_endpoint = (node_cfg) => {
- if (type(node_cfg) !== 'object' || length(node_cfg) === 0)
- return null;
-
- return {
- type: node_cfg.type,
- tag: 'cfg-' + node_cfg['.name'] + '-out',
- address: node_cfg.wireguard_local_address,
- mtu: strToInt(node_cfg.wireguard_mtu),
- private_key: node_cfg.wireguard_private_key,
- peers: (node_cfg.type === 'wireguard') ? [
- {
- address: node_cfg.address,
- port: strToInt(node_cfg.port),
- allowed_ips: [
- '0.0.0.0/0',
- '::/0'
- ],
- persistent_keepalive_interval: strToInt(node_cfg.wireguard_persistent_keepalive_interval),
- public_key: node_cfg.wireguard_peer_public_key,
- pre_shared_key: node_cfg.wireguard_pre_shared_key,
- reserved: parse_port(node_cfg.wireguard_reserved)
- }
- ] : null,
- system: (node_cfg.type === 'wireguard') ? false : null,
- tcp_fast_open: strToBool(node_cfg.tcp_fast_open),
- tcp_multi_path: strToBool(node_cfg.tcp_multi_path),
- udp_fragment: strToBool(node_cfg.udp_fragment)
- };
- };
-
- const generate_outbound = (node_cfg) => {
- if (type(node_cfg) !== 'object' || length(node_cfg) === 0)
- return null;
-
- return {
- type: node_cfg.type,
- tag: 'cfg-' + node_cfg['.name'] + '-out',
-
- server: (node_cfg.type !== 'direct') ? node_cfg.address : null,
- server_port: (node_cfg.type !== 'direct') ? strToInt(node_cfg.port) : null,
- server_ports: node_cfg.hysteria_hopping_port,
-
- username: (node_cfg.type !== 'ssh') ? node_cfg.username : null,
- user: (node_cfg.type === 'ssh') ? node_cfg.username : null,
- password: node_cfg.password,
-
- idle_session_check_interval: strToTime(node_cfg.anytls_idle_session_check_interval),
- idle_session_timeout: strToTime(node_cfg.anytls_idle_session_timeout),
- min_idle_session: strToInt(node_cfg.anytls_min_idle_session),
- hop_interval: strToTime(node_cfg.hysteria_hop_interval),
- up_mbps: strToInt(node_cfg.hysteria_up_mbps),
- down_mbps: strToInt(node_cfg.hysteria_down_mbps),
- obfs: node_cfg.hysteria_obfs_type ? {
- type: node_cfg.hysteria_obfs_type,
- password: node_cfg.hysteria_obfs_password
- } : node_cfg.hysteria_obfs_password,
- auth: (node_cfg.hysteria_auth_type === 'base64') ? node_cfg.hysteria_auth_payload : null,
- auth_str: (node_cfg.hysteria_auth_type === 'string') ? node_cfg.hysteria_auth_payload : null,
- recv_window_conn: strToInt(node_cfg.hysteria_recv_window_conn),
- recv_window: strToInt(node_cfg.hysteria_revc_window),
- disable_mtu_discovery: strToBool(node_cfg.hysteria_disable_mtu_discovery),
- method: node_cfg.shadowsocks_encrypt_method,
- plugin: node_cfg.shadowsocks_plugin,
- plugin_opts: node_cfg.shadowsocks_plugin_opts,
- version: (node_cfg.type === 'shadowtls') ? strToInt(node_cfg.shadowtls_version) : ((node_cfg.type === 'socks') ? node_cfg.socks_version : null),
- client_version: node_cfg.ssh_client_version,
- host_key: node_cfg.ssh_host_key,
- host_key_algorithms: node_cfg.ssh_host_key_algo,
- private_key: node_cfg.ssh_priv_key,
- private_key_passphrase: node_cfg.ssh_priv_key_pp,
- uuid: node_cfg.uuid,
- congestion_control: node_cfg.tuic_congestion_control,
- udp_relay_mode: node_cfg.tuic_udp_relay_mode,
- udp_over_stream: strToBool(node_cfg.tuic_udp_over_stream),
- zero_rtt_handshake: strToBool(node_cfg.tuic_enable_zero_rtt),
- heartbeat: strToTime(node_cfg.tuic_heartbeat),
- flow: node_cfg.vless_flow,
- alter_id: strToInt(node_cfg.vmess_alterid),
- security: node_cfg.vmess_encrypt,
- global_padding: strToBool(node_cfg.vmess_global_padding),
- authenticated_length: strToBool(node_cfg.vmess_authenticated_length),
- packet_encoding: node_cfg.packet_encoding,
-
- multiplex: (node_cfg.multiplex === '1') ? {
- enabled: true,
- protocol: node_cfg.multiplex_protocol,
- max_connections: strToInt(node_cfg.multiplex_max_connections),
- min_streams: strToInt(node_cfg.multiplex_min_streams),
- max_streams: strToInt(node_cfg.multiplex_max_streams),
- padding: strToBool(node_cfg.multiplex_padding),
- brutal: (node_cfg.multiplex_brutal === '1') ? {
- enabled: true,
- up_mbps: strToInt(node_cfg.multiplex_brutal_up),
- down_mbps: strToInt(node_cfg.multiplex_brutal_down)
- } : null
- } : null,
- tls: (node_cfg.tls === '1') ? {
- enabled: true,
- server_name: node_cfg.tls_sni,
- insecure: strToBool(node_cfg.tls_insecure),
- alpn: node_cfg.tls_alpn,
- min_version: node_cfg.tls_min_version,
- max_version: node_cfg.tls_max_version,
- cipher_suites: node_cfg.tls_cipher_suites,
- certificate_path: node_cfg.tls_cert_path,
- ech: (node_cfg.tls_ech === '1') ? {
- enabled: true,
- config: node_cfg.tls_ech_config,
- config_path: node_cfg.tls_ech_config_path
- } : null,
- utls: node_cfg.tls_utls ? {
- enabled: true,
- fingerprint: node_cfg.tls_utls
- } : null,
- reality: (node_cfg.tls_reality === '1') ? {
- enabled: true,
- public_key: node_cfg.tls_reality_public_key,
- short_id: node_cfg.tls_reality_short_id
- } : null
- } : null,
- transport: node_cfg.transport ? {
- type: node_cfg.transport,
- host: node_cfg.http_host || node_cfg.httpupgrade_host,
- path: node_cfg.http_path || node_cfg.ws_path,
- headers: node_cfg.ws_host ? {
- Host: node_cfg.ws_host
- } : null,
- method: node_cfg.http_method,
- max_early_data: strToInt(node_cfg.websocket_early_data),
- early_data_header_name: node_cfg.websocket_early_data_header,
- service_name: node_cfg.grpc_servicename,
- idle_timeout: node_cfg.http_idle_timeout,
- ping_timeout: node_cfg.http_ping_timeout,
- permit_without_stream: strToBool(node_cfg.grpc_permit_without_stream)
- } : null,
- udp_over_tcp: (node_cfg.udp_over_tcp === '1') ? {
- enabled: true,
- version: strToInt(node_cfg.udp_over_tcp_version)
- } : null,
- tcp_fast_open: strToBool(node_cfg.tcp_fast_open),
- tcp_multi_path: strToBool(node_cfg.tcp_multi_path),
- udp_fragment: strToBool(node_cfg.udp_fragment)
- };
- };
-
- const isControllerPortBusy = (port) => {
- const hex_port = sprintf('%04X', int(port));
- const tcp_v4 = readfile('/proc/net/tcp') || '';
- const tcp_v6 = readfile('/proc/net/tcp6') || '';
-
- for (let line in split(tcp_v4 + '\n' + tcp_v6, /\n/)) {
- const fields = split(trim(line), /\s+/);
- if (length(fields) < 4)
- continue;
-
- const local_addr = split(fields[1], ':');
- const state = fields[3];
- if (length(local_addr) !== 2)
- continue;
-
- if (local_addr[1] === hex_port && state === '0A')
- return true;
- }
-
- return false;
- };
-
- const pickControllerPort = (seed) => {
- const min_port = 19090;
- const span = 100;
- let hash_seed = 0;
-
- for (let i = 0; i < length(seed); i++)
- hash_seed += ord(seed, i);
-
- const start = hash_seed % span;
- for (let i = 0; i < span; i++) {
- const candidate = min_port + ((start + i) % span);
- if (candidate === 9090)
- continue;
- if (!isControllerPortBusy(candidate))
- return candidate;
- }
-
- return null;
- };
-
- const listRuntimePidsByConfig = (config_path) => {
- if (!config_path)
- return [];
-
- const scan_cmd = sprintf(
- '/bin/sh -c %s -- %s',
- shellquote('cfg="$1"; for proc in /proc/[0-9]*; do [ -d "$proc" ] || continue; pid="${proc#/proc/}"; [ -r "$proc/cmdline" ] || continue; found_cfg=0; has_sig=0; p1=""; p2=""; set -f; for arg in $(tr "\\000" "\\n" <"$proc/cmdline" 2>/dev/null); do [ "$arg" = "$cfg" ] && found_cfg=1; [ "${p2##*/}" = "sing-box" ] && [ "$p1" = "run" ] && [ "$arg" = "--config" ] && has_sig=1; p2="$p1"; p1="$arg"; done; set +f; [ "$has_sig" -eq 1 ] && [ "$found_cfg" -eq 1 ] && printf "%s\\n" "$pid"; done'),
- shellquote(config_path)
- );
-
- const fd = popen(scan_cmd);
- if (!fd)
- return [];
-
- let pids = [];
- let line;
- for (line = fd.read('line'); line !== null && line !== ''; line = fd.read('line')) {
- const pid = trim(line);
- if (match(pid, /^[0-9]+$/) && index(pids, pid) === -1)
- push(pids, pid);
- }
- fd.close();
-
- return pids;
- };
-
- const isRuntimeProcess = (pid, config_path) => {
- if (!pid || !match(pid, /^[0-9]+$/) || !config_path)
- return false;
-
- if (system(`/bin/kill -0 ${shellquote(pid)} >/dev/null 2>&1`) !== 0)
- return false;
-
- return (index(listRuntimePidsByConfig(config_path), pid) !== -1);
- };
-
- const findRuntimePidByConfig = (config_path) => {
- const pids = listRuntimePidsByConfig(config_path);
- for (let i = 0; i < length(pids); i++) {
- const pid = pids[i];
- if (system(`/bin/kill -0 ${shellquote(pid)} >/dev/null 2>&1`) === 0)
- return pid;
- }
-
- return null;
- };
-
- const resolveRuntimePid = (runtime_meta) => {
- if (!runtime_meta?.config_path)
- return null;
-
- const pid_file = trim(readfile(runtime_meta.pid_path) || '');
- if (isRuntimeProcess(pid_file, runtime_meta.config_path))
- return pid_file;
-
- const discovered = findRuntimePidByConfig(runtime_meta.config_path);
- if (discovered)
- writefile(runtime_meta.pid_path, discovered + '\n');
-
- return discovered;
- };
-
- const cleanupProbeRuntime = (runtime_meta) => {
- if (!runtime_meta)
- return;
-
- const terminateRuntimePid = (pid) => {
- if (!pid)
- return;
-
- system(`/bin/kill ${shellquote(pid)} >/dev/null 2>&1`);
- system('/bin/sleep 1');
- if (system(`/bin/kill -0 ${shellquote(pid)} >/dev/null 2>&1`) === 0)
- system(`/bin/kill -9 ${shellquote(pid)} >/dev/null 2>&1`);
- };
-
- let pid = resolveRuntimePid(runtime_meta);
- while (pid) {
- terminateRuntimePid(pid);
- system(`/bin/rm -f ${shellquote(runtime_meta.pid_path)}`);
- pid = findRuntimePidByConfig(runtime_meta.config_path);
- }
-
- system(`/bin/rm -rf ${shellquote(runtime_meta.session_dir)}`);
- };
-
- const waitControllerReady = (runtime_meta, timeout_ms) => {
- try {
- let retries = int((timeout_ms + 999) / 1000);
- if (!retries || retries < 1)
- retries = 1;
-
- for (let i = 0; i < retries; i++) {
- resolveRuntimePid(runtime_meta);
-
- const probe_fd = popen(`/usr/bin/wget -qO- ${shellquote(runtime_meta.controller_url + '/version')} 2>"/dev/null"`);
- if (probe_fd) {
- let payload = '', line;
- while (true) {
- line = probe_fd.read('line');
- if (line === null || line === '')
- break;
- payload += line;
- }
- probe_fd.close();
- if (trim(payload))
- return true;
- }
-
- if (i + 1 < retries)
- system('/bin/sleep 1');
- }
-
- return false;
- } catch (e) {
- return false;
- }
- };
-
- const buildProbeRuntime = (node_name, node_cfg) => {
- const runtime_root = RUN_DIR + '/latency-test';
- const session_id = sprintf('%s-%d-%d', node_name, time(), int(readfile('/proc/uptime') || '0'));
- const session_dir = `${runtime_root}/${session_id}`;
- const config_path = `${session_dir}/sing-box.json`;
- const log_path = `${session_dir}/sing-box.log`;
- const cache_path = `${session_dir}/cache.db`;
- const pid_path = `${session_dir}/sing-box.pid`;
-
- const controller_port = pickControllerPort(node_name || 'real-proxy');
- if (!controller_port)
- return { error: 'no available temporary controller port' };
-
- const selected_tag = 'probe-out';
- const config = {
- log: {
- disabled: false,
- level: 'warn',
- output: log_path,
- timestamp: true
- },
- outbounds: [
- {
- type: 'direct',
- tag: 'direct-out'
- },
- {
- type: 'block',
- tag: 'block-out'
- }
- ],
- endpoints: [],
- route: {
- final: selected_tag,
- auto_detect_interface: true
- },
- experimental: {
- clash_api: {
- external_controller: `127.0.0.1:${controller_port}`
- },
- cache_file: {
- enabled: true,
- path: cache_path
- }
- }
- };
-
- const rendered_outbound = (node_cfg.type === 'wireguard') ? generate_endpoint(node_cfg) : generate_outbound(node_cfg);
- if (rendered_outbound && type(rendered_outbound) === 'object')
- rendered_outbound.tag = selected_tag;
-
- if (!rendered_outbound || type(rendered_outbound) !== 'object' || rendered_outbound.tag !== selected_tag || !rendered_outbound.type)
- return {
- error: 'failed to render temporary outbound for selected node',
- code: error_codes.rp_invalid_outbound
- };
-
- if (node_cfg.type === 'wireguard')
- push(config.endpoints, rendered_outbound);
- else
- push(config.outbounds, rendered_outbound);
-
- if (system(`/bin/mkdir -p ${shellquote(session_dir)}`) !== 0)
- return { error: 'failed to prepare temporary runtime directory' };
-
- if (!writefile(config_path, sprintf('%.J\n', removeBlankAttrs(config)))) {
- system(`/bin/rm -rf ${shellquote(session_dir)}`);
- return { error: 'failed to write temporary sing-box config' };
- }
-
- return {
- runtime_root,
- session_dir,
- config_path,
- log_path,
- cache_path,
- pid_path,
- controller_port,
- controller_url: `http://127.0.0.1:${controller_port}`
- };
- };
-
- const launchProbeRuntime = (runtime_meta) => {
- if (!runtime_meta)
- return false;
-
- const launch_cmd = sprintf(
- '/usr/bin/sing-box run --config %s >/dev/null 2>&1 & pid=$!; [ -n "$pid" ] && printf "%%s\\n" "$pid" > %s',
- shellquote(runtime_meta.config_path),
- shellquote(runtime_meta.pid_path)
- );
-
- if (system(`/bin/sh -c ${shellquote(launch_cmd)}`) !== 0)
- return false;
-
- for (let i = 0; i < 5; i++) {
- const pid = resolveRuntimePid(runtime_meta);
- if (pid)
- return true;
-
- system('/bin/sleep 1');
- }
-
- return false;
- };
-
- const monotonicMs = () => {
- const uptime = trim(readfile('/proc/uptime') || '');
- const parsed = match(uptime, /^([0-9]+)(\.([0-9]+))?/);
-
- if (!parsed)
- return null;
-
- const sec = int(parsed[1]);
- const frac = ((parsed[3] || '') + '000');
- const msec = int(substr(frac, 0, 3));
-
- return sec * 1000 + msec;
- };
-
- const probeRealProxyDelay = (runtime_meta, node_name) => {
- const selected_tag = 'probe-out';
- const delay_endpoint = sprintf(
- '%s/proxies/%s/delay?url=%s&timeout=%d',
- runtime_meta.controller_url,
- selected_tag,
- rp_probe_url_encoded,
- rp_delay_timeout_ms
- );
-
- const started_ms = monotonicMs();
- const fd = popen(sprintf(
- '/usr/bin/wget -qO- -T %d %s 2>"/dev/null"',
- int((rp_delay_timeout_ms + 999) / 1000),
- shellquote(delay_endpoint)
- ));
- if (!fd)
- return {
- state: 'timeout',
- error: {
- code: error_codes.rp_delay_timeout,
- message: 'failed to open temporary Clash API delay endpoint'
- }
- };
-
- let payload = '', line;
- while (true) {
- line = fd.read('line');
- if (line === null || line === '')
- break;
- payload += line;
- }
- fd.close();
-
- const ended_ms = monotonicMs();
- if (!trim(payload || '')) {
- if (started_ms !== null && ended_ms !== null && ended_ms - started_ms >= rp_delay_timeout_ms)
- return {
- state: 'timeout',
- error: {
- code: error_codes.rp_delay_timeout,
- message: sprintf('temporary Clash API delay request timed out after %dms', rp_delay_timeout_ms)
- }
- };
-
- return {
- state: 'error',
- error: {
- code: error_codes.rp_delay_failed,
- message: 'temporary Clash API delay response is empty'
- }
- };
- }
-
- let data = null;
- try {
- data = json(payload);
- } catch (e) {
- return {
- state: 'error',
- error: {
- code: error_codes.rp_delay_failed,
- message: 'temporary Clash API delay response is not valid JSON'
- }
- };
- }
-
- const delay_ms = int(data?.delay || '0');
- if (delay_ms > 0)
- return {
- state: 'success',
- latency_ms: delay_ms
- };
-
- const failure_msg = trim(sprintf('%s', data?.message || data?.error || '')) || 'temporary Clash API delay request failed';
- if (match(failure_msg, /timeout/i) || (started_ms !== null && ended_ms !== null && ended_ms - started_ms >= rp_delay_timeout_ms))
- return {
- state: 'timeout',
- error: {
- code: error_codes.rp_delay_timeout,
- message: failure_msg
- }
- };
-
- return {
- state: 'error',
- error: {
- code: error_codes.rp_delay_failed,
- message: failure_msg
- }
- };
- };
-
- const normalizeLatencyMode = (m) => (m === 'tcp') ? 'icmp' : m;
- const node = trim(req.args?.node || '') || null;
- const requested_mode = trim(req.args?.mode || '');
- const mode = normalizeLatencyMode(requested_mode);
- const allowed_modes = ['icmp', 'rp'];
- const allowed_configured_modes = ['icmp', 'tcp', 'rp'];
- if (!node)
- return formatResult(null, 'error', null, {
- code: error_codes.invalid_node,
- message: 'missing node section id'
- });
-
- if (index(allowed_modes, mode) === -1)
- return formatResult(node, 'error', null, {
- code: error_codes.invalid_mode,
- message: sprintf('invalid latency test mode: %s', mode || '(empty)')
- });
-
- const uci = cursor();
- uci.load('homeproxy');
-
- const configured_mode_raw = trim(uci.get('homeproxy', 'subscription', 'latency_test_mode') || '');
- const configured_mode = normalizeLatencyMode(configured_mode_raw);
- if (configured_mode_raw && index(allowed_configured_modes, configured_mode_raw) === -1)
- return formatResult(node, 'error', null, {
- code: error_codes.invalid_mode,
- message: sprintf('configured latency test mode is invalid: %s', configured_mode_raw || '(empty)')
- });
-
- if (configured_mode && configured_mode !== mode)
- return formatResult(node, 'error', null, {
- code: error_codes.mode_mismatch,
- message: sprintf('request mode %s does not match configured mode %s', mode, configured_mode)
- });
-
- const section = uci.get_all('homeproxy', node);
- if (!section || section['.type'] !== 'node')
- return formatResult(node, 'error', null, {
- code: error_codes.invalid_node,
- message: 'node section does not exist or is not a node section'
- });
-
- const address = trim(section.address || '');
- const port = int(section.port || '0');
- if (!address || port <= 0 || port > 65535)
- return formatResult(node, 'error', null, {
- code: error_codes.invalid_node,
- message: 'node address or port is invalid'
- });
-
- if (mode === 'rp') {
- let runtime_meta = null;
- let runtime_active = false;
- let runtime_info = {
- runtime_root: RUN_DIR + '/latency-test',
- session_dir: null,
- config_path: null,
- pid_path: null,
- controller: null,
- launched: false,
- controller_ready: false,
- cleaned_up: false
- };
-
- runtime_meta = buildProbeRuntime(node, section);
- if (runtime_meta?.error)
- runtime_info.cleaned_up = true;
-
- if (runtime_meta?.error)
- return formatResult(node, 'error', null, {
- code: runtime_meta.code || error_codes.rp_runtime_prepare_failed,
- message: runtime_meta.error
- }, {
- rp_runtime: runtime_info
- });
-
- runtime_info.session_dir = runtime_meta.session_dir;
- runtime_info.config_path = runtime_meta.config_path;
- runtime_info.pid_path = runtime_meta.pid_path;
- runtime_info.controller = `127.0.0.1:${runtime_meta.controller_port}`;
- runtime_active = true;
-
- const finalizeRealProxyResult = (state, latency_ms, err) => {
- if (runtime_active && runtime_meta) {
- cleanupProbeRuntime(runtime_meta);
- runtime_active = false;
- runtime_info.cleaned_up = true;
- }
-
- return formatResult(node, state, latency_ms, err, {
- rp_runtime: runtime_info
- });
- };
-
- try {
- if (!launchProbeRuntime(runtime_meta))
- return finalizeRealProxyResult('error', null, {
- code: error_codes.rp_runtime_launch_failed,
- message: 'failed to launch temporary sing-box runtime'
- });
-
- runtime_info.launched = true;
-
- if (!waitControllerReady(runtime_meta, rp_delay_timeout_ms))
- return finalizeRealProxyResult('timeout', null, {
- code: error_codes.rp_runtime_timeout,
- message: 'temporary sing-box runtime controller did not become ready in time'
- });
-
- runtime_info.controller_ready = true;
- const delay_result = probeRealProxyDelay(runtime_meta, node);
- if (delay_result.state === 'success' && delay_result.latency_ms > 0)
- return finalizeRealProxyResult('success', delay_result.latency_ms, null);
-
- if (delay_result.state === 'timeout')
- return finalizeRealProxyResult('timeout', null, delay_result.error || {
- code: error_codes.rp_delay_timeout,
- message: sprintf('temporary Clash API delay request timed out after %dms', rp_delay_timeout_ms)
- });
-
- return finalizeRealProxyResult('error', null, delay_result.error || {
- code: error_codes.rp_delay_failed,
- message: sprintf('temporary Clash API delay probe failed for %s', rp_probe_url)
- });
- } catch (e) {
- return finalizeRealProxyResult('error', null, {
- code: error_codes.backend_execution_failed,
- message: 'unexpected backend error while handling temporary rp runtime'
- });
- }
- }
-
- const ping = access('/bin/ping') ? '/bin/ping' : (access('/usr/bin/ping') ? '/usr/bin/ping' : null);
-
- const runProbe = (command, timeout_ms) => {
- const started_ms = monotonicMs();
- const probe_exit = system(command, timeout_ms);
- const ended_ms = monotonicMs();
- let latency_ms = null;
- if (started_ms !== null && ended_ms !== null && ended_ms >= started_ms)
- latency_ms = ended_ms - started_ms;
- return { probe_exit, latency_ms };
- };
-
- let icmp_latency_ms = null;
- let icmp_error = null;
-
- if (!ping) {
- icmp_error = {
- code: error_codes.icmp_probe_unavailable,
- message: 'missing ping executable for ICMP probe'
- };
- }
- else {
- const result = runProbe(
- `${ping} -c 1 -W ${probe_timeout_s} ${shellquote(address)} >/dev/null 2>/dev/null`,
- probe_system_timeout_ms
- );
-
- if (result.probe_exit === 0)
- icmp_latency_ms = (result.latency_ms !== null) ? result.latency_ms : 0;
- else if (result.probe_exit === -1 || (result.latency_ms !== null && result.latency_ms >= probe_timeout_ms))
- icmp_error = {
- code: error_codes.icmp_timeout,
- message: `ICMP ping timeout after ${probe_timeout_s}s`
- };
- else if (result.probe_exit === 127)
- icmp_error = {
- code: error_codes.backend_execution_failed,
- message: 'ICMP ping command execution failed'
- };
- else
- icmp_error = {
- code: error_codes.icmp_failed,
- message: `ICMP ping failed with exit code ${result.probe_exit}`
- };
- }
-
- if (icmp_latency_ms !== null)
- return formatResult(node, 'success', icmp_latency_ms, null, {
- icmp_latency_ms,
- icmp_error
- });
-
- if (icmp_error?.code === error_codes.icmp_timeout)
- return formatResult(node, 'timeout', null, {
- code: error_codes.probe_timeout,
- message: `ICMP probe timed out after ${probe_timeout_s}s`
- }, {
- icmp_latency_ms,
- icmp_error
- });
-
- return formatResult(node, 'error', null, icmp_error || {
- code: error_codes.probe_failed,
- message: 'ICMP probe failed'
- }, {
- icmp_latency_ms,
- icmp_error
- });
+ return { result: (system(`/usr/bin/wget --spider -qT3 ${url} 2>"/dev/null"`, 3100) === 0) };
}
},
@@ -1309,10 +149,6 @@ const methods = {
const filestat = lstat(`${RUN_DIR}/${req.args?.type}.log`);
if (filestat)
writefile(`${RUN_DIR}/${req.args?.type}.log`, '');
- else {
- system(`mkdir -p ${RUN_DIR}`);
- writefile(`${RUN_DIR}/${req.args?.type}.log`, '');
- }
return { result: true };
}
},
@@ -1394,70 +230,24 @@ const methods = {
}
},
- package_get_version: {
- call: function() {
- let version = trim(readfile('/usr/share/homeproxy/version') || '');
-
- if (!version) {
- const status = readfile('/usr/lib/opkg/status');
- let in_package = false;
-
- if (status) {
- const lines = split(status, '\n');
- for (let i = 0; i < length(lines); i++) {
- let line = lines[i];
- line = trim(line);
-
- if (!line) {
- in_package = false;
- continue;
- }
-
- if (line == 'Package: luci-app-homeproxy') {
- in_package = true;
- continue;
- }
-
- if (in_package) {
- let matched = match(line, /^Version: (.*)/);
- if (matched) {
- version = matched[1];
- break;
- }
- }
- }
- }
- }
-
- if (!version) {
- const fd = popen('/usr/bin/opkg status luci-app-homeproxy 2>/dev/null');
- if (fd) {
- for (let line = fd.read('line'); length(line); line = fd.read('line')) {
- let matched = match(trim(line), /^Version: (.*)/);
- if (matched) {
- version = matched[1];
- break;
- }
- }
-
- fd.close();
- }
- }
-
- return { version: version || '-' };
- }
- },
-
resources_get_version: {
args: { type: 'type' },
call: function(req) {
- const version = trim(readfile(`${HP_DIR}/resources/${req.args?.type}.ver`));
+ /* whitelist resource types to prevent path traversal */
+ if (index(['china_ip4', 'china_ip6', 'gfw_list', 'china_list'], req.args?.type) === -1)
+ return { error: 'illegal type', version: null };
+ let version = trim(readfile(`${HP_DIR}/resources/${req.args?.type}.ver`));
+ const fields = version ? match(version, /^(\S+) (\S+)$/) : null;
+ if (fields)
+ version = fields[1];
return { version: version, error: error() };
}
},
resources_update: {
args: { type: 'type' },
call: function(req) {
+ if (index(['china_ip4', 'china_ip6', 'gfw_list', 'china_list'], req.args?.type) === -1)
+ return { status: 255, error: 'illegal type' };
if (req.args?.type) {
const type = shellquote(req.args?.type);
const exit_code = system(`${HP_DIR}/scripts/update_resources.sh ${type}`);
diff --git a/luci-app-homeproxy/tests/README.md b/luci-app-homeproxy/tests/README.md
new file mode 100644
index 000000000..8283c9b83
--- /dev/null
+++ b/luci-app-homeproxy/tests/README.md
@@ -0,0 +1,60 @@
+# luci-app-homeproxy tests
+
+Automated checks for the pieces that `sing-box check` cannot validate: the
+share-link parsers, the UCI→JSON generators and the LuCI form definitions.
+
+## Running
+
+```sh
+tests/run.sh
+```
+
+* The **LuCI form snapshots** run locally and only need `node`. They re-render
+ the node/server views through a mock LuCI runtime and diff the result against
+ `tests/snapshots/*.json`.
+* The **ucode tests** need `ucode`; the generator cases additionally run
+ `sing-box check`, so they need sing-box ≥ 1.14 as well (available on an
+ OpenWrt/ImmortalWrt target). When the host running `tests/run.sh` has neither,
+ the checkout is copied over ssh to `$HP_TEST_HOST` (default
+ `root@192.168.1.1`) and the tests run there:
+
+ ```sh
+ HP_TEST_HOST=root@192.168.1.1 tests/run.sh
+ HP_TEST_DIR=/tmp/hp-tests tests/run.sh
+ ```
+
+`tests/run.sh` exits non-zero if anything fails. The ucode part can also be run
+on its own on a target:
+
+```sh
+sh tests/ucode/run.sh "$PWD"
+```
+
+## What is covered
+
+| Path | Checks |
+| --- | --- |
+| `tests/i18n-coverage.py` | Reports how many `po/templates/homeproxy.pot` strings have a non-fuzzy, non-empty `po/zh_Hans/homeproxy.po` translation. Technical tokens that stay as-is are listed in `tests/i18n-ignore.txt`; anything else missing produces a warning annotation (`--warn-below 100` by default) and a job-summary entry. Run by `.github/workflows/i18n.yml` on push/PR and before a release. |
+| `tests/luci-form-snapshot.js` | Dumps every option (name, kind, title, description, depends, values, datatype/default/…) of the node and server views. Diffs against `tests/snapshots/{node,server}.json`, so a refactor that changes a field or its visibility fails. |
+| `tests/ucode/test_homeproxy_utils.uc` | `executeCommand()` return shape, stderr/exit-code capture, binary detection, and a descriptor-leak check (200 calls). |
+| `tests/ucode/test_homeproxy_utils_inject.uc` | The failure path of `executeCommand()`: the script stages a copy of `homeproxy.uc` whose `system()` call is replaced by `die()`, then checks that the exception still propagates and that neither descriptor leaks. |
+| `tests/ucode/test_fw4_names.sh` | Keeps the fw4 chain/set inventory in `scripts/fw4_names.sh` (used by `init.d/homeproxy` to clean up on stop) in sync with the objects declared in `scripts/firewall_post.ut`. |
+| `tests/ucode/test_parse_uri.uc` | Per-scheme assertions on the `parse_uri()` result: anytls, http/https, hysteria, hysteria2/hy2, snell, socks(4/4a/5/5h), shadowsocks (SIP002 base64 + plain + plugin, Shadowrocket), trojan (ws/grpc), tuic, vless (reality/ws/http/httpupgrade), vmess (ws/h2/httpupgrade/grpc) and SIP008 objects, plus the rejection paths (unsupported kcp/quic, no QUIC support, invalid port, unknown scheme). |
+| `tests/ucode/test_generators.sh` | Runs `generate_client.uc`/`generate_server.uc` against the UCI fixtures in `tests/fixtures/generators/` inside a scratch directory (the `uci` cursor and `HP_DIR`/`RUN_DIR` are redirected) and validates each result with `sing-box check`. |
+
+`tests/ucode/mocks/homeproxy.uc` is a test double for the real module: only
+`validation()` is stubbed (the real one runs `/sbin/validate_data`, which does
+not exist outside OpenWrt), everything else is a copy of the production code.
+
+## Adding cases
+
+* New share link → add an `expect_fields(...)` case to `test_parse_uri.uc`.
+* New protocol option that reaches the generator → extend the fixtures in
+ `tests/fixtures/generators/`, keeping values schema-valid so `sing-box check`
+ still passes.
+* Intentional LuCI form change → regenerate the snapshots:
+
+ ```sh
+ node tests/luci-form-snapshot.js . node > tests/snapshots/node.json
+ node tests/luci-form-snapshot.js . server > tests/snapshots/server.json
+ ```
diff --git a/luci-app-homeproxy/tests/fixtures/generators/client.uci b/luci-app-homeproxy/tests/fixtures/generators/client.uci
new file mode 100644
index 000000000..eeaf7c03f
--- /dev/null
+++ b/luci-app-homeproxy/tests/fixtures/generators/client.uci
@@ -0,0 +1,170 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Regression fixture for generate_client.uc: a node of every supported
+# protocol reachable through a single urltest main node, so one run exercises
+# all outbound builders (TLS, transport, reality, mux, obfuscation).
+
+config homeproxy 'config'
+ option routing_mode 'bypass_mainland_china'
+ option proxy_mode 'tun'
+ option ipv6_support '0'
+ option log_level 'error'
+ option main_node 'urltest'
+ option main_udp_node 'nil'
+ option dns_server 'https://cloudflare-dns.com/dns-query'
+ list main_urltest_nodes 'n_anytls'
+ list main_urltest_nodes 'n_vless_reality_ws'
+ list main_urltest_nodes 'n_vmess_http'
+ list main_urltest_nodes 'n_trojan_grpc'
+ list main_urltest_nodes 'n_ss'
+ list main_urltest_nodes 'n_hy2'
+ list main_urltest_nodes 'n_snell'
+ list main_urltest_nodes 'n_http'
+ list main_urltest_nodes 'n_socks'
+ list main_urltest_nodes 'n_shadowtls'
+
+config homeproxy 'infra'
+ option mixed_port '5330'
+ option dns_port '5333'
+ option tun_name 'singtun0'
+ option tun_addr4 '172.19.0.1/30'
+ option tun_addr6 'fdfe:dcba:9876::1/126'
+ option tun_mtu '9000'
+ option self_mark '100'
+ option tun_mark '102'
+ option table_mark '100'
+ option ntp_server 'nil'
+
+config node 'n_anytls'
+ option label 'anytls'
+ option type 'anytls'
+ option address 'a.example.com'
+ option port '443'
+ option password 'secret'
+ option tls '1'
+ option tls_sni 'a.example.com'
+ option tls_insecure '0'
+ option anytls_idle_session_check_interval '30'
+ option anytls_idle_session_timeout '30'
+ option anytls_min_idle_session '0'
+
+config node 'n_vless_reality_ws'
+ option label 'vless-reality-ws'
+ option type 'vless'
+ option address 'b.example.com'
+ option port '443'
+ option uuid '3af88561-9c69-4b19-8f7e-f08d580bc339'
+ option transport 'ws'
+ option ws_host 'b.example.com'
+ option ws_path '/ws?ed=2048'
+ option tls '1'
+ option tls_sni 'b.example.com'
+ option tls_reality '1'
+ option tls_reality_public_key '4UAg690QziXeelpUJoAmXiim0gfQESSiJkNfvF-o8Uw'
+ option tls_reality_short_id 'abcd'
+ option tls_utls 'chrome'
+ option vless_flow 'xtls-rprx-vision'
+ option packet_encoding 'xudp'
+
+config node 'n_vmess_http'
+ option label 'vmess-http'
+ option type 'vmess'
+ option address 'c.example.com'
+ option port '80'
+ option uuid '3af88561-9c69-4b19-8f7e-f08d580bc339'
+ option transport 'http'
+ option http_host 'c.example.com'
+ option http_path '/path'
+ option http_method 'GET'
+ option vmess_alterid '0'
+ option vmess_encrypt 'auto'
+ option vmess_global_padding '1'
+ option tls '0'
+ option packet_encoding 'packetaddr'
+
+config node 'n_trojan_grpc'
+ option label 'trojan-grpc'
+ option type 'trojan'
+ option address 'd.example.com'
+ option port '443'
+ option password 'secret'
+ option transport 'grpc'
+ option grpc_servicename 'gs'
+ option grpc_permit_without_stream '1'
+ option tls '1'
+ option tls_sni 'd.example.com'
+ option tls_handshake_timeout '15'
+ option tls_min_version '1.2'
+ option tls_max_version '1.3'
+ option tls_cipher_suites 'TLS_AES_128_GCM_SHA256'
+
+config node 'n_ss'
+ option label 'ss'
+ option type 'shadowsocks'
+ option address 'e.example.com'
+ option port '8388'
+ option shadowsocks_encrypt_method 'aes-256-gcm'
+ option password 'secret'
+ option multiplex '1'
+ option multiplex_protocol 'h2mux'
+ option multiplex_padding '1'
+ option multiplex_max_connections '4'
+ option udp_over_tcp '1'
+ option udp_over_tcp_version '2'
+
+config node 'n_hy2'
+ option label 'hy2'
+ option type 'hysteria2'
+ option address 'f.example.com'
+ option port '443'
+ option password 'secret'
+ option tls '1'
+ option tls_sni 'f.example.com'
+ option hysteria_obfs_type 'salamander'
+ option hysteria_obfs_password 'obfspass'
+ option hysteria_up_mbps '100'
+ option hysteria_down_mbps '500'
+ option hysteria_hopping_port '20000:30000'
+ option hysteria_hop_interval '30'
+ option hysteria_bbr_profile 'conservative'
+
+config node 'n_snell'
+ option label 'snell'
+ option type 'snell'
+ option address 'g.example.com'
+ option port '443'
+ option password 'psk123456789012'
+ option snell_version '4'
+ option snell_obfs_mode 'http'
+ option snell_obfs_host 'bing.com'
+ option snell_reuse '1'
+ option snell_userkey 'ukey'
+
+config node 'n_http'
+ option label 'http'
+ option type 'http'
+ option address 'h.example.com'
+ option port '8080'
+ option username 'u'
+ option password 'p'
+ option tls '0'
+
+config node 'n_socks'
+ option label 'socks'
+ option type 'socks'
+ option address 'i.example.com'
+ option port '1080'
+ option username 'u'
+ option password 'p'
+ option socks_version '5'
+
+config node 'n_shadowtls'
+ option label 'shadowtls'
+ option type 'shadowtls'
+ option address 'j.example.com'
+ option port '443'
+ option password 'secret'
+ option shadowtls_version '3'
+ option tls '1'
+ option tls_sni 'j.example.com'
+
diff --git a/luci-app-homeproxy/tests/fixtures/generators/custom.uci b/luci-app-homeproxy/tests/fixtures/generators/custom.uci
new file mode 100644
index 000000000..eb56202cb
--- /dev/null
+++ b/luci-app-homeproxy/tests/fixtures/generators/custom.uci
@@ -0,0 +1,56 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Regression fixture for routing_mode='custom'. It reproduces two crashes
+# that only the custom path could hit:
+#
+# * a direct node with an override forces generate_outbound() to write into
+# direct_overrides, and the routing rule below forces get_direct_override()
+# to read it -- so the table has to be declared before both helpers;
+# * a local rule-set must not carry the legacy download_detour field, which
+# sing-box 1.14 rejects on anything but a remote rule-set.
+#
+# __RULESET_DIR__ is substituted by tests/ucode/test_generators.sh with a
+# directory holding a real compiled .srs file.
+
+config homeproxy 'config'
+ option routing_mode 'custom'
+ option proxy_mode 'redirect_tproxy'
+ option ipv6_support '0'
+ option log_level 'error'
+
+config homeproxy 'routing'
+ option default_outbound 'direct-out'
+ option default_outbound_dns 'default-dns'
+
+config homeproxy 'infra'
+ option mixed_port '5330'
+ option dns_port '5333'
+ option redirect_port '5331'
+ option self_mark '100'
+
+# direct node: exercises the direct_overrides write path
+config node 'n_direct'
+ option label 'direct-node'
+ option type 'direct'
+ option override_address '1.2.3.4'
+ option override_port '8443'
+
+# routing node + rule: exercises get_direct_override() reading direct_overrides
+config routing_node 'rn_direct'
+ option enabled '1'
+ option label 'rn-direct'
+ option node 'n_direct'
+
+config routing_rule 'rr_direct'
+ option enabled '1'
+ option label 'rr-direct'
+ option outbound 'rn_direct'
+ option action 'route'
+
+# local rule-set: must never carry download_detour
+config ruleset 'rs_local'
+ option enabled '1'
+ option label 'local-rs'
+ option type 'local'
+ option format 'binary'
+ option path '__RULESET_DIR__/test.srs'
diff --git a/luci-app-homeproxy/tests/fixtures/generators/server.uci b/luci-app-homeproxy/tests/fixtures/generators/server.uci
new file mode 100644
index 000000000..9fb7285b6
--- /dev/null
+++ b/luci-app-homeproxy/tests/fixtures/generators/server.uci
@@ -0,0 +1,112 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Regression fixture for generate_server.uc: one inbound per protocol family,
+# covering the shared TLS/transport builders (ACME provider, ECH key, REALITY,
+# WebSocket/gRPC/HTTP transports) on the server side.
+
+config homeproxy 'server'
+ option enabled '1'
+ option log_level 'warn'
+
+config server 's_vless_ws'
+ option enabled '1'
+ option type 'vless'
+ option listen_port '8443'
+ option uuid '3af88561-9c69-4b19-8f7e-f08d580bc339'
+ option transport 'ws'
+ option ws_host 'a.example.com'
+ option ws_path '/ws'
+ option websocket_early_data '2048'
+ option tls '1'
+ option tls_sni 'a.example.com'
+ option tls_acme '1'
+ option tls_acme_domain 'a.example.com'
+ option tls_acme_provider 'letsencrypt'
+ option tls_acme_email 'admin@example.com'
+ option tls_acme_dsn 'a.example.com'
+ option tls_acme_key_type 'p256'
+ option tls_alpn 'h2'
+ option tls_min_version '1.2'
+
+config server 's_anytls'
+ option enabled '1'
+ option type 'anytls'
+ option listen_port '8444'
+ option password 'secret'
+ option anytls_padding_scheme 'stop=8'
+ option tls '1'
+ option tls_sni 'b.example.com'
+ option tls_acme '1'
+ option tls_acme_domain 'b.example.com'
+ option tls_acme_provider 'zerossl'
+ option tls_acme_email 'admin@example.com'
+ option tls_acme_dsn 'b.example.com'
+
+config server 's_hy2'
+ option enabled '1'
+ option type 'hysteria2'
+ option listen_port '8445'
+ option password 'secret'
+ option hysteria_up_mbps '100'
+ option hysteria_down_mbps '500'
+ option hysteria_obfs_type 'salamander'
+ option hysteria_obfs_password 'obfspass'
+ option hysteria_masquerade 'https://example.com'
+ option tls '1'
+ option tls_sni 'c.example.com'
+ option tls_acme '1'
+ option tls_acme_domain 'c.example.com'
+ option tls_acme_provider 'letsencrypt'
+ option tls_acme_email 'admin@example.com'
+ option tls_acme_dsn 'c.example.com'
+
+config server 's_trojan_grpc'
+ option enabled '1'
+ option type 'trojan'
+ option listen_port '8446'
+ option password 'secret'
+ option transport 'grpc'
+ option grpc_servicename 'gs'
+ option multiplex '1'
+ option multiplex_padding '1'
+ option tls '1'
+ option tls_sni 'd.example.com'
+ option tls_acme '1'
+ option tls_acme_domain 'd.example.com'
+ option tls_acme_provider 'letsencrypt'
+ option tls_acme_email 'admin@example.com'
+ option tls_acme_dsn 'd.example.com'
+
+config server 's_ss'
+ option enabled '1'
+ option type 'shadowsocks'
+ option listen_port '8447'
+ option network 'tcp'
+ option shadowsocks_encrypt_method 'aes-256-gcm'
+ option password 'secret'
+ option udp_timeout '300'
+
+config server 's_snell'
+ option enabled '1'
+ option type 'snell'
+ option listen_port '8448'
+ option password 'psk123456789012'
+ option snell_version '5'
+ option snell_obfs_mode 'http'
+
+config server 's_tuic'
+ option enabled '1'
+ option type 'tuic'
+ option listen_port '8449'
+ option uuid '3af88561-9c69-4b19-8f7e-f08d580bc339'
+ option password 'secret'
+ option tuic_congestion_control 'bbr'
+ option tuic_auth_timeout '3'
+ option tuic_heartbeat '10'
+ option tls '1'
+ option tls_sni 'e.example.com'
+ option tls_acme '1'
+ option tls_acme_domain 'e.example.com'
+ option tls_acme_provider 'letsencrypt'
+ option tls_acme_email 'admin@example.com'
+ option tls_acme_dsn 'e.example.com'
diff --git a/luci-app-homeproxy/tests/i18n-coverage.py b/luci-app-homeproxy/tests/i18n-coverage.py
new file mode 100755
index 000000000..df1312313
--- /dev/null
+++ b/luci-app-homeproxy/tests/i18n-coverage.py
@@ -0,0 +1,152 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2025 ImmortalWrt.org
+#
+# Report how much of the gettext template (po/templates/homeproxy.pot) is
+# translated in po/zh_Hans/homeproxy.po. Missing, empty and fuzzy entries all
+# count as untranslated. The check only warns by default so it does not block
+# a build; pass --fail-below to turn the warning into a failure.
+#
+# Usage:
+# tests/i18n-coverage.py # warn below 95%
+# tests/i18n-coverage.py --warn-below 90
+# tests/i18n-coverage.py --fail-below 95
+# tests/i18n-coverage.py --list 20
+
+import argparse
+import os
+import sys
+
+ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+TEMPLATE = os.path.join(ROOT, "po/templates/homeproxy.pot")
+TRANSLATION = os.path.join(ROOT, "po/zh_Hans/homeproxy.po")
+IGNORE = os.path.join(ROOT, "tests/i18n-ignore.txt")
+
+
+def load_ignore(path):
+ """msgids that are deliberately not translated (technical tokens)."""
+ if not os.path.exists(path):
+ return set()
+ ignored = set()
+ with open(path, encoding="utf-8") as handle:
+ for raw in handle:
+ line = raw.strip()
+ if line and not line.startswith("#"):
+ ignored.add(line)
+ return ignored
+
+
+def unquote(value):
+ value = value.strip()
+ if len(value) >= 2 and value[0] == '"' and value[-1] == '"':
+ return value[1:-1]
+ return value
+
+
+def parse_po(path):
+ """Return {msgid: {'msgstr': str, 'fuzzy': bool}} for non-empty msgids."""
+ entries = {}
+ msgid = None
+ msgstr = ""
+ state = None
+ pending_fuzzy = False
+ entry_fuzzy = False
+
+ def flush():
+ if msgid:
+ entries[msgid] = {"msgstr": msgstr, "fuzzy": entry_fuzzy}
+
+ with open(path, encoding="utf-8") as handle:
+ for raw in handle:
+ line = raw.rstrip("\n")
+
+ if line.startswith("#,"):
+ if "fuzzy" in line:
+ pending_fuzzy = True
+ continue
+
+ if line.startswith("#"):
+ continue
+
+ if line.startswith("msgid "):
+ flush()
+ msgid = unquote(line[len("msgid "):])
+ msgstr = ""
+ entry_fuzzy = pending_fuzzy
+ pending_fuzzy = False
+ state = "msgid"
+ elif line.startswith("msgstr "):
+ msgstr = unquote(line[len("msgstr "):])
+ state = "msgstr"
+ elif line.startswith('"'):
+ if state == "msgid":
+ msgid += unquote(line)
+ elif state == "msgstr":
+ msgstr += unquote(line)
+
+ flush()
+ return entries
+
+
+def main():
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument("--warn-below", type=float, default=100.0,
+ help="warn when coverage is below this percentage (default: 100)")
+ parser.add_argument("--fail-below", type=float, default=None,
+ help="exit non-zero when coverage is below this percentage")
+ parser.add_argument("--list", type=int, default=10,
+ help="list at most this many untranslated entries (default: 10)")
+ args = parser.parse_args()
+
+ template = parse_po(TEMPLATE)
+ translation = parse_po(TRANSLATION)
+ ignored = load_ignore(IGNORE)
+
+ total = 0
+ untranslated = []
+ for msgid in template:
+ if msgid in ignored:
+ continue
+ total += 1
+ entry = translation.get(msgid)
+ if not entry or entry["fuzzy"] or not entry["msgstr"].strip():
+ untranslated.append(msgid)
+
+ translated = total - len(untranslated)
+ coverage = (translated / total * 100) if total else 100.0
+
+ print(f"zh_Hans translation coverage: {translated}/{total} ({coverage:.1f}%)"
+ f", {len(ignored)} msgid(s) ignored by tests/i18n-ignore.txt")
+
+ if untranslated and args.list:
+ print(f"{len(untranslated)} untranslated entries, first {min(args.list, len(untranslated))}:")
+ for msgid in untranslated[:args.list]:
+ print(f" - {msgid}")
+
+ summary = os.environ.get("GITHUB_STEP_SUMMARY")
+ if summary:
+ with open(summary, "a", encoding="utf-8") as handle:
+ handle.write("## zh_Hans translation coverage\n\n")
+ handle.write(f"**{translated}/{total} ({coverage:.1f}%)** — "
+ f"{len(untranslated)} untranslated entry/entries.\n\n")
+ if untranslated:
+ handle.write("Untranslated
\n\n")
+ for msgid in untranslated:
+ handle.write(f"- `{msgid}`\n")
+ handle.write("\n\n")
+
+ if args.fail_below is not None and coverage < args.fail_below:
+ print(f"::error title=Translation coverage::zh_Hans coverage {coverage:.1f}% "
+ f"is below {args.fail_below}%")
+ return 1
+
+ if coverage < args.warn_below:
+ print(f"::warning title=Translation coverage::zh_Hans coverage {coverage:.1f}% "
+ f"is below {args.warn_below}% ({len(untranslated)} untranslated entry/entries)")
+
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/luci-app-homeproxy/tests/i18n-ignore.txt b/luci-app-homeproxy/tests/i18n-ignore.txt
new file mode 100644
index 000000000..fa914177a
--- /dev/null
+++ b/luci-app-homeproxy/tests/i18n-ignore.txt
@@ -0,0 +1,13 @@
+# msgids that are intentionally left untranslated (protocol/technical tokens
+# whose zh_Hans form is the same as the source). One msgid per line, matching
+# the unquoted template string; '#' starts a comment.
+http
+unsafe-raw
+unshaped
+v4
+v5
+v6
+wrong-ack
+wrong-checksum
+wrong-md5
+wrong-timestamp
diff --git a/luci-app-homeproxy/tests/luci-form-snapshot.js b/luci-app-homeproxy/tests/luci-form-snapshot.js
new file mode 100644
index 000000000..10552940f
--- /dev/null
+++ b/luci-app-homeproxy/tests/luci-form-snapshot.js
@@ -0,0 +1,214 @@
+#!/usr/bin/env node
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Copyright (C) 2025 ImmortalWrt.org
+ *
+ * Dump the LuCI form definition of the homeproxy node/client/server views as
+ * JSON, using a minimal mock of the LuCI client runtime. It is meant to be run
+ * against two checkouts (e.g. HEAD and the working tree) and the resulting
+ * snapshots diffed, so that a pure refactor can be proven not to change any
+ * option name, dependency, default or label.
+ *
+ * Usage: node tests/luci-form-snapshot.js [node|server]
+ */
+
+'use strict';
+
+const fs = require('fs');
+const path = require('path');
+
+/* --- LuCI runtime mock start ------------------------------------------- */
+
+String.prototype.format = function (...args) {
+ const values = args.length === 1 && Array.isArray(args[0]) ? args[0] : args;
+ let i = 0;
+ return this.replace(/%[sdj%]/g, (m) => m === '%%' ? '%' : (i < values.length ? String(values[i++]) : m));
+};
+
+function E(tag, attrs, children) {
+ return { tag: tag, attrs: attrs, children: children };
+}
+
+function _(text) { return text; }
+
+const L = {
+ bind: (fn, self, ...args) => fn.bind(self, ...args),
+ resolveDefault: (promise, fallback) => promise.catch(() => fallback),
+ ui: { hideModal: () => {}, addNotification: () => {}, changes: { apply: () => {} } },
+ env: { paths: {} }
+};
+
+let sectionSeq = 0;
+
+class Option {
+ constructor(kind, name, title, description) {
+ this.__kind = kind;
+ this.__name = name;
+ this.__title = title;
+ this.__description = description;
+ this.__depends = [];
+ this.__values = [];
+ }
+
+ depends(...args) { this.__depends.push(args.length === 1 ? args[0] : args); }
+ value(value, label) { this.__values.push([ value, label === undefined ? null : label ]); }
+
+ toJSON() {
+ const props = {};
+ for (const key of Object.keys(this).sort()) {
+ if (key.startsWith('__') || key === 'subsection')
+ continue;
+ const value = this[key];
+ if (typeof value === 'function' || value === undefined)
+ continue;
+ props[key] = value;
+ }
+ return {
+ kind: this.__kind,
+ name: this.__name,
+ title: this.__title,
+ description: this.__description === undefined ? null : this.__description,
+ depends: this.__depends,
+ values: this.__values,
+ props: props
+ };
+ }
+}
+
+class Section {
+ constructor(kind, name) {
+ this.__kind = kind;
+ this.__name = name;
+ this.__id = `${kind}:${name || ''}#${sectionSeq++}`;
+ this.__options = [];
+ this.__tabs = [];
+ if (kind === 'SectionValue')
+ this.subsection = new Section('GridSection', name);
+ }
+
+ option(kind, name, title, description) {
+ const kindName = kind && kind.__name__ ? kind.__name__ : String(kind);
+ const option = new Option(kindName, name, title, description);
+ if (kindName === 'SectionValue')
+ option.subsection = new Section('GridSection', name);
+ this.__options.push(option);
+ return option;
+ }
+
+ tab(id, title) { this.__tabs.push([ id, title ]); }
+ taboption(_tab, ...args) { return this.option(...args); }
+
+ toJSON() {
+ return {
+ id: this.__id,
+ kind: this.__kind,
+ name: this.__name,
+ tabs: this.__tabs,
+ options: this.__options.map((o) => o.toJSON()),
+ subsection: this.subsection ? this.subsection.toJSON() : null
+ };
+ }
+}
+
+const classes = [ 'Value', 'ListValue', 'Flag', 'DynamicList', 'MultiValue', 'TextValue', 'Button', 'TypedSection',
+ 'NamedSection', 'GridSection', 'SectionValue' ];
+
+const form = {};
+for (const name of classes) {
+ form[name] = class {};
+ form[name].__name__ = name;
+}
+
+form.DynamicList.extend = function (obj) {
+ const cls = class extends form.DynamicList {};
+ Object.assign(cls.prototype, obj);
+ cls.__name__ = obj.__name__ || 'DynamicList';
+ return cls;
+};
+
+form.Value.extend = function (obj) {
+ const cls = class extends form.Value {};
+ Object.assign(cls.prototype, obj);
+ cls.__name__ = obj.__name__ || 'Value';
+ return cls;
+};
+
+form.Map = class {
+ constructor(title) { this.title = title; this.sections = []; }
+ section(kind, name) {
+ const section = new Section(kind && kind.__name__ ? kind.__name__ : String(kind), name);
+ this.sections.push(section);
+ return section;
+ }
+ render() { return { sections: this.sections.map((s) => s.toJSON()) }; }
+};
+
+const uci = {
+ load: () => Promise.resolve(),
+ get: () => undefined,
+ get_first: () => null,
+ get_all: () => ({}),
+ sections: () => {},
+ foreach: () => {},
+ set: () => {}, add: () => 'section', remove: () => {}, save: () => Promise.resolve()
+};
+
+const ui = {
+ addNotification: () => {},
+ showModal: () => {},
+ hideModal: () => {},
+ uploadFile: () => Promise.resolve({}),
+ addValidator: () => {},
+ Textarea: class { render() { return E('textarea'); } getValue() { return ''; } },
+ createHandlerFn: (self, fn) => fn
+};
+
+const baseclass = { extend: (obj) => obj };
+const view = { extend: (obj) => obj };
+const poll = { add: () => {} };
+const rpc = { declare: () => () => Promise.resolve({}) };
+const fsMock = { exec_direct: () => Promise.resolve(''), read: () => Promise.resolve(''), write: () => Promise.resolve() };
+const widgets = { DeviceSelect: class {} };
+
+const deps = {
+ baseclass, form, fs: fsMock, rpc, uci, ui, view, poll,
+ 'luci.http': { urldecode: (s) => s, urlencode: (s) => s, urldecode_params: () => ({}) },
+ 'luci.sys': { init_action: () => {} },
+ 'tools.widgets': widgets
+};
+
+/* --- LuCI runtime mock end --------------------------------------------- */
+
+function loadLuciModule(file, extraDeps) {
+ let src = fs.readFileSync(file, 'utf8');
+ src = src.replace(/^'require ([^']+) as (\w+)';$/gm,
+ (_m, mod, alias) => `const ${alias} = __deps[${JSON.stringify(mod)}];`);
+ src = src.replace(/^'require ([^']+)';$/gm,
+ (_m, mod) => `const ${mod.split('.').pop().replace(/[^\w]/g, '_')} = __deps[${JSON.stringify(mod)}];`);
+ /* eslint-disable-next-line no-new-func */
+ const factory = new Function('__deps', '_', 'E', 'L', src);
+ return factory(Object.assign({}, deps, extraDeps), _, E, L);
+}
+
+function main() {
+ const root = process.argv[2];
+ const target = process.argv[3] || 'node';
+ if (!root)
+ throw new Error('usage: luci-form-snapshot.js [node|server]');
+
+ const viewDir = path.join(root, 'htdocs/luci-static/resources');
+ const homeproxy = loadLuciModule(path.join(viewDir, 'homeproxy.js'), {});
+ const mod = loadLuciModule(path.join(viewDir, 'view/homeproxy', target + '.js'), { homeproxy });
+
+ const features = {
+ version: '1.14.0',
+ with_acme: true, with_grpc: true, with_gvisor: true, with_quic: true,
+ with_utls: true, with_wireguard: true, hp_has_tcp_brutal: true
+ };
+
+ const rendered = mod.render([ undefined, features ]);
+ process.stdout.write(JSON.stringify(rendered, null, '\t') + '\n');
+}
+
+main();
diff --git a/luci-app-homeproxy/tests/run.sh b/luci-app-homeproxy/tests/run.sh
new file mode 100755
index 000000000..b46570940
--- /dev/null
+++ b/luci-app-homeproxy/tests/run.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# One-shot entry point for the test suite:
+#
+# tests/run.sh
+#
+# Translation coverage and the LuCI form snapshots run locally (they only need
+# python3 / node). The ucode tests run locally when ucode and sing-box are
+# available, otherwise the checkout is copied to $HP_TEST_HOST and run there.
+#
+# HP_TEST_HOST=root@192.168.1.1 tests/run.sh
+# HP_TEST_DIR=/tmp/hp-tests tests/run.sh
+
+ROOT="$(cd "$(dirname "$0")/.." && pwd)"
+HOST="${HP_TEST_HOST:-root@192.168.1.1}"
+REMOTE_DIR="${HP_TEST_DIR:-/tmp/hp-tests}"
+FAILED=0
+
+echo "== zh_Hans translation coverage =="
+python3 "$ROOT/tests/i18n-coverage.py" --warn-below 100
+
+echo "== LuCI form snapshots =="
+for target in node server; do
+ if ! node "$ROOT/tests/luci-form-snapshot.js" "$ROOT" "$target" > "/tmp/hp-snapshot-$target.json" 2> "/tmp/hp-snapshot-$target.err"; then
+ echo "FAIL: could not render the $target form"
+ cat "/tmp/hp-snapshot-$target.err"
+ FAILED=1
+ continue
+ fi
+
+ if diff -q "$ROOT/tests/snapshots/$target.json" "/tmp/hp-snapshot-$target.json" > "/dev/null"; then
+ echo "PASS: $target form snapshot"
+ else
+ echo "FAIL: $target form snapshot changed:"
+ diff "$ROOT/tests/snapshots/$target.json" "/tmp/hp-snapshot-$target.json" | head -40
+ FAILED=1
+ fi
+done
+
+echo "== ucode tests =="
+if command -v ucode > "/dev/null" 2>&1 && command -v sing-box > "/dev/null" 2>&1; then
+ sh "$ROOT/tests/ucode/run.sh" "$ROOT" || FAILED=1
+else
+ echo "(no local ucode/sing-box, executing on $HOST)"
+ if tar czf - -C "$ROOT" --exclude .git --exclude node_modules . \
+ | ssh "$HOST" "rm -rf $REMOTE_DIR && mkdir -p $REMOTE_DIR && tar xzf - -C $REMOTE_DIR"; then
+ ssh "$HOST" "sh $REMOTE_DIR/tests/ucode/run.sh $REMOTE_DIR" || FAILED=1
+ else
+ echo "FAIL: could not stage the tests on $HOST"
+ FAILED=1
+ fi
+fi
+
+if [ "$FAILED" -eq 0 ]; then
+ echo "ALL TESTS PASSED"
+else
+ echo "SOME TESTS FAILED"
+fi
+
+exit $FAILED
diff --git a/luci-app-homeproxy/tests/snapshots/node.json b/luci-app-homeproxy/tests/snapshots/node.json
new file mode 100644
index 000000000..4b735b35a
--- /dev/null
+++ b/luci-app-homeproxy/tests/snapshots/node.json
@@ -0,0 +1,293 @@
+{
+ "sections": [
+ {
+ "id": "NamedSection:subscription#0",
+ "kind": "NamedSection",
+ "name": "subscription",
+ "tabs": [
+ [
+ "node",
+ "Nodes"
+ ],
+ [
+ "subscription",
+ "Subscriptions"
+ ]
+ ],
+ "options": [
+ {
+ "kind": "SectionValue",
+ "name": "_node",
+ "description": "node",
+ "depends": [],
+ "values": [],
+ "props": {}
+ },
+ {
+ "kind": "Flag",
+ "name": "auto_update",
+ "title": "Auto update",
+ "description": "Auto update subscriptions and geodata.",
+ "depends": [],
+ "values": [],
+ "props": {
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "auto_update_time",
+ "title": "Update time",
+ "description": null,
+ "depends": [
+ [
+ "auto_update",
+ "1"
+ ]
+ ],
+ "values": [
+ [
+ 0,
+ "0:00"
+ ],
+ [
+ 1,
+ "1:00"
+ ],
+ [
+ 2,
+ "2:00"
+ ],
+ [
+ 3,
+ "3:00"
+ ],
+ [
+ 4,
+ "4:00"
+ ],
+ [
+ 5,
+ "5:00"
+ ],
+ [
+ 6,
+ "6:00"
+ ],
+ [
+ 7,
+ "7:00"
+ ],
+ [
+ 8,
+ "8:00"
+ ],
+ [
+ 9,
+ "9:00"
+ ],
+ [
+ 10,
+ "10:00"
+ ],
+ [
+ 11,
+ "11:00"
+ ],
+ [
+ 12,
+ "12:00"
+ ],
+ [
+ 13,
+ "13:00"
+ ],
+ [
+ 14,
+ "14:00"
+ ],
+ [
+ 15,
+ "15:00"
+ ],
+ [
+ 16,
+ "16:00"
+ ],
+ [
+ 17,
+ "17:00"
+ ],
+ [
+ 18,
+ "18:00"
+ ],
+ [
+ 19,
+ "19:00"
+ ],
+ [
+ 20,
+ "20:00"
+ ],
+ [
+ 21,
+ "21:00"
+ ],
+ [
+ 22,
+ "22:00"
+ ],
+ [
+ 23,
+ "23:00"
+ ]
+ ],
+ "props": {
+ "default": "2"
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "update_via_proxy",
+ "title": "Update via proxy",
+ "description": "Update subscriptions via proxy.",
+ "depends": [],
+ "values": [],
+ "props": {
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "DynamicList",
+ "name": "subscription_url",
+ "title": "Subscription URL-s",
+ "description": "Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) online configuration delivery standard.",
+ "depends": [],
+ "values": [],
+ "props": {}
+ },
+ {
+ "kind": "ListValue",
+ "name": "filter_nodes",
+ "title": "Filter nodes",
+ "description": "Drop/keep specific nodes from subscriptions.",
+ "depends": [],
+ "values": [
+ [
+ "disabled",
+ "Disable"
+ ],
+ [
+ "blacklist",
+ "Blacklist mode"
+ ],
+ [
+ "whitelist",
+ "Whitelist mode"
+ ]
+ ],
+ "props": {
+ "default": "disabled",
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "DynamicList",
+ "name": "filter_keywords",
+ "title": "Filter keywords",
+ "description": "Drop/keep nodes that contain the specific keywords. Regex is supported.",
+ "depends": [
+ {
+ "filter_nodes": "disabled",
+ "!reverse": true
+ }
+ ],
+ "values": [],
+ "props": {
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "user_agent",
+ "title": "User-Agent",
+ "description": null,
+ "depends": [],
+ "values": [],
+ "props": {
+ "placeholder": "Wget/1.21 (HomeProxy, like v2rayN)"
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "allow_insecure",
+ "title": "Allow insecure",
+ "description": "Allow insecure connection by default when add nodes from subscriptions.
This is DANGEROUS, your traffic is almost like PLAIN TEXT! Use at your own risk!",
+ "depends": [],
+ "values": [],
+ "props": {
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "packet_encoding",
+ "title": "Default packet encoding",
+ "description": null,
+ "depends": [],
+ "values": [
+ [
+ "",
+ "none"
+ ],
+ [
+ "packetaddr",
+ "packet addr (v2ray-core v5+)"
+ ],
+ [
+ "xudp",
+ "Xudp (Xray-core)"
+ ]
+ ],
+ "props": {}
+ },
+ {
+ "kind": "Button",
+ "name": "_save_subscriptions",
+ "title": "Save subscriptions settings",
+ "description": "NOTE: Save current settings before updating subscriptions.",
+ "depends": [],
+ "values": [],
+ "props": {
+ "inputstyle": "apply",
+ "inputtitle": "Save current settings"
+ }
+ },
+ {
+ "kind": "Button",
+ "name": "_update_subscriptions",
+ "title": "Update nodes from subscriptions",
+ "description": null,
+ "depends": [],
+ "values": [],
+ "props": {
+ "inputstyle": "apply"
+ }
+ },
+ {
+ "kind": "Button",
+ "name": "_remove_subscriptions",
+ "title": "Remove all nodes from subscriptions",
+ "description": null,
+ "depends": [],
+ "values": [],
+ "props": {
+ "inputstyle": "reset"
+ }
+ }
+ ],
+ "subsection": null
+ }
+ ]
+}
diff --git a/luci-app-homeproxy/tests/snapshots/server.json b/luci-app-homeproxy/tests/snapshots/server.json
new file mode 100644
index 000000000..bf1f797f4
--- /dev/null
+++ b/luci-app-homeproxy/tests/snapshots/server.json
@@ -0,0 +1,2150 @@
+{
+ "sections": [
+ {
+ "id": "TypedSection:#0",
+ "kind": "TypedSection",
+ "tabs": [],
+ "options": [],
+ "subsection": null
+ },
+ {
+ "id": "NamedSection:server#1",
+ "kind": "NamedSection",
+ "name": "server",
+ "tabs": [],
+ "options": [
+ {
+ "kind": "Flag",
+ "name": "enabled",
+ "title": "Enable",
+ "description": null,
+ "depends": [],
+ "values": [],
+ "props": {
+ "rmempty": false
+ }
+ }
+ ],
+ "subsection": null
+ },
+ {
+ "id": "GridSection:server#2",
+ "kind": "GridSection",
+ "name": "server",
+ "tabs": [],
+ "options": [
+ {
+ "kind": "Value",
+ "name": "label",
+ "title": "Label",
+ "description": null,
+ "depends": [],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "enabled",
+ "title": "Enable",
+ "description": null,
+ "depends": [],
+ "values": [],
+ "props": {
+ "editable": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "firewall",
+ "title": "Firewall",
+ "description": "Allow access from the Internet.",
+ "depends": [],
+ "values": [],
+ "props": {
+ "editable": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "type",
+ "title": "Type",
+ "description": null,
+ "depends": [],
+ "values": [
+ [
+ "anytls",
+ "AnyTLS"
+ ],
+ [
+ "http",
+ "HTTP"
+ ],
+ [
+ "hysteria",
+ "Hysteria"
+ ],
+ [
+ "hysteria2",
+ "Hysteria2"
+ ],
+ [
+ "naive",
+ "NaïveProxy"
+ ],
+ [
+ "mixed",
+ "Mixed"
+ ],
+ [
+ "shadowsocks",
+ "Shadowsocks"
+ ],
+ [
+ "snell",
+ "Snell (1.14)"
+ ],
+ [
+ "socks",
+ "Socks"
+ ],
+ [
+ "trojan",
+ "Trojan"
+ ],
+ [
+ "tuic",
+ "Tuic"
+ ],
+ [
+ "vless",
+ "VLESS"
+ ],
+ [
+ "vmess",
+ "VMess"
+ ]
+ ],
+ "props": {
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "address",
+ "title": "Listen address",
+ "description": null,
+ "depends": [],
+ "values": [],
+ "props": {
+ "datatype": "ipaddr",
+ "modalonly": true,
+ "placeholder": "::"
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "port",
+ "title": "Listen port",
+ "description": "The port must be unique.",
+ "depends": [],
+ "values": [],
+ "props": {
+ "datatype": "port"
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "username",
+ "title": "Username",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "http"
+ ],
+ [
+ "type",
+ "mixed"
+ ],
+ [
+ "type",
+ "naive"
+ ],
+ [
+ "type",
+ "socks"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "CBI.GenValue",
+ "name": "password",
+ "title": "Password",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "anytls"
+ ],
+ {
+ "type": {},
+ "username": {}
+ },
+ [
+ "type",
+ "hysteria2"
+ ],
+ [
+ "type",
+ "shadowsocks"
+ ],
+ [
+ "type",
+ "snell"
+ ],
+ [
+ "type",
+ "trojan"
+ ],
+ [
+ "type",
+ "tuic"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "password": true
+ }
+ },
+ {
+ "kind": "DynamicList",
+ "name": "anytls_padding_scheme",
+ "title": "Padding scheme",
+ "description": "AnyTLS padding scheme in array.",
+ "depends": [
+ [
+ "type",
+ "anytls"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "hysteria_protocol",
+ "title": "Protocol",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "hysteria"
+ ]
+ ],
+ "values": [
+ [
+ "udp",
+ null
+ ]
+ ],
+ "props": {
+ "default": "udp",
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "hysteria_down_mbps",
+ "title": "Max download speed",
+ "description": "Max download speed in Mbps.",
+ "depends": [
+ [
+ "type",
+ "hysteria"
+ ],
+ [
+ "type",
+ "hysteria2"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "hysteria_up_mbps",
+ "title": "Max upload speed",
+ "description": "Max upload speed in Mbps.",
+ "depends": [
+ [
+ "type",
+ "hysteria"
+ ],
+ [
+ "type",
+ "hysteria2"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "hysteria_auth_type",
+ "title": "Authentication type",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "hysteria"
+ ]
+ ],
+ "values": [
+ [
+ "",
+ "Disable"
+ ],
+ [
+ "base64",
+ "Base64"
+ ],
+ [
+ "string",
+ "String"
+ ]
+ ],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "hysteria_auth_payload",
+ "title": "Authentication payload",
+ "description": null,
+ "depends": [
+ {
+ "type": "hysteria",
+ "hysteria_auth_type": {}
+ }
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "password": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "hysteria_obfs_type",
+ "title": "Obfuscate type",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "hysteria2"
+ ]
+ ],
+ "values": [
+ [
+ "",
+ "Disable"
+ ],
+ [
+ "salamander",
+ "Salamander"
+ ],
+ [
+ "gecko",
+ "Gecko (1.14)"
+ ]
+ ],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "CBI.GenValue",
+ "name": "hysteria_obfs_password",
+ "title": "Obfuscate password",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "hysteria"
+ ],
+ {
+ "type": "hysteria2",
+ "hysteria_obfs_type": {}
+ }
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "password": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "hysteria_obfs_min_packet_size",
+ "title": "Min obfs packet size (1.14)",
+ "description": "Minimum on-wire packet size in bytes. Gecko only.",
+ "depends": [
+ {
+ "type": "hysteria2",
+ "hysteria_obfs_type": "gecko"
+ }
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "modalonly": true,
+ "placeholder": "512"
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "hysteria_obfs_max_packet_size",
+ "title": "Max obfs packet size (1.14)",
+ "description": "Maximum on-wire packet size in bytes. Gecko only.",
+ "depends": [
+ {
+ "type": "hysteria2",
+ "hysteria_obfs_type": "gecko"
+ }
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "modalonly": true,
+ "placeholder": "1200"
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "hysteria_ignore_client_bandwidth",
+ "title": "Ignore client bandwidth",
+ "description": "Tell the client to use the BBR flow control algorithm instead of Hysteria CC.",
+ "depends": [
+ {
+ "type": "hysteria2",
+ "hysteria_down_mbps": "",
+ "hysteria_up_mbps": ""
+ }
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "hysteria_masquerade",
+ "title": "Masquerade",
+ "description": "HTTP3 server behavior when authentication fails.
A 404 page will be returned if empty.",
+ "depends": [
+ [
+ "type",
+ "hysteria2"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "snell_version",
+ "title": "Snell version",
+ "description": "The pre-shared key (password) above must be 12-255 bytes for v6.",
+ "depends": [
+ [
+ "type",
+ "snell"
+ ]
+ ],
+ "values": [
+ [
+ "5",
+ "v5"
+ ],
+ [
+ "6",
+ "v6"
+ ]
+ ],
+ "props": {
+ "default": "5",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "snell_obfs_mode",
+ "title": "Obfuscation mode",
+ "description": "HTTP obfuscation. v5 only.",
+ "depends": [
+ {
+ "type": "snell",
+ "snell_version": "5"
+ }
+ ],
+ "values": [
+ [
+ "",
+ "none"
+ ],
+ [
+ "http",
+ "http"
+ ]
+ ],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "snell_mode",
+ "title": "Traffic shaping mode",
+ "description": "v6 only.",
+ "depends": [
+ {
+ "type": "snell",
+ "snell_version": "6"
+ }
+ ],
+ "values": [
+ [
+ "",
+ "default"
+ ],
+ [
+ "unshaped",
+ "unshaped"
+ ],
+ [
+ "unsafe-raw",
+ "unsafe-raw"
+ ]
+ ],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "shadowsocks_encrypt_method",
+ "title": "Encrypt method",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "shadowsocks"
+ ]
+ ],
+ "values": [
+ [
+ "none",
+ null
+ ],
+ [
+ "aes-128-gcm",
+ null
+ ],
+ [
+ "aes-192-gcm",
+ null
+ ],
+ [
+ "aes-256-gcm",
+ null
+ ],
+ [
+ "chacha20-ietf-poly1305",
+ null
+ ],
+ [
+ "xchacha20-ietf-poly1305",
+ null
+ ],
+ [
+ "2022-blake3-aes-128-gcm",
+ null
+ ],
+ [
+ "2022-blake3-aes-256-gcm",
+ null
+ ],
+ [
+ "2022-blake3-chacha20-poly1305",
+ null
+ ]
+ ],
+ "props": {
+ "default": "aes-128-gcm",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "CBI.GenValue",
+ "name": "uuid",
+ "title": "UUID",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "tuic"
+ ],
+ [
+ "type",
+ "vless"
+ ],
+ [
+ "type",
+ "vmess"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "password": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "tuic_congestion_control",
+ "title": "Congestion control algorithm",
+ "description": "QUIC congestion control algorithm.",
+ "depends": [
+ [
+ "type",
+ "tuic"
+ ]
+ ],
+ "values": [
+ [
+ "cubic",
+ null
+ ],
+ [
+ "new_reno",
+ null
+ ],
+ [
+ "bbr",
+ null
+ ]
+ ],
+ "props": {
+ "default": "cubic",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tuic_auth_timeout",
+ "title": "Auth timeout",
+ "description": "How long the server should wait for the client to send the authentication command (in seconds).",
+ "depends": [
+ [
+ "type",
+ "tuic"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "default": "3",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "tuic_enable_zero_rtt",
+ "title": "Enable 0-RTT handshake",
+ "description": "Enable 0-RTT QUIC connection handshake on the client side. This is not impacting much on the performance, as the protocol is fully multiplexed.
Disabling this is highly recommended, as it is vulnerable to replay attacks.",
+ "depends": [
+ [
+ "type",
+ "tuic"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tuic_heartbeat",
+ "title": "Heartbeat interval",
+ "description": "Interval for sending heartbeat packets for keeping the connection alive (in seconds).",
+ "depends": [
+ [
+ "type",
+ "tuic"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "default": "10",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "vless_flow",
+ "title": "Flow",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "vless"
+ ]
+ ],
+ "values": [
+ [
+ "",
+ "None"
+ ],
+ [
+ "xtls-rprx-vision",
+ null
+ ]
+ ],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "vmess_alterid",
+ "title": "Alter ID",
+ "description": "Legacy protocol support (VMess MD5 Authentication) is provided for compatibility purposes only, use of alterId > 1 is not recommended.",
+ "depends": [
+ [
+ "type",
+ "vmess"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "transport",
+ "title": "Transport",
+ "description": "No TCP transport, plain HTTP is merged into the HTTP transport.",
+ "depends": [
+ [
+ "type",
+ "trojan"
+ ],
+ [
+ "type",
+ "vless"
+ ],
+ [
+ "type",
+ "vmess"
+ ]
+ ],
+ "values": [
+ [
+ "",
+ "None"
+ ],
+ [
+ "grpc",
+ "gRPC"
+ ],
+ [
+ "http",
+ "HTTP"
+ ],
+ [
+ "httpupgrade",
+ "HTTPUpgrade"
+ ],
+ [
+ "quic",
+ "QUIC"
+ ],
+ [
+ "ws",
+ "WebSocket"
+ ]
+ ],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "grpc_servicename",
+ "title": "gRPC service name",
+ "description": null,
+ "depends": [
+ [
+ "transport",
+ "grpc"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "DynamicList",
+ "name": "http_host",
+ "title": "Host",
+ "description": null,
+ "depends": [
+ [
+ "transport",
+ "http"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "hostname",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "httpupgrade_host",
+ "title": "Host",
+ "description": null,
+ "depends": [
+ [
+ "transport",
+ "httpupgrade"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "hostname",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "http_path",
+ "title": "Path",
+ "description": null,
+ "depends": [
+ [
+ "transport",
+ "http"
+ ],
+ [
+ "transport",
+ "httpupgrade"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "http_method",
+ "title": "Method",
+ "description": null,
+ "depends": [
+ [
+ "transport",
+ "http"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "http_idle_timeout",
+ "title": "Idle timeout",
+ "description": "Specifies the time (in seconds) until idle clients should be closed with a GOAWAY frame. PING frames are not considered as activity.",
+ "depends": [
+ [
+ "transport",
+ "grpc"
+ ],
+ {
+ "transport": "http",
+ "tls": "1"
+ }
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "http_ping_timeout",
+ "title": "Ping timeout",
+ "description": "The timeout (in seconds) that after performing a keepalive check, the client will wait for activity. If no activity is detected, the connection will be closed.",
+ "depends": [
+ [
+ "transport",
+ "grpc"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "ws_host",
+ "title": "Host",
+ "description": null,
+ "depends": [
+ [
+ "transport",
+ "ws"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "ws_path",
+ "title": "Path",
+ "description": null,
+ "depends": [
+ [
+ "transport",
+ "ws"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "websocket_early_data",
+ "title": "Early data",
+ "description": "Allowed payload size is in the request.",
+ "depends": [
+ [
+ "transport",
+ "ws"
+ ]
+ ],
+ "values": [
+ [
+ "2048",
+ null
+ ]
+ ],
+ "props": {
+ "datatype": "uinteger",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "websocket_early_data_header",
+ "title": "Early data header name",
+ "description": "Early data is sent in path instead of header by default.
To be compatible with Xray-core, set this to Sec-WebSocket-Protocol.",
+ "depends": [
+ [
+ "transport",
+ "ws"
+ ]
+ ],
+ "values": [
+ [
+ "Sec-WebSocket-Protocol",
+ null
+ ]
+ ],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "multiplex",
+ "title": "Multiplex",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "shadowsocks"
+ ],
+ [
+ "type",
+ "trojan"
+ ],
+ [
+ "type",
+ "vless"
+ ],
+ [
+ "type",
+ "vmess"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "multiplex_padding",
+ "title": "Enable padding",
+ "description": null,
+ "depends": [
+ [
+ "multiplex",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "multiplex_brutal",
+ "title": "Enable TCP Brutal",
+ "description": "Enable TCP Brutal congestion control algorithm",
+ "depends": [
+ [
+ "multiplex",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "multiplex_brutal_down",
+ "title": "Download bandwidth",
+ "description": "Download bandwidth in Mbps.",
+ "depends": [
+ [
+ "multiplex_brutal",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "multiplex_brutal_up",
+ "title": "Upload bandwidth",
+ "description": "Upload bandwidth in Mbps.",
+ "depends": [
+ [
+ "multiplex_brutal",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "tls",
+ "title": "TLS",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "anytls"
+ ],
+ [
+ "type",
+ "http"
+ ],
+ [
+ "type",
+ "hysteria"
+ ],
+ [
+ "type",
+ "hysteria2"
+ ],
+ [
+ "type",
+ "naive"
+ ],
+ [
+ "type",
+ "trojan"
+ ],
+ [
+ "type",
+ "tuic"
+ ],
+ [
+ "type",
+ "vless"
+ ],
+ [
+ "type",
+ "vmess"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_sni",
+ "title": "TLS SNI",
+ "description": "Used to verify the hostname on the returned certificates unless insecure is given.",
+ "depends": [
+ [
+ "tls",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "DynamicList",
+ "name": "tls_alpn",
+ "title": "TLS ALPN",
+ "description": "List of supported application level protocols, in order of preference.",
+ "depends": [
+ [
+ "tls",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "tls_min_version",
+ "title": "Minimum TLS version",
+ "description": "The minimum TLS version that is acceptable.",
+ "depends": [
+ [
+ "tls",
+ "1"
+ ]
+ ],
+ "values": [
+ [
+ "",
+ "default"
+ ],
+ [
+ "1.0",
+ null
+ ],
+ [
+ "1.1",
+ null
+ ],
+ [
+ "1.2",
+ null
+ ],
+ [
+ "1.3",
+ null
+ ]
+ ],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "tls_max_version",
+ "title": "Maximum TLS version",
+ "description": "The maximum TLS version that is acceptable.",
+ "depends": [
+ [
+ "tls",
+ "1"
+ ]
+ ],
+ "values": [
+ [
+ "",
+ "default"
+ ],
+ [
+ "1.0",
+ null
+ ],
+ [
+ "1.1",
+ null
+ ],
+ [
+ "1.2",
+ null
+ ],
+ [
+ "1.3",
+ null
+ ]
+ ],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "CBI.StaticList",
+ "name": "tls_cipher_suites",
+ "title": "Cipher suites",
+ "description": "The elliptic curves that will be used in an ECDHE handshake, in preference order. If empty, the default will be used.",
+ "depends": [
+ [
+ "tls",
+ "1"
+ ]
+ ],
+ "values": [
+ [
+ "TLS_RSA_WITH_AES_128_CBC_SHA",
+ null
+ ],
+ [
+ "TLS_RSA_WITH_AES_256_CBC_SHA",
+ null
+ ],
+ [
+ "TLS_RSA_WITH_AES_128_GCM_SHA256",
+ null
+ ],
+ [
+ "TLS_RSA_WITH_AES_256_GCM_SHA384",
+ null
+ ],
+ [
+ "TLS_AES_128_GCM_SHA256",
+ null
+ ],
+ [
+ "TLS_AES_256_GCM_SHA384",
+ null
+ ],
+ [
+ "TLS_CHACHA20_POLY1305_SHA256",
+ null
+ ],
+ [
+ "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
+ null
+ ],
+ [
+ "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
+ null
+ ],
+ [
+ "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
+ null
+ ],
+ [
+ "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
+ null
+ ],
+ [
+ "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
+ null
+ ],
+ [
+ "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
+ null
+ ],
+ [
+ "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
+ null
+ ],
+ [
+ "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
+ null
+ ],
+ [
+ "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
+ null
+ ],
+ [
+ "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
+ null
+ ]
+ ],
+ "props": {
+ "modalonly": true,
+ "optional": true
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "tls_acme",
+ "title": "Enable ACME",
+ "description": "Use ACME TLS certificate issuer.",
+ "depends": [
+ [
+ "tls",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "DynamicList",
+ "name": "tls_acme_domain",
+ "title": "Domains",
+ "description": null,
+ "depends": [
+ [
+ "tls_acme",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "hostname",
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_acme_dsn",
+ "title": "Default server name",
+ "description": "Server name to use when choosing a certificate if the ClientHello's ServerName field is empty.",
+ "depends": [
+ [
+ "tls_acme",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_acme_email",
+ "title": "Email",
+ "description": "The email address to use when creating or selecting an existing ACME server account.",
+ "depends": [
+ [
+ "tls_acme",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_acme_key_type",
+ "title": "ACME key type",
+ "description": "Private key type for new certificates (1.14). Empty uses the default.",
+ "depends": [
+ [
+ "tls_acme",
+ "1"
+ ]
+ ],
+ "values": [
+ [
+ "ed25519",
+ null
+ ],
+ [
+ "p256",
+ null
+ ],
+ [
+ "p384",
+ null
+ ],
+ [
+ "rsa2048",
+ null
+ ],
+ [
+ "rsa4096",
+ null
+ ]
+ ],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_acme_profile",
+ "title": "ACME profile",
+ "description": "ACME profile for certificate issuance (1.14). Example: shortlived.",
+ "depends": [
+ [
+ "tls_acme",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "placeholder": "shortlived"
+ }
+ },
+ {
+ "kind": "TextValue",
+ "name": "tls_acme_account_key",
+ "title": "ACME account key",
+ "description": "PEM-encoded private key of an existing ACME account (1.14).",
+ "depends": [
+ [
+ "tls_acme",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "monospace": true,
+ "rows": 3
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_acme_provider",
+ "title": "CA provider",
+ "description": "The ACME CA provider to use.",
+ "depends": [
+ [
+ "tls_acme",
+ "1"
+ ]
+ ],
+ "values": [
+ [
+ "letsencrypt",
+ "Let's Encrypt"
+ ],
+ [
+ "zerossl",
+ "ZeroSSL"
+ ]
+ ],
+ "props": {
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "tls_dns01_challenge",
+ "title": "DNS01 challenge",
+ "description": null,
+ "depends": [
+ [
+ "tls_acme",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "tls_dns01_provider",
+ "title": "DNS provider",
+ "description": null,
+ "depends": [
+ [
+ "tls_dns01_challenge",
+ "1"
+ ]
+ ],
+ "values": [
+ [
+ "alidns",
+ "Alibaba Cloud DNS"
+ ],
+ [
+ "cloudflare",
+ "Cloudflare"
+ ]
+ ],
+ "props": {
+ "default": "cloudflare",
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_dns01_ali_akid",
+ "title": "Access key ID",
+ "description": null,
+ "depends": [
+ [
+ "tls_dns01_provider",
+ "alidns"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "password": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_dns01_ali_aksec",
+ "title": "Access key secret",
+ "description": null,
+ "depends": [
+ [
+ "tls_dns01_provider",
+ "alidns"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "password": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_dns01_ali_rid",
+ "title": "Region ID",
+ "description": null,
+ "depends": [
+ [
+ "tls_dns01_provider",
+ "alidns"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_dns01_cf_api_token",
+ "title": "API token",
+ "description": null,
+ "depends": [
+ [
+ "tls_dns01_provider",
+ "cloudflare"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "password": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "tls_acme_dhc",
+ "title": "Disable HTTP challenge",
+ "description": null,
+ "depends": [
+ [
+ "tls_dns01_challenge",
+ "0"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "tls_acme_dtac",
+ "title": "Disable TLS ALPN challenge",
+ "description": null,
+ "depends": [
+ [
+ "tls_dns01_challenge",
+ "0"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_acme_ahp",
+ "title": "Alternative HTTP port",
+ "description": "The alternate port to use for the ACME HTTP challenge; if non-empty, this port will be used instead of 80 to spin up a listener for the HTTP challenge.",
+ "depends": [
+ [
+ "tls_dns01_challenge",
+ "0"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "port",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_acme_atp",
+ "title": "Alternative TLS port",
+ "description": "The alternate port to use for the ACME TLS-ALPN challenge; the system must forward 443 to this port for challenge to succeed.",
+ "depends": [
+ [
+ "tls_dns01_challenge",
+ "0"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "port",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "tls_acme_external_account",
+ "title": "External Account Binding",
+ "description": "EAB (External Account Binding) contains information necessary to bind or map an ACME account to some other account known by the CA.
External account bindings are \"used to associate an ACME account with an existing account in a non-ACME system, such as a CA customer database.",
+ "depends": [
+ [
+ "tls_acme",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_acme_ea_keyid",
+ "title": "External account key ID",
+ "description": null,
+ "depends": [
+ [
+ "tls_acme_external_account",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "password": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_acme_ea_mackey",
+ "title": "External account MAC key",
+ "description": null,
+ "depends": [
+ [
+ "tls_acme_external_account",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "password": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "tls_reality",
+ "title": "REALITY",
+ "description": null,
+ "depends": [
+ {
+ "tls": "1",
+ "tls_acme": "0",
+ "type": {}
+ },
+ {
+ "tls": "1",
+ "tls_acme": null,
+ "type": {}
+ }
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "CBI.GenValue",
+ "name": "tls_reality_private_key",
+ "title": "REALITY private key",
+ "description": null,
+ "depends": [
+ [
+ "tls_reality",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "hp_options": {
+ "type": "reality-keypair",
+ "params": ""
+ },
+ "modalonly": true,
+ "password": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_reality_public_key",
+ "title": "REALITY public key",
+ "description": null,
+ "depends": [
+ [
+ "tls_reality",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "DynamicList",
+ "name": "tls_reality_short_id",
+ "title": "REALITY short ID",
+ "description": null,
+ "depends": [
+ [
+ "tls_reality",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_reality_max_time_difference",
+ "title": "Max time difference",
+ "description": "The maximum time difference between the server and the client.",
+ "depends": [
+ [
+ "tls_reality",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_reality_server_addr",
+ "title": "Handshake server address",
+ "description": null,
+ "depends": [
+ [
+ "tls_reality",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "hostname",
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_reality_server_port",
+ "title": "Handshake server port",
+ "description": null,
+ "depends": [
+ [
+ "tls_reality",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "datatype": "port",
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_cert_path",
+ "title": "Certificate path",
+ "description": "The server public key, in PEM format.",
+ "depends": [
+ {
+ "tls": "1",
+ "tls_acme": "0",
+ "tls_reality": null
+ },
+ {
+ "tls": "1",
+ "tls_acme": "0",
+ "tls_reality": "0"
+ },
+ {
+ "tls": "1",
+ "tls_acme": null,
+ "tls_reality": "0"
+ },
+ {
+ "tls": "1",
+ "tls_acme": null,
+ "tls_reality": null
+ }
+ ],
+ "values": [
+ [
+ "/etc/homeproxy/certs/server_publickey.pem",
+ null
+ ]
+ ],
+ "props": {
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Button",
+ "name": "_upload_cert",
+ "title": "Upload certificate",
+ "description": "Save your configuration before uploading files!",
+ "depends": [
+ {
+ "tls": "1",
+ "tls_cert_path": "/etc/homeproxy/certs/server_publickey.pem"
+ }
+ ],
+ "values": [],
+ "props": {
+ "inputstyle": "action",
+ "inputtitle": "Upload...",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "tls_key_path",
+ "title": "Key path",
+ "description": "The server private key, in PEM format.",
+ "depends": [
+ {
+ "tls": "1",
+ "tls_acme": "0",
+ "tls_reality": "0"
+ },
+ {
+ "tls": "1",
+ "tls_acme": "0",
+ "tls_reality": null
+ },
+ {
+ "tls": "1",
+ "tls_acme": null,
+ "tls_reality": "0"
+ },
+ {
+ "tls": "1",
+ "tls_acme": null,
+ "tls_reality": null
+ }
+ ],
+ "values": [
+ [
+ "/etc/homeproxy/certs/server_privatekey.pem",
+ null
+ ]
+ ],
+ "props": {
+ "modalonly": true,
+ "rmempty": false
+ }
+ },
+ {
+ "kind": "Button",
+ "name": "_upload_key",
+ "title": "Upload key",
+ "description": "Save your configuration before uploading files!",
+ "depends": [
+ {
+ "tls": "1",
+ "tls_key_path": "/etc/homeproxy/certs/server_privatekey.pem"
+ }
+ ],
+ "values": [],
+ "props": {
+ "inputstyle": "action",
+ "inputtitle": "Upload...",
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "TextValue",
+ "name": "tls_ech_key",
+ "title": "ECH key",
+ "description": null,
+ "depends": [
+ [
+ "tls",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "cols": 30,
+ "hp_options": {
+ "type": "ech-keypair",
+ "params": ""
+ },
+ "modalonly": true,
+ "monospace": true,
+ "placeholder": "-----BEGIN ECH KEYS-----\nACBE2+piYBLrOywCbRYU+ZpEkk8keeBlUXbKqLRmQ/68FwBL/g0ARwAAIAAgn8HI\n93RfdV/LaDk+LC9H4h+4WhVBFmWKdhiT3vvpGi8ACAABAAEAAQADABRvdXRlci1z\nbmkuYW55LmRvbWFpbgAA\n-----END ECH KEYS-----",
+ "rows": 3
+ }
+ },
+ {
+ "kind": "TextValue",
+ "name": "tls_ech_config",
+ "title": "ECH config",
+ "description": null,
+ "depends": [
+ [
+ "tls",
+ "1"
+ ]
+ ],
+ "values": [],
+ "props": {
+ "cols": 30,
+ "modalonly": true,
+ "monospace": true,
+ "placeholder": "-----BEGIN ECH CONFIGS-----\nAEv+DQBHAAAgACCfwcj3dF91X8toOT4sL0fiH7haFUEWZYp2GJPe++kaLwAIAAEA\nAQABAAMAFG91dGVyLXNuaS5hbnkuZG9tYWluAAA=\n-----END ECH CONFIGS-----",
+ "rows": 3
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "tcp_fast_open",
+ "title": "TCP fast open",
+ "description": "Enable tcp fast open for listener.",
+ "depends": [
+ {
+ "network": "udp",
+ "!reverse": true
+ }
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "tcp_multi_path",
+ "title": "MultiPath TCP",
+ "description": null,
+ "depends": [
+ {
+ "network": "udp",
+ "!reverse": true
+ }
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "udp_fragment",
+ "title": "UDP Fragment",
+ "description": "Enable UDP fragmentation.",
+ "depends": [
+ {
+ "network": "tcp",
+ "!reverse": true
+ }
+ ],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "Value",
+ "name": "udp_timeout",
+ "title": "UDP NAT expiration time",
+ "description": "In seconds.",
+ "depends": [
+ {
+ "network": "tcp",
+ "!reverse": true
+ }
+ ],
+ "values": [],
+ "props": {
+ "datatype": "uinteger",
+ "modalonly": true,
+ "placeholder": "300"
+ }
+ },
+ {
+ "kind": "ListValue",
+ "name": "network",
+ "title": "Network",
+ "description": null,
+ "depends": [
+ [
+ "type",
+ "naive"
+ ],
+ [
+ "type",
+ "shadowsocks"
+ ]
+ ],
+ "values": [
+ [
+ "tcp",
+ "TCP"
+ ],
+ [
+ "udp",
+ "UDP"
+ ],
+ [
+ "",
+ "Both"
+ ]
+ ],
+ "props": {
+ "modalonly": true
+ }
+ },
+ {
+ "kind": "class {}",
+ "name": "bind_interface",
+ "title": "Bind interface",
+ "description": "The network interface to bind to.",
+ "depends": [],
+ "values": [],
+ "props": {
+ "modalonly": true,
+ "multiple": false,
+ "noaliases": true
+ }
+ },
+ {
+ "kind": "Flag",
+ "name": "reuse_addr",
+ "title": "Reuse address",
+ "description": "Reuse listener address.",
+ "depends": [],
+ "values": [],
+ "props": {
+ "modalonly": true
+ }
+ }
+ ],
+ "subsection": null
+ }
+ ]
+}
diff --git a/luci-app-homeproxy/tests/ucode/mocks/homeproxy.uc b/luci-app-homeproxy/tests/ucode/mocks/homeproxy.uc
new file mode 100644
index 000000000..c410fd07f
--- /dev/null
+++ b/luci-app-homeproxy/tests/ucode/mocks/homeproxy.uc
@@ -0,0 +1,140 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Copyright (C) 2025 ImmortalWrt.org
+ *
+ * Test double for root/etc/homeproxy/scripts/homeproxy.uc.
+ *
+ * Only `validation()` is stubbed: the real one shells out to
+ * /sbin/validate_data, which does not exist outside OpenWrt. Everything else
+ * (isEmpty, decodeBase64Str, parseURL) is a verbatim copy so the parser tests
+ * exercise the same string handling as production. Keep these in sync when
+ * homeproxy.uc changes.
+ */
+
+import { urldecode_params } from 'luci.http';
+
+export function isEmpty(res) {
+ return !res || res === 'nil' || (type(res) in ['array', 'object'] && length(res) === 0);
+};
+
+export function decodeBase64Str(str) {
+ if (isEmpty(str))
+ return null;
+
+ str = trim(str);
+ str = replace(str, /_/g, '/');
+ str = replace(str, /-/g, '+');
+
+ const padding = length(str) % 4;
+ if (padding)
+ str = str + substr('====', padding);
+
+ return b64dec(str);
+};
+
+/* Pure-ucode stand-in for /sbin/validate_data (host/port/ip4/ip6/hostname). */
+export function validation(datatype, data) {
+ if (!datatype || !data)
+ return null;
+
+ switch (datatype) {
+ case 'port':
+ return match(data, /^\d+$/) != null && int(data) >= 0 && int(data) <= 65535;
+ case 'ip4addr':
+ if (match(data, /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) == null)
+ return false;
+ for (let octet in split(data, '.'))
+ if (int(octet) > 255)
+ return false;
+ return true;
+ case 'ip6addr':
+ return match(data, /^[0-9a-fA-F:]+$/) != null && match(data, /::.*::/) == null;
+ case 'hostname':
+ return match(data, /^[A-Za-z0-9_][A-Za-z0-9_%-.]*[A-Za-z0-9]$/) != null ||
+ match(data, /^[A-Za-z0-9_]$/) != null;
+ case 'host':
+ return validation('ip4addr', data) === true ||
+ validation('ip6addr', data) === true ||
+ validation('hostname', data) === true;
+ default:
+ return null;
+ }
+};
+
+export function parseURL(url) {
+ if (type(url) !== 'string')
+ return null;
+
+ const services = {
+ http: '80',
+ https: '443'
+ };
+
+ const objurl = {};
+
+ objurl.href = url;
+
+ url = replace(url, /#(.+)$/, (_, val) => {
+ objurl.hash = val;
+ return '';
+ });
+
+ url = replace(url, /^(\w[A-Za-z0-9\+\-\.]+):/, (_, val) => {
+ objurl.protocol = val;
+ return '';
+ });
+
+ url = replace(url, /\?(.+)/, (_, val) => {
+ objurl.search = val;
+ objurl.searchParams = urldecode_params(val);
+ return '';
+ });
+
+ url = replace(url, /^\/\/([^\/]+)/, (_, val) => {
+ val = replace(val, /^([^@]+)@/, (_, val) => {
+ objurl.userinfo = val;
+ return '';
+ });
+
+ val = replace(val, /:(\d+)$/, (_, val) => {
+ objurl.port = val;
+ return '';
+ });
+
+ if (validation('ip4addr', val) ||
+ validation('ip6addr', replace(val, /\[|\]/g, '')) ||
+ validation('hostname', val))
+ objurl.hostname = val;
+
+ return '';
+ });
+
+ objurl.pathname = url || '/';
+
+ if (!objurl.protocol || !objurl.hostname)
+ return null;
+
+ if (objurl.userinfo) {
+ objurl.userinfo = replace(objurl.userinfo, /:(.+)$/, (_, val) => {
+ objurl.password = val;
+ return '';
+ });
+
+ if (match(objurl.userinfo, /^[A-Za-z0-9\+\-\_\.]+$/)) {
+ objurl.username = objurl.userinfo;
+ delete objurl.userinfo;
+ } else {
+ delete objurl.userinfo;
+ delete objurl.password;
+ }
+ };
+
+ if (!objurl.port)
+ objurl.port = services[objurl.protocol];
+
+ objurl.host = objurl.hostname + (objurl.port ? `:${objurl.port}` : '');
+ objurl.origin = `${objurl.protocol}://${objurl.host}`;
+
+ return objurl;
+};
diff --git a/luci-app-homeproxy/tests/ucode/run.sh b/luci-app-homeproxy/tests/ucode/run.sh
new file mode 100755
index 000000000..7606a80ae
--- /dev/null
+++ b/luci-app-homeproxy/tests/ucode/run.sh
@@ -0,0 +1,87 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Run the ucode-level tests: the parse_uri unit tests, the fw4 inventory check
+# and the generator regression fixtures. Requires ucode; sing-box is needed for
+# the generator cases (they validate the emitted config with `sing-box check`).
+#
+# Usage: sh tests/ucode/run.sh [work-dir]
+
+ROOT="${1:-.}"
+WORK="${2:-/tmp/hp-ucode-tests}"
+
+ROOT="$(cd "$ROOT" && pwd)"
+FAILED=0
+
+echo "== ucode syntax check =="
+for file in "$ROOT"/root/etc/homeproxy/scripts/*.uc "$ROOT"/root/usr/share/rpcd/ucode/*; do
+ [ -f "$file" ] || continue
+ # Modules (with export statements) cannot be compiled as a program; they
+ # are loaded through `import` below instead.
+ case "$file" in
+ *homeproxy.uc|*parse_uri.uc) continue ;;
+ esac
+ if ! ucode -c -o "/dev/null" "$file" 2> "/tmp/hp-ucode-syntax.err"; then
+ echo "FAIL: $file"
+ head -8 "/tmp/hp-ucode-syntax.err"
+ FAILED=1
+ fi
+done
+for module in homeproxy parse_uri; do
+ if ! ucode -L "$ROOT/root/etc/homeproxy/scripts" -e "import * as m from \"$module\";" 2> "/tmp/hp-ucode-syntax.err"; then
+ echo "FAIL: module $module"
+ head -8 "/tmp/hp-ucode-syntax.err"
+ FAILED=1
+ fi
+done
+[ "$FAILED" -eq 0 ] && echo "PASS: all ucode sources compile"
+
+echo "== fw4 chain/set inventory =="
+sh "$ROOT/tests/ucode/test_fw4_names.sh" "$ROOT" || FAILED=1
+
+echo "== firewall template rendering =="
+sh "$ROOT/tests/ucode/test_firewall_template.sh" "$ROOT" || FAILED=1
+
+echo "== parse_uri unit tests =="
+rm -rf "$WORK/parse_uri"
+mkdir -p "$WORK/parse_uri"
+cp "$ROOT/root/etc/homeproxy/scripts/parse_uri.uc" "$WORK/parse_uri/"
+cp "$ROOT/tests/ucode/mocks/homeproxy.uc" "$WORK/parse_uri/"
+cp "$ROOT/tests/ucode/test_parse_uri.uc" "$WORK/parse_uri/"
+
+if ( cd "$WORK/parse_uri" && ucode test_parse_uri.uc ); then
+ echo "PASS: parse_uri unit tests"
+else
+ echo "FAIL: parse_uri unit tests"
+ FAILED=1
+fi
+
+echo "== homeproxy helper tests =="
+rm -rf "$WORK/homeproxy"
+mkdir -p "$WORK/homeproxy"
+cp "$ROOT/root/etc/homeproxy/scripts/homeproxy.uc" "$WORK/homeproxy/"
+cp "$ROOT/tests/ucode/test_homeproxy_utils.uc" "$WORK/homeproxy/"
+if ( cd "$WORK/homeproxy" && ucode test_homeproxy_utils.uc ); then
+ echo "PASS: executeCommand() regression tests"
+else
+ echo "FAIL: executeCommand() regression tests"
+ FAILED=1
+fi
+
+echo "== executeCommand() failure-path test =="
+rm -rf "$WORK/homeproxy_inject"
+mkdir -p "$WORK/homeproxy_inject"
+sed 's|const exitcode = system(.*);|die("injected failure");|' \
+ "$ROOT/root/etc/homeproxy/scripts/homeproxy.uc" > "$WORK/homeproxy_inject/homeproxy.uc"
+cp "$ROOT/tests/ucode/test_homeproxy_utils_inject.uc" "$WORK/homeproxy_inject/"
+if ( cd "$WORK/homeproxy_inject" && ucode test_homeproxy_utils_inject.uc 2>"/dev/null" ); then
+ echo "PASS: executeCommand() failure path"
+else
+ echo "FAIL: executeCommand() failure path"
+ FAILED=1
+fi
+
+echo "== generator regression tests =="
+sh "$ROOT/tests/ucode/test_generators.sh" "$ROOT" "$WORK/generators" || FAILED=1
+
+exit $FAILED
diff --git a/luci-app-homeproxy/tests/ucode/test_firewall_template.sh b/luci-app-homeproxy/tests/ucode/test_firewall_template.sh
new file mode 100644
index 000000000..51a03eb4c
--- /dev/null
+++ b/luci-app-homeproxy/tests/ucode/test_firewall_template.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Render firewall_post.ut and verify the homeproxy fw4 objects survive as real
+# nft statements.
+#
+# The template opens with `{%-`, which trims the whitespace in front of it: any
+# text placed above that tag loses its trailing newline and is glued onto the
+# first generated statement, turning it into a comment. That silently dropped
+# every homeproxy chain/set from the fw4 ruleset once, so keep this check.
+#
+# Usage: sh tests/ucode/test_firewall_template.sh
+
+ROOT="${1:-.}"
+ROOT="$(cd "$ROOT" && pwd)"
+OUT="$(mktemp)"
+FAILED=0
+
+if ! utpl -S "$ROOT/root/etc/homeproxy/scripts/firewall_post.ut" > "$OUT" 2>"/tmp/hp-fw4tpl.err"; then
+ echo "FAIL: could not render firewall_post.ut"
+ head -5 "/tmp/hp-fw4tpl.err"
+ rm -f "$OUT"
+ exit 1
+fi
+
+# Declared unconditionally by the template, so they must always be present as
+# standalone statements.
+for name in homeproxy_local_addr_v4 homeproxy_wan_proxy_addr_v4; do
+ if ! grep -q "^set $name {" "$OUT"; then
+ echo "FAIL: 'set $name {' is missing from the rendered firewall template"
+ grep -n "$name" "$OUT" | head -2
+ FAILED=1
+ fi
+done
+
+# A statement glued onto the preceding comment looks like
+# "# .set homeproxy_x {" -- exactly the failure mode above.
+if grep -nE "^#[^!].*homeproxy_[a-z0-9_]+ \{" "$OUT" > "/dev/null"; then
+ echo "FAIL: an nft statement is glued onto a comment line"
+ grep -nE "^#[^!].*homeproxy_[a-z0-9_]+ \{" "$OUT" | head -2
+ FAILED=1
+fi
+
+[ "$FAILED" -eq 0 ] && echo "PASS: firewall_post.ut renders homeproxy objects as standalone nft statements"
+
+rm -f "$OUT"
+exit $FAILED
diff --git a/luci-app-homeproxy/tests/ucode/test_fw4_names.sh b/luci-app-homeproxy/tests/ucode/test_fw4_names.sh
new file mode 100644
index 000000000..fd037df1c
--- /dev/null
+++ b/luci-app-homeproxy/tests/ucode/test_fw4_names.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# The fw4 chain/set inventory in scripts/fw4_names.sh must stay in sync with
+# the objects declared by scripts/firewall_post.ut: the first drives the
+# cleanup in init.d/homeproxy, the second creates them. A drift means either a
+# leftover object or a delete of something that never existed (which used to
+# abort the whole cleanup batch).
+#
+# Usage: sh tests/ucode/test_fw4_names.sh
+
+ROOT="${1:-.}"
+ROOT="$(cd "$ROOT" && pwd)"
+
+NAMES="$ROOT/root/etc/homeproxy/scripts/fw4_names.sh"
+POST="$ROOT/root/etc/homeproxy/scripts/firewall_post.ut"
+PRE="$ROOT/root/etc/homeproxy/scripts/firewall_pre.uc"
+
+FAILED=0
+
+# shellcheck source=/dev/null
+. "$NAMES"
+
+check_group() {
+ group="$1"
+ list="$(printf '%s\n' $2 | tr '\n' ' ')"
+ declared="$(printf '%s\n' $3 | tr '\n' ' ')"
+ missing=""
+ extra=""
+
+ for name in $declared; do
+ case " $list " in
+ *" $name "*) ;;
+ *) missing="$missing $name" ;;
+ esac
+ done
+
+ for name in $list; do
+ case " $declared " in
+ *" $name "*) ;;
+ *) extra="$extra $name" ;;
+ esac
+ done
+
+ if [ -z "$missing$extra" ]; then
+ echo "PASS: $group inventory matches firewall_post.ut"
+ else
+ [ -n "$missing" ] && echo "FAIL: $group declared in firewall_post.ut but missing from fw4_names.sh:$missing"
+ [ -n "$extra" ] && echo "FAIL: $group listed in fw4_names.sh but not declared in firewall_post.ut:$extra"
+ FAILED=1
+ fi
+}
+
+post_chains="$(grep -oE '^chain homeproxy_[a-z0-9_]+' "$POST" | awk '{print $2}' | sort -u)"
+post_sets="$(grep -oE '^set homeproxy_[a-z0-9_]+' "$POST" | awk '{print $2}' | sort -u)"
+
+check_group "chain" "$HP_FW4_CHAINS" "$post_chains"
+check_group "set" "$HP_FW4_SETS" "$post_sets"
+
+# firewall_pre.uc only writes forward/input accept rules; it must not own any
+# chain/set of its own.
+pre_refs="$(grep -oE 'homeproxy_[a-z0-9_]+' "$PRE" | sort -u)"
+if [ -n "$pre_refs" ]; then
+ echo "NOTE: firewall_pre.uc references fw4 objects:$pre_refs"
+fi
+
+exit $FAILED
diff --git a/luci-app-homeproxy/tests/ucode/test_generators.sh b/luci-app-homeproxy/tests/ucode/test_generators.sh
new file mode 100755
index 000000000..2c06ff131
--- /dev/null
+++ b/luci-app-homeproxy/tests/ucode/test_generators.sh
@@ -0,0 +1,89 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Run generate_client.uc / generate_server.uc against the UCI fixtures and let
+# sing-box validate the result. The generators read /etc/config and write
+# /var/run, so this script materialises an isolated copy of them: homeproxy.uc
+# is rewritten to point HP_DIR/RUN_DIR at a scratch directory, and the uci
+# cursor is pointed at the fixture config.
+#
+# Usage: sh tests/ucode/test_generators.sh [work-dir]
+
+ROOT="${1:-.}"
+WORK="${2:-/tmp/hp-generator-test}"
+
+ROOT="$(cd "$ROOT" && pwd)"
+FAILED=0
+
+run_case() {
+ name="$1"
+ fixture="$2"
+ generator="$3"
+ outfile="$4"
+ dir="$WORK/$name"
+
+ rm -rf "$dir"
+ mkdir -p "$dir/config" "$dir/run" "$dir/scripts" "$dir/resources" "$dir/ruleset"
+ : > "$dir/resources/direct_list.txt"
+ : > "$dir/resources/proxy_list.txt"
+
+ if grep -q "__RULESET_DIR__" "$fixture"; then
+ # The fixture needs a real local rule-set on disk.
+ printf '%s' '{"version":1,"rules":[{"domain_suffix":["example.com"]}]}' > "$dir/ruleset/src.json"
+ if ! sing-box rule-set compile "$dir/ruleset/src.json" -o "$dir/ruleset/test.srs"; then
+ echo "FAIL: $name: could not compile the local rule-set fixture"
+ FAILED=1
+ return
+ fi
+ sed "s#__RULESET_DIR__#$dir/ruleset#" "$fixture" > "$dir/config/homeproxy"
+ else
+ cp "$fixture" "$dir/config/homeproxy"
+ fi
+
+ sed -e "s#^export const HP_DIR = '/etc/homeproxy';#export const HP_DIR = '$dir';#" \
+ -e "s#^export const RUN_DIR = '/var/run/homeproxy';#export const RUN_DIR = '$dir/run';#" \
+ "$ROOT/root/etc/homeproxy/scripts/homeproxy.uc" > "$dir/scripts/homeproxy.uc"
+
+ sed -e "s#const uci = cursor();#const uci = cursor('$dir/config');#" \
+ "$ROOT/root/etc/homeproxy/scripts/$generator" > "$dir/scripts/$generator"
+
+ if ! ( cd "$dir/scripts" && ucode "$generator" ); then
+ echo "FAIL: $name: $generator exited non-zero"
+ FAILED=1
+ return
+ fi
+
+ if [ ! -f "$dir/run/$outfile" ]; then
+ echo "FAIL: $name: $outfile was not generated"
+ FAILED=1
+ return
+ fi
+
+ if ! sing-box check --config "$dir/run/$outfile"; then
+ echo "FAIL: $name: sing-box rejected the generated $outfile"
+ FAILED=1
+ return
+ fi
+
+ echo "PASS: $name ($(wc -c < "$dir/run/$outfile") bytes)"
+}
+
+run_case client "$ROOT/tests/fixtures/generators/client.uci" generate_client.uc sing-box-c.json
+
+# The preset remote rule-sets must be fetched through the node. A direct
+# download depends on the CDN staying reachable from mainland China and fails
+# intermittently under DNS pollution, which shows up as "open connection to
+# :443 using outbound/direct[direct]: i/o timeout" in sing-box-c.log.
+if grep -q '"detour": "direct-out"' "$WORK/client/run/sing-box-c.json"; then
+ echo "FAIL: client: a remote rule-set would still be downloaded directly"
+ FAILED=1
+fi
+if ! grep -q '"detour": "main-out"' "$WORK/client/run/sing-box-c.json"; then
+ echo "FAIL: client: no remote rule-set is configured to download through main-out"
+ FAILED=1
+fi
+
+run_case custom "$ROOT/tests/fixtures/generators/custom.uci" generate_client.uc sing-box-c.json
+run_case server "$ROOT/tests/fixtures/generators/server.uci" generate_server.uc sing-box-s.json
+
+exit $FAILED
diff --git a/luci-app-homeproxy/tests/ucode/test_homeproxy_utils.uc b/luci-app-homeproxy/tests/ucode/test_homeproxy_utils.uc
new file mode 100644
index 000000000..f46587a5e
--- /dev/null
+++ b/luci-app-homeproxy/tests/ucode/test_homeproxy_utils.uc
@@ -0,0 +1,80 @@
+#!/usr/bin/ucode
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Copyright (C) 2025 ImmortalWrt.org
+ *
+ * Regression tests for homeproxy.uc helpers, focused on executeCommand():
+ * return shape, stderr/exit-code capture, binary detection and (most
+ * importantly) that the temporary descriptors are closed on every run.
+ */
+
+'use strict';
+
+import { lsdir } from 'fs';
+import { executeCommand, isValidPEM, shellQuote } from 'homeproxy';
+
+let failures = 0,
+ checks = 0;
+
+function expect(name, actual, want) {
+ checks++;
+ if (sprintf('%J', actual) !== sprintf('%J', want)) {
+ printf('FAIL %s: expected %J, got %J\n', name, want, actual);
+ failures++;
+ }
+}
+
+function fd_count() {
+ let n = 0;
+ for (let _entry in lsdir('/proc/self/fd'))
+ n++;
+ return n;
+}
+
+/* successful command */
+const ok = executeCommand('echo', 'hello');
+expect('ok.exitcode', ok.exitcode, 0);
+expect('ok.stdout', ok.stdout, 'hello\n');
+expect('ok.stderr', ok.stderr, '');
+expect('ok.binary', ok.binary, false);
+expect('ok.command', ok.command, 'echo hello');
+
+/* failing command keeps stderr and the exit code */
+const bad = executeCommand('sh', '-c', shellQuote('echo oops >&2; exit 3'));
+expect('bad.exitcode', bad.exitcode, 3);
+expect('bad.stderr', bad.stderr, 'oops\n');
+expect('bad.stdout', bad.stdout, '');
+
+/* nondescript exit code */
+expect('false.exitcode', executeCommand('false').exitcode, 1);
+
+/* binary output is detected and withheld */
+const bin = executeCommand('sh', '-c', shellQuote('printf "\\001\\002\\003"'));
+expect('bin.binary', bin.binary, true);
+expect('bin.stdout', bin.stdout, null);
+
+/* isValidPEM(): certificate vs private key, boundaries and body */
+const pem_cert = '-----BEGIN CERTIFICATE-----\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n-----END CERTIFICATE-----';
+const pem_key = '-----BEGIN RSA PRIVATE KEY-----\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n-----END RSA PRIVATE KEY-----';
+expect('pem.cert', isValidPEM(pem_cert, false), true);
+expect('pem.cert-as-key', isValidPEM(pem_cert, true), false);
+expect('pem.key', isValidPEM(pem_key, true), true);
+expect('pem.key-as-cert', isValidPEM(pem_key, false), false);
+expect('pem.garbage', isValidPEM('not a pem at all', false), false);
+expect('pem.empty', isValidPEM('', false), false);
+
+/* descriptors must not leak across calls */
+const before = fd_count();
+for (let i = 0; i < 200; i++)
+ executeCommand('true');
+const after = fd_count();
+
+checks++;
+if (after > before) {
+ printf('FAIL descriptor leak: %d -> %d after 200 calls\n', before, after);
+ failures++;
+}
+
+printf('%d checks, %d failures\n', checks, failures);
+exit(failures === 0 ? 0 : 1);
diff --git a/luci-app-homeproxy/tests/ucode/test_homeproxy_utils_inject.uc b/luci-app-homeproxy/tests/ucode/test_homeproxy_utils_inject.uc
new file mode 100644
index 000000000..a81722d7b
--- /dev/null
+++ b/luci-app-homeproxy/tests/ucode/test_homeproxy_utils_inject.uc
@@ -0,0 +1,53 @@
+#!/usr/bin/ucode
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Copyright (C) 2025 ImmortalWrt.org
+ *
+ * Exceptional-path test for executeCommand(): the copy of homeproxy.uc staged
+ * next to this file has its `system()` call replaced by `die()`, so every call
+ * throws before the descriptors are read. ucode has no `finally`, so this
+ * checks that the catch block still closes both descriptors.
+ */
+
+'use strict';
+
+import { lsdir } from 'fs';
+import { executeCommand } from 'homeproxy';
+
+let failures = 0;
+
+function fd_count() {
+ let n = 0;
+ for (let _entry in lsdir('/proc/self/fd'))
+ n++;
+ return n;
+}
+
+const before = fd_count();
+let caught = 0;
+
+for (let i = 0; i < 50; i++) {
+ try {
+ executeCommand('true');
+ } catch (e) {
+ caught++;
+ }
+}
+
+const after = fd_count();
+
+if (caught !== 50) {
+ printf('FAIL: expected 50 propagated exceptions, got %d\n', caught);
+ failures++;
+}
+
+if (after > before) {
+ printf('FAIL descriptor leak on the exceptional path: %d -> %d\n', before, after);
+ failures++;
+}
+
+if (failures === 0)
+ printf('PASS: injected failure propagated and both descriptors were closed\n');
+
+exit(failures === 0 ? 0 : 1);
diff --git a/luci-app-homeproxy/tests/ucode/test_parse_uri.uc b/luci-app-homeproxy/tests/ucode/test_parse_uri.uc
new file mode 100644
index 000000000..8bab48f3c
--- /dev/null
+++ b/luci-app-homeproxy/tests/ucode/test_parse_uri.uc
@@ -0,0 +1,170 @@
+#!/usr/bin/ucode
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Copyright (C) 2025 ImmortalWrt.org
+ *
+ * Unit tests for the share-link parsers in parse_uri.uc. Run through
+ * tests/ucode/run.sh, which stages parse_uri.uc next to the mocked
+ * homeproxy.uc.
+ */
+
+'use strict';
+
+import { parse_uri } from 'parse_uri';
+
+const FEATURES = { with_quic: true, with_utls: true };
+const NO_QUIC = { with_quic: false, with_utls: true };
+const LOG = (..._args) => {};
+
+let failures = 0,
+ checks = 0;
+
+function expect_fields(name, cfg, expected) {
+ if (type(cfg) !== 'object') {
+ printf('FAIL %s: expected an object, got %J\n', name, cfg);
+ failures++;
+ return;
+ }
+
+ for (let key in expected) {
+ checks++;
+ if (sprintf('%J', cfg[key]) !== sprintf('%J', expected[key])) {
+ printf('FAIL %s: %s expected %J, got %J\n', name, key, expected[key], cfg[key]);
+ failures++;
+ }
+ }
+}
+
+function expect_null(name, cfg) {
+ checks++;
+ if (cfg !== null) {
+ printf('FAIL %s: expected null, got %J\n', name, cfg);
+ failures++;
+ }
+}
+
+/* anytls */
+expect_fields('anytls', parse_uri('anytls://secret@a.example.com:443?sni=a.example.com&insecure=1#AnyTLS-Node', FEATURES, LOG), {
+ label: 'AnyTLS-Node', type: 'anytls', address: 'a.example.com', port: '443',
+ password: 'secret', tls: '1', tls_sni: 'a.example.com', tls_insecure: '1'
+});
+
+/* http / https */
+expect_fields('https', parse_uri('https://user:pass@b.example.com:8443#HTTPS-Node', FEATURES, LOG), {
+ label: 'HTTPS-Node', type: 'http', address: 'b.example.com', port: '8443',
+ username: 'user', password: 'pass', tls: '1'
+});
+expect_fields('http', parse_uri('http://c.example.com:8080#HTTP-Node', FEATURES, LOG), {
+ label: 'HTTP-Node', type: 'http', address: 'c.example.com', port: '8080', tls: '0'
+});
+
+/* hysteria */
+expect_fields('hysteria', parse_uri('hysteria://d.example.com:36712?auth=pass&peer=d.example.com&insecure=1&upmbps=100&downmbps=200&alpn=h3&protocol=udp#Hy1', FEATURES, LOG), {
+ label: 'Hy1', type: 'hysteria', address: 'd.example.com', port: '36712',
+ hysteria_protocol: 'udp', hysteria_auth_type: 'string', hysteria_auth_payload: 'pass',
+ hysteria_up_mbps: '100', hysteria_down_mbps: '200',
+ tls: '1', tls_insecure: '1', tls_sni: 'd.example.com', tls_alpn: 'h3'
+});
+
+/* hysteria2 */
+expect_fields('hysteria2', parse_uri('hysteria2://pass@e.example.com:443?sni=e.example.com&obfs=salamander&obfs-password=op#Hy2', FEATURES, LOG), {
+ label: 'Hy2', type: 'hysteria2', address: 'e.example.com', port: '443',
+ password: 'pass', hysteria_obfs_type: 'salamander', hysteria_obfs_password: 'op',
+ tls: '1', tls_insecure: '0', tls_sni: 'e.example.com'
+});
+expect_fields('hy2-alias', parse_uri('hy2://pass@e.example.com:443#Hy2Alias', FEATURES, LOG), {
+ label: 'Hy2Alias', type: 'hysteria2', address: 'e.example.com', port: '443'
+});
+
+/* snell */
+expect_fields('snell', parse_uri('snell://f.example.com:443?psk=pskvalue&version=4&obfs=http&obfs-host=bing.com&reuse=1#Snell', FEATURES, LOG), {
+ label: 'Snell', type: 'snell', address: 'f.example.com', port: '443',
+ password: 'pskvalue', snell_version: '4', snell_obfs_mode: 'http',
+ snell_obfs_host: 'bing.com', snell_reuse: '1'
+});
+
+/* socks */
+expect_fields('socks5', parse_uri('socks5://user:pass@g.example.com:1080#Socks', FEATURES, LOG), {
+ label: 'Socks', type: 'socks', address: 'g.example.com', port: '1080',
+ username: 'user', password: 'pass', socks_version: '5'
+});
+expect_fields('socks4', parse_uri('socks4://h.example.com:1080#Socks4', FEATURES, LOG), {
+ socks_version: '4'
+});
+
+/* shadowsocks: SIP002 with base64 user info */
+expect_fields('ss-sip002-b64', parse_uri('ss://YWVzLTI1Ni1nY206cGFzc3dvcmQ=@i.example.com:8388#SS-Node', FEATURES, LOG), {
+ label: 'SS-Node', type: 'shadowsocks', address: 'i.example.com', port: '8388',
+ shadowsocks_encrypt_method: 'aes-256-gcm', password: 'password'
+});
+
+/* shadowsocks: SIP002 with plugin */
+expect_fields('ss-sip002-plugin', parse_uri('ss://YWVzLTI1Ni1nY206cGFzc3dvcmQ=@j.example.com:8388?plugin=simple-obfs%3Bobfs%3Dhttp#SS-Plugin', FEATURES, LOG), {
+ label: 'SS-Plugin', type: 'shadowsocks', address: 'j.example.com', port: '8388',
+ shadowsocks_plugin: 'obfs-local', shadowsocks_plugin_opts: 'obfs=http'
+});
+
+/* shadowsocks: Shadowrocket whole-payload base64 */
+expect_fields('ss-shadowrocket', parse_uri('ss://YWVzLTI1Ni1nY206cGFzc3dvcmRAay5leGFtcGxlLmNvbTo4Mzg4#SS-SR', FEATURES, LOG), {
+ label: 'SS-SR', type: 'shadowsocks', address: 'k.example.com', port: '8388',
+ shadowsocks_encrypt_method: 'aes-256-gcm', password: 'password'
+});
+
+/* trojan */
+expect_fields('trojan-ws', parse_uri('trojan://pass@l.example.com:443?type=ws&host=l.example.com&path=%2Fpath%3Fed%3D2048&sni=l.example.com#TrojanWs', FEATURES, LOG), {
+ label: 'TrojanWs', type: 'trojan', address: 'l.example.com', port: '443', password: 'pass',
+ transport: 'ws', ws_host: 'l.example.com', ws_path: '/path',
+ websocket_early_data: '2048', websocket_early_data_header: 'Sec-WebSocket-Protocol',
+ tls: '1', tls_sni: 'l.example.com'
+});
+expect_fields('trojan-grpc', parse_uri('trojan://pass@l.example.com:443?type=grpc&serviceName=gs#TrojanGrpc', FEATURES, LOG), {
+ transport: 'grpc', grpc_servicename: 'gs'
+});
+
+/* tuic */
+expect_fields('tuic', parse_uri('tuic://tuic-uuid:pass@m.example.com:443?congestion_control=bbr&udp_relay_mode=native&alpn=h3&sni=m.example.com#Tuic', FEATURES, LOG), {
+ label: 'Tuic', type: 'tuic', address: 'm.example.com', port: '443',
+ uuid: 'tuic-uuid', password: 'pass', tuic_congestion_control: 'bbr',
+ tuic_udp_relay_mode: 'native', tls: '1', tls_sni: 'm.example.com', tls_alpn: [ 'h3' ]
+});
+
+/* vless */
+expect_fields('vless-reality-grpc', parse_uri('vless://vless-uuid@n.example.com:443?security=reality&pbk=PUBKEY&sid=abcd&fp=chrome&type=grpc&serviceName=gs&sni=n.example.com&flow=xtls-rprx-vision#Vless', FEATURES, LOG), {
+ label: 'Vless', type: 'vless', address: 'n.example.com', port: '443', uuid: 'vless-uuid',
+ transport: 'grpc', grpc_servicename: 'gs', tls: '1', tls_sni: 'n.example.com',
+ tls_reality: '1', tls_reality_public_key: 'PUBKEY', tls_reality_short_id: 'abcd',
+ tls_utls: 'chrome', vless_flow: 'xtls-rprx-vision'
+});
+expect_fields('vless-ws-early-data', parse_uri('vless://vless-uuid@o.example.com:443?security=tls&type=ws&host=o.example.com&path=%2Fws%3Fed%3D1024&sni=o.example.com&alpn=h2%2Chttp%2F1.1#VlessWs', FEATURES, LOG), {
+ type: 'vless', transport: 'ws', ws_host: 'o.example.com', ws_path: '/ws',
+ websocket_early_data: '1024', websocket_early_data_header: 'Sec-WebSocket-Protocol',
+ tls: '1', tls_alpn: [ 'h2', 'http/1.1' ]
+});
+
+/* vmess */
+expect_fields('vmess-ws', parse_uri('vmess://eyJ2IjoiMiIsInBzIjoiVk1lc3MiLCJhZGQiOiJwLmV4YW1wbGUuY29tIiwicG9ydCI6IjQ0MyIsImlkIjoiM2FmODg1NjEtOWM2OS00YjE5LThmN2UtZjA4ZDU4MGJjMzM5IiwiYWlkIjoiMCIsIm5ldCI6IndzIiwidHlwZSI6Im5vbmUiLCJob3N0IjoicC5leGFtcGxlLmNvbSIsInBhdGgiOiIvd3MiLCJ0bHMiOiJ0bHMiLCJzbmkiOiJwLmV4YW1wbGUuY29tIn0=', FEATURES, LOG), {
+ label: 'VMess', type: 'vmess', address: 'p.example.com', port: '443',
+ uuid: '3af88561-9c69-4b19-8f7e-f08d580bc339', vmess_alterid: '0', vmess_encrypt: 'auto',
+ vmess_global_padding: '1', transport: 'ws', ws_host: 'p.example.com', ws_path: '/ws',
+ tls: '1', tls_sni: 'p.example.com'
+});
+
+/* sip008 object */
+expect_fields('sip008', parse_uri({
+ nodetype: 'sip008', remarks: 'SIP008', server: 'q.example.com', server_port: 8388,
+ method: 'aes-256-gcm', password: 'pw'
+}, FEATURES, LOG), {
+ label: 'SIP008', type: 'shadowsocks', address: 'q.example.com', port: 8388,
+ shadowsocks_encrypt_method: 'aes-256-gcm', password: 'pw'
+});
+
+/* rejection paths */
+expect_null('vless-kcp-unsupported', parse_uri('vless://u@r.example.com:443?type=kcp#Kcp', FEATURES, LOG));
+expect_null('hysteria-without-quic', parse_uri('hysteria://s.example.com:443?auth=a#NoQuic', NO_QUIC, LOG));
+expect_null('tuic-without-quic', parse_uri('tuic://u:p@s.example.com:443#NoQuic', NO_QUIC, LOG));
+expect_null('invalid-port', parse_uri('vless://u@t.example.com:99999?security=tls#BadPort', FEATURES, LOG));
+expect_null('unknown-scheme', parse_uri('unknown://u@t.example.com:443', FEATURES, LOG));
+
+printf('%d checks, %d failures\n', checks, failures);
+exit(failures === 0 ? 0 : 1);
diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile
index a89be1858..65f5a12dd 100644
--- a/luci-app-passwall/Makefile
+++ b/luci-app-passwall/Makefile
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall
PKG_VERSION:=26.9.9
-PKG_RELEASE:=273
+PKG_RELEASE:=274
PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \
diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua
index 31895d26f..697e78480 100644
--- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua
+++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua
@@ -93,15 +93,11 @@ function gen_outbound(flag, node, tag, proxy_table)
end
local remarks = node.remarks
- local proxy_tag = nil
- local fragment = nil
- local record_fragment = nil
- local run_socks_instance = true
+ local proxy_tag, fragment, record_fragment
if proxy_table ~= nil and type(proxy_table) == "table" then
proxy_tag = proxy_table.tag or nil
fragment = (proxy_table.fragment and node.protocol ~= "naive" and not node.hysteria2_realms) and true or nil
record_fragment = (proxy_table.record_fragment and node.protocol ~= "naive" and not node.hysteria2_realms) and true or nil
- run_socks_instance = proxy_table.run_socks_instance
end
if node.type ~= "sing-box" then
@@ -110,7 +106,12 @@ function gen_outbound(flag, node, tag, proxy_table)
proxy_tag = "socks <- " .. node_id
else
local new_port
- if run_socks_instance then
+ local run_socks_instance = true
+ if NO_RUN then
+ TMP_PORT = TMP_PORT and TMP_PORT + 1 or 3001
+ new_port = TMP_PORT
+ run_socks_instance = nil
+ else
local relay_port = (proxy_tag and node.port) and tostring(node.port) or ""
if relay_port == "" then
local cache = api.get_socks_port_by_cache(node_id)
@@ -140,9 +141,6 @@ function gen_outbound(flag, node, tag, proxy_table)
api.set_socks_port_to_cache(node_id, new_port)
end
end
- else
- TMP_PORT = TMP_PORT and TMP_PORT + 1 or 3001 -- 导出配置时作为演示
- new_port = TMP_PORT
end
if new_port then
node = {
@@ -1163,10 +1161,11 @@ function gen_config(var)
local dns_cache = var["dns_cache"]
local dns_socks_address = var["dns_socks_address"]
local dns_socks_port = var["dns_socks_port"]
- local no_run = var["no_run"]
local use_proxy_list = var["use_proxy_list"]
local use_gfw_list = var["use_gfw_list"]
local chn_list = var["chn_list"]
+ local run_in_global = var["run_in_global"]
+ NO_RUN = var["no_run"]
local dns_domain_rules = {}
local dns = nil
@@ -1360,7 +1359,9 @@ function gen_config(var)
ut_nodes = _node.urltest_node
end
- -- api.log(" - 加载 Sing-Box URLTest 节点【" .. (_node.remarks or "") .. "】,子节点数量:" .. #(ut_nodes or {}))
+ if not NO_RUN and run_in_global then
+ api.log(" - 加载 Sing-Box URLTest 节点【" .. (_node.remarks or "") .. "】,子节点数量:" .. #(ut_nodes or {}))
+ end
local valid_nodes = {}
for i = 1, #(ut_nodes or {}) do
@@ -1375,7 +1376,7 @@ function gen_config(var)
end
end
if is_new_ut_node then
- local outboundTag = gen_outbound_get_tag(flag, ut_node_id, ut_node_tag, { fragment = singbox_settings.fragment == "1" or nil, record_fragment = singbox_settings.record_fragment == "1" or nil, run_socks_instance = not no_run })
+ local outboundTag = gen_outbound_get_tag(flag, ut_node_id, ut_node_tag, { fragment = singbox_settings.fragment == "1" or nil, record_fragment = singbox_settings.record_fragment == "1" or nil })
if outboundTag then
valid_nodes[#valid_nodes + 1] = outboundTag
end
@@ -1478,7 +1479,6 @@ function gen_config(var)
to_node.port = new_port
to_outbound = gen_outbound(node[".name"], to_node, tag, {
tag = tag,
- run_socks_instance = not no_run
})
else
to_outbound = gen_outbound(node[".name"], to_node)
@@ -1571,7 +1571,6 @@ function gen_config(var)
local proxy_table = {
fragment = singbox_settings.fragment == "1",
record_fragment = singbox_settings.record_fragment == "1",
- run_socks_instance = not no_run,
}
local preproxy_node_id = node[rule_name .. "_proxy_tag"]
if preproxy_node_id == _node_id then preproxy_node_id = nil end
@@ -1855,7 +1854,6 @@ function gen_config(var)
COMMON.default_outbound_tag = gen_outbound_get_tag(flag, node or node_id, nil, {
fragment = singbox_settings.fragment == "1" or nil,
record_fragment = singbox_settings.record_fragment == "1" or nil,
- run_socks_instance = not no_run
})
end
@@ -2316,7 +2314,7 @@ function gen_config(var)
routing_mark = 255,
})
for index, value in ipairs(config.outbounds) do
- if not value["_flag_proxy_tag"] and not value.detour and value["_id"] and value.server and (value.server_port or value.server_ports) and not no_run then
+ if not value["_flag_proxy_tag"] and not value.detour and value["_id"] and value.server and (value.server_port or value.server_ports) and not NO_RUN then
sys.call(string.format("echo '%s' >> %s", value["_id"], api.TMP_PATH .. "/direct_node_list"))
end
if not value.detour and not value.bind_interface and value.server then
@@ -2464,7 +2462,7 @@ if arg[1] then
var = jsonc.parse(arg[2])
end
print(func(var))
- if (next(GEO_VAR.SITE_TAGS) or next(GEO_VAR.IP_TAGS)) and not no_run then
+ if (next(GEO_VAR.SITE_TAGS) or next(GEO_VAR.IP_TAGS)) and not NO_RUN then
convert_geofile()
end
end
diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua
index ebeeec547..e87d54153 100644
--- a/luci-app-passwall/luasrc/passwall/util_xray.lua
+++ b/luci-app-passwall/luasrc/passwall/util_xray.lua
@@ -43,16 +43,11 @@ function gen_outbound(flag, node, tag, proxy_table)
end
local remarks = node.remarks
- local proxy_tag = nil
- local dialer_proxy_tag = nil
- local fragment = nil
- local noise = nil
- local run_socks_instance = true
+ local proxy_tag, dialer_proxy_tag, fragment, noise
if proxy_table ~= nil and type(proxy_table) == "table" then
proxy_tag = proxy_table.tag or nil
fragment = (proxy_table.fragment and not node.hysteria2_realms) and true or nil
noise = (proxy_table.noise and not node.hysteria2_realms) and true or nil
- run_socks_instance = proxy_table.run_socks_instance
end
if node.type ~= "Xray" then
@@ -61,7 +56,12 @@ function gen_outbound(flag, node, tag, proxy_table)
node.transport = "raw"
else
local new_port
- if run_socks_instance then
+ local run_socks_instance = true
+ if NO_RUN then
+ TMP_PORT = TMP_PORT and TMP_PORT + 1 or 3001
+ new_port = TMP_PORT
+ run_socks_instance = nil
+ else
local relay_port = (proxy_tag and node.port) and tostring(node.port) or ""
if relay_port == "" then
local cache = api.get_socks_port_by_cache(node_id)
@@ -91,9 +91,6 @@ function gen_outbound(flag, node, tag, proxy_table)
api.set_socks_port_to_cache(node_id, new_port)
end
end
- else
- TMP_PORT = TMP_PORT and TMP_PORT + 1 or 3001 -- 导出配置时作为演示
- new_port = TMP_PORT
end
if new_port then
node = {}
@@ -913,10 +910,11 @@ function gen_config(var)
local dns_socks_address = var["dns_socks_address"]
local dns_socks_port = var["dns_socks_port"]
local loglevel = var["loglevel"] or "warning"
- local no_run = var["no_run"]
local use_proxy_list = var["use_proxy_list"]
local use_gfw_list = var["use_gfw_list"]
local chn_list = var["chn_list"]
+ local run_in_global = var["run_in_global"]
+ NO_RUN = var["no_run"]
local dns_domain_rules = {}
local dns = nil
@@ -1091,7 +1089,9 @@ function gen_config(var)
blc_nodes = _node.balancing_node
end
- -- api.log(" - 加载 Xray 负载均衡 节点【" .. (_node.remarks or "") .. "】,子节点数量:" .. #(blc_nodes or {}))
+ if not NO_RUN and run_in_global then
+ api.log(" - 加载 Xray 负载均衡 节点【" .. (_node.remarks or "") .. "】,子节点数量:" .. #(blc_nodes or {}))
+ end
local valid_nodes = {}
for i = 1, #(blc_nodes or {}) do
@@ -1106,7 +1106,7 @@ function gen_config(var)
end
end
if is_new_blc_node then
- local outboundTag = gen_outbound_get_tag(flag, blc_node_id, blc_node_tag, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.noise == "1" or nil, run_socks_instance = not no_run })
+ local outboundTag = gen_outbound_get_tag(flag, blc_node_id, blc_node_tag, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.noise == "1" or nil })
if outboundTag then
valid_nodes[#valid_nodes + 1] = outboundTag
end
@@ -1135,7 +1135,7 @@ function gen_config(var)
local fallback_node = get_node_by_id(fallback_node_id)
if fallback_node then
if fallback_node.protocol ~= "_balancing" then
- local outboundTag = gen_outbound_get_tag(flag, fallback_node, fallback_node_id, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.noise == "1" or nil, run_socks_instance = not no_run })
+ local outboundTag = gen_outbound_get_tag(flag, fallback_node, fallback_node_id, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.noise == "1" or nil })
if outboundTag then
fallback_node_tag = outboundTag
end
@@ -1267,7 +1267,6 @@ function gen_config(var)
})
to_outbound = gen_outbound(node[".name"], to_node, to_node[".name"], {
tag = to_node[".name"],
- run_socks_instance = not no_run
})
else
to_outbound = gen_outbound(node[".name"], to_node)
@@ -1375,7 +1374,6 @@ function gen_config(var)
local proxy_table = {
fragment = xray_settings.fragment == "1",
noise = xray_settings.noise == "1",
- run_socks_instance = not no_run,
}
local preproxy_node_id = node[rule_name .. "_proxy_tag"]
if preproxy_node_id == _node_id then preproxy_node_id = nil end
@@ -1577,7 +1575,6 @@ function gen_config(var)
COMMON.default_outbound_tag = gen_outbound_get_tag(flag, node or node_id, nil, {
fragment = xray_settings.fragment == "1" or nil,
noise = xray_settings.noise == "1" or nil,
- run_socks_instance = not no_run
})
if COMMON.default_outbound_tag then
routing = {
@@ -2073,7 +2070,7 @@ function gen_config(var)
for index, value in ipairs(config.outbounds) do
local pt = value.protocol
local exclude = { blackhole=1, dns=1, freedom=1, loopback=1 }
- if not value["_flag_proxy_tag"] and value["_id"] and pt and not exclude[pt] and not no_run then
+ if not value["_flag_proxy_tag"] and value["_id"] and pt and not exclude[pt] and not NO_RUN then
sys.call(string.format("echo '%s' >> %s", value["_id"], api.TMP_PATH .. "/direct_node_list"))
end
for k, v in pairs(config.outbounds[index]) do
diff --git a/luci-app-passwall/root/usr/share/passwall/app.sh b/luci-app-passwall/root/usr/share/passwall/app.sh
index cee2811be..8daf595ad 100755
--- a/luci-app-passwall/root/usr/share/passwall/app.sh
+++ b/luci-app-passwall/root/usr/share/passwall/app.sh
@@ -87,7 +87,7 @@ run_ipt2socks() {
run_singbox() {
local flag type node redir_port tcp_proxy_way socks_address socks_port socks_username socks_password http_address http_port http_username http_password
local dns_listen_port direct_dns_query_strategy direct_dns_port direct_dns_udp_server direct_dns_tcp_server remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_fakedns remote_dns_query_strategy remote_rewrite_ttl dns_cache dns_socks_address dns_socks_port
- local loglevel log_file config_file server_host server_port no_run use_proxy_list use_gfw_list chn_list
+ local loglevel log_file config_file server_host server_port no_run use_proxy_list use_gfw_list chn_list run_in_global
eval_set_val "$@"
[ -z "$type" ] && {
type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z')
@@ -182,13 +182,17 @@ run_singbox() {
[ "$remote_fakedns" = "1" ] && json_add_string "remote_dns_fake" "1"
[ -n "$remote_rewrite_ttl" ] && json_add_string "remote_rewrite_ttl" "${remote_rewrite_ttl}"
[ -n "$no_run" ] && json_add_string "no_run" "1"
+ [ -n "$run_in_global" ] && json_add_string "run_in_global" "1"
local _json_arg="$(json_dump)"
lua $UTIL_SINGBOX gen_config "${_json_arg}" > $config_file
[ -n "$no_run" ] && return
local test_log_file=$log_file
+ local status=0
[ "$test_log_file" = "/dev/null" ] && test_log_file="${TMP_PATH}/${config_file##*/}_test.log"
- $SINGBOX_BIN check -c "$config_file" > $test_log_file 2>&1; local status=$?
+ [ -n "$run_in_global" ] && {
+ $SINGBOX_BIN check -c "$config_file" > $test_log_file 2>&1; status=$?
+ }
if [ "${status}" = 0 ]; then
ln_run "$SINGBOX_BIN" "sing-box" "${log_file}" run -c "$config_file"
else
@@ -201,7 +205,7 @@ run_singbox() {
run_xray() {
local flag type node redir_port tcp_proxy_way socks_address socks_port socks_username socks_password http_address http_port http_username http_password
local dns_listen_port direct_dns_query_strategy direct_dns_port direct_dns_udp_server direct_dns_tcp_server remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_fakedns remote_dns_query_strategy dns_cache dns_socks_address dns_socks_port
- local loglevel log_file config_file server_host server_port no_run use_proxy_list use_gfw_list chn_list
+ local loglevel log_file config_file server_host server_port no_run use_proxy_list use_gfw_list chn_list run_in_global
eval_set_val "$@"
[ -z "$type" ] && {
type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z')
@@ -278,13 +282,17 @@ run_xray() {
json_add_string "loglevel" "$loglevel"
[ -n "$no_run" ] && json_add_string "no_run" "1"
+ [ -n "$run_in_global" ] && json_add_string "run_in_global" "1"
local _json_arg="$(json_dump)"
lua $UTIL_XRAY gen_config "${_json_arg}" > $config_file
[ -n "$no_run" ] && return
local test_log_file=$log_file
+ local status=0
[ "$test_log_file" = "/dev/null" ] && test_log_file="${TMP_PATH}/${config_file##*/}_test.log"
- $XRAY_BIN run -test -c "$config_file" > $test_log_file; local status=$?
+ [ -n "$run_in_global" ] && {
+ $XRAY_BIN run -test -c "$config_file" > $test_log_file; status=$?
+ }
if [ "${status}" = 0 ]; then
ln_run "$XRAY_BIN" "xray" "${log_file}" run -c "$config_file"
else
@@ -599,7 +607,7 @@ start_global() {
;;
sing-box)
local _flag="global"
- local _args=""
+ local _args="run_in_global=1"
[ "$on_node_socks" = "1" ] && {
node_socks_flag=1
_args="${_args} socks_address=${node_socks_bind} socks_port=${GLOBAL_SOCKS_port}"
@@ -677,7 +685,7 @@ start_global() {
;;
xray)
local _flag="global"
- local _args=""
+ local _args="run_in_global=1"
[ "$on_node_socks" = "1" ] && {
node_socks_flag=1
_args="${_args} socks_address=${node_socks_bind} socks_port=${GLOBAL_SOCKS_port}"
diff --git a/mise/Makefile b/mise/Makefile
index b04e1a0e7..08a6026b1 100644
--- a/mise/Makefile
+++ b/mise/Makefile
@@ -14,8 +14,8 @@ MISE_HASH_x86_64:=3832f39c325e343f81fe3d92b2447c5d1a5eea1bc85092bb7b6c2580622264
MISE_HASH_aarch64:=06186cfbfe947049b21d58575fb0ea800cc26ed1375f20f4b678cb3a9d679437
PKG_NAME:=mise
-PKG_VERSION:=2026.9.8
-PKG_RELEASE:=14
+PKG_VERSION:=2026.9.9
+PKG_RELEASE:=15
PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION)-linux-$(MISE_ARCH)-musl.tar.gz
PKG_SOURCE_URL:=https://github.com/jdx/mise/releases/download/v$(PKG_VERSION)/
PKG_HASH:=skip
diff --git a/sing-box/Makefile b/sing-box/Makefile
index 048503038..8fd5f8441 100644
--- a/sing-box/Makefile
+++ b/sing-box/Makefile
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=sing-box
PKG_VERSION:=1.14.1
-PKG_RELEASE:=33
+PKG_RELEASE:=34
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)?
diff --git a/sing-box/patches/002-support-clash-proxy-providers.patch b/sing-box/patches/002-support-clash-proxy-providers.patch
deleted file mode 100644
index 639069b9c..000000000
--- a/sing-box/patches/002-support-clash-proxy-providers.patch
+++ /dev/null
@@ -1,403 +0,0 @@
-diff --git a/experimental/clashapi/provider.go b/experimental/clashapi/provider.go
-index 352b289..ef07e6d 100644
---- a/experimental/clashapi/provider.go
-+++ b/experimental/clashapi/provider.go
-@@ -3,43 +3,65 @@ package clashapi
- import (
- "context"
- "net/http"
-+ "os/exec"
-+ "regexp"
-+
-+ "github.com/sagernet/sing-box/option"
-
- "github.com/go-chi/chi/v5"
- "github.com/go-chi/render"
- )
-
--func proxyProviderRouter() http.Handler {
-+func proxyProviderRouter(server *Server) http.Handler {
- r := chi.NewRouter()
-- r.Get("/", getProviders)
-+ r.Get("/", getProviders(server))
-
- r.Route("/{name}", func(r chi.Router) {
-- r.Use(parseProviderName, findProviderByName)
-- r.Get("/", getProvider)
-+ r.Use(parseProviderName, findProviderByName(server))
-+ r.Get("/", getProvider(server))
- r.Put("/", updateProvider)
- r.Get("/healthcheck", healthCheckProvider)
- })
- return r
- }
-
--func getProviders(w http.ResponseWriter, r *http.Request) {
-- render.JSON(w, r, render.M{
-- "providers": render.M{},
-- })
-+func getProviders(server *Server) func(w http.ResponseWriter, r *http.Request) {
-+ return func(w http.ResponseWriter, r *http.Request) {
-+ providers := render.M{}
-+ for _, provider := range server.proxyProviders {
-+ if provider.Name == "" {
-+ continue
-+ }
-+ providers[provider.Name] = proxyProviderInfo(server, provider)
-+ }
-+ render.JSON(w, r, render.M{
-+ "providers": providers,
-+ })
-+ }
- }
-
--func getProvider(w http.ResponseWriter, r *http.Request) {
-- /*provider := r.Context().Value(CtxKeyProvider).(provider.ProxyProvider)
-- render.JSON(w, r, provider)*/
-- render.NoContent(w, r)
-+func getProvider(server *Server) func(w http.ResponseWriter, r *http.Request) {
-+ return func(w http.ResponseWriter, r *http.Request) {
-+ provider := r.Context().Value(CtxKeyProvider).(option.ClashProxyProviderOptions)
-+ render.JSON(w, r, proxyProviderInfo(server, provider))
-+ }
- }
-
- func updateProvider(w http.ResponseWriter, r *http.Request) {
-- /*provider := r.Context().Value(CtxKeyProvider).(provider.ProxyProvider)
-- if err := provider.Update(); err != nil {
-+ provider := r.Context().Value(CtxKeyProvider).(option.ClashProxyProviderOptions)
-+ if !regexp.MustCompile(`^[0-9a-f]{32}$`).MatchString(provider.UpdateID) {
-+ render.Status(r, http.StatusServiceUnavailable)
-+ render.JSON(w, r, newError("Provider update is unavailable"))
-+ return
-+ }
-+
-+ command := exec.Command("/bin/sh", "/etc/homeproxy/scripts/update_provider.sh", provider.UpdateID)
-+ if err := command.Start(); err != nil {
- render.Status(r, http.StatusServiceUnavailable)
- render.JSON(w, r, newError(err.Error()))
- return
-- }*/
-+ }
-+ _ = command.Process.Release()
- render.NoContent(w, r)
- }
-
-@@ -57,18 +79,58 @@ func parseProviderName(next http.Handler) http.Handler {
- })
- }
-
--func findProviderByName(next http.Handler) http.Handler {
-- return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-- /*name := r.Context().Value(CtxKeyProviderName).(string)
-- providers := tunnel.ProxyProviders()
-- provider, exist := providers[name]
-- if !exist {*/
-- render.Status(r, http.StatusNotFound)
-- render.JSON(w, r, ErrNotFound)
-- //return
-- //}
-+func findProviderByName(server *Server) func(next http.Handler) http.Handler {
-+ return func(next http.Handler) http.Handler {
-+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-+ name := r.Context().Value(CtxKeyProviderName).(string)
-+ for _, provider := range server.proxyProviders {
-+ if provider.Name == name {
-+ ctx := context.WithValue(r.Context(), CtxKeyProvider, provider)
-+ next.ServeHTTP(w, r.WithContext(ctx))
-+ return
-+ }
-+ }
-+ render.Status(r, http.StatusNotFound)
-+ render.JSON(w, r, ErrNotFound)
-+ })
-+ }
-+}
-
-- // ctx := context.WithValue(r.Context(), CtxKeyProvider, provider)
-- // next.ServeHTTP(w, r.WithContext(ctx))
-- })
-+func proxyProviderInfo(server *Server, provider option.ClashProxyProviderOptions) render.M {
-+ providerType := provider.Type
-+ if providerType == "" {
-+ providerType = "Proxy"
-+ }
-+ vehicleType := provider.VehicleType
-+ if vehicleType == "" {
-+ vehicleType = "HTTP"
-+ }
-+
-+ proxies := make([]any, 0, len(provider.Proxies))
-+ for _, proxyName := range provider.Proxies {
-+ proxy, exists := lookupProxyByName(server, proxyName)
-+ if !exists {
-+ continue
-+ }
-+ proxies = append(proxies, proxyInfo(server, proxy))
-+ }
-+
-+ info := render.M{
-+ "name": provider.Name,
-+ "type": providerType,
-+ "vehicleType": vehicleType,
-+ "proxies": proxies,
-+ }
-+ if provider.UpdatedAt != "" {
-+ info["updatedAt"] = provider.UpdatedAt
-+ }
-+ if provider.SubscriptionInfo != nil {
-+ info["subscriptionInfo"] = render.M{
-+ "Upload": provider.SubscriptionInfo.Upload,
-+ "Download": provider.SubscriptionInfo.Download,
-+ "Total": provider.SubscriptionInfo.Total,
-+ "Expire": provider.SubscriptionInfo.Expire,
-+ }
-+ }
-+ return info
- }
-diff --git a/experimental/clashapi/proxies.go b/experimental/clashapi/proxies.go
-index ef88ff3..1f7d14d 100644
---- a/experimental/clashapi/proxies.go
-+++ b/experimental/clashapi/proxies.go
-@@ -21,6 +21,50 @@ import (
- "github.com/go-chi/render"
- )
-
-+func proxyDisplayName(tag string) string {
-+ switch tag {
-+ case "GLOBAL":
-+ return "GLOBAL"
-+ case "main-out":
-+ return "主代理"
-+ case "main-udp-out":
-+ return "UDP 主代理"
-+ case "direct-out":
-+ return "直连"
-+ case "block-out":
-+ return "拦截"
-+ default:
-+ return tag
-+ }
-+}
-+
-+func lookupProxyByName(server *Server, name string) (adapter.Outbound, bool) {
-+ proxy, exist := server.outbound.Outbound(name)
-+ if exist {
-+ return proxy, true
-+ }
-+
-+ for _, detour := range server.outbound.Outbounds() {
-+ if proxyDisplayName(detour.Tag()) == name {
-+ return detour, true
-+ }
-+ }
-+
-+ for _, endpoint := range server.endpoint.Endpoints() {
-+ if proxyDisplayName(endpoint.Tag()) == name {
-+ return endpoint, true
-+ }
-+ }
-+
-+ return nil, false
-+}
-+
-+func proxyDisplayNames(tags []string) []string {
-+ return common.Map(tags, func(tag string) string {
-+ return proxyDisplayName(tag)
-+ })
-+}
-+
- func proxyRouter(server *Server, router adapter.Router) http.Handler {
- r := chi.NewRouter()
- r.Get("/", getProxies(server))
-@@ -29,7 +73,7 @@ func proxyRouter(server *Server, router adapter.Router) http.Handler {
- r.Use(parseProxyName, findProxyByName(server))
- r.Get("/", getProxy(server))
- r.Get("/delay", getProxyDelay(server))
-- r.Put("/", updateProxy)
-+ r.Put("/", updateProxy(server))
- })
- return r
- }
-@@ -46,7 +90,7 @@ func findProxyByName(server *Server) func(next http.Handler) http.Handler {
- return func(next http.Handler) http.Handler {
- return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- name := r.Context().Value(CtxKeyProxyName).(string)
-- proxy, exist := server.outbound.Outbound(name)
-+ proxy, exist := lookupProxyByName(server, name)
- if !exist {
- render.Status(r, http.StatusNotFound)
- render.JSON(w, r, ErrNotFound)
-@@ -68,7 +112,7 @@ func proxyInfo(server *Server, detour adapter.Outbound) *badjson.JSONObject {
- clashType = C.ProxyDisplayName(detour.Type())
- }
- info.Put("type", clashType)
-- info.Put("name", detour.Tag())
-+ info.Put("name", proxyDisplayName(detour.Tag()))
- info.Put("udp", common.Contains(detour.Network(), N.NetworkUDP))
- delayHistory := server.urlTestHistory.LoadURLTestHistory(adapter.OutboundTag(detour))
- if delayHistory != nil {
-@@ -77,8 +121,8 @@ func proxyInfo(server *Server, detour adapter.Outbound) *badjson.JSONObject {
- info.Put("history", []*adapter.URLTestHistory{})
- }
- if group, isGroup := detour.(adapter.OutboundGroup); isGroup {
-- info.Put("now", group.Now())
-- info.Put("all", group.All())
-+ info.Put("now", proxyDisplayName(group.Now()))
-+ info.Put("all", proxyDisplayNames(group.All()))
- }
- return &info
- }
-@@ -102,10 +146,10 @@ func getProxies(server *Server) func(w http.ResponseWriter, r *http.Request) {
- case C.TypeDirect, C.TypeBlock, C.TypeDNS:
- continue
- }
-- allProxies = append(allProxies, detour.Tag())
-+ allProxies = append(allProxies, proxyDisplayName(detour.Tag()))
- }
-
-- defaultTag := server.outbound.Default().Tag()
-+ defaultTag := proxyDisplayName(server.outbound.Default().Tag())
-
- sort.SliceStable(allProxies, func(i, j int) bool {
- return allProxies[i] == defaultTag
-@@ -114,7 +158,7 @@ func getProxies(server *Server) func(w http.ResponseWriter, r *http.Request) {
- // fix clash dashboard
- proxyMap.Put("GLOBAL", map[string]any{
- "type": "Fallback",
-- "name": "GLOBAL",
-+ "name": proxyDisplayName("GLOBAL"),
- "udp": true,
- "history": []*adapter.URLTestHistory{},
- "all": allProxies,
-@@ -126,7 +170,7 @@ func getProxies(server *Server) func(w http.ResponseWriter, r *http.Request) {
- if detour.Tag() == "" {
- tag = F.ToString(i)
- } else {
-- tag = detour.Tag()
-+ tag = proxyDisplayName(detour.Tag())
- }
- proxyMap.Put(tag, proxyInfo(server, detour))
- }
-@@ -159,29 +203,36 @@ type UpdateProxyRequest struct {
- Name string `json:"name"`
- }
-
--func updateProxy(w http.ResponseWriter, r *http.Request) {
-- req := UpdateProxyRequest{}
-- if err := render.DecodeJSON(r.Body, &req); err != nil {
-- render.Status(r, http.StatusBadRequest)
-- render.JSON(w, r, ErrBadRequest)
-- return
-- }
-+func updateProxy(server *Server) func(w http.ResponseWriter, r *http.Request) {
-+ return func(w http.ResponseWriter, r *http.Request) {
-+ req := UpdateProxyRequest{}
-+ if err := render.DecodeJSON(r.Body, &req); err != nil {
-+ render.Status(r, http.StatusBadRequest)
-+ render.JSON(w, r, ErrBadRequest)
-+ return
-+ }
-
-- proxy := r.Context().Value(CtxKeyProxy).(adapter.Outbound)
-- selector, ok := proxy.(*group.Selector)
-- if !ok {
-- render.Status(r, http.StatusBadRequest)
-- render.JSON(w, r, newError("Must be a Selector"))
-- return
-- }
-+ proxy := r.Context().Value(CtxKeyProxy).(adapter.Outbound)
-+ selector, ok := proxy.(*group.Selector)
-+ if !ok {
-+ render.Status(r, http.StatusBadRequest)
-+ render.JSON(w, r, newError("Must be a Selector"))
-+ return
-+ }
-
-- if !selector.SelectOutbound(req.Name) {
-- render.Status(r, http.StatusBadRequest)
-- render.JSON(w, r, newError("Selector update error: not found"))
-- return
-- }
-+ selectedName := req.Name
-+ if targetProxy, exist := lookupProxyByName(server, req.Name); exist {
-+ selectedName = targetProxy.Tag()
-+ }
-+
-+ if !selector.SelectOutbound(selectedName) {
-+ render.Status(r, http.StatusBadRequest)
-+ render.JSON(w, r, newError("Selector update error: not found"))
-+ return
-+ }
-
-- render.NoContent(w, r)
-+ render.NoContent(w, r)
-+ }
- }
-
- func getProxyDelay(server *Server) func(w http.ResponseWriter, r *http.Request) {
-diff --git a/experimental/clashapi/server.go b/experimental/clashapi/server.go
-index b9222ad5440..d4fd9dd3db1 100644
---- a/experimental/clashapi/server.go
-+++ b/experimental/clashapi/server.go
-@@ -57,6 +57,7 @@ type Server struct {
- externalUI string
- externalUIDownloadURL string
- externalUIDownloadDetour string
-+ proxyProviders []option.ClashProxyProviderOptions
- }
-
- func NewServer(ctx context.Context, logFactory log.ObservableFactory, options option.ClashAPIOptions) (adapter.LifecycleService, error) {
-@@ -92,6 +93,7 @@ func NewServer(ctx context.Context, logFactory log.ObservableFactory, options op
- externalController: options.ExternalController != "",
- externalUIDownloadURL: options.ExternalUIDownloadURL,
- externalUIDownloadDetour: options.ExternalUIDownloadDetour,
-+ proxyProviders: options.ProxyProviders,
- }
- //goland:noinspection GoDeprecation
- //nolint:staticcheck
-@@ -120,7 +122,7 @@ func NewServer(ctx context.Context, logFactory log.ObservableFactory, options op
- r.Mount("/proxies", proxyRouter(s, s.router))
- r.Mount("/rules", ruleRouter(s.router))
- r.Mount("/connections", connectionRouter(s.ctx, s.network, trafficManager))
-- r.Mount("/providers/proxies", proxyProviderRouter())
-+ r.Mount("/providers/proxies", proxyProviderRouter(s))
- r.Mount("/providers/rules", ruleProviderRouter())
- r.Mount("/script", scriptRouter())
- r.Mount("/profile", profileRouter())
-diff --git a/option/experimental.go b/option/experimental.go
-index bf144ad4452..89f303a7b26 100644
---- a/option/experimental.go
-+++ b/option/experimental.go
-@@ -34,6 +34,7 @@ type ClashAPIOptions struct {
- ExternalUIDownloadDetour string `json:"external_ui_download_detour,omitempty" reference:"outbound"`
- Secret string `json:"secret,omitempty"`
- DefaultMode string `json:"default_mode,omitempty"`
-+ ProxyProviders []ClashProxyProviderOptions `json:"proxy_providers,omitempty"`
- AccessControlAllowOrigin badoption.Listable[string] `json:"access_control_allow_origin,omitempty"`
- AccessControlAllowPrivateNetwork bool `json:"access_control_allow_private_network,omitempty"`
-
-@@ -49,6 +50,23 @@ type ClashAPIOptions struct {
- StoreFakeIP bool `json:"store_fakeip,omitempty" schema:"omit"`
- }
-
-+type ClashProxyProviderOptions struct {
-+ Name string `json:"name,omitempty"`
-+ Type string `json:"type,omitempty"`
-+ VehicleType string `json:"vehicle_type,omitempty"`
-+ Proxies []string `json:"proxies,omitempty"`
-+ UpdatedAt string `json:"updated_at,omitempty"`
-+ UpdateID string `json:"update_id,omitempty"`
-+ SubscriptionInfo *ClashProxyProviderSubscriptionInfo `json:"subscription_info,omitempty"`
-+}
-+
-+type ClashProxyProviderSubscriptionInfo struct {
-+ Upload uint64 `json:"upload,omitempty"`
-+ Download uint64 `json:"download,omitempty"`
-+ Total uint64 `json:"total,omitempty"`
-+ Expire int64 `json:"expire,omitempty"`
-+}
-+
- type V2RayAPIOptions struct {
- Listen string `json:"listen,omitempty"`
- Stats *V2RayStatsServiceOptions `json:"stats,omitempty"`