diff --git a/LICENSE.md b/LICENSE.md
index 38e88a744..c607a3e23 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,8 +1,9 @@
### License
* /globalist/* (Globalist) -- [GNU GPLv3](globalist/LICENSE)
+* /addons/* -- [MIT License](https://en.wikipedia.org/wiki/MIT_License)
* /pdf/* -- Unknown (you can find a copy everywhere. Thanks to authors)
-* Else -- [PUBLIC DOMAIN (CC0)](https://web.archive.org/web/https://creativecommons.org/share-your-work/public-domain/cc0/) = [WTFPL](http://www.wtfpl.net/about/)
+* everything Else -- [PUBLIC DOMAIN (CC0)](https://web.archive.org/web/https://creativecommons.org/share-your-work/public-domain/cc0/) = [WTFPL](http://www.wtfpl.net/about/)
This repository, cloudflare-tor (aka _stop\_cloudflare)_, is in the `PUBLIC DOMAIN (CC0)`/`WTFPL`.
@@ -11,6 +12,4 @@ It was created anonymously, in public, for the use of the world to resist [Cloud
Contributors who have anonymously contributed (including in [CryptoParty](https://cryptoparty.at/cryptoparty_wien_53)) have since come forward to give this project their blessing.
-`CC0 license` allow you to use any files for any purpose, even in ways we may find distasteful or objectionable.
-
-You can also make money off our work and you are not required to give credit to us.
\ No newline at end of file
+`CC0 license` allow you to use those files for any purpose, even in ways we may find distasteful or objectionable. You can also make money off our work and you are not required to give credit to us.
\ No newline at end of file
diff --git a/addons/README.md b/addons/README.md
new file mode 100644
index 000000000..18a8241fb
--- /dev/null
+++ b/addons/README.md
@@ -0,0 +1,3 @@
+### Addons for Firefox / Chromium (Source code only)
+
+- [License](../LICENSE.md)
\ No newline at end of file
diff --git a/addons/bcmaCR/README.md b/addons/bcmaCR/README.md
new file mode 100644
index 000000000..72f6b555c
--- /dev/null
+++ b/addons/bcmaCR/README.md
@@ -0,0 +1,2 @@
+- [More Information / Download](../../subfiles/about.bcma.md)
+- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
\ No newline at end of file
diff --git a/addons/bcmaCR/cf.js b/addons/bcmaCR/cf.js
new file mode 100644
index 000000000..74b2a870c
--- /dev/null
+++ b/addons/bcmaCR/cf.js
@@ -0,0 +1,1467 @@
+const cf_flag_ok = 'icons/cf_0.png',
+ cf_flag_ng = 'icons/cf_1.png';
+const force_whitelist = ['archive.org', 'betterinternet.com', 'brokendnssec.net', 'cloudflare-dns.com', 'cloudflare-free.com', 'cloudflare-ipfs.com', 'cloudflare-quic.com', 'cloudflare.com', 'cloudflare.com.ve', 'cloudflare.net', 'cloudflareaccess.com', 'cloudflareapi.com', 'cloudflareapps.com', 'cloudflarechallenge.com', 'cloudflareclient.com', 'cloudflareenterprise.com', 'cloudflarepreview.com', 'cloudflarepreviews.com', 'cloudflareresolve.com', 'cloudflarespeedtest.com', 'cloudflaressl.com', 'cloudflarestatus.com', 'cloudflaresupport.com', 'cloudflarewarp.com', 'encryptedsni.com', 'mozilla.org', 'mycloudflare.com', 'one.one', 'searxes.eu.org', 'ansero.eu.org', 'thunderbird.net', 'trycloudflare.com', 'warp.plus', 'workers.dev'];
+const infobox = 'cloudflared',
+ def_customurl = 'https://web.archive.org/web/%%URL%%';
+let my_cf_collection = [],
+ my_cf_ignore = [],
+ my_action = 2,
+ my_customurl = def_customurl,
+ my_nfo_alu = false,
+ my_nfo_cfd = false,
+ my_nfo_lang = 'eo';
+const trans = {
+ 'eo': {
+ 'detemi': 'Minaco Detektita',
+ 'cflrmi': 'Cloudflare Detektita',
+ 'virus': "Atentivelo: Severa\nAgo: Blokita\nDomajno: ",
+ 'redir': "Redirektu al alternativa URL.\n\nDomajno: "
+ },
+ 'de': {
+ 'detemi': 'Bedrohung erkannt',
+ 'cflrmi': 'Cloudflare erkannt',
+ 'virus': "Servety: Schwere\nAktion: Blockieren\nDomain:",
+ 'redir': "Zur alternativen URL umleiten.\n\nDomain:"
+ },
+ 'fr': {
+ 'detemi': 'Menace détectée',
+ 'cflrmi': 'Cloudflare détecté',
+ 'virus': "Servety: Severe\n Action: bloquer\n Domaine:",
+ 'redir': "Rediriger vers une URL alternative.\n\nDomaine:"
+ },
+ 'pt': {
+ 'detemi': 'Ameaça detectada',
+ 'cflrmi': 'Cloudflare detectado',
+ 'virus': "Servety: Grave\nAção: Bloquear\nDomínio:",
+ 'redir': "Redirecione para URL alternativo.\n\nDomínio:"
+ },
+ 'ru': {
+ 'detemi': 'Обнаружена угроза',
+ 'cflrmi': 'Обнаружена облачная вспышка',
+ 'virus': "Servety: тяжелый\n Действие: Блок\n Домен:",
+ 'redir': "Перенаправить на альтернативный URL.\n\nДомен:"
+ },
+ 'zh': {
+ 'detemi': '检测到威胁',
+ 'cflrmi': '检测到Cloudflare',
+ 'virus': "服务:严重\n行动:封锁\n域:",
+ 'redir': "重定向到备用URL。\n\n域:"
+ },
+ 'nl': {
+ 'detemi': 'Threat gedetecteerd',
+ 'cflrmi': 'Cloudflare gedetecteerd',
+ 'virus': "Servety: Ernstig\nActie: blokkeren\nDomein:",
+ 'redir': "Omleiden naar alternatieve URL.\n\nDomein:"
+ },
+ 'es': {
+ 'detemi': 'Amenaza detectada',
+ 'cflrmi': 'Cloudflare detectado',
+ 'virus': "Servety: Grave\nAcción: bloqueo\nDominio:",
+ 'redir': "Redirigir a URL alternativa.\n\nDominio:"
+ },
+ 'hi': {
+ 'detemi': 'थ्रेट डिटेक्टेड',
+ 'cflrmi': 'Cloudflare का पता चला',
+ 'virus': "गंभीरता: गंभीर \nउदासीनता: अवरुद्ध \nDomain:",
+ 'redir': "वैकल्पिक URL पर पुनर्निर्देशित। \n\nDomain:"
+ },
+ 'it': {
+ "detemi": "Minaccia rilevata",
+ "cflrmi": "Cloudflare rilevato",
+ 'virus': "Servety: Grave\nAzione: blocco\nDominio:",
+ 'redir': "Reindirizzamento a URL alternativo.\n\nDomain:"
+ },
+ 'ja': {
+ 'detemi': '脅威を検出しました',
+ 'cflrmi': 'Cloudflareを検出しました',
+ 'virus': "深刻度: 重大\n行動: 接続拒否\nドメイン:",
+ 'redir': "代わりのURLへ転送します。\n\nドメイン:"
+ },
+ 'ko': {
+ 'detemi': 'Threat 감지',
+ 'cflrmi': 'Cloudflare 감지',
+ 'virus': "서비스 : 심각한\nAction: 차단\n도메인 :",
+ 'redir': "대체 URL로 리디렉션합니다.\n\n도메인 :"
+ },
+ 'ta': {
+ 'detemi': 'அச்சுறுத்தல் கண்டறியப்பட்டது',
+ 'cflrmi': 'கிளவுட்ஃப்ளேர் கண்டறியப்பட்டது',
+ 'virus': "சேவை: தீவிரமான\nசெயல்: தடுக்கும் \nடொமைன்:",
+ 'redir': "மாற்று URL க்கு திருப்பி விடுங்கள். \n\nடொமைன்:"
+ },
+ 'tr': {
+ 'detemi': 'Tehdit tespit edildi',
+ 'cflrmi': 'Cloudflare algılandı',
+ 'virus': "Servety: Ciddi\nAksiyon: engelleme\nDomain:",
+ 'redir': "Alternatif URL'ye yönlendir.\n\nAlan:"
+ },
+ 'ms': {
+ 'detemi': 'Ancaman Dikesan',
+ 'cflrmi': 'Cloudflare Dikesan',
+ 'virus': "Amaran: Parah\nTindakan: Disekat\nDomain:",
+ 'redir': "Ubah hala ke URL ganti.\n\nDomain:"
+ },
+ 'bn': {
+ 'detemi': 'হুমকি সনাক্ত করা',
+ 'cflrmi': 'ক্লাউডফ্লেয়ার সনাক্ত হয়েছে',
+ 'virus': "সতর্কতা: গুরুতর\nক্রিয়া: অবরুদ্ধ \nডোমেন:",
+ 'redir': "বিকল্প URL এ পুনঃনির্দেশ করুন \n\nডোমেন:"
+ },
+ 'ha': {
+ 'detemi': 'Barazanar Gano',
+ 'cflrmi': 'Gano Cloudflare',
+ 'virus': "Gargadi: Mai tsananin\nAction: An katange\nKa kula:",
+ 'redir': "Juya zuwa madadin URL.\n\nKa kula:"
+ },
+ 'jv': {
+ 'detemi': 'Deteksi Deteksi',
+ 'cflrmi': 'Cloudflare dideteksi',
+ 'virus': "Pènget: Abot\nAction: Disekat\nDomain:",
+ 'redir': "Pangalihan URL alternatif.\n\nDomain:"
+ }
+};
+function get_realdomain(w) {
+ let wa = w.split('.');
+ let wa_l = wa.length;
+ if (wa_l < 3 || (wa_l == 4 && /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(w))) {
+ return w;
+ }
+ wa.reverse();
+ switch (wa[0]) {
+ case 'ac':
+ if (['com', 'edu', 'gov', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ad':
+ if (wa[1] == 'nom') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ae':
+ if (['co', 'net', 'org', 'sch', 'ac', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aero':
+ if (['accident-investigation', 'accident-prevention', 'aerobatic', 'aeroclub', 'aerodrome', 'agents', 'aircraft', 'airline', 'airport', 'air-surveillance', 'airtraffic', 'air-traffic-control', 'ambulance', 'amusement', 'association', 'author', 'ballooning', 'broker', 'caa', 'cargo', 'catering', 'certification', 'championship', 'charter', 'civilaviation', 'club', 'conference', 'consultant', 'consulting', 'control', 'council', 'crew', 'design', 'dgca', 'educator', 'emergency', 'engine', 'engineer', 'entertainment', 'equipment', 'exchange', 'express', 'federation', 'flight', 'freight', 'fuel', 'gliding', 'government', 'groundhandling', 'group', 'hanggliding', 'homebuilt', 'insurance', 'journal', 'journalist', 'leasing', 'logistics', 'magazine', 'maintenance', 'media', 'microlight', 'modelling', 'navigation', 'parachuting', 'paragliding', 'passenger-association', 'pilot', 'press', 'production', 'recreation', 'repbody', 'res', 'research', 'rotorcraft', 'safety', 'scientist', 'services', 'show', 'skydiving', 'software', 'student', 'trader', 'trading', 'trainer', 'union', 'workinggroup', 'works'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'af':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ag':
+ if (['com', 'net', 'org', 'co', 'nom', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ai':
+ if (['off', 'com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'al':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ao':
+ if (['co', 'ed', 'it', 'og', 'pb', 'gv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ar':
+ if (['com', 'edu', 'gov', 'gob', 'int', 'mil', 'net', 'org', 'tur', 'musica'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'as':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'at':
+ if (['gv', 'ac', 'co', 'or', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'au':
+ if (wa[1] == 'gov' && wa[3] != undefined) {
+ if (['act', 'nsw', 'nt', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (wa[1] == 'edu' && wa[3] != undefined) {
+ if (['act', 'catholic', 'eq', 'nsw', 'nt', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['act', 'asn', 'com', 'conf', 'csiro', 'edu', 'gov', 'id', 'info', 'net', 'nsw', 'nt', 'org', 'oz', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aw':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'az':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'int', 'mil', 'name', 'net', 'org', 'pp', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ba':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'net', 'org', 'rs'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bb':
+ if (['biz', 'co', 'com', 'edu', 'gov', 'info', 'net', 'org', 'store', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bd':
+ if (['com', 'edu', 'ac', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'be':
+ if (wa[1] == 'ac') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bf':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bg':
+ if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bh':
+ if (['com', 'info', 'cc', 'edu', 'biz', 'net', 'org', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bi':
+ if (['ac', 'co', 'com', 'edu', 'gouv', 'gov', 'int', 'mil', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bj':
+ if (['asso', 'barreau', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bn':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bo':
+ if (['academia', 'agro', 'arte', 'blog', 'bolivia', 'ciencia', 'com', 'cooperativa', 'democracia', 'deporte', 'ecologia', 'economia', 'edu', 'empresa', 'gob', 'gov', 'indigena', 'industria', 'info', 'int', 'medicina', 'mil', 'movimiento', 'musica', 'natural', 'net', 'nombre', 'noticias', 'org', 'patria', 'plurinacional', 'politica', 'profesional', 'pueblo', 'revista', 'salud', 'tecnologia', 'tksat', 'transporte', 'tv', 'web', 'wiki'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'br':
+ if (['9guacu', 'abc', 'adm', 'adv', 'agr', 'aju', 'am', 'anani', 'aparecida', 'arq', 'art', 'ato', 'b', 'barueri', 'belem', 'bhz', 'bio', 'blog', 'bmd', 'boavista', 'bsb', 'campinagrande', 'campinas', 'caxias', 'cim', 'cng', 'cnt', 'com', 'contagem', 'coop', 'cri', 'cuiaba', 'curitiba', 'def', 'ecn', 'eco', 'edu', 'emp', 'eng', 'esp', 'etc', 'eti', 'far', 'feira', 'flog', 'floripa', 'fm', 'fnd', 'fortal', 'fot', 'foz', 'fst', 'g12', 'ggf', 'goiania', 'gov', 'gru', 'imb', 'ind', 'inf', 'jab', 'jampa', 'jdf', 'joinville', 'jor', 'jus', 'leg', 'lel', 'londrina', 'macapa', 'maceio', 'manaus', 'maringa', 'mat', 'med', 'mil', 'morena', 'mp', 'mus', 'natal', 'net', 'niteroi', 'nom', 'not', 'ntr', 'odo', 'ong', 'org', 'osasco', 'palmas', 'poa', 'ppg', 'pro', 'psc', 'psi', 'pvh', 'qsl', 'radio', 'rec', 'recife', 'ribeirao', 'rio', 'riobranco', 'riopreto', 'salvador', 'sampa', 'santamaria', 'santoandre', 'saobernardo', 'saogonca', 'sjc', 'slg', 'slz', 'sorocaba', 'srv', 'taxi', 'teo', 'the', 'tmp', 'trd', 'tur', 'tv', 'udi', 'vet', 'vix', 'vlog', 'wiki', 'zlg'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bs':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bw':
+ if (['org', 'ac', 'co', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'by':
+ if (['gov', 'mil', 'com', 'of'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'nym', 'of', 'org', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ca':
+ if (['ab', 'bc', 'gc', 'mb', 'nb', 'nf', 'nl', 'ns', 'nt', 'nu', 'on', 'pe', 'qc', 'sk', 'yk'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cd':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ci':
+ if (['ac', 'asso', 'co', 'com', 'ed', 'edu', 'go', 'gouv', 'int', 'md', 'net', 'or', 'org', 'presse', 'xn--aroport-bya'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ck':
+ if (['biz', 'co', 'edu', 'gen', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cl':
+ if (['gov', 'gob', 'co', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cm':
+ if (['co', 'com', 'gov', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cn':
+ if (['ac', 'ah', 'bj', 'com', 'cq', 'edu', 'fj', 'gd', 'gov', 'gs', 'gx', 'gz', 'ha', 'hb', 'he', 'hi', 'hk', 'hl', 'hn', 'jl', 'js', 'jx', 'ln', 'mil', 'mo', 'net', 'nm', 'nx', 'org', 'qh', 'sc', 'sd', 'sh', 'sn', 'sx', 'tj', 'tw', 'xj', 'xn--55qx5d', 'xn--io0a7i', 'xn--od0alg', 'xz', 'yn', 'zj'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'co':
+ if (['arts', 'com', 'edu', 'firm', 'gov', 'info', 'int', 'mil', 'net', 'nom', 'org', 'rec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'com':
+ if (['africa', 'ar', 'br', 'cn', 'co', 'de', 'eu', 'gb', 'gr', 'hu', 'jpn', 'kr', 'mex', 'no', 'qc', 'ru', 'sa', 'se', 'uk', 'us', 'uy', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cr':
+ if (['ac', 'co', 'ed', 'fi', 'go', 'or', 'sa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cu':
+ if (['com', 'edu', 'org', 'net', 'gov', 'inf'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cw':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cy':
+ if (['ac', 'biz', 'com', 'ekloges', 'gov', 'ltd', 'name', 'net', 'org', 'parliament', 'press', 'pro', 'tm'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dm':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'do':
+ if (['art', 'com', 'edu', 'gob', 'gov', 'mil', 'net', 'org', 'sld', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dz':
+ if (['art', 'asso', 'com', 'edu', 'gov', 'net', 'org', 'pol'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ec':
+ if (['com', 'edu', 'fin', 'gob', 'gov', 'info', 'k12', 'med', 'mil', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ee':
+ if (['aip', 'com', 'edu', 'fie', 'gov', 'lib', 'med', 'org', 'pri', 'riik'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'eg':
+ if (['com', 'edu', 'eun', 'gov', 'mil', 'name', 'net', 'org', 'sci'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'es':
+ if (['com', 'nom', 'org', 'gob', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'et':
+ if (['com', 'gov', 'org', 'edu', 'net', 'biz', 'name', 'info'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fi':
+ if (wa[1] == 'aland') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fj':
+ if (['ac', 'biz', 'com', 'info', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fr':
+ if (['aeroport', 'assedic', 'asso', 'avocat', 'avoues', 'cci', 'chambagri', 'chirurgiens-dentistes', 'com', 'experts-comptables', 'geometre-expert', 'gouv', 'greta', 'huissier-justice', 'medecin', 'nom', 'notaires', 'pharmacien', 'port', 'prd', 'presse', 'tm', 'veterinaire'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ge':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'pvt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gg':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gh':
+ if (['com', 'edu', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gi':
+ if (['com', 'edu', 'gov', 'ltd', 'mod', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gl':
+ if (['co', 'com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gn':
+ if (['ac', 'com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gov':
+ if (['al', 'alabama', 'alaska', 'americansamoa', 'ar', 'arizona', 'arkansas', 'as', 'az', 'ca', 'co', 'colorado', 'ct', 'dc', 'de', 'delaware', 'ehawaii', 'fl', 'florida', 'ga', 'georgia', 'guam', 'hawaii', 'ia', 'idaho', 'il', 'illinois', 'in', 'indiana', 'iowa', 'kansas', 'kentucky', 'ks', 'ky', 'la', 'louisiana', 'ma', 'maine', 'maryland', 'mass', 'massachusetts', 'md', 'mi', 'michigan', 'minnesota', 'mississippi', 'missouri', 'mn', 'mo', 'montana', 'ms', 'mt', 'nc', 'nd', 'ne', 'nebraska', 'nevada', 'newjersey', 'newmexico', 'nh', 'nj', 'northcarolina', 'northdakota', 'nv', 'ny', 'ohio', 'ok', 'oklahoma', 'oregon', 'pa', 'pennsylvania', 'pr', 'rhodeisland', 'ri', 'sc', 'sd', 'tennessee', 'texas', 'tn', 'utah', 'vermont', 'vi', 'virginia', 'vt', 'wa', 'washington', 'wi', 'wisconsin', 'wv', 'wy', 'wyoming'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gp':
+ if (['com', 'net', 'mobi', 'edu', 'org', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gr':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'mod', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gt':
+ if (['com', 'edu', 'net', 'gob', 'org', 'mil', 'ind'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gu':
+ if (['com', 'edu', 'gov', 'guam', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gy':
+ if (['co', 'com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hk':
+ if (['com', 'edu', 'gov', 'idv', 'net', 'org', 'xn--55qx5d', 'xn--ciqpn', 'xn--gmq050i', 'xn--gmqw5a', 'xn--io0a7i', 'xn--lcvr32d', 'xn--mk0axi', 'xn--mxtq1m', 'xn--od0alg', 'xn--od0aq3b', 'xn--tn0ag', 'xn--uc0atv', 'xn--uc0ay4a', 'xn--wcvs22d', 'xn--zf0avx'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hn':
+ if (['com', 'edu', 'gob', 'net', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hr':
+ if (['iz', 'from', 'name', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ht':
+ if (['com', 'shop', 'firm', 'info', 'adult', 'net', 'pro', 'org', 'med', 'art', 'coop', 'pol', 'asso', 'edu', 'rel', 'gouv', 'perso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hu':
+ if (['2000', 'agrar', 'bolt', 'casino', 'city', 'co', 'edu', 'erotica', 'erotika', 'film', 'forum', 'games', 'gov', 'hotel', 'info', 'ingatlan', 'jogasz', 'konyvelo', 'lakas', 'media', 'mobi', 'net', 'news', 'org', 'priv', 'reklam', 'sex', 'shop', 'sport', 'suli', 'szex', 'tm', 'tozsde', 'utazas', 'video'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'id':
+ if (['ac', 'biz', 'co', 'desa', 'go', 'mil', 'my', 'net', 'or', 'ponpes', 'sch', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ie':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'il':
+ if (['ac', 'co', 'gov', 'idf', 'k12', 'muni', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'im':
+ if (['ac', 'co', 'com', 'gov', 'net', 'org', 'ro', 'tt', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'in':
+ if (['ac', 'co', 'edu', 'ernet', 'firm', 'gen', 'gov', 'ind', 'mil', 'net', 'org', 'res', 'nic'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'int':
+ if (wa[1] == 'eu') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'io':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'iq':
+ if (['gov', 'edu', 'mil', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ir':
+ if (['ac', 'co', 'gov', 'id', 'net', 'org', 'sch', 'xn--mgba3a4f16a', 'xn--mgba3a4fra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'is':
+ if (['net', 'com', 'edu', 'gov', 'org', 'int'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'it':
+ if (['abr', 'abruzzo', 'ag', 'agrigento', 'al', 'alessandria', 'alto-adige', 'altoadige', 'an', 'ancona', 'andria-barletta-trani', 'andria-trani-barletta', 'andriabarlettatrani', 'andriatranibarletta', 'ao', 'aosta', 'aosta-valley', 'aostavalley', 'aoste', 'ap', 'aq', 'aquila', 'ar', 'arezzo', 'ascoli-piceno', 'ascolipiceno', 'asti', 'at', 'av', 'avellino', 'ba', 'balsan', 'balsan-sudtirol', 'balsan-suedtirol', 'bari', 'barletta-trani-andria', 'barlettatraniandria', 'bas', 'basilicata', 'belluno', 'benevento', 'bergamo', 'bg', 'bi', 'biella', 'bl', 'bn', 'bo', 'bologna', 'bolzano', 'bolzano-altoadige', 'bozen', 'bozen-sudtirol', 'bozen-suedtirol', 'br', 'brescia', 'brindisi', 'bs', 'bt', 'bulsan', 'bulsan-sudtirol', 'bulsan-suedtirol', 'bz', 'ca', 'cagliari', 'cal', 'calabria', 'caltanissetta', 'cam', 'campania', 'campidano-medio', 'campidanomedio', 'campobasso', 'carbonia-iglesias', 'carboniaiglesias', 'carrara-massa', 'carraramassa', 'caserta', 'catania', 'catanzaro', 'cb', 'ce', 'cesena-forli', 'cesenaforli', 'ch', 'chieti', 'ci', 'cl', 'cn', 'co', 'como', 'cosenza', 'cr', 'cremona', 'crotone', 'cs', 'ct', 'cuneo', 'cz', 'dell-ogliastra', 'dellogliastra', 'edu', 'emilia-romagna', 'emiliaromagna', 'emr', 'en', 'enna', 'fc', 'fe', 'fermo', 'ferrara', 'fg', 'fi', 'firenze', 'florence', 'fm', 'foggia', 'forli-cesena', 'forlicesena', 'fr', 'friuli-v-giulia', 'friuli-ve-giulia', 'friuli-vegiulia', 'friuli-venezia-giulia', 'friuli-veneziagiulia', 'friuli-vgiulia', 'friuliv-giulia', 'friulive-giulia', 'friulivegiulia', 'friulivenezia-giulia', 'friuliveneziagiulia', 'friulivgiulia', 'frosinone', 'fvg', 'ge', 'genoa', 'genova', 'go', 'gorizia', 'gov', 'gr', 'grosseto', 'iglesias-carbonia', 'iglesiascarbonia', 'im', 'imperia', 'is', 'isernia', 'kr', 'la-spezia', 'laquila', 'laspezia', 'latina', 'laz', 'lazio', 'lc', 'le', 'lecce', 'lecco', 'li', 'lig', 'liguria', 'livorno', 'lo', 'lodi', 'lom', 'lombardia', 'lombardy', 'lt', 'lu', 'lucania', 'lucca', 'macerata', 'mantova', 'mar', 'marche', 'massa-carrara', 'massacarrara', 'matera', 'mb', 'mc', 'me', 'medio-campidano', 'mediocampidano', 'messina', 'mi', 'milan', 'milano', 'mn', 'mo', 'modena', 'mol', 'molise', 'monza', 'monza-brianza', 'monza-e-della-brianza', 'monzabrianza', 'monzaebrianza', 'monzaedellabrianza', 'ms', 'mt', 'na', 'naples', 'napoli', 'no', 'novara', 'nu', 'nuoro', 'og', 'ogliastra', 'olbia-tempio', 'olbiatempio', 'or', 'oristano', 'ot', 'pa', 'padova', 'padua', 'palermo', 'parma', 'pavia', 'pc', 'pd', 'pe', 'perugia', 'pesaro-urbino', 'pesarourbino', 'pescara', 'pg', 'pi', 'piacenza', 'piedmont', 'piemonte', 'pisa', 'pistoia', 'pmn', 'pn', 'po', 'pordenone', 'potenza', 'pr', 'prato', 'pt', 'pu', 'pug', 'puglia', 'pv', 'pz', 'ra', 'ragusa', 'ravenna', 'rc', 're', 'reggio-calabria', 'reggio-emilia', 'reggiocalabria', 'reggioemilia', 'rg', 'ri', 'rieti', 'rimini', 'rm', 'rn', 'ro', 'roma', 'rome', 'rovigo', 'sa', 'salerno', 'sar', 'sardegna', 'sardinia', 'sassari', 'savona', 'si', 'sic', 'sicilia', 'sicily', 'siena', 'siracusa', 'so', 'sondrio', 'sp', 'sr', 'ss', 'suedtirol', 'sv', 'ta', 'taa', 'taranto', 'te', 'tempio-olbia', 'tempioolbia', 'teramo', 'terni', 'tn', 'to', 'torino', 'tos', 'toscana', 'tp', 'tr', 'trani-andria-barletta', 'trani-barletta-andria', 'traniandriabarletta', 'tranibarlettaandria', 'trapani', 'trentin-sud-tirol', 'trentin-sudtirol', 'trentin-sued-tirol', 'trentin-suedtirol', 'trentino', 'trentino-a-adige', 'trentino-aadige', 'trentino-alto-adige', 'trentino-altoadige', 'trentino-s-tirol', 'trentino-stirol', 'trentino-sud-tirol', 'trentino-sudtirol', 'trentino-sued-tirol', 'trentino-suedtirol', 'trentinoa-adige', 'trentinoaadige', 'trentinoalto-adige', 'trentinoaltoadige', 'trentinos-tirol', 'trentinostirol', 'trentinosud-tirol', 'trentinosudtirol', 'trentinosued-tirol', 'trentinosuedtirol', 'trentinsud-tirol', 'trentinsudtirol', 'trentinsued-tirol', 'trentinsuedtirol', 'trento', 'treviso', 'trieste', 'ts', 'turin', 'tuscany', 'tv', 'ud', 'udine', 'umb', 'umbria', 'urbino-pesaro', 'urbinopesaro', 'va', 'val-d-aosta', 'val-daosta', 'vald-aosta', 'valdaosta', 'valle-aosta', 'valle-d-aosta', 'valle-daosta', 'valleaosta', 'valled-aosta', 'valledaosta', 'vallee-aoste', 'vallee-d-aoste', 'valleeaoste', 'valleedaoste', 'vao', 'varese', 'vb', 'vc', 'vda', 've', 'ven', 'veneto', 'venezia', 'venice', 'verbania', 'vercelli', 'verona', 'vi', 'vibo-valentia', 'vibovalentia', 'vicenza', 'viterbo', 'vr', 'vs', 'vt', 'vv', 'xn--balsan-sdtirol-nsb', 'xn--bozen-sdtirol-2ob', 'xn--bulsan-sdtirol-nsb', 'xn--cesena-forl-mcb', 'xn--cesenaforl-i8a', 'xn--forl-cesena-fcb', 'xn--forlcesena-c8a', 'xn--sdtirol-n2a', 'xn--trentin-sd-tirol-rzb', 'xn--trentin-sdtirol-7vb', 'xn--trentino-sd-tirol-c3b', 'xn--trentino-sdtirol-szb', 'xn--trentinosd-tirol-rzb', 'xn--trentinosdtirol-7vb', 'xn--trentinsd-tirol-6vb', 'xn--trentinsdtirol-nsb', 'xn--valle-aoste-ebb', 'xn--valle-d-aoste-ehb', 'xn--valleaoste-e7a', 'xn--valledaoste-ebb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'je':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jm':
+ if (['com', 'net', 'org', 'edu', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jo':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jp':
+ if (['ac', 'ad', 'aichi', 'akita', 'aomori', 'chiba', 'co', 'ed', 'ehime', 'fukui', 'fukuoka', 'fukushima', 'gifu', 'go', 'gr', 'gunma', 'hiroshima', 'hokkaido', 'hyogo', 'ibaraki', 'ishikawa', 'iwate', 'kagawa', 'kagoshima', 'kanagawa', 'kochi', 'kumamoto', 'kyoto', 'lg', 'mie', 'miyagi', 'miyazaki', 'nagano', 'nagasaki', 'nara', 'ne', 'niigata', 'oita', 'okayama', 'okinawa', 'or', 'osaka', 'saga', 'saitama', 'shiga', 'shimane', 'shizuoka', 'tochigi', 'tokushima', 'tokyo', 'tottori', 'toyama', 'wakayama', 'xn--0trq7p7nn', 'xn--1ctwo', 'xn--1lqs03n', 'xn--1lqs71d', 'xn--2m4a15e', 'xn--32vp30h', 'xn--4it168d', 'xn--4it797k', 'xn--4pvxs', 'xn--5js045d', 'xn--5rtp49c', 'xn--5rtq34k', 'xn--6btw5a', 'xn--6orx2r', 'xn--7t0a264c', 'xn--8ltr62k', 'xn--8pvr4u', 'xn--c3s14m', 'xn--d5qv7z876c', 'xn--djrs72d6uy', 'xn--djty4k', 'xn--efvn9s', 'xn--ehqz56n', 'xn--elqq16h', 'xn--f6qx53a', 'xn--k7yn95e', 'xn--kbrq7o', 'xn--klt787d', 'xn--kltp7d', 'xn--kltx9a', 'xn--klty5x', 'xn--mkru45i', 'xn--nit225k', 'xn--ntso0iqx3a', 'xn--ntsq17g', 'xn--pssu33l', 'xn--qqqt11m', 'xn--rht27z', 'xn--rht3d', 'xn--rht61e', 'xn--rny31h', 'xn--tor131o', 'xn--uist22h', 'xn--uisz3g', 'xn--uuwu58a', 'xn--vgu402c', 'xn--zbx025d', 'yamagata', 'yamaguchi', 'yamanashi'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ke':
+ if (['ac', 'co', 'go', 'info', 'me', 'mobi', 'ne', 'or', 'sc'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kg':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kh':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ki':
+ if (['edu', 'biz', 'net', 'org', 'gov', 'info', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'km':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'ass', 'com', 'coop', 'asso', 'presse', 'medecin', 'notaires', 'pharmaciens', 'veterinaire', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kn':
+ if (['net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kp':
+ if (['com', 'edu', 'gov', 'org', 'rep', 'tra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kr':
+ if (['ac', 'busan', 'cheju', 'chonbuk', 'chonnam', 'chungbuk', 'chungnam', 'co', 'daegu', 'daejeon', 'es', 'gangwon', 'go', 'gwangju', 'gyeongbuk', 'gyeonggi', 'gyeongnam', 'hs', 'incheon', 'inchon', 'jeju', 'jeonbuk', 'jeonnam', 'kangwon', 'kg', 'kwangju', 'kyongbuk', 'kyonggi', 'kyongnam', 'mil', 'ms', 'ne', 'nm', 'or', 'pe', 'pusan', 're', 'sc', 'seoul', 'taegu', 'taejon', 'ulsan', 'xn--bj0bj06e'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kw':
+ if (['com', 'edu', 'emb', 'gov', 'ind', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ky':
+ if (['edu', 'gov', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'la':
+ if (['int', 'net', 'info', 'edu', 'gov', 'per', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lc':
+ if (['com', 'net', 'co', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lk':
+ if (['ac', 'assn', 'com', 'edu', 'gov', 'grp', 'hotel', 'int', 'ltd', 'net', 'ngo', 'org', 'sch', 'soc', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lr':
+ if (['com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ls':
+ if (['ac', 'co', 'gov', 'net', 'nul', 'org', 'parliament', 'quadrant'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lt':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lv':
+ if (['asn', 'com', 'conf', 'edu', 'gov', 'id', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ly':
+ if (['com', 'edu', 'gov', 'id', 'med', 'net', 'org', 'plc', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ma':
+ if (['ac', 'co', 'gov', 'net', 'org', 'press'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mc':
+ if (['tm', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'me':
+ if (['co', 'net', 'org', 'edu', 'ac', 'gov', 'its', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mg':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'com', 'co'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mk':
+ if (['com', 'edu', 'gov', 'inf', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ml':
+ if (['com', 'edu', 'gouv', 'gov', 'net', 'org', 'presse'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mn':
+ if (['gov', 'edu', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mo':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mr':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ms':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mu':
+ if (['ac', 'co', 'com', 'gov', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'museum':
+ if (['academy', 'agriculture', 'air', 'airguard', 'alabama', 'alaska', 'amber', 'ambulance', 'american', 'americana', 'americanantiques', 'americanart', 'amsterdam', 'and', 'annefrank', 'anthro', 'anthropology', 'antiques', 'aquarium', 'arboretum', 'archaeological', 'archaeology', 'architecture', 'art', 'artanddesign', 'artcenter', 'artdeco', 'arteducation', 'artgallery', 'arts', 'artsandcrafts', 'asmatart', 'assassination', 'assisi', 'association', 'astronomy', 'atlanta', 'austin', 'australia', 'automotive', 'aviation', 'axis', 'badajoz', 'baghdad', 'bahn', 'bale', 'baltimore', 'barcelona', 'baseball', 'basel', 'baths', 'bauern', 'beauxarts', 'beeldengeluid', 'bellevue', 'bergbau', 'berkeley', 'berlin', 'bern', 'bible', 'bilbao', 'bill', 'birdart', 'birthplace', 'bonn', 'boston', 'botanical', 'botanicalgarden', 'botanicgarden', 'botany', 'brandywinevalley', 'brasil', 'bristol', 'british', 'britishcolumbia', 'broadcast', 'brunel', 'brussel', 'brussels', 'bruxelles', 'building', 'burghof', 'bus', 'bushey', 'cadaques', 'california', 'cambridge', 'can', 'canada', 'capebreton', 'carrier', 'cartoonart', 'casadelamoneda', 'castle', 'castres', 'celtic', 'center', 'chattanooga', 'cheltenham', 'chesapeakebay', 'chicago', 'children', 'childrens', 'childrensgarden', 'chiropractic', 'chocolate', 'christiansburg', 'cincinnati', 'cinema', 'circus', 'civilisation', 'civilization', 'civilwar', 'clinton', 'clock', 'coal', 'coastaldefence', 'cody', 'coldwar', 'collection', 'colonialwilliamsburg', 'coloradoplateau', 'columbia', 'columbus', 'communication', 'communications', 'community', 'computer', 'computerhistory', 'comunicações', 'contemporary', 'contemporaryart', 'convent', 'copenhagen', 'corporation', 'correios-e-telecomunicações', 'corvette', 'costume', 'countryestate', 'county', 'crafts', 'cranbrook', 'creation', 'cultural', 'culturalcenter', 'culture', 'cyber', 'cymru', 'dali', 'dallas', 'database', 'ddr', 'decorativearts', 'delaware', 'delmenhorst', 'denmark', 'depot', 'design', 'detroit', 'dinosaur', 'discovery', 'dolls', 'donostia', 'durham', 'eastafrica', 'eastcoast', 'education', 'educational', 'egyptian', 'eisenbahn', 'elburg', 'elvendrell', 'embroidery', 'encyclopedic', 'england', 'entomology', 'environment', 'environmentalconservation', 'epilepsy', 'essex', 'estate', 'ethnology', 'exeter', 'exhibition', 'family', 'farm', 'farmequipment', 'farmers', 'farmstead', 'field', 'figueres', 'filatelia', 'film', 'fineart', 'finearts', 'finland', 'flanders', 'florida', 'force', 'fortmissoula', 'fortworth', 'foundation', 'francaise', 'frankfurt', 'franziskaner', 'freemasonry', 'freiburg', 'fribourg', 'frog', 'fundacio', 'furniture', 'gallery', 'garden', 'gateway', 'geelvinck', 'gemological', 'geology', 'georgia', 'giessen', 'glas', 'glass', 'gorge', 'grandrapids', 'graz', 'guernsey', 'halloffame', 'hamburg', 'handson', 'harvestcelebration', 'hawaii', 'health', 'heimatunduhren', 'hellas', 'helsinki', 'hembygdsforbund', 'heritage', 'histoire', 'historical', 'historicalsociety', 'historichouses', 'historisch', 'historisches', 'history', 'historyofscience', 'horology', 'house', 'humanities', 'illustration', 'imageandsound', 'indian', 'indiana', 'indianapolis', 'indianmarket', 'intelligence', 'interactive', 'iraq', 'iron', 'isleofman', 'jamison', 'jefferson', 'jerusalem', 'jewelry', 'jewish', 'jewishart', 'jfk', 'journalism', 'judaica', 'judygarland', 'juedisches', 'juif', 'karate', 'karikatur', 'kids', 'koebenhavn', 'koeln', 'kunst', 'kunstsammlung', 'kunstunddesign', 'labor', 'labour', 'lajolla', 'lancashire', 'landes', 'lans', 'larsson', 'lewismiller', 'lincoln', 'linz', 'living', 'livinghistory', 'localhistory', 'london', 'losangeles', 'louvre', 'loyalist', 'lucerne', 'luxembourg', 'luzern', 'läns', 'mad', 'madrid', 'mallorca', 'manchester', 'mansion', 'mansions', 'manx', 'marburg', 'maritime', 'maritimo', 'maryland', 'marylhurst', 'media', 'medical', 'medizinhistorisches', 'meeres', 'memorial', 'mesaverde', 'michigan', 'midatlantic', 'military', 'mill', 'miners', 'mining', 'minnesota', 'missile', 'missoula', 'modern', 'moma', 'money', 'monmouth', 'monticello', 'montreal', 'moscow', 'motorcycle', 'muenchen', 'muenster', 'mulhouse', 'muncie', 'museet', 'museumcenter', 'museumvereniging', 'music', 'national', 'nationalfirearms', 'nationalheritage', 'nativeamerican', 'naturalhistory', 'naturalhistorymuseum', 'naturalsciences', 'nature', 'naturhistorisches', 'natuurwetenschappen', 'naumburg', 'naval', 'nebraska', 'neues', 'newhampshire', 'newjersey', 'newmexico', 'newport', 'newspaper', 'newyork', 'niepce', 'norfolk', 'north', 'nrw', 'nuernberg', 'nuremberg', 'nyc', 'nyny', 'oceanographic', 'oceanographique', 'omaha', 'online', 'ontario', 'openair', 'oregon', 'oregontrail', 'otago', 'oxford', 'pacific', 'paderborn', 'palace', 'paleo', 'palmsprings', 'panama', 'paris', 'pasadena', 'pharmacy', 'philadelphia', 'philadelphiaarea', 'philately', 'phoenix', 'photography', 'pilots', 'pittsburgh', 'planetarium', 'plantation', 'plants', 'plaza', 'portal', 'portland', 'portlligat', 'posts-and-telecommunications', 'preservation', 'presidio', 'press', 'project', 'public', 'pubol', 'quebec', 'railroad', 'railway', 'research', 'resistance', 'riodejaneiro', 'rochester', 'rockart', 'roma', 'russia', 'saintlouis', 'salem', 'salvadordali', 'salzburg', 'sandiego', 'sanfrancisco', 'santabarbara', 'santacruz', 'santafe', 'saskatchewan', 'satx', 'savannahga', 'schlesisches', 'schoenbrunn', 'schokoladen', 'school', 'schweiz', 'science', 'science-fiction', 'scienceandhistory', 'scienceandindustry', 'sciencecenter', 'sciencecenters', 'sciencehistory', 'sciences', 'sciencesnaturelles', 'scotland', 'seaport', 'settlement', 'settlers', 'shell', 'sherbrooke', 'sibenik', 'silk', 'ski', 'skole', 'society', 'sologne', 'soundandvision', 'southcarolina', 'southwest', 'space', 'spy', 'square', 'stadt', 'stalbans', 'starnberg', 'state', 'stateofdelaware', 'station', 'steam', 'steiermark', 'stjohn', 'stockholm', 'stpetersburg', 'stuttgart', 'suisse', 'surgeonshall', 'surrey', 'svizzera', 'sweden', 'sydney', 'tank', 'tcm', 'technology', 'telekommunikation', 'television', 'texas', 'textile', 'theater', 'time', 'timekeeping', 'topology', 'torino', 'touch', 'town', 'transport', 'tree', 'trolley', 'trust', 'trustee', 'uhren', 'ulm', 'undersea', 'university', 'usa', 'usantiques', 'usarts', 'uscountryestate', 'usculture', 'usdecorativearts', 'usgarden', 'ushistory', 'ushuaia', 'uslivinghistory', 'utah', 'uvic', 'valley', 'vantaa', 'versailles', 'viking', 'village', 'virginia', 'virtual', 'virtuel', 'vlaanderen', 'volkenkunde', 'wales', 'wallonie', 'war', 'washingtondc', 'watch-and-clock', 'watchandclock', 'western', 'westfalen', 'whaling', 'wildlife', 'williamsburg', 'windmill', 'workshop', 'xn--9dbhblg6di', 'xn--h1aegh', 'york', 'yorkshire', 'yosemite', 'youth', 'zoological', 'zoology'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mv':
+ if (['aero', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'int', 'mil', 'museum', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mw':
+ if (['ac', 'biz', 'co', 'com', 'coop', 'edu', 'gov', 'int', 'museum', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mx':
+ if (['com', 'edu', 'gob', 'net', 'ngo', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'my':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mz':
+ if (['co', 'net', 'org', 'ac', 'gov', 'edu', 'mil', 'adv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'na':
+ if (['info', 'pro', 'name', 'school', 'or', 'dr', 'us', 'mx', 'ca', 'in', 'cc', 'tv', 'ws', 'mobi', 'co', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'name':
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ break;
+ case 'nc':
+ if (['asso', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'net':
+ if (['gb', 'hu', 'in', 'jp', 'ru', 'se', 'uk', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nf':
+ if (['arts', 'com', 'firm', 'info', 'net', 'other', 'per', 'rec', 'store', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ng':
+ if (['com', 'edu', 'gov', 'i', 'mil', 'mobi', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ni':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gob', 'in', 'info', 'int', 'mil', 'net', 'nom', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nl':
+ if (wa[1] == 'bv') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'no':
+ if (['aa', 'aarborte', 'aejrie', 'afjord', 'agdenes', 'ah', 'aknoluokta', 'akrehamn', 'al', 'alaheadju', 'alesund', 'algard', 'alstahaug', 'alta', 'alvdal', 'amli', 'amot', 'andasuolo', 'andebu', 'andoy', 'ardal', 'aremark', 'arendal', 'arna', 'aseral', 'asker', 'askim', 'askoy', 'askvoll', 'asnes', 'audnedaln', 'aukra', 'aure', 'aurland', 'austevoll', 'austrheim', 'averoy', 'badaddja', 'bahcavuotna', 'bahccavuotna', 'baidar', 'bajddar', 'balat', 'balestrand', 'ballangen', 'balsfjord', 'bamble', 'bardu', 'barum', 'batsfjord', 'bearalvahki', 'beardu', 'beiarn', 'berg', 'bergen', 'berlevag', 'bievat', 'bindal', 'birkenes', 'bjarkoy', 'bjerkreim', 'bjugn', 'bodo', 'bokn', 'bomlo', 'bremanger', 'bronnoy', 'bronnoysund', 'brumunddal', 'bryne', 'bu', 'budejju', 'bygland', 'bykle', 'cahcesuolo', 'davvenjarga', 'davvesiida', 'deatnu', 'dep', 'dielddanuorri', 'divtasvuodna', 'divttasvuotna', 'donna', 'dovre', 'drammen', 'drangedal', 'drobak', 'dyroy', 'egersund', 'eid', 'eidfjord', 'eidsberg', 'eidskog', 'eidsvoll', 'eigersund', 'elverum', 'enebakk', 'engerdal', 'etne', 'etnedal', 'evenassi', 'evenes', 'farsund', 'fauske', 'fedje', 'fet', 'fetsund', 'fhs', 'finnoy', 'fitjar', 'fjaler', 'fjell', 'fla', 'flakstad', 'flatanger', 'flekkefjord', 'flesberg', 'flora', 'floro', 'fm', 'folkebibl', 'folldal', 'forde', 'forsand', 'fosnes', 'frana', 'fredrikstad', 'frei', 'frogn', 'froland', 'frosta', 'froya', 'fuoisku', 'fuossko', 'fusa', 'fylkesbibl', 'fyresdal', 'gaivuotna', 'galsa', 'gamvik', 'gangaviika', 'gaular', 'gausdal', 'giehtavuoatna', 'gildeskal', 'giske', 'gjemnes', 'gjerdrum', 'gjerstad', 'gjesdal', 'gjovik', 'gloppen', 'gol', 'gran', 'grane', 'granvin', 'gratangen', 'grimstad', 'grong', 'grue', 'gulen', 'guovdageaidnu', 'ha', 'habmer', 'hadsel', 'hagebostad', 'halden', 'halsa', 'hamar', 'hamaroy', 'hammarfeasta', 'hammerfest', 'hapmir', 'haram', 'hareid', 'harstad', 'hasvik', 'hattfjelldal', 'haugesund', 'hemne', 'hemnes', 'hemsedal', 'herad', 'hitra', 'hjartdal', 'hjelmeland', 'hl', 'hm', 'hobol', 'hof', 'hokksund', 'hol', 'hole', 'holmestrand', 'holtalen', 'honefoss', 'hornindal', 'horten', 'hoyanger', 'hoylandet', 'hurdal', 'hurum', 'hvaler', 'hyllestad', 'ibestad', 'idrett', 'inderoy', 'iveland', 'ivgu', 'jessheim', 'jevnaker', 'jolster', 'jondal', 'jorpeland', 'kafjord', 'karasjohka', 'karasjok', 'karlsoy', 'karmoy', 'kautokeino', 'kirkenes', 'klabu', 'klepp', 'kommune', 'kongsberg', 'kongsvinger', 'kopervik', 'kraanghke', 'kragero', 'kristiansand', 'kristiansund', 'krodsherad', 'krokstadelva', 'kvafjord', 'kvalsund', 'kvam', 'kvanangen', 'kvinesdal', 'kvinnherad', 'kviteseid', 'kvitsoy', 'laakesvuemie', 'lahppi', 'langevag', 'lardal', 'larvik', 'lavagis', 'lavangen', 'leangaviika', 'lebesby', 'leikanger', 'leirfjord', 'leirvik', 'leka', 'leksvik', 'lenvik', 'lerdal', 'lesja', 'levanger', 'lier', 'lierne', 'lillehammer', 'lillesand', 'lindas', 'lindesnes', 'loabat', 'lodingen', 'lom', 'loppa', 'lorenskog', 'loten', 'lund', 'lunner', 'luroy', 'luster', 'lyngdal', 'lyngen', 'malatvuopmi', 'malselv', 'malvik', 'mandal', 'marker', 'marnardal', 'masfjorden', 'masoy', 'meland', 'meldal', 'melhus', 'meloy', 'meraker', 'midsund', 'mil', 'mjondalen', 'moareke', 'modalen', 'modum', 'molde', 'mosjoen', 'moskenes', 'moss', 'mosvik', 'mr', 'muosat', 'museum', 'naamesjevuemie', 'namdalseid', 'namsos', 'namsskogan', 'nannestad', 'naroy', 'narviika', 'narvik', 'naustdal', 'navuotna', 'nesna', 'nesodden', 'nesoddtangen', 'nesseby', 'nesset', 'nissedal', 'nittedal', 'nl', 'norddal', 'nordkapp', 'nordreisa', 'notodden', 'notteroy', 'nt', 'odda', 'of', 'oksnes', 'ol', 'omasvuotna', 'oppdal', 'oppegard', 'orkanger', 'orkdal', 'orland', 'orskog', 'orsta', 'osen', 'oslo', 'osoyro', 'osteroy', 'overhalla', 'oyer', 'oygarden', 'porsanger', 'porsangu', 'porsgrunn', 'priv', 'rade', 'radoy', 'rahkkeravju', 'raholt', 'raisa', 'rakkestad', 'ralingen', 'rana', 'randaberg', 'rauma', 'rendalen', 'rennebu', 'rennesoy', 'rindal', 'ringebu', 'ringerike', 'ringsaker', 'risor', 'rissa', 'rl', 'roan', 'rodoy', 'rollag', 'romsa', 'romskog', 'roros', 'rost', 'royken', 'royrvik', 'ruovat', 'rygge', 'salangen', 'salat', 'saltdal', 'samnanger', 'sandefjord', 'sandnes', 'sandnessjoen', 'sandoy', 'sarpsborg', 'sauda', 'sauherad', 'sel', 'selbu', 'selje', 'seljord', 'sf', 'siellak', 'sigdal', 'siljan', 'sirdal', 'skanit', 'skanland', 'skaun', 'skedsmo', 'skedsmokorset', 'ski', 'skien', 'skierva', 'skiptvet', 'skjak', 'skjervoy', 'skodje', 'slattum', 'smola', 'snaase', 'snasa', 'snillfjord', 'snoasa', 'sogndal', 'sogne', 'sokndal', 'sola', 'solund', 'somna', 'songdalen', 'sorfold', 'sorreisa', 'sortland', 'sorum', 'spjelkavik', 'spydeberg', 'st', 'stange', 'stat', 'stathelle', 'stavanger', 'stavern', 'steigen', 'steinkjer', 'stjordal', 'stjordalshalsen', 'stokke', 'stord', 'stordal', 'storfjord', 'strand', 'stranda', 'stryn', 'sula', 'suldal', 'sund', 'sunndal', 'surnadal', 'svalbard', 'sveio', 'svelvik', 'sykkylven', 'tana', 'tananger', 'time', 'tingvoll', 'tinn', 'tjeldsund', 'tjome', 'tm', 'tokke', 'tolga', 'tonsberg', 'torsken', 'tr', 'trana', 'tranby', 'tranoy', 'troandin', 'trogstad', 'tromsa', 'tromso', 'trondheim', 'trysil', 'tvedestrand', 'tydal', 'tynset', 'tysfjord', 'tysnes', 'tysvar', 'ullensaker', 'ullensvang', 'ulvik', 'unjarga', 'utsira', 'va', 'vaapste', 'vadso', 'vaga', 'vagan', 'vagsoy', 'vaksdal', 'valle', 'vang', 'vanylven', 'vardo', 'varggat', 'varoy', 'vefsn', 'vega', 'vegarshei', 'vennesla', 'verdal', 'verran', 'vestby', 'vestnes', 'vestvagoy', 'vevelstad', 'vf', 'vgs', 'vik', 'vikna', 'vindafjord', 'voagat', 'volda', 'voss', 'vossevangen', 'xn--andy-ira', 'xn--asky-ira', 'xn--aurskog-hland-jnb', 'xn--avery-yua', 'xn--bdddj-mrabd', 'xn--bearalvhki-y4a', 'xn--berlevg-jxa', 'xn--bhcavuotna-s4a', 'xn--bhccavuotna-k7a', 'xn--bidr-5nac', 'xn--bievt-0qa', 'xn--bjarky-fya', 'xn--bjddar-pta', 'xn--blt-elab', 'xn--bmlo-gra', 'xn--bod-2na', 'xn--brnny-wuac', 'xn--brnnysund-m8ac', 'xn--brum-voa', 'xn--btsfjord-9za', 'xn--davvenjrga-y4a', 'xn--dnna-gra', 'xn--drbak-wua', 'xn--dyry-ira', 'xn--eveni-0qa01ga', 'xn--finny-yua', 'xn--fjord-lra', 'xn--fl-zia', 'xn--flor-jra', 'xn--frde-gra', 'xn--frna-woa', 'xn--frya-hra', 'xn--ggaviika-8ya47h', 'xn--gildeskl-g0a', 'xn--givuotna-8ya', 'xn--gjvik-wua', 'xn--gls-elac', 'xn--h-2fa', 'xn--hbmer-xqa', 'xn--hcesuolo-7ya35b', 'xn--hgebostad-g3a', 'xn--hmmrfeasta-s4ac', 'xn--hnefoss-q1a', 'xn--hobl-ira', 'xn--holtlen-hxa', 'xn--hpmir-xqa', 'xn--hyanger-q1a', 'xn--hylandet-54a', 'xn--indery-fya', 'xn--jlster-bya', 'xn--jrpeland-54a', 'xn--karmy-yua', 'xn--kfjord-iua', 'xn--klbu-woa', 'xn--koluokta-7ya57h', 'xn--krager-gya', 'xn--kranghke-b0a', 'xn--krdsherad-m8a', 'xn--krehamn-dxa', 'xn--krjohka-hwab49j', 'xn--ksnes-uua', 'xn--kvfjord-nxa', 'xn--kvitsy-fya', 'xn--kvnangen-k0a', 'xn--l-1fa', 'xn--laheadju-7ya', 'xn--langevg-jxa', 'xn--ldingen-q1a', 'xn--leagaviika-52b', 'xn--lesund-hua', 'xn--lgrd-poac', 'xn--lhppi-xqa', 'xn--linds-pra', 'xn--loabt-0qa', 'xn--lrdal-sra', 'xn--lrenskog-54a', 'xn--lt-liac', 'xn--lten-gra', 'xn--lury-ira', 'xn--mely-ira', 'xn--merker-kua', 'xn--mjndalen-64a', 'xn--mlatvuopmi-s4a', 'xn--mli-tla', 'xn--mlselv-iua', 'xn--moreke-jua', 'xn--mosjen-eya', 'xn--mot-tla', 'xn--msy-ula0h', 'xn--mtta-vrjjat-k7af', 'xn--muost-0qa', 'xn--nmesjevuemie-tcba', 'xn--nry-yla5g', 'xn--nttery-byae', 'xn--nvuotna-hwa', 'xn--oppegrd-ixa', 'xn--ostery-fya', 'xn--osyro-wua', 'xn--porsgu-sta26f', 'xn--rady-ira', 'xn--rdal-poa', 'xn--rde-ula', 'xn--rdy-0nab', 'xn--rennesy-v1a', 'xn--rhkkervju-01af', 'xn--rholt-mra', 'xn--risa-5na', 'xn--risr-ira', 'xn--rland-uua', 'xn--rlingen-mxa', 'xn--rmskog-bya', 'xn--rros-gra', 'xn--rskog-uua', 'xn--rst-0na', 'xn--rsta-fra', 'xn--ryken-vua', 'xn--ryrvik-bya', 'xn--s-1fa', 'xn--sandnessjen-ogb', 'xn--sandy-yua', 'xn--seral-lra', 'xn--sgne-gra', 'xn--skierv-uta', 'xn--skjervy-v1a', 'xn--skjk-soa', 'xn--sknit-yqa', 'xn--sknland-fxa', 'xn--slat-5na', 'xn--slt-elab', 'xn--smla-hra', 'xn--smna-gra', 'xn--snase-nra', 'xn--sndre-land-0cb', 'xn--snes-poa', 'xn--snsa-roa', 'xn--sr-aurdal-l8a', 'xn--sr-fron-q1a', 'xn--sr-odal-q1a', 'xn--sr-varanger-ggb', 'xn--srfold-bya', 'xn--srreisa-q1a', 'xn--srum-gra', 'xn--stjrdal-s1a', 'xn--stjrdalshalsen-sqb', 'xn--stre-toten-zcb', 'xn--tjme-hra', 'xn--tnsberg-q1a', 'xn--trany-yua', 'xn--trgstad-r1a', 'xn--trna-woa', 'xn--troms-zua', 'xn--tysvr-vra', 'xn--unjrga-rta', 'xn--vads-jra', 'xn--vard-jra', 'xn--vegrshei-c0a', 'xn--vestvgy-ixa6o', 'xn--vg-yiab', 'xn--vgan-qoa', 'xn--vgsy-qoa0j', 'xn--vre-eiker-k8a', 'xn--vrggt-xqad', 'xn--vry-yla5g', 'xn--yer-zna', 'xn--ygarden-p1a', 'xn--ystre-slidre-ujb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'np':
+ if (['aero', 'asia', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'jobs', 'mil', 'mobi', 'museum', 'name', 'net', 'org', 'pro', 'travel'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nr':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nz':
+ if (['ac', 'archie', 'co', 'cri', 'geek', 'gen', 'govt', 'health', 'iwi', 'kiwi', 'maori', 'mil', 'net', 'org', 'parliament', 'school', 'xn--mori-qsa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'om':
+ if (['co', 'com', 'edu', 'gov', 'med', 'museum', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'org':
+ if (wa[1] == 'eu' && wa[3] != undefined) {
+ if (['al', 'asso', 'at', 'au', 'be', 'bg', 'ca', 'cd', 'ch', 'cn', 'cy', 'cz', 'de', 'dk', 'edu', 'ee', 'es', 'fi', 'fr', 'gr', 'hr', 'hu', 'ie', 'il', 'in', 'int', 'is', 'it', 'jp', 'kr', 'lt', 'lu', 'lv', 'me', 'mk', 'mt', 'my', 'net', 'ng', 'nl', 'no', 'nz', 'pl', 'pt', 'ro', 'ru', 'se', 'si', 'sk', 'tr', 'uk', 'us'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['ae', 'eu', 'hk', 'jpn', 'js', 'us', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pa':
+ if (['abo', 'ac', 'com', 'edu', 'gob', 'ing', 'med', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pe':
+ if (['com', 'edu', 'gob', 'mil', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pf':
+ if (['com', 'org', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pg':
+ if (['com', 'net', 'ac', 'gov', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ph':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'ngo', 'i'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pk':
+ if (['biz', 'com', 'edu', 'fam', 'gob', 'gok', 'gon', 'gop', 'gos', 'gov', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pl':
+ if (['agro', 'aid', 'art', 'atm', 'augustow', 'auto', 'babia-gora', 'bedzin', 'beskidy', 'bialowieza', 'bialystok', 'bielawa', 'bieszczady', 'biz', 'boleslawiec', 'bydgoszcz', 'bytom', 'cieszyn', 'com', 'czeladz', 'czest', 'dlugoleka', 'edu', 'elblag', 'elk', 'gda', 'gdansk', 'glogow', 'gmina', 'gniezno', 'gorlice', 'gov', 'grajewo', 'gsm', 'ilawa', 'info', 'jaworzno', 'jelenia-gora', 'jgora', 'kalisz', 'karpacz', 'kartuzy', 'kaszuby', 'katowice', 'kazimierz-dolny', 'kepno', 'ketrzyn', 'klodzko', 'kobierzyce', 'kolobrzeg', 'konin', 'konskowola', 'krakow', 'kutno', 'lapy', 'lebork', 'legnica', 'lezajsk', 'limanowa', 'lodz', 'lomza', 'lowicz', 'lubin', 'lublin', 'lukow', 'mail', 'malbork', 'malopolska', 'mazowsze', 'mazury', 'media', 'miasta', 'mielec', 'mielno', 'mil', 'mragowo', 'naklo', 'net', 'ngo', 'nieruchomosci', 'nom', 'nowaruda', 'nysa', 'olawa', 'olecko', 'olkusz', 'olsztyn', 'opoczno', 'opole', 'org', 'ostroda', 'ostroleka', 'ostrowiec', 'ostrowwlkp', 'pc', 'pila', 'pisz', 'podhale', 'podlasie', 'polkowice', 'pomorskie', 'pomorze', 'powiat', 'poznan', 'priv', 'prochowice', 'pruszkow', 'przeworsk', 'pulawy', 'radom', 'rawa-maz', 'realestate', 'rel', 'rybnik', 'rzeszow', 'sanok', 'sejny', 'sex', 'shop', 'sklep', 'skoczow', 'slask', 'slupsk', 'sos', 'sosnowiec', 'stalowa-wola', 'starachowice', 'stargard', 'suwalki', 'swidnica', 'swiebodzin', 'swinoujscie', 'szczecin', 'szczytno', 'szkola', 'targi', 'tarnobrzeg', 'tgory', 'tm', 'torun', 'tourism', 'travel', 'turek', 'turystyka', 'tychy', 'ustka', 'walbrzych', 'warmia', 'warszawa', 'waw', 'wegrow', 'wielun', 'wlocl', 'wloclawek', 'wodzislaw', 'wolomin', 'wroc', 'wroclaw', 'zachpomor', 'zagan', 'zarow', 'zgora', 'zgorzelec'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pn':
+ if (['in', 'co', 'eu', 'org', 'net', 'me', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pr':
+ if (['ac', 'biz', 'com', 'edu', 'est', 'gov', 'info', 'isla', 'name', 'net', 'org', 'pro', 'prof'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pro':
+ if (['aaa', 'aca', 'acct', 'eng', 'avocat', 'bar', 'jur', 'recht', 'law', 'med', 'cpa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ps':
+ if (['edu', 'gov', 'sec', 'plo', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pt':
+ if (['com', 'edu', 'gov', 'int', 'net', 'nome', 'org', 'publ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pw':
+ if (['co', 'ne', 'or', 'ed', 'go', 'belau'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'py':
+ if (['com', 'coop', 'edu', 'mil', 'gov', 'org', 'net', 'una'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'qa':
+ if (['com', 'edu', 'sch', 'gov', 'mil', 'net', 'org', 'name'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 're':
+ if (['asso', 'com', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ro':
+ if (['arts', 'com', 'firm', 'info', 'nom', 'nt', 'org', 'rec', 'store', 'tm', 'www'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rs':
+ if (['ac', 'co', 'edu', 'gov', 'in', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ru':
+ if (['ac', 'adygeya', 'altai', 'amur', 'amursk', 'arkhangelsk', 'astrakhan', 'baikal', 'bashkiria', 'belgorod', 'bir', 'bryansk', 'buryatia', 'cap', 'cbg', 'chel', 'chelyabinsk', 'chita', 'chukotka', 'cmw', 'com', 'dagestan', 'e-burg', 'edu', 'fareast', 'gov', 'grozny', 'int', 'irkutsk', 'ivanovo', 'izhevsk', 'jamal', 'jar', 'joshkar-ola', 'k-uralsk', 'kalmykia', 'kaluga', 'kamchatka', 'karelia', 'kazan', 'kchr', 'kemerovo', 'khabarovsk', 'khakassia', 'khv', 'kirov', 'kms', 'koenig', 'komi', 'kostroma', 'krasnoyarsk', 'kuban', 'kurgan', 'kursk', 'kustanai', 'kuzbass', 'lipetsk', 'magadan', 'magnitka', 'mari', 'mari-el', 'marine', 'mil', 'mordovia', 'mos', 'mosreg', 'msk', 'murmansk', 'mytis', 'nakhodka', 'nalchik', 'net', 'nkz', 'nnov', 'norilsk', 'nov', 'novosibirsk', 'nsk', 'omsk', 'orenburg', 'org', 'oryol', 'oskol', 'palana', 'penza', 'perm', 'pp', 'pskov', 'ptz', 'pyatigorsk', 'rnd', 'rubtsovsk', 'ryazan', 'sakhalin', 'samara', 'saratov', 'simbirsk', 'smolensk', 'snz', 'spb', 'stavropol', 'stv', 'surgut', 'syzran', 'tambov', 'tatarstan', 'test', 'tlt', 'tom', 'tomsk', 'tsaritsyn', 'tsk', 'tula', 'tuva', 'tver', 'tyumen', 'udm', 'udmurtia', 'ulan-ude', 'vdonsk', 'vladikavkaz', 'vladimir', 'vladivostok', 'volgograd', 'vologda', 'voronezh', 'vrn', 'vyatka', 'yakutia', 'yamal', 'yaroslavl', 'yekaterinburg', 'yuzhno-sakhalinsk', 'zgrad'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rw':
+ if (['gov', 'net', 'edu', 'ac', 'com', 'co', 'int', 'mil', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sa':
+ if (['com', 'edu', 'gov', 'med', 'net', 'org', 'pub', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sc':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sd':
+ if (['com', 'edu', 'gov', 'info', 'med', 'net', 'org', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'se':
+ if (['a', 'ac', 'b', 'bd', 'brand', 'c', 'd', 'e', 'f', 'fh', 'fhsk', 'fhv', 'g', 'h', 'i', 'k', 'komforb', 'kommunalforbund', 'komvux', 'l', 'lanbib', 'm', 'n', 'naturbruksgymn', 'o', 'org', 'p', 'parti', 'pp', 'press', 'r', 's', 't', 'tm', 'u', 'w', 'x', 'y', 'z'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sg':
+ if (['com', 'edu', 'gov', 'idn', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sh':
+ if (['com', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sl':
+ if (['com', 'net', 'edu', 'gov', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sn':
+ if (['art', 'com', 'edu', 'gouv', 'org', 'perso', 'univ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'so':
+ if (['com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'st':
+ if (['co', 'com', 'consulado', 'edu', 'embaixada', 'gov', 'mil', 'net', 'org', 'principe', 'saotome', 'store'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sv':
+ if (['edu', 'gov', 'com', 'org', 'red', 'gob'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sy':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sz':
+ if (['co', 'ac', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'th':
+ if (['ac', 'co', 'go', 'in', 'mi', 'net', 'or'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tj':
+ if (['ac', 'aero', 'biz', 'co', 'com', 'coop', 'dyn', 'edu', 'go', 'gov', 'info', 'int', 'mil', 'museum', 'my', 'name', 'net', 'nic', 'org', 'per', 'pro', 'test', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tl':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tm':
+ if (['com', 'co', 'org', 'net', 'nom', 'gov', 'mil', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tn':
+ if (['agrinet', 'com', 'defense', 'edunet', 'ens', 'fin', 'gov', 'ind', 'info', 'intl', 'mincom', 'nat', 'net', 'org', 'perso', 'rnrt', 'rns', 'rnu', 'tourism', 'turen'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'to':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tr':
+ if (['av', 'bbs', 'bel', 'biz', 'com', 'dr', 'edu', 'gen', 'gov', 'info', 'k12', 'kep', 'mil', 'name', 'nc', 'net', 'org', 'pol', 'tel', 'tv', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tt':
+ if (['co', 'com', 'org', 'net', 'biz', 'info', 'pro', 'int', 'coop', 'jobs', 'mobi', 'travel', 'museum', 'aero', 'name', 'gov', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tw':
+ if (['club', 'com', 'ebiz', 'edu', 'game', 'gov', 'idv', 'mil', 'net', 'org', 'xn--czrw28b', 'xn--uc0atv', 'xn--zf0ao64a'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tz':
+ if (['ac', 'co', 'go', 'hotel', 'info', 'me', 'mil', 'mobi', 'ne', 'or', 'sc', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ua':
+ if (['at', 'cherkassy', 'cherkasy', 'chernigov', 'chernihiv', 'chernivtsi', 'chernovtsy', 'ck', 'cn', 'co', 'com', 'cr', 'crimea', 'cv', 'dn', 'dnepropetrovsk', 'dnipropetrovsk', 'dominic', 'donetsk', 'dp', 'edu', 'gov', 'if', 'in', 'ivano-frankivsk', 'kh', 'kharkiv', 'kharkov', 'kherson', 'khmelnitskiy', 'khmelnytskyi', 'kiev', 'kirovograd', 'km', 'kr', 'krym', 'ks', 'kv', 'kyiv', 'lg', 'lt', 'lugansk', 'lutsk', 'lv', 'lviv', 'mk', 'mykolaiv', 'net', 'nikolaev', 'od', 'odesa', 'odessa', 'org', 'pl', 'poltava', 'pp', 'rivne', 'rovno', 'rv', 'sb', 'sebastopol', 'sevastopol', 'sm', 'sumy', 'te', 'ternopil', 'uz', 'uzhgorod', 'vinnica', 'vinnytsia', 'vn', 'volyn', 'yalta', 'zaporizhzhe', 'zaporizhzhia', 'zhitomir', 'zhytomyr', 'zp', 'zt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ug':
+ if (['co', 'ac', 'sc', 'go', 'ne', 'or', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uk':
+ if (['ac', 'bl', 'british-library', 'co', 'gov', 'govt', 'jcpc', 'jet', 'judiciary', 'lea', 'ltd', 'me', 'mil', 'mod', 'net', 'nhs', 'nic', 'nls', 'org', 'orgn', 'parliament', 'plc', 'police', 'royal', 'sch', 'supremecourt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'us':
+ if (['aa', 'ae', 'ak', 'al', 'ap', 'ar', 'as', 'az', 'ca', 'cm', 'co', 'ct', 'cz', 'dc', 'de', 'dni', 'fed', 'fl', 'fm', 'ga', 'gu', 'hi', 'ia', 'id', 'il', 'in', 'isa', 'kids', 'ks', 'ky', 'la', 'ma', 'md', 'me', 'mh', 'mi', 'mn', 'mo', 'mp', 'ms', 'mt', 'nb', 'nc', 'nd', 'ne', 'nh', 'nj', 'nm', 'nsn', 'nv', 'ny', 'oh', 'ok', 'or', 'pa', 'pi', 'pr', 'pw', 'ri', 'sc', 'sd', 'tn', 'tt', 'tx', 'ut', 'va', 'vi', 'vt', 'wa', 'wi', 'wv', 'wy'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uy':
+ if (['com', 'edu', 'gub', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uz':
+ if (['co', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vc':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 've':
+ if (['arts', 'co', 'com', 'e12', 'edu', 'firm', 'gob', 'gov', 'info', 'int', 'mil', 'net', 'org', 'radio', 'rec', 'store', 'tec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vi':
+ if (['co', 'org', 'com', 'net', 'k12'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vn':
+ if (['ac', 'biz', 'com', 'edu', 'gov', 'health', 'info', 'int', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vu':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ws':
+ if (['org', 'gov', 'edu', 'com', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--90a3ac':
+ if (['xn--o1ac', 'xn--c1avg', 'xn--90azh', 'xn--d1at', 'xn--o1ach', 'xn--80au'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--j6w193g':
+ if (['xn--55qx5d', 'xn--wcvs22d', 'xn--mxtq1m', 'xn--gmqw5a', 'xn--od0alg', 'xn--uc0atv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--o3cw4h':
+ if (['xn--12c1fe0br', 'xn--12co0c3b4eva', 'xn--h3cuzk1di', 'xn--o3cyx2a', 'xn--m3ch0j3a', 'xn--12cfi8ixb8l'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'za':
+ if (['ac', 'agric', 'alt', 'bourse', 'city', 'co', 'cybernet', 'db', 'edu', 'gov', 'grondar', 'iaccess', 'imt', 'inca', 'landesign', 'law', 'mil', 'net', 'ngo', 'nis', 'nom', 'olivetti', 'org', 'pix', 'school', 'tm', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zm':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gov', 'info', 'mil', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zw':
+ if (['co', 'ac', 'org', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ }
+ return wa[1] + '.' + wa[0];
+}
+function update_icon(tid, url) {
+ let _nu = new URL(url);
+ let cf_hostname = _nu.hostname;
+ if ((_nu.protocol != 'https:' && _nu.protocol != 'http:') || cf_hostname.length < 1) {
+ chrome.browserAction.setIcon({
+ tabId: tid,
+ path: cf_flag_ok
+ });
+ return;
+ }
+ cf_hostname = get_realdomain(cf_hostname);
+ if (my_cf_ignore.includes(cf_hostname) || force_whitelist.includes(cf_hostname)) {
+ chrome.browserAction.setIcon({
+ tabId: tid,
+ path: cf_flag_ok
+ });
+ return;
+ }
+ if (my_cf_collection.includes(cf_hostname)) {
+ chrome.browserAction.setIcon({
+ tabId: tid,
+ path: cf_flag_ng
+ });
+ return;
+ }
+ chrome.browserAction.setIcon({
+ tabId: tid,
+ path: cf_flag_ok
+ });
+ return;
+}
+function tell_me(ok, mgT, mgD) {
+ if (ok) {
+ chrome.notifications.clear(infobox);
+ chrome.notifications.create(infobox, {
+ 'type': 'basic',
+ 'iconUrl': chrome.runtime.getURL('icons/cf_1.png'),
+ 'title': mgT + ' [' + ((new Date()).toLocaleString()) + ']',
+ 'message': mgD
+ });
+ }
+}
+chrome.webRequest.onHeadersReceived.addListener(function (wr) {
+ if (wr.type != 'main_frame' && (my_action == 2 || my_action == 4)) {
+ return;
+ }
+ let _a = document.createElement('a');
+ _a.setAttribute('href', wr.url);
+ let wr_protocol = _a.protocol,
+ wr_hostname = _a.hostname;
+ _a = null;
+ if ((wr_protocol != 'http:' && wr_protocol != 'https:') || wr_hostname.length < 4) {
+ return;
+ }
+ wr_hostname = get_realdomain(wr_hostname);
+ if (my_action == 1) {
+ if (wr.type == 'main_frame') {
+ return;
+ }
+ if (wr.documentUrl) {
+ let _b = document.createElement('a');
+ _b.setAttribute('href', wr.documentUrl);
+ if (wr_hostname == get_realdomain(_b.hostname)) {
+ return;
+ }
+ _b = null;
+ }
+ }
+ if (my_cf_ignore.includes(wr_hostname) || force_whitelist.includes(wr_hostname)) {
+ return;
+ }
+ let cf_is = (my_cf_collection.includes(wr_hostname)) ? true : false;
+ if (!cf_is) {
+ let cf_headers = wr.responseHeaders,
+ cf_v_name, cf_v_value;
+ for (let i = 0; i < cf_headers.length; i++) {
+ cf_v_name = cf_headers[i]['name'].toLowerCase();
+ cf_v_value = (cf_headers[i]['value'] != undefined) ? cf_headers[i]['value'].toLowerCase() : '';
+ if (cf_v_name == 'cf-ray' || cf_v_name == 'cf-cache-status' || cf_v_name == 'cf-chl-bypass') {
+ cf_is = true;
+ break;
+ }
+ if (cf_v_name == 'server' && cf_v_value.includes('cloudflare')) {
+ cf_is = true;
+ break;
+ }
+ if (cf_v_name == 'set-cookie' && cf_v_value.includes('_cfduid')) {
+ cf_is = true;
+ break;
+ }
+ }
+ }
+ if (cf_is) {
+ if (my_cf_collection.length > 500) {
+ my_cf_collection.splice(0, 50);
+ }
+ if (!my_cf_collection.includes(wr_hostname)) {
+ my_cf_collection.push(wr_hostname);
+ chrome.storage.local.set({
+ 'collection': my_cf_collection.join("\n")
+ });
+ }
+ if (my_action == 0 || my_action == 1) {
+ tell_me(my_nfo_cfd, trans[my_nfo_lang]['detemi'], trans[my_nfo_lang]['virus'] + wr_hostname);
+ if (wr.type == 'image') {
+ return {
+ redirectUrl: 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAAACwAAAAAAQABAAACAkQBADs='
+ };
+ } else {
+ return {
+ cancel: true
+ };
+ }
+ }
+ if (my_action == 2) {
+ tell_me(my_nfo_alu, trans[my_nfo_lang]['cflrmi'], trans[my_nfo_lang]['redir'] + wr_hostname);
+ return {
+ redirectUrl: 'https://web.archive.org/web/' + wr.url
+ };
+ }
+ if (my_action == 4) {
+ tell_me(my_nfo_alu, trans[my_nfo_lang]['cflrmi'], trans[my_nfo_lang]['redir'] + wr_hostname);
+ return {
+ redirectUrl: my_customurl.replace('%%URL%%', wr.url)
+ };
+ }
+ }
+ return;
+}, {
+ urls: ["http://*/*", "https://*/*"]
+}, ["blocking", "responseHeaders"]);
+chrome.webRequest.onBeforeRequest.addListener(function (wr) {
+ if (wr.type != 'main_frame' && (my_action == 2 || my_action == 4)) {
+ return;
+ }
+ let _a = document.createElement('a');
+ _a.setAttribute('href', wr.url);
+ let wr_protocol = _a.protocol,
+ wr_hostname = _a.hostname;
+ _a = null;
+ if ((wr_protocol != 'http:' && wr_protocol != 'https:') || wr_hostname.length < 4) {
+ return;
+ }
+ wr_hostname = get_realdomain(wr_hostname);
+ if (my_action == 1) {
+ if (wr.type == 'main_frame') {
+ return;
+ }
+ if (wr.documentUrl) {
+ let _b = document.createElement('a');
+ _b.setAttribute('href', wr.documentUrl);
+ if (wr_hostname == get_realdomain(_b.hostname)) {
+ return;
+ }
+ _b = null;
+ }
+ }
+ if (my_cf_ignore.includes(wr_hostname) || force_whitelist.includes(wr_hostname)) {
+ return;
+ }
+ let cf_is = (my_cf_collection.includes(wr_hostname)) ? true : false;
+ if (cf_is) {
+ if (my_action == 0 || my_action == 1) {
+ tell_me(my_nfo_cfd, trans[my_nfo_lang]['detemi'], trans[my_nfo_lang]['virus'] + wr_hostname);
+ if (wr.type == 'image') {
+ return {
+ redirectUrl: 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAAACwAAAAAAQABAAACAkQBADs='
+ };
+ } else {
+ return {
+ cancel: true
+ };
+ }
+ }
+ if (my_action == 2) {
+ tell_me(my_nfo_alu, trans[my_nfo_lang]['cflrmi'], trans[my_nfo_lang]['redir'] + wr_hostname);
+ return {
+ redirectUrl: 'https://web.archive.org/web/' + wr.url
+ };
+ }
+ if (my_action == 4) {
+ tell_me(my_nfo_alu, trans[my_nfo_lang]['cflrmi'], trans[my_nfo_lang]['redir'] + wr_hostname);
+ return {
+ redirectUrl: my_customurl.replace('%%URL%%', wr.url)
+ };
+ }
+ }
+ return;
+}, {
+ urls: ["http://*/*", "https://*/*"]
+}, ["blocking"]);
+chrome.notifications.clear(infobox);
+chrome.storage.local.get(null, (d) => {
+ my_cf_collection = (d.collection || '').split("\n").filter(v => v != '');
+ my_cf_ignore = (d.ignore || '').split("\n").filter(v => v != '');
+ my_action = (d.action != undefined) ? Number(d.action) : 2;
+ my_customurl = (d.customurl != undefined) ? d.customurl : def_customurl;
+ my_nfo_alu = (d.nfoau == 'n') ? false : true;
+ my_nfo_cfd = (d.nfocf == 'n') ? false : true;
+ my_nfo_lang = d.ul || 'eo';
+});
+chrome.runtime.onMessage.addListener(function (a, b, c) {
+ if (a[0] == 'cf') {
+ c([JSON.stringify(my_cf_collection), JSON.stringify(my_cf_ignore), my_action, my_customurl, [!my_nfo_alu, !my_nfo_cfd], my_nfo_lang]);
+ }
+ if (a[0] == 'ul') {
+ my_nfo_lang = a[1];
+ chrome.storage.local.set({
+ 'ul': a[1]
+ });
+ }
+ if (a[0] == 'dy') {
+ my_cf_collection = [];
+ chrome.storage.local.set({
+ 'collection': ''
+ });
+ }
+ if (a[0] == 'ta') {
+ if (['0', '1', '2', '3', '4'].includes(a[1])) {
+ my_action = Number(a[1]);
+ chrome.storage.local.set({
+ 'action': a[1]
+ });
+ }
+ }
+ if (a[0] == 'nnf') {
+ if (a[1] == '1') {
+ my_nfo_alu = !a[2];
+ chrome.storage.local.set({
+ 'nfoau': (a[2]) ? 'n' : 'y'
+ });
+ }
+ if (a[1] == '2') {
+ my_nfo_cfd = !a[2];
+ chrome.storage.local.set({
+ 'nfocf': (a[2]) ? 'n' : 'y'
+ });
+ }
+ }
+ if (a[0] == 'ig') {
+ my_cf_ignore = a[1].sort().filter(v => v != '');
+ chrome.storage.local.set({
+ 'ignore': my_cf_ignore.join("\n")
+ });
+ }
+ if (a[0] == 'au') {
+ my_customurl = (/^http(|s):\/\/([a-z0-9.-]{4,})\/(.*)%%URL%%(.*)$/.test(a[1])) ? a[1] : def_customurl;
+ chrome.storage.local.set({
+ 'customurl': my_customurl
+ });
+ }
+ return true;
+});
+chrome.tabs.onActivated.addListener(function (i) {
+ chrome.tabs.query({
+ active: true,
+ currentWindow: true
+ }, function (t) {
+ if (t[0]) {
+ update_icon(t[0].id, t[0].url);
+ }
+ });
+});
+chrome.tabs.onUpdated.addListener(function (a, b, t) {
+ if (t.active) {
+ update_icon(t.id, t.url);
+ }
+});
+chrome.webNavigation.onDOMContentLoaded.addListener(function (d) {
+ chrome.tabs.query({
+ active: true,
+ currentWindow: true
+ }, function (t) {
+ if (t[0]) {
+ update_icon(t[0].id, t[0].url);
+ }
+ });
+});
+chrome.webNavigation.onCompleted.addListener(function (d) {
+ chrome.tabs.query({
+ active: true,
+ currentWindow: true
+ }, function (t) {
+ if (t[0]) {
+ update_icon(t[0].id, t[0].url);
+ }
+ });
+});
+chrome.browserAction.onClicked.addListener(() => {
+ chrome.runtime.openOptionsPage();
+});
\ No newline at end of file
diff --git a/addons/bcmaCR/cg.html b/addons/bcmaCR/cg.html
new file mode 100644
index 000000000..e1104780d
--- /dev/null
+++ b/addons/bcmaCR/cg.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ 📢
+
+
+
+
+
+
+ 🖇
+
+
+
+
+ 🔔
+
+
+
+ 📒
+
+
+
+
+
+ 🏳
+
+
+
+
+ 💬 Internacio
+
+
+ 📚
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/bcmaCR/cg.js b/addons/bcmaCR/cg.js
new file mode 100644
index 000000000..168f066eb
--- /dev/null
+++ b/addons/bcmaCR/cg.js
@@ -0,0 +1,100 @@
+document.addEventListener('DOMContentLoaded', () => {
+ chrome.runtime.sendMessage(['cf'], (r) => {
+ fetch('i18n/' + r[5] + '.json', {
+ method: 'GET'
+ }).then(j => j.json()).then(j => {
+ document.querySelectorAll('span[transk]').forEach(x => {
+ x.innerText = j[x.getAttribute('transk')];
+ });
+ });
+ document.getElementById('t').value = JSON.parse(r[0]).join("\n");
+ document.getElementById('g').value = JSON.parse(r[1]).join("\n");
+ document.getElementById('vau').value = r[3];
+ document.getElementById('nnf1').checked = r[4][0];
+ document.getElementById('nnf2').checked = r[4][1];
+ switch (r[2]) {
+ case 0:
+ document.getElementById('ta0').checked = true;
+ document.getElementById('ta1').checked = false;
+ document.getElementById('ta2').checked = false;
+ document.getElementById('ta3').checked = false;
+ document.getElementById('ta4').checked = false;
+ break;
+ case 1:
+ document.getElementById('ta0').checked = false;
+ document.getElementById('ta1').checked = true;
+ document.getElementById('ta2').checked = false;
+ document.getElementById('ta3').checked = false;
+ document.getElementById('ta4').checked = false;
+ break;
+ case 3:
+ document.getElementById('ta0').checked = false;
+ document.getElementById('ta1').checked = false;
+ document.getElementById('ta2').checked = false;
+ document.getElementById('ta3').checked = true;
+ document.getElementById('ta4').checked = false;
+ break;
+ case 4:
+ document.getElementById('ta0').checked = false;
+ document.getElementById('ta1').checked = false;
+ document.getElementById('ta2').checked = false;
+ document.getElementById('ta3').checked = false;
+ document.getElementById('ta4').checked = true;
+ break;
+ default:
+ document.getElementById('ta0').checked = false;
+ document.getElementById('ta1').checked = false;
+ document.getElementById('ta2').checked = true;
+ document.getElementById('ta3').checked = false;
+ document.getElementById('ta4').checked = false;
+ break;
+ }
+ });
+ document.getElementById('aus').addEventListener('click', function () {
+ chrome.runtime.sendMessage(['au', document.getElementById('vau').value]);
+ });
+ document.getElementById('clr').addEventListener('click', () => {
+ chrome.runtime.sendMessage(['dy']);
+ document.getElementById('t').value = '';
+ });
+ document.getElementById('nnf1').addEventListener('click', function () {
+ chrome.runtime.sendMessage(['nnf', '1', (this.checked ? true : false)]);
+ });
+ document.getElementById('nnf2').addEventListener('click', function () {
+ chrome.runtime.sendMessage(['nnf', '2', (this.checked ? true : false)]);
+ });
+ document.getElementById('ta0').addEventListener('click', function () {
+ if (this.checked) {
+ chrome.runtime.sendMessage(['ta', '0']);
+ }
+ });
+ document.getElementById('ta1').addEventListener('click', function () {
+ if (this.checked) {
+ chrome.runtime.sendMessage(['ta', '1']);
+ }
+ });
+ document.getElementById('ta2').addEventListener('click', function () {
+ if (this.checked) {
+ chrome.runtime.sendMessage(['ta', '2']);
+ }
+ });
+ document.getElementById('ta3').addEventListener('click', function () {
+ if (this.checked) {
+ chrome.runtime.sendMessage(['ta', '3']);
+ }
+ });
+ document.getElementById('ta4').addEventListener('click', function () {
+ if (this.checked) {
+ chrome.runtime.sendMessage(['ta', '4']);
+ }
+ });
+ document.getElementById('ign').addEventListener('click', function () {
+ chrome.runtime.sendMessage(['ig', document.getElementById('g').value.split("\n")]);
+ });
+ document.getElementById('myul').addEventListener('change', () => {
+ if (document.getElementById('myul').value != '') {
+ chrome.runtime.sendMessage(['ul', document.getElementById('myul').value]);
+ location.reload(true);
+ }
+ });
+});
\ No newline at end of file
diff --git a/addons/bcmaCR/manifest.json b/addons/bcmaCR/manifest.json
new file mode 100644
index 000000000..691a0b06c
--- /dev/null
+++ b/addons/bcmaCR/manifest.json
@@ -0,0 +1,36 @@
+{
+ "manifest_version": 2,
+ "name": "Bloku Cloudflaron MITM-Atakon",
+ "version": "1.0.3.6",
+ "minimum_chrome_version": "68",
+ "homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
+ "author": "Ss",
+ "incognito": "split",
+ "permissions": [
+ "",
+ "activeTab",
+ "tabs",
+ "webRequest",
+ "webRequestBlocking",
+ "webNavigation",
+ "notifications",
+ "storage",
+ "unlimitedStorage"
+ ],
+ "icons": {
+ "72": "icons/72.png"
+ },
+ "background": {
+ "scripts": [
+ "cf.js"
+ ]
+ },
+ "options_ui": {
+ "page": "cg.html"
+ },
+ "browser_action": {
+ "default_icon": {
+ "32": "icons/cf_0.png"
+ }
+ }
+}
\ No newline at end of file
diff --git a/addons/bcmaFX/README.md b/addons/bcmaFX/README.md
new file mode 100644
index 000000000..72f6b555c
--- /dev/null
+++ b/addons/bcmaFX/README.md
@@ -0,0 +1,2 @@
+- [More Information / Download](../../subfiles/about.bcma.md)
+- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
\ No newline at end of file
diff --git a/addons/bcmaFX/cf.js b/addons/bcmaFX/cf.js
new file mode 100644
index 000000000..a309c7ff0
--- /dev/null
+++ b/addons/bcmaFX/cf.js
@@ -0,0 +1,1469 @@
+const cf_flag_ok = 'icons/cf_0.png',
+ cf_flag_ng = 'icons/cf_1.png';
+const force_whitelist = ['archive.org', 'betterinternet.com', 'brokendnssec.net', 'cloudflare-dns.com', 'cloudflare-free.com', 'cloudflare-ipfs.com', 'cloudflare-quic.com', 'cloudflare.com', 'cloudflare.com.ve', 'cloudflare.net', 'cloudflareaccess.com', 'cloudflareapi.com', 'cloudflareapps.com', 'cloudflarechallenge.com', 'cloudflareclient.com', 'cloudflareenterprise.com', 'cloudflarepreview.com', 'cloudflarepreviews.com', 'cloudflareresolve.com', 'cloudflarespeedtest.com', 'cloudflaressl.com', 'cloudflarestatus.com', 'cloudflaresupport.com', 'cloudflarewarp.com', 'encryptedsni.com', 'mozilla.org', 'mycloudflare.com', 'one.one', 'searxes.eu.org', 'ansero.eu.org', 'thunderbird.net', 'trycloudflare.com', 'warp.plus', 'workers.dev'];
+const infobox = 'cloudflared',
+ def_customurl = 'https://web.archive.org/web/%%URL%%';
+let my_cf_collection = [],
+ my_cf_ignore = [],
+ my_action = 2,
+ my_customurl = def_customurl,
+ my_nfo_alu = false,
+ my_nfo_cfd = false,
+ my_nfo_lang = 'eo';
+const trans = {
+ 'eo': {
+ 'detemi': 'Minaco Detektita',
+ 'cflrmi': 'Cloudflare Detektita',
+ 'virus': "Atentivelo: Severa\nAgo: Blokita\nDomajno: ",
+ 'redir': "Redirektu al alternativa URL.\n\nDomajno: "
+ },
+ 'de': {
+ 'detemi': 'Bedrohung erkannt',
+ 'cflrmi': 'Cloudflare erkannt',
+ 'virus': "Servety: Schwere\nAktion: Blockieren\nDomain:",
+ 'redir': "Zur alternativen URL umleiten.\n\nDomain:"
+ },
+ 'fr': {
+ 'detemi': 'Menace détectée',
+ 'cflrmi': 'Cloudflare détecté',
+ 'virus': "Servety: Severe\n Action: bloquer\n Domaine:",
+ 'redir': "Rediriger vers une URL alternative.\n\nDomaine:"
+ },
+ 'pt': {
+ 'detemi': 'Ameaça detectada',
+ 'cflrmi': 'Cloudflare detectado',
+ 'virus': "Servety: Grave\nAção: Bloquear\nDomínio:",
+ 'redir': "Redirecione para URL alternativo.\n\nDomínio:"
+ },
+ 'ru': {
+ 'detemi': 'Обнаружена угроза',
+ 'cflrmi': 'Обнаружена облачная вспышка',
+ 'virus': "Servety: тяжелый\n Действие: Блок\n Домен:",
+ 'redir': "Перенаправить на альтернативный URL.\n\nДомен:"
+ },
+ 'zh': {
+ 'detemi': '检测到威胁',
+ 'cflrmi': '检测到Cloudflare',
+ 'virus': "服务:严重\n行动:封锁\n域:",
+ 'redir': "重定向到备用URL。\n\n域:"
+ },
+ 'nl': {
+ 'detemi': 'Threat gedetecteerd',
+ 'cflrmi': 'Cloudflare gedetecteerd',
+ 'virus': "Servety: Ernstig\nActie: blokkeren\nDomein:",
+ 'redir': "Omleiden naar alternatieve URL.\n\nDomein:"
+ },
+ 'es': {
+ 'detemi': 'Amenaza detectada',
+ 'cflrmi': 'Cloudflare detectado',
+ 'virus': "Servety: Grave\nAcción: bloqueo\nDominio:",
+ 'redir': "Redirigir a URL alternativa.\n\nDominio:"
+ },
+ 'hi': {
+ 'detemi': 'थ्रेट डिटेक्टेड',
+ 'cflrmi': 'Cloudflare का पता चला',
+ 'virus': "गंभीरता: गंभीर \nउदासीनता: अवरुद्ध \nDomain:",
+ 'redir': "वैकल्पिक URL पर पुनर्निर्देशित। \n\nDomain:"
+ },
+ 'it': {
+ "detemi": "Minaccia rilevata",
+ "cflrmi": "Cloudflare rilevato",
+ 'virus': "Servety: Grave\nAzione: blocco\nDominio:",
+ 'redir': "Reindirizzamento a URL alternativo.\n\nDomain:"
+ },
+ 'ja': {
+ 'detemi': '脅威を検出しました',
+ 'cflrmi': 'Cloudflareを検出しました',
+ 'virus': "深刻度: 重大\n行動: 接続拒否\nドメイン:",
+ 'redir': "代わりのURLへ転送します。\n\nドメイン:"
+ },
+ 'ko': {
+ 'detemi': 'Threat 감지',
+ 'cflrmi': 'Cloudflare 감지',
+ 'virus': "서비스 : 심각한\nAction: 차단\n도메인 :",
+ 'redir': "대체 URL로 리디렉션합니다.\n\n도메인 :"
+ },
+ 'ta': {
+ 'detemi': 'அச்சுறுத்தல் கண்டறியப்பட்டது',
+ 'cflrmi': 'கிளவுட்ஃப்ளேர் கண்டறியப்பட்டது',
+ 'virus': "சேவை: தீவிரமான\nசெயல்: தடுக்கும் \nடொமைன்:",
+ 'redir': "மாற்று URL க்கு திருப்பி விடுங்கள். \n\nடொமைன்:"
+ },
+ 'tr': {
+ 'detemi': 'Tehdit tespit edildi',
+ 'cflrmi': 'Cloudflare algılandı',
+ 'virus': "Servety: Ciddi\nAksiyon: engelleme\nDomain:",
+ 'redir': "Alternatif URL'ye yönlendir.\n\nAlan:"
+ },
+ 'ms': {
+ 'detemi': 'Ancaman Dikesan',
+ 'cflrmi': 'Cloudflare Dikesan',
+ 'virus': "Amaran: Parah\nTindakan: Disekat\nDomain:",
+ 'redir': "Ubah hala ke URL ganti.\n\nDomain:"
+ },
+ 'bn': {
+ 'detemi': 'হুমকি সনাক্ত করা',
+ 'cflrmi': 'ক্লাউডফ্লেয়ার সনাক্ত হয়েছে',
+ 'virus': "সতর্কতা: গুরুতর\nক্রিয়া: অবরুদ্ধ \nডোমেন:",
+ 'redir': "বিকল্প URL এ পুনঃনির্দেশ করুন \n\nডোমেন:"
+ },
+ 'ha': {
+ 'detemi': 'Barazanar Gano',
+ 'cflrmi': 'Gano Cloudflare',
+ 'virus': "Gargadi: Mai tsananin\nAction: An katange\nKa kula:",
+ 'redir': "Juya zuwa madadin URL.\n\nKa kula:"
+ },
+ 'jv': {
+ 'detemi': 'Deteksi Deteksi',
+ 'cflrmi': 'Cloudflare dideteksi',
+ 'virus': "Pènget: Abot\nAction: Disekat\nDomain:",
+ 'redir': "Pangalihan URL alternatif.\n\nDomain:"
+ }
+};
+function get_realdomain(w) {
+ let wa = w.split('.');
+ let wa_l = wa.length;
+ if (wa_l < 3 || (wa_l == 4 && /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(w))) {
+ return w;
+ }
+ wa.reverse();
+ switch (wa[0]) {
+ case 'ac':
+ if (['com', 'edu', 'gov', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ad':
+ if (wa[1] == 'nom') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ae':
+ if (['co', 'net', 'org', 'sch', 'ac', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aero':
+ if (['accident-investigation', 'accident-prevention', 'aerobatic', 'aeroclub', 'aerodrome', 'agents', 'aircraft', 'airline', 'airport', 'air-surveillance', 'airtraffic', 'air-traffic-control', 'ambulance', 'amusement', 'association', 'author', 'ballooning', 'broker', 'caa', 'cargo', 'catering', 'certification', 'championship', 'charter', 'civilaviation', 'club', 'conference', 'consultant', 'consulting', 'control', 'council', 'crew', 'design', 'dgca', 'educator', 'emergency', 'engine', 'engineer', 'entertainment', 'equipment', 'exchange', 'express', 'federation', 'flight', 'freight', 'fuel', 'gliding', 'government', 'groundhandling', 'group', 'hanggliding', 'homebuilt', 'insurance', 'journal', 'journalist', 'leasing', 'logistics', 'magazine', 'maintenance', 'media', 'microlight', 'modelling', 'navigation', 'parachuting', 'paragliding', 'passenger-association', 'pilot', 'press', 'production', 'recreation', 'repbody', 'res', 'research', 'rotorcraft', 'safety', 'scientist', 'services', 'show', 'skydiving', 'software', 'student', 'trader', 'trading', 'trainer', 'union', 'workinggroup', 'works'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'af':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ag':
+ if (['com', 'net', 'org', 'co', 'nom', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ai':
+ if (['off', 'com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'al':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ao':
+ if (['co', 'ed', 'it', 'og', 'pb', 'gv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ar':
+ if (['com', 'edu', 'gov', 'gob', 'int', 'mil', 'net', 'org', 'tur', 'musica'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'as':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'at':
+ if (['gv', 'ac', 'co', 'or', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'au':
+ if (wa[1] == 'gov' && wa[3] != undefined) {
+ if (['act', 'nsw', 'nt', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (wa[1] == 'edu' && wa[3] != undefined) {
+ if (['act', 'catholic', 'eq', 'nsw', 'nt', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['act', 'asn', 'com', 'conf', 'csiro', 'edu', 'gov', 'id', 'info', 'net', 'nsw', 'nt', 'org', 'oz', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aw':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'az':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'int', 'mil', 'name', 'net', 'org', 'pp', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ba':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'net', 'org', 'rs'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bb':
+ if (['biz', 'co', 'com', 'edu', 'gov', 'info', 'net', 'org', 'store', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bd':
+ if (['com', 'edu', 'ac', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'be':
+ if (wa[1] == 'ac') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bf':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bg':
+ if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bh':
+ if (['com', 'info', 'cc', 'edu', 'biz', 'net', 'org', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bi':
+ if (['ac', 'co', 'com', 'edu', 'gouv', 'gov', 'int', 'mil', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bj':
+ if (['asso', 'barreau', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bn':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bo':
+ if (['academia', 'agro', 'arte', 'blog', 'bolivia', 'ciencia', 'com', 'cooperativa', 'democracia', 'deporte', 'ecologia', 'economia', 'edu', 'empresa', 'gob', 'gov', 'indigena', 'industria', 'info', 'int', 'medicina', 'mil', 'movimiento', 'musica', 'natural', 'net', 'nombre', 'noticias', 'org', 'patria', 'plurinacional', 'politica', 'profesional', 'pueblo', 'revista', 'salud', 'tecnologia', 'tksat', 'transporte', 'tv', 'web', 'wiki'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'br':
+ if (['9guacu', 'abc', 'adm', 'adv', 'agr', 'aju', 'am', 'anani', 'aparecida', 'arq', 'art', 'ato', 'b', 'barueri', 'belem', 'bhz', 'bio', 'blog', 'bmd', 'boavista', 'bsb', 'campinagrande', 'campinas', 'caxias', 'cim', 'cng', 'cnt', 'com', 'contagem', 'coop', 'cri', 'cuiaba', 'curitiba', 'def', 'ecn', 'eco', 'edu', 'emp', 'eng', 'esp', 'etc', 'eti', 'far', 'feira', 'flog', 'floripa', 'fm', 'fnd', 'fortal', 'fot', 'foz', 'fst', 'g12', 'ggf', 'goiania', 'gov', 'gru', 'imb', 'ind', 'inf', 'jab', 'jampa', 'jdf', 'joinville', 'jor', 'jus', 'leg', 'lel', 'londrina', 'macapa', 'maceio', 'manaus', 'maringa', 'mat', 'med', 'mil', 'morena', 'mp', 'mus', 'natal', 'net', 'niteroi', 'nom', 'not', 'ntr', 'odo', 'ong', 'org', 'osasco', 'palmas', 'poa', 'ppg', 'pro', 'psc', 'psi', 'pvh', 'qsl', 'radio', 'rec', 'recife', 'ribeirao', 'rio', 'riobranco', 'riopreto', 'salvador', 'sampa', 'santamaria', 'santoandre', 'saobernardo', 'saogonca', 'sjc', 'slg', 'slz', 'sorocaba', 'srv', 'taxi', 'teo', 'the', 'tmp', 'trd', 'tur', 'tv', 'udi', 'vet', 'vix', 'vlog', 'wiki', 'zlg'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bs':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bw':
+ if (['org', 'ac', 'co', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'by':
+ if (['gov', 'mil', 'com', 'of'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'nym', 'of', 'org', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ca':
+ if (['ab', 'bc', 'gc', 'mb', 'nb', 'nf', 'nl', 'ns', 'nt', 'nu', 'on', 'pe', 'qc', 'sk', 'yk'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cd':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ci':
+ if (['ac', 'asso', 'co', 'com', 'ed', 'edu', 'go', 'gouv', 'int', 'md', 'net', 'or', 'org', 'presse', 'xn--aroport-bya'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ck':
+ if (['biz', 'co', 'edu', 'gen', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cl':
+ if (['gov', 'gob', 'co', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cm':
+ if (['co', 'com', 'gov', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cn':
+ if (['ac', 'ah', 'bj', 'com', 'cq', 'edu', 'fj', 'gd', 'gov', 'gs', 'gx', 'gz', 'ha', 'hb', 'he', 'hi', 'hk', 'hl', 'hn', 'jl', 'js', 'jx', 'ln', 'mil', 'mo', 'net', 'nm', 'nx', 'org', 'qh', 'sc', 'sd', 'sh', 'sn', 'sx', 'tj', 'tw', 'xj', 'xn--55qx5d', 'xn--io0a7i', 'xn--od0alg', 'xz', 'yn', 'zj'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'co':
+ if (['arts', 'com', 'edu', 'firm', 'gov', 'info', 'int', 'mil', 'net', 'nom', 'org', 'rec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'com':
+ if (['africa', 'ar', 'br', 'cn', 'co', 'de', 'eu', 'gb', 'gr', 'hu', 'jpn', 'kr', 'mex', 'no', 'qc', 'ru', 'sa', 'se', 'uk', 'us', 'uy', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cr':
+ if (['ac', 'co', 'ed', 'fi', 'go', 'or', 'sa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cu':
+ if (['com', 'edu', 'org', 'net', 'gov', 'inf'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cw':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cy':
+ if (['ac', 'biz', 'com', 'ekloges', 'gov', 'ltd', 'name', 'net', 'org', 'parliament', 'press', 'pro', 'tm'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dm':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'do':
+ if (['art', 'com', 'edu', 'gob', 'gov', 'mil', 'net', 'org', 'sld', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dz':
+ if (['art', 'asso', 'com', 'edu', 'gov', 'net', 'org', 'pol'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ec':
+ if (['com', 'edu', 'fin', 'gob', 'gov', 'info', 'k12', 'med', 'mil', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ee':
+ if (['aip', 'com', 'edu', 'fie', 'gov', 'lib', 'med', 'org', 'pri', 'riik'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'eg':
+ if (['com', 'edu', 'eun', 'gov', 'mil', 'name', 'net', 'org', 'sci'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'es':
+ if (['com', 'nom', 'org', 'gob', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'et':
+ if (['com', 'gov', 'org', 'edu', 'net', 'biz', 'name', 'info'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fi':
+ if (wa[1] == 'aland') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fj':
+ if (['ac', 'biz', 'com', 'info', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fr':
+ if (['aeroport', 'assedic', 'asso', 'avocat', 'avoues', 'cci', 'chambagri', 'chirurgiens-dentistes', 'com', 'experts-comptables', 'geometre-expert', 'gouv', 'greta', 'huissier-justice', 'medecin', 'nom', 'notaires', 'pharmacien', 'port', 'prd', 'presse', 'tm', 'veterinaire'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ge':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'pvt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gg':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gh':
+ if (['com', 'edu', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gi':
+ if (['com', 'edu', 'gov', 'ltd', 'mod', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gl':
+ if (['co', 'com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gn':
+ if (['ac', 'com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gov':
+ if (['al', 'alabama', 'alaska', 'americansamoa', 'ar', 'arizona', 'arkansas', 'as', 'az', 'ca', 'co', 'colorado', 'ct', 'dc', 'de', 'delaware', 'ehawaii', 'fl', 'florida', 'ga', 'georgia', 'guam', 'hawaii', 'ia', 'idaho', 'il', 'illinois', 'in', 'indiana', 'iowa', 'kansas', 'kentucky', 'ks', 'ky', 'la', 'louisiana', 'ma', 'maine', 'maryland', 'mass', 'massachusetts', 'md', 'mi', 'michigan', 'minnesota', 'mississippi', 'missouri', 'mn', 'mo', 'montana', 'ms', 'mt', 'nc', 'nd', 'ne', 'nebraska', 'nevada', 'newjersey', 'newmexico', 'nh', 'nj', 'northcarolina', 'northdakota', 'nv', 'ny', 'ohio', 'ok', 'oklahoma', 'oregon', 'pa', 'pennsylvania', 'pr', 'rhodeisland', 'ri', 'sc', 'sd', 'tennessee', 'texas', 'tn', 'utah', 'vermont', 'vi', 'virginia', 'vt', 'wa', 'washington', 'wi', 'wisconsin', 'wv', 'wy', 'wyoming'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gp':
+ if (['com', 'net', 'mobi', 'edu', 'org', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gr':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'mod', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gt':
+ if (['com', 'edu', 'net', 'gob', 'org', 'mil', 'ind'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gu':
+ if (['com', 'edu', 'gov', 'guam', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gy':
+ if (['co', 'com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hk':
+ if (['com', 'edu', 'gov', 'idv', 'net', 'org', 'xn--55qx5d', 'xn--ciqpn', 'xn--gmq050i', 'xn--gmqw5a', 'xn--io0a7i', 'xn--lcvr32d', 'xn--mk0axi', 'xn--mxtq1m', 'xn--od0alg', 'xn--od0aq3b', 'xn--tn0ag', 'xn--uc0atv', 'xn--uc0ay4a', 'xn--wcvs22d', 'xn--zf0avx'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hn':
+ if (['com', 'edu', 'gob', 'net', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hr':
+ if (['iz', 'from', 'name', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ht':
+ if (['com', 'shop', 'firm', 'info', 'adult', 'net', 'pro', 'org', 'med', 'art', 'coop', 'pol', 'asso', 'edu', 'rel', 'gouv', 'perso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hu':
+ if (['2000', 'agrar', 'bolt', 'casino', 'city', 'co', 'edu', 'erotica', 'erotika', 'film', 'forum', 'games', 'gov', 'hotel', 'info', 'ingatlan', 'jogasz', 'konyvelo', 'lakas', 'media', 'mobi', 'net', 'news', 'org', 'priv', 'reklam', 'sex', 'shop', 'sport', 'suli', 'szex', 'tm', 'tozsde', 'utazas', 'video'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'id':
+ if (['ac', 'biz', 'co', 'desa', 'go', 'mil', 'my', 'net', 'or', 'ponpes', 'sch', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ie':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'il':
+ if (['ac', 'co', 'gov', 'idf', 'k12', 'muni', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'im':
+ if (['ac', 'co', 'com', 'gov', 'net', 'org', 'ro', 'tt', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'in':
+ if (['ac', 'co', 'edu', 'ernet', 'firm', 'gen', 'gov', 'ind', 'mil', 'net', 'org', 'res', 'nic'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'int':
+ if (wa[1] == 'eu') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'io':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'iq':
+ if (['gov', 'edu', 'mil', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ir':
+ if (['ac', 'co', 'gov', 'id', 'net', 'org', 'sch', 'xn--mgba3a4f16a', 'xn--mgba3a4fra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'is':
+ if (['net', 'com', 'edu', 'gov', 'org', 'int'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'it':
+ if (['abr', 'abruzzo', 'ag', 'agrigento', 'al', 'alessandria', 'alto-adige', 'altoadige', 'an', 'ancona', 'andria-barletta-trani', 'andria-trani-barletta', 'andriabarlettatrani', 'andriatranibarletta', 'ao', 'aosta', 'aosta-valley', 'aostavalley', 'aoste', 'ap', 'aq', 'aquila', 'ar', 'arezzo', 'ascoli-piceno', 'ascolipiceno', 'asti', 'at', 'av', 'avellino', 'ba', 'balsan', 'balsan-sudtirol', 'balsan-suedtirol', 'bari', 'barletta-trani-andria', 'barlettatraniandria', 'bas', 'basilicata', 'belluno', 'benevento', 'bergamo', 'bg', 'bi', 'biella', 'bl', 'bn', 'bo', 'bologna', 'bolzano', 'bolzano-altoadige', 'bozen', 'bozen-sudtirol', 'bozen-suedtirol', 'br', 'brescia', 'brindisi', 'bs', 'bt', 'bulsan', 'bulsan-sudtirol', 'bulsan-suedtirol', 'bz', 'ca', 'cagliari', 'cal', 'calabria', 'caltanissetta', 'cam', 'campania', 'campidano-medio', 'campidanomedio', 'campobasso', 'carbonia-iglesias', 'carboniaiglesias', 'carrara-massa', 'carraramassa', 'caserta', 'catania', 'catanzaro', 'cb', 'ce', 'cesena-forli', 'cesenaforli', 'ch', 'chieti', 'ci', 'cl', 'cn', 'co', 'como', 'cosenza', 'cr', 'cremona', 'crotone', 'cs', 'ct', 'cuneo', 'cz', 'dell-ogliastra', 'dellogliastra', 'edu', 'emilia-romagna', 'emiliaromagna', 'emr', 'en', 'enna', 'fc', 'fe', 'fermo', 'ferrara', 'fg', 'fi', 'firenze', 'florence', 'fm', 'foggia', 'forli-cesena', 'forlicesena', 'fr', 'friuli-v-giulia', 'friuli-ve-giulia', 'friuli-vegiulia', 'friuli-venezia-giulia', 'friuli-veneziagiulia', 'friuli-vgiulia', 'friuliv-giulia', 'friulive-giulia', 'friulivegiulia', 'friulivenezia-giulia', 'friuliveneziagiulia', 'friulivgiulia', 'frosinone', 'fvg', 'ge', 'genoa', 'genova', 'go', 'gorizia', 'gov', 'gr', 'grosseto', 'iglesias-carbonia', 'iglesiascarbonia', 'im', 'imperia', 'is', 'isernia', 'kr', 'la-spezia', 'laquila', 'laspezia', 'latina', 'laz', 'lazio', 'lc', 'le', 'lecce', 'lecco', 'li', 'lig', 'liguria', 'livorno', 'lo', 'lodi', 'lom', 'lombardia', 'lombardy', 'lt', 'lu', 'lucania', 'lucca', 'macerata', 'mantova', 'mar', 'marche', 'massa-carrara', 'massacarrara', 'matera', 'mb', 'mc', 'me', 'medio-campidano', 'mediocampidano', 'messina', 'mi', 'milan', 'milano', 'mn', 'mo', 'modena', 'mol', 'molise', 'monza', 'monza-brianza', 'monza-e-della-brianza', 'monzabrianza', 'monzaebrianza', 'monzaedellabrianza', 'ms', 'mt', 'na', 'naples', 'napoli', 'no', 'novara', 'nu', 'nuoro', 'og', 'ogliastra', 'olbia-tempio', 'olbiatempio', 'or', 'oristano', 'ot', 'pa', 'padova', 'padua', 'palermo', 'parma', 'pavia', 'pc', 'pd', 'pe', 'perugia', 'pesaro-urbino', 'pesarourbino', 'pescara', 'pg', 'pi', 'piacenza', 'piedmont', 'piemonte', 'pisa', 'pistoia', 'pmn', 'pn', 'po', 'pordenone', 'potenza', 'pr', 'prato', 'pt', 'pu', 'pug', 'puglia', 'pv', 'pz', 'ra', 'ragusa', 'ravenna', 'rc', 're', 'reggio-calabria', 'reggio-emilia', 'reggiocalabria', 'reggioemilia', 'rg', 'ri', 'rieti', 'rimini', 'rm', 'rn', 'ro', 'roma', 'rome', 'rovigo', 'sa', 'salerno', 'sar', 'sardegna', 'sardinia', 'sassari', 'savona', 'si', 'sic', 'sicilia', 'sicily', 'siena', 'siracusa', 'so', 'sondrio', 'sp', 'sr', 'ss', 'suedtirol', 'sv', 'ta', 'taa', 'taranto', 'te', 'tempio-olbia', 'tempioolbia', 'teramo', 'terni', 'tn', 'to', 'torino', 'tos', 'toscana', 'tp', 'tr', 'trani-andria-barletta', 'trani-barletta-andria', 'traniandriabarletta', 'tranibarlettaandria', 'trapani', 'trentin-sud-tirol', 'trentin-sudtirol', 'trentin-sued-tirol', 'trentin-suedtirol', 'trentino', 'trentino-a-adige', 'trentino-aadige', 'trentino-alto-adige', 'trentino-altoadige', 'trentino-s-tirol', 'trentino-stirol', 'trentino-sud-tirol', 'trentino-sudtirol', 'trentino-sued-tirol', 'trentino-suedtirol', 'trentinoa-adige', 'trentinoaadige', 'trentinoalto-adige', 'trentinoaltoadige', 'trentinos-tirol', 'trentinostirol', 'trentinosud-tirol', 'trentinosudtirol', 'trentinosued-tirol', 'trentinosuedtirol', 'trentinsud-tirol', 'trentinsudtirol', 'trentinsued-tirol', 'trentinsuedtirol', 'trento', 'treviso', 'trieste', 'ts', 'turin', 'tuscany', 'tv', 'ud', 'udine', 'umb', 'umbria', 'urbino-pesaro', 'urbinopesaro', 'va', 'val-d-aosta', 'val-daosta', 'vald-aosta', 'valdaosta', 'valle-aosta', 'valle-d-aosta', 'valle-daosta', 'valleaosta', 'valled-aosta', 'valledaosta', 'vallee-aoste', 'vallee-d-aoste', 'valleeaoste', 'valleedaoste', 'vao', 'varese', 'vb', 'vc', 'vda', 've', 'ven', 'veneto', 'venezia', 'venice', 'verbania', 'vercelli', 'verona', 'vi', 'vibo-valentia', 'vibovalentia', 'vicenza', 'viterbo', 'vr', 'vs', 'vt', 'vv', 'xn--balsan-sdtirol-nsb', 'xn--bozen-sdtirol-2ob', 'xn--bulsan-sdtirol-nsb', 'xn--cesena-forl-mcb', 'xn--cesenaforl-i8a', 'xn--forl-cesena-fcb', 'xn--forlcesena-c8a', 'xn--sdtirol-n2a', 'xn--trentin-sd-tirol-rzb', 'xn--trentin-sdtirol-7vb', 'xn--trentino-sd-tirol-c3b', 'xn--trentino-sdtirol-szb', 'xn--trentinosd-tirol-rzb', 'xn--trentinosdtirol-7vb', 'xn--trentinsd-tirol-6vb', 'xn--trentinsdtirol-nsb', 'xn--valle-aoste-ebb', 'xn--valle-d-aoste-ehb', 'xn--valleaoste-e7a', 'xn--valledaoste-ebb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'je':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jm':
+ if (['com', 'net', 'org', 'edu', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jo':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jp':
+ if (['ac', 'ad', 'aichi', 'akita', 'aomori', 'chiba', 'co', 'ed', 'ehime', 'fukui', 'fukuoka', 'fukushima', 'gifu', 'go', 'gr', 'gunma', 'hiroshima', 'hokkaido', 'hyogo', 'ibaraki', 'ishikawa', 'iwate', 'kagawa', 'kagoshima', 'kanagawa', 'kochi', 'kumamoto', 'kyoto', 'lg', 'mie', 'miyagi', 'miyazaki', 'nagano', 'nagasaki', 'nara', 'ne', 'niigata', 'oita', 'okayama', 'okinawa', 'or', 'osaka', 'saga', 'saitama', 'shiga', 'shimane', 'shizuoka', 'tochigi', 'tokushima', 'tokyo', 'tottori', 'toyama', 'wakayama', 'xn--0trq7p7nn', 'xn--1ctwo', 'xn--1lqs03n', 'xn--1lqs71d', 'xn--2m4a15e', 'xn--32vp30h', 'xn--4it168d', 'xn--4it797k', 'xn--4pvxs', 'xn--5js045d', 'xn--5rtp49c', 'xn--5rtq34k', 'xn--6btw5a', 'xn--6orx2r', 'xn--7t0a264c', 'xn--8ltr62k', 'xn--8pvr4u', 'xn--c3s14m', 'xn--d5qv7z876c', 'xn--djrs72d6uy', 'xn--djty4k', 'xn--efvn9s', 'xn--ehqz56n', 'xn--elqq16h', 'xn--f6qx53a', 'xn--k7yn95e', 'xn--kbrq7o', 'xn--klt787d', 'xn--kltp7d', 'xn--kltx9a', 'xn--klty5x', 'xn--mkru45i', 'xn--nit225k', 'xn--ntso0iqx3a', 'xn--ntsq17g', 'xn--pssu33l', 'xn--qqqt11m', 'xn--rht27z', 'xn--rht3d', 'xn--rht61e', 'xn--rny31h', 'xn--tor131o', 'xn--uist22h', 'xn--uisz3g', 'xn--uuwu58a', 'xn--vgu402c', 'xn--zbx025d', 'yamagata', 'yamaguchi', 'yamanashi'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ke':
+ if (['ac', 'co', 'go', 'info', 'me', 'mobi', 'ne', 'or', 'sc'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kg':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kh':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ki':
+ if (['edu', 'biz', 'net', 'org', 'gov', 'info', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'km':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'ass', 'com', 'coop', 'asso', 'presse', 'medecin', 'notaires', 'pharmaciens', 'veterinaire', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kn':
+ if (['net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kp':
+ if (['com', 'edu', 'gov', 'org', 'rep', 'tra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kr':
+ if (['ac', 'busan', 'cheju', 'chonbuk', 'chonnam', 'chungbuk', 'chungnam', 'co', 'daegu', 'daejeon', 'es', 'gangwon', 'go', 'gwangju', 'gyeongbuk', 'gyeonggi', 'gyeongnam', 'hs', 'incheon', 'inchon', 'jeju', 'jeonbuk', 'jeonnam', 'kangwon', 'kg', 'kwangju', 'kyongbuk', 'kyonggi', 'kyongnam', 'mil', 'ms', 'ne', 'nm', 'or', 'pe', 'pusan', 're', 'sc', 'seoul', 'taegu', 'taejon', 'ulsan', 'xn--bj0bj06e'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kw':
+ if (['com', 'edu', 'emb', 'gov', 'ind', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ky':
+ if (['edu', 'gov', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'la':
+ if (['int', 'net', 'info', 'edu', 'gov', 'per', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lc':
+ if (['com', 'net', 'co', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lk':
+ if (['ac', 'assn', 'com', 'edu', 'gov', 'grp', 'hotel', 'int', 'ltd', 'net', 'ngo', 'org', 'sch', 'soc', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lr':
+ if (['com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ls':
+ if (['ac', 'co', 'gov', 'net', 'nul', 'org', 'parliament', 'quadrant'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lt':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lv':
+ if (['asn', 'com', 'conf', 'edu', 'gov', 'id', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ly':
+ if (['com', 'edu', 'gov', 'id', 'med', 'net', 'org', 'plc', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ma':
+ if (['ac', 'co', 'gov', 'net', 'org', 'press'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mc':
+ if (['tm', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'me':
+ if (['co', 'net', 'org', 'edu', 'ac', 'gov', 'its', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mg':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'com', 'co'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mk':
+ if (['com', 'edu', 'gov', 'inf', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ml':
+ if (['com', 'edu', 'gouv', 'gov', 'net', 'org', 'presse'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mn':
+ if (['gov', 'edu', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mo':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mr':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ms':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mu':
+ if (['ac', 'co', 'com', 'gov', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'museum':
+ if (['academy', 'agriculture', 'air', 'airguard', 'alabama', 'alaska', 'amber', 'ambulance', 'american', 'americana', 'americanantiques', 'americanart', 'amsterdam', 'and', 'annefrank', 'anthro', 'anthropology', 'antiques', 'aquarium', 'arboretum', 'archaeological', 'archaeology', 'architecture', 'art', 'artanddesign', 'artcenter', 'artdeco', 'arteducation', 'artgallery', 'arts', 'artsandcrafts', 'asmatart', 'assassination', 'assisi', 'association', 'astronomy', 'atlanta', 'austin', 'australia', 'automotive', 'aviation', 'axis', 'badajoz', 'baghdad', 'bahn', 'bale', 'baltimore', 'barcelona', 'baseball', 'basel', 'baths', 'bauern', 'beauxarts', 'beeldengeluid', 'bellevue', 'bergbau', 'berkeley', 'berlin', 'bern', 'bible', 'bilbao', 'bill', 'birdart', 'birthplace', 'bonn', 'boston', 'botanical', 'botanicalgarden', 'botanicgarden', 'botany', 'brandywinevalley', 'brasil', 'bristol', 'british', 'britishcolumbia', 'broadcast', 'brunel', 'brussel', 'brussels', 'bruxelles', 'building', 'burghof', 'bus', 'bushey', 'cadaques', 'california', 'cambridge', 'can', 'canada', 'capebreton', 'carrier', 'cartoonart', 'casadelamoneda', 'castle', 'castres', 'celtic', 'center', 'chattanooga', 'cheltenham', 'chesapeakebay', 'chicago', 'children', 'childrens', 'childrensgarden', 'chiropractic', 'chocolate', 'christiansburg', 'cincinnati', 'cinema', 'circus', 'civilisation', 'civilization', 'civilwar', 'clinton', 'clock', 'coal', 'coastaldefence', 'cody', 'coldwar', 'collection', 'colonialwilliamsburg', 'coloradoplateau', 'columbia', 'columbus', 'communication', 'communications', 'community', 'computer', 'computerhistory', 'comunicações', 'contemporary', 'contemporaryart', 'convent', 'copenhagen', 'corporation', 'correios-e-telecomunicações', 'corvette', 'costume', 'countryestate', 'county', 'crafts', 'cranbrook', 'creation', 'cultural', 'culturalcenter', 'culture', 'cyber', 'cymru', 'dali', 'dallas', 'database', 'ddr', 'decorativearts', 'delaware', 'delmenhorst', 'denmark', 'depot', 'design', 'detroit', 'dinosaur', 'discovery', 'dolls', 'donostia', 'durham', 'eastafrica', 'eastcoast', 'education', 'educational', 'egyptian', 'eisenbahn', 'elburg', 'elvendrell', 'embroidery', 'encyclopedic', 'england', 'entomology', 'environment', 'environmentalconservation', 'epilepsy', 'essex', 'estate', 'ethnology', 'exeter', 'exhibition', 'family', 'farm', 'farmequipment', 'farmers', 'farmstead', 'field', 'figueres', 'filatelia', 'film', 'fineart', 'finearts', 'finland', 'flanders', 'florida', 'force', 'fortmissoula', 'fortworth', 'foundation', 'francaise', 'frankfurt', 'franziskaner', 'freemasonry', 'freiburg', 'fribourg', 'frog', 'fundacio', 'furniture', 'gallery', 'garden', 'gateway', 'geelvinck', 'gemological', 'geology', 'georgia', 'giessen', 'glas', 'glass', 'gorge', 'grandrapids', 'graz', 'guernsey', 'halloffame', 'hamburg', 'handson', 'harvestcelebration', 'hawaii', 'health', 'heimatunduhren', 'hellas', 'helsinki', 'hembygdsforbund', 'heritage', 'histoire', 'historical', 'historicalsociety', 'historichouses', 'historisch', 'historisches', 'history', 'historyofscience', 'horology', 'house', 'humanities', 'illustration', 'imageandsound', 'indian', 'indiana', 'indianapolis', 'indianmarket', 'intelligence', 'interactive', 'iraq', 'iron', 'isleofman', 'jamison', 'jefferson', 'jerusalem', 'jewelry', 'jewish', 'jewishart', 'jfk', 'journalism', 'judaica', 'judygarland', 'juedisches', 'juif', 'karate', 'karikatur', 'kids', 'koebenhavn', 'koeln', 'kunst', 'kunstsammlung', 'kunstunddesign', 'labor', 'labour', 'lajolla', 'lancashire', 'landes', 'lans', 'larsson', 'lewismiller', 'lincoln', 'linz', 'living', 'livinghistory', 'localhistory', 'london', 'losangeles', 'louvre', 'loyalist', 'lucerne', 'luxembourg', 'luzern', 'läns', 'mad', 'madrid', 'mallorca', 'manchester', 'mansion', 'mansions', 'manx', 'marburg', 'maritime', 'maritimo', 'maryland', 'marylhurst', 'media', 'medical', 'medizinhistorisches', 'meeres', 'memorial', 'mesaverde', 'michigan', 'midatlantic', 'military', 'mill', 'miners', 'mining', 'minnesota', 'missile', 'missoula', 'modern', 'moma', 'money', 'monmouth', 'monticello', 'montreal', 'moscow', 'motorcycle', 'muenchen', 'muenster', 'mulhouse', 'muncie', 'museet', 'museumcenter', 'museumvereniging', 'music', 'national', 'nationalfirearms', 'nationalheritage', 'nativeamerican', 'naturalhistory', 'naturalhistorymuseum', 'naturalsciences', 'nature', 'naturhistorisches', 'natuurwetenschappen', 'naumburg', 'naval', 'nebraska', 'neues', 'newhampshire', 'newjersey', 'newmexico', 'newport', 'newspaper', 'newyork', 'niepce', 'norfolk', 'north', 'nrw', 'nuernberg', 'nuremberg', 'nyc', 'nyny', 'oceanographic', 'oceanographique', 'omaha', 'online', 'ontario', 'openair', 'oregon', 'oregontrail', 'otago', 'oxford', 'pacific', 'paderborn', 'palace', 'paleo', 'palmsprings', 'panama', 'paris', 'pasadena', 'pharmacy', 'philadelphia', 'philadelphiaarea', 'philately', 'phoenix', 'photography', 'pilots', 'pittsburgh', 'planetarium', 'plantation', 'plants', 'plaza', 'portal', 'portland', 'portlligat', 'posts-and-telecommunications', 'preservation', 'presidio', 'press', 'project', 'public', 'pubol', 'quebec', 'railroad', 'railway', 'research', 'resistance', 'riodejaneiro', 'rochester', 'rockart', 'roma', 'russia', 'saintlouis', 'salem', 'salvadordali', 'salzburg', 'sandiego', 'sanfrancisco', 'santabarbara', 'santacruz', 'santafe', 'saskatchewan', 'satx', 'savannahga', 'schlesisches', 'schoenbrunn', 'schokoladen', 'school', 'schweiz', 'science', 'science-fiction', 'scienceandhistory', 'scienceandindustry', 'sciencecenter', 'sciencecenters', 'sciencehistory', 'sciences', 'sciencesnaturelles', 'scotland', 'seaport', 'settlement', 'settlers', 'shell', 'sherbrooke', 'sibenik', 'silk', 'ski', 'skole', 'society', 'sologne', 'soundandvision', 'southcarolina', 'southwest', 'space', 'spy', 'square', 'stadt', 'stalbans', 'starnberg', 'state', 'stateofdelaware', 'station', 'steam', 'steiermark', 'stjohn', 'stockholm', 'stpetersburg', 'stuttgart', 'suisse', 'surgeonshall', 'surrey', 'svizzera', 'sweden', 'sydney', 'tank', 'tcm', 'technology', 'telekommunikation', 'television', 'texas', 'textile', 'theater', 'time', 'timekeeping', 'topology', 'torino', 'touch', 'town', 'transport', 'tree', 'trolley', 'trust', 'trustee', 'uhren', 'ulm', 'undersea', 'university', 'usa', 'usantiques', 'usarts', 'uscountryestate', 'usculture', 'usdecorativearts', 'usgarden', 'ushistory', 'ushuaia', 'uslivinghistory', 'utah', 'uvic', 'valley', 'vantaa', 'versailles', 'viking', 'village', 'virginia', 'virtual', 'virtuel', 'vlaanderen', 'volkenkunde', 'wales', 'wallonie', 'war', 'washingtondc', 'watch-and-clock', 'watchandclock', 'western', 'westfalen', 'whaling', 'wildlife', 'williamsburg', 'windmill', 'workshop', 'xn--9dbhblg6di', 'xn--h1aegh', 'york', 'yorkshire', 'yosemite', 'youth', 'zoological', 'zoology'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mv':
+ if (['aero', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'int', 'mil', 'museum', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mw':
+ if (['ac', 'biz', 'co', 'com', 'coop', 'edu', 'gov', 'int', 'museum', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mx':
+ if (['com', 'edu', 'gob', 'net', 'ngo', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'my':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mz':
+ if (['co', 'net', 'org', 'ac', 'gov', 'edu', 'mil', 'adv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'na':
+ if (['info', 'pro', 'name', 'school', 'or', 'dr', 'us', 'mx', 'ca', 'in', 'cc', 'tv', 'ws', 'mobi', 'co', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'name':
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ break;
+ case 'nc':
+ if (['asso', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'net':
+ if (['gb', 'hu', 'in', 'jp', 'ru', 'se', 'uk', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nf':
+ if (['arts', 'com', 'firm', 'info', 'net', 'other', 'per', 'rec', 'store', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ng':
+ if (['com', 'edu', 'gov', 'i', 'mil', 'mobi', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ni':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gob', 'in', 'info', 'int', 'mil', 'net', 'nom', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nl':
+ if (wa[1] == 'bv') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'no':
+ if (['aa', 'aarborte', 'aejrie', 'afjord', 'agdenes', 'ah', 'aknoluokta', 'akrehamn', 'al', 'alaheadju', 'alesund', 'algard', 'alstahaug', 'alta', 'alvdal', 'amli', 'amot', 'andasuolo', 'andebu', 'andoy', 'ardal', 'aremark', 'arendal', 'arna', 'aseral', 'asker', 'askim', 'askoy', 'askvoll', 'asnes', 'audnedaln', 'aukra', 'aure', 'aurland', 'austevoll', 'austrheim', 'averoy', 'badaddja', 'bahcavuotna', 'bahccavuotna', 'baidar', 'bajddar', 'balat', 'balestrand', 'ballangen', 'balsfjord', 'bamble', 'bardu', 'barum', 'batsfjord', 'bearalvahki', 'beardu', 'beiarn', 'berg', 'bergen', 'berlevag', 'bievat', 'bindal', 'birkenes', 'bjarkoy', 'bjerkreim', 'bjugn', 'bodo', 'bokn', 'bomlo', 'bremanger', 'bronnoy', 'bronnoysund', 'brumunddal', 'bryne', 'bu', 'budejju', 'bygland', 'bykle', 'cahcesuolo', 'davvenjarga', 'davvesiida', 'deatnu', 'dep', 'dielddanuorri', 'divtasvuodna', 'divttasvuotna', 'donna', 'dovre', 'drammen', 'drangedal', 'drobak', 'dyroy', 'egersund', 'eid', 'eidfjord', 'eidsberg', 'eidskog', 'eidsvoll', 'eigersund', 'elverum', 'enebakk', 'engerdal', 'etne', 'etnedal', 'evenassi', 'evenes', 'farsund', 'fauske', 'fedje', 'fet', 'fetsund', 'fhs', 'finnoy', 'fitjar', 'fjaler', 'fjell', 'fla', 'flakstad', 'flatanger', 'flekkefjord', 'flesberg', 'flora', 'floro', 'fm', 'folkebibl', 'folldal', 'forde', 'forsand', 'fosnes', 'frana', 'fredrikstad', 'frei', 'frogn', 'froland', 'frosta', 'froya', 'fuoisku', 'fuossko', 'fusa', 'fylkesbibl', 'fyresdal', 'gaivuotna', 'galsa', 'gamvik', 'gangaviika', 'gaular', 'gausdal', 'giehtavuoatna', 'gildeskal', 'giske', 'gjemnes', 'gjerdrum', 'gjerstad', 'gjesdal', 'gjovik', 'gloppen', 'gol', 'gran', 'grane', 'granvin', 'gratangen', 'grimstad', 'grong', 'grue', 'gulen', 'guovdageaidnu', 'ha', 'habmer', 'hadsel', 'hagebostad', 'halden', 'halsa', 'hamar', 'hamaroy', 'hammarfeasta', 'hammerfest', 'hapmir', 'haram', 'hareid', 'harstad', 'hasvik', 'hattfjelldal', 'haugesund', 'hemne', 'hemnes', 'hemsedal', 'herad', 'hitra', 'hjartdal', 'hjelmeland', 'hl', 'hm', 'hobol', 'hof', 'hokksund', 'hol', 'hole', 'holmestrand', 'holtalen', 'honefoss', 'hornindal', 'horten', 'hoyanger', 'hoylandet', 'hurdal', 'hurum', 'hvaler', 'hyllestad', 'ibestad', 'idrett', 'inderoy', 'iveland', 'ivgu', 'jessheim', 'jevnaker', 'jolster', 'jondal', 'jorpeland', 'kafjord', 'karasjohka', 'karasjok', 'karlsoy', 'karmoy', 'kautokeino', 'kirkenes', 'klabu', 'klepp', 'kommune', 'kongsberg', 'kongsvinger', 'kopervik', 'kraanghke', 'kragero', 'kristiansand', 'kristiansund', 'krodsherad', 'krokstadelva', 'kvafjord', 'kvalsund', 'kvam', 'kvanangen', 'kvinesdal', 'kvinnherad', 'kviteseid', 'kvitsoy', 'laakesvuemie', 'lahppi', 'langevag', 'lardal', 'larvik', 'lavagis', 'lavangen', 'leangaviika', 'lebesby', 'leikanger', 'leirfjord', 'leirvik', 'leka', 'leksvik', 'lenvik', 'lerdal', 'lesja', 'levanger', 'lier', 'lierne', 'lillehammer', 'lillesand', 'lindas', 'lindesnes', 'loabat', 'lodingen', 'lom', 'loppa', 'lorenskog', 'loten', 'lund', 'lunner', 'luroy', 'luster', 'lyngdal', 'lyngen', 'malatvuopmi', 'malselv', 'malvik', 'mandal', 'marker', 'marnardal', 'masfjorden', 'masoy', 'meland', 'meldal', 'melhus', 'meloy', 'meraker', 'midsund', 'mil', 'mjondalen', 'moareke', 'modalen', 'modum', 'molde', 'mosjoen', 'moskenes', 'moss', 'mosvik', 'mr', 'muosat', 'museum', 'naamesjevuemie', 'namdalseid', 'namsos', 'namsskogan', 'nannestad', 'naroy', 'narviika', 'narvik', 'naustdal', 'navuotna', 'nesna', 'nesodden', 'nesoddtangen', 'nesseby', 'nesset', 'nissedal', 'nittedal', 'nl', 'norddal', 'nordkapp', 'nordreisa', 'notodden', 'notteroy', 'nt', 'odda', 'of', 'oksnes', 'ol', 'omasvuotna', 'oppdal', 'oppegard', 'orkanger', 'orkdal', 'orland', 'orskog', 'orsta', 'osen', 'oslo', 'osoyro', 'osteroy', 'overhalla', 'oyer', 'oygarden', 'porsanger', 'porsangu', 'porsgrunn', 'priv', 'rade', 'radoy', 'rahkkeravju', 'raholt', 'raisa', 'rakkestad', 'ralingen', 'rana', 'randaberg', 'rauma', 'rendalen', 'rennebu', 'rennesoy', 'rindal', 'ringebu', 'ringerike', 'ringsaker', 'risor', 'rissa', 'rl', 'roan', 'rodoy', 'rollag', 'romsa', 'romskog', 'roros', 'rost', 'royken', 'royrvik', 'ruovat', 'rygge', 'salangen', 'salat', 'saltdal', 'samnanger', 'sandefjord', 'sandnes', 'sandnessjoen', 'sandoy', 'sarpsborg', 'sauda', 'sauherad', 'sel', 'selbu', 'selje', 'seljord', 'sf', 'siellak', 'sigdal', 'siljan', 'sirdal', 'skanit', 'skanland', 'skaun', 'skedsmo', 'skedsmokorset', 'ski', 'skien', 'skierva', 'skiptvet', 'skjak', 'skjervoy', 'skodje', 'slattum', 'smola', 'snaase', 'snasa', 'snillfjord', 'snoasa', 'sogndal', 'sogne', 'sokndal', 'sola', 'solund', 'somna', 'songdalen', 'sorfold', 'sorreisa', 'sortland', 'sorum', 'spjelkavik', 'spydeberg', 'st', 'stange', 'stat', 'stathelle', 'stavanger', 'stavern', 'steigen', 'steinkjer', 'stjordal', 'stjordalshalsen', 'stokke', 'stord', 'stordal', 'storfjord', 'strand', 'stranda', 'stryn', 'sula', 'suldal', 'sund', 'sunndal', 'surnadal', 'svalbard', 'sveio', 'svelvik', 'sykkylven', 'tana', 'tananger', 'time', 'tingvoll', 'tinn', 'tjeldsund', 'tjome', 'tm', 'tokke', 'tolga', 'tonsberg', 'torsken', 'tr', 'trana', 'tranby', 'tranoy', 'troandin', 'trogstad', 'tromsa', 'tromso', 'trondheim', 'trysil', 'tvedestrand', 'tydal', 'tynset', 'tysfjord', 'tysnes', 'tysvar', 'ullensaker', 'ullensvang', 'ulvik', 'unjarga', 'utsira', 'va', 'vaapste', 'vadso', 'vaga', 'vagan', 'vagsoy', 'vaksdal', 'valle', 'vang', 'vanylven', 'vardo', 'varggat', 'varoy', 'vefsn', 'vega', 'vegarshei', 'vennesla', 'verdal', 'verran', 'vestby', 'vestnes', 'vestvagoy', 'vevelstad', 'vf', 'vgs', 'vik', 'vikna', 'vindafjord', 'voagat', 'volda', 'voss', 'vossevangen', 'xn--andy-ira', 'xn--asky-ira', 'xn--aurskog-hland-jnb', 'xn--avery-yua', 'xn--bdddj-mrabd', 'xn--bearalvhki-y4a', 'xn--berlevg-jxa', 'xn--bhcavuotna-s4a', 'xn--bhccavuotna-k7a', 'xn--bidr-5nac', 'xn--bievt-0qa', 'xn--bjarky-fya', 'xn--bjddar-pta', 'xn--blt-elab', 'xn--bmlo-gra', 'xn--bod-2na', 'xn--brnny-wuac', 'xn--brnnysund-m8ac', 'xn--brum-voa', 'xn--btsfjord-9za', 'xn--davvenjrga-y4a', 'xn--dnna-gra', 'xn--drbak-wua', 'xn--dyry-ira', 'xn--eveni-0qa01ga', 'xn--finny-yua', 'xn--fjord-lra', 'xn--fl-zia', 'xn--flor-jra', 'xn--frde-gra', 'xn--frna-woa', 'xn--frya-hra', 'xn--ggaviika-8ya47h', 'xn--gildeskl-g0a', 'xn--givuotna-8ya', 'xn--gjvik-wua', 'xn--gls-elac', 'xn--h-2fa', 'xn--hbmer-xqa', 'xn--hcesuolo-7ya35b', 'xn--hgebostad-g3a', 'xn--hmmrfeasta-s4ac', 'xn--hnefoss-q1a', 'xn--hobl-ira', 'xn--holtlen-hxa', 'xn--hpmir-xqa', 'xn--hyanger-q1a', 'xn--hylandet-54a', 'xn--indery-fya', 'xn--jlster-bya', 'xn--jrpeland-54a', 'xn--karmy-yua', 'xn--kfjord-iua', 'xn--klbu-woa', 'xn--koluokta-7ya57h', 'xn--krager-gya', 'xn--kranghke-b0a', 'xn--krdsherad-m8a', 'xn--krehamn-dxa', 'xn--krjohka-hwab49j', 'xn--ksnes-uua', 'xn--kvfjord-nxa', 'xn--kvitsy-fya', 'xn--kvnangen-k0a', 'xn--l-1fa', 'xn--laheadju-7ya', 'xn--langevg-jxa', 'xn--ldingen-q1a', 'xn--leagaviika-52b', 'xn--lesund-hua', 'xn--lgrd-poac', 'xn--lhppi-xqa', 'xn--linds-pra', 'xn--loabt-0qa', 'xn--lrdal-sra', 'xn--lrenskog-54a', 'xn--lt-liac', 'xn--lten-gra', 'xn--lury-ira', 'xn--mely-ira', 'xn--merker-kua', 'xn--mjndalen-64a', 'xn--mlatvuopmi-s4a', 'xn--mli-tla', 'xn--mlselv-iua', 'xn--moreke-jua', 'xn--mosjen-eya', 'xn--mot-tla', 'xn--msy-ula0h', 'xn--mtta-vrjjat-k7af', 'xn--muost-0qa', 'xn--nmesjevuemie-tcba', 'xn--nry-yla5g', 'xn--nttery-byae', 'xn--nvuotna-hwa', 'xn--oppegrd-ixa', 'xn--ostery-fya', 'xn--osyro-wua', 'xn--porsgu-sta26f', 'xn--rady-ira', 'xn--rdal-poa', 'xn--rde-ula', 'xn--rdy-0nab', 'xn--rennesy-v1a', 'xn--rhkkervju-01af', 'xn--rholt-mra', 'xn--risa-5na', 'xn--risr-ira', 'xn--rland-uua', 'xn--rlingen-mxa', 'xn--rmskog-bya', 'xn--rros-gra', 'xn--rskog-uua', 'xn--rst-0na', 'xn--rsta-fra', 'xn--ryken-vua', 'xn--ryrvik-bya', 'xn--s-1fa', 'xn--sandnessjen-ogb', 'xn--sandy-yua', 'xn--seral-lra', 'xn--sgne-gra', 'xn--skierv-uta', 'xn--skjervy-v1a', 'xn--skjk-soa', 'xn--sknit-yqa', 'xn--sknland-fxa', 'xn--slat-5na', 'xn--slt-elab', 'xn--smla-hra', 'xn--smna-gra', 'xn--snase-nra', 'xn--sndre-land-0cb', 'xn--snes-poa', 'xn--snsa-roa', 'xn--sr-aurdal-l8a', 'xn--sr-fron-q1a', 'xn--sr-odal-q1a', 'xn--sr-varanger-ggb', 'xn--srfold-bya', 'xn--srreisa-q1a', 'xn--srum-gra', 'xn--stjrdal-s1a', 'xn--stjrdalshalsen-sqb', 'xn--stre-toten-zcb', 'xn--tjme-hra', 'xn--tnsberg-q1a', 'xn--trany-yua', 'xn--trgstad-r1a', 'xn--trna-woa', 'xn--troms-zua', 'xn--tysvr-vra', 'xn--unjrga-rta', 'xn--vads-jra', 'xn--vard-jra', 'xn--vegrshei-c0a', 'xn--vestvgy-ixa6o', 'xn--vg-yiab', 'xn--vgan-qoa', 'xn--vgsy-qoa0j', 'xn--vre-eiker-k8a', 'xn--vrggt-xqad', 'xn--vry-yla5g', 'xn--yer-zna', 'xn--ygarden-p1a', 'xn--ystre-slidre-ujb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'np':
+ if (['aero', 'asia', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'jobs', 'mil', 'mobi', 'museum', 'name', 'net', 'org', 'pro', 'travel'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nr':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nz':
+ if (['ac', 'archie', 'co', 'cri', 'geek', 'gen', 'govt', 'health', 'iwi', 'kiwi', 'maori', 'mil', 'net', 'org', 'parliament', 'school', 'xn--mori-qsa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'om':
+ if (['co', 'com', 'edu', 'gov', 'med', 'museum', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'org':
+ if (wa[1] == 'eu' && wa[3] != undefined) {
+ if (['al', 'asso', 'at', 'au', 'be', 'bg', 'ca', 'cd', 'ch', 'cn', 'cy', 'cz', 'de', 'dk', 'edu', 'ee', 'es', 'fi', 'fr', 'gr', 'hr', 'hu', 'ie', 'il', 'in', 'int', 'is', 'it', 'jp', 'kr', 'lt', 'lu', 'lv', 'me', 'mk', 'mt', 'my', 'net', 'ng', 'nl', 'no', 'nz', 'pl', 'pt', 'ro', 'ru', 'se', 'si', 'sk', 'tr', 'uk', 'us'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['ae', 'eu', 'hk', 'jpn', 'js', 'us', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pa':
+ if (['abo', 'ac', 'com', 'edu', 'gob', 'ing', 'med', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pe':
+ if (['com', 'edu', 'gob', 'mil', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pf':
+ if (['com', 'org', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pg':
+ if (['com', 'net', 'ac', 'gov', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ph':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'ngo', 'i'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pk':
+ if (['biz', 'com', 'edu', 'fam', 'gob', 'gok', 'gon', 'gop', 'gos', 'gov', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pl':
+ if (['agro', 'aid', 'art', 'atm', 'augustow', 'auto', 'babia-gora', 'bedzin', 'beskidy', 'bialowieza', 'bialystok', 'bielawa', 'bieszczady', 'biz', 'boleslawiec', 'bydgoszcz', 'bytom', 'cieszyn', 'com', 'czeladz', 'czest', 'dlugoleka', 'edu', 'elblag', 'elk', 'gda', 'gdansk', 'glogow', 'gmina', 'gniezno', 'gorlice', 'gov', 'grajewo', 'gsm', 'ilawa', 'info', 'jaworzno', 'jelenia-gora', 'jgora', 'kalisz', 'karpacz', 'kartuzy', 'kaszuby', 'katowice', 'kazimierz-dolny', 'kepno', 'ketrzyn', 'klodzko', 'kobierzyce', 'kolobrzeg', 'konin', 'konskowola', 'krakow', 'kutno', 'lapy', 'lebork', 'legnica', 'lezajsk', 'limanowa', 'lodz', 'lomza', 'lowicz', 'lubin', 'lublin', 'lukow', 'mail', 'malbork', 'malopolska', 'mazowsze', 'mazury', 'media', 'miasta', 'mielec', 'mielno', 'mil', 'mragowo', 'naklo', 'net', 'ngo', 'nieruchomosci', 'nom', 'nowaruda', 'nysa', 'olawa', 'olecko', 'olkusz', 'olsztyn', 'opoczno', 'opole', 'org', 'ostroda', 'ostroleka', 'ostrowiec', 'ostrowwlkp', 'pc', 'pila', 'pisz', 'podhale', 'podlasie', 'polkowice', 'pomorskie', 'pomorze', 'powiat', 'poznan', 'priv', 'prochowice', 'pruszkow', 'przeworsk', 'pulawy', 'radom', 'rawa-maz', 'realestate', 'rel', 'rybnik', 'rzeszow', 'sanok', 'sejny', 'sex', 'shop', 'sklep', 'skoczow', 'slask', 'slupsk', 'sos', 'sosnowiec', 'stalowa-wola', 'starachowice', 'stargard', 'suwalki', 'swidnica', 'swiebodzin', 'swinoujscie', 'szczecin', 'szczytno', 'szkola', 'targi', 'tarnobrzeg', 'tgory', 'tm', 'torun', 'tourism', 'travel', 'turek', 'turystyka', 'tychy', 'ustka', 'walbrzych', 'warmia', 'warszawa', 'waw', 'wegrow', 'wielun', 'wlocl', 'wloclawek', 'wodzislaw', 'wolomin', 'wroc', 'wroclaw', 'zachpomor', 'zagan', 'zarow', 'zgora', 'zgorzelec'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pn':
+ if (['in', 'co', 'eu', 'org', 'net', 'me', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pr':
+ if (['ac', 'biz', 'com', 'edu', 'est', 'gov', 'info', 'isla', 'name', 'net', 'org', 'pro', 'prof'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pro':
+ if (['aaa', 'aca', 'acct', 'eng', 'avocat', 'bar', 'jur', 'recht', 'law', 'med', 'cpa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ps':
+ if (['edu', 'gov', 'sec', 'plo', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pt':
+ if (['com', 'edu', 'gov', 'int', 'net', 'nome', 'org', 'publ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pw':
+ if (['co', 'ne', 'or', 'ed', 'go', 'belau'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'py':
+ if (['com', 'coop', 'edu', 'mil', 'gov', 'org', 'net', 'una'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'qa':
+ if (['com', 'edu', 'sch', 'gov', 'mil', 'net', 'org', 'name'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 're':
+ if (['asso', 'com', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ro':
+ if (['arts', 'com', 'firm', 'info', 'nom', 'nt', 'org', 'rec', 'store', 'tm', 'www'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rs':
+ if (['ac', 'co', 'edu', 'gov', 'in', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ru':
+ if (['ac', 'adygeya', 'altai', 'amur', 'amursk', 'arkhangelsk', 'astrakhan', 'baikal', 'bashkiria', 'belgorod', 'bir', 'bryansk', 'buryatia', 'cap', 'cbg', 'chel', 'chelyabinsk', 'chita', 'chukotka', 'cmw', 'com', 'dagestan', 'e-burg', 'edu', 'fareast', 'gov', 'grozny', 'int', 'irkutsk', 'ivanovo', 'izhevsk', 'jamal', 'jar', 'joshkar-ola', 'k-uralsk', 'kalmykia', 'kaluga', 'kamchatka', 'karelia', 'kazan', 'kchr', 'kemerovo', 'khabarovsk', 'khakassia', 'khv', 'kirov', 'kms', 'koenig', 'komi', 'kostroma', 'krasnoyarsk', 'kuban', 'kurgan', 'kursk', 'kustanai', 'kuzbass', 'lipetsk', 'magadan', 'magnitka', 'mari', 'mari-el', 'marine', 'mil', 'mordovia', 'mos', 'mosreg', 'msk', 'murmansk', 'mytis', 'nakhodka', 'nalchik', 'net', 'nkz', 'nnov', 'norilsk', 'nov', 'novosibirsk', 'nsk', 'omsk', 'orenburg', 'org', 'oryol', 'oskol', 'palana', 'penza', 'perm', 'pp', 'pskov', 'ptz', 'pyatigorsk', 'rnd', 'rubtsovsk', 'ryazan', 'sakhalin', 'samara', 'saratov', 'simbirsk', 'smolensk', 'snz', 'spb', 'stavropol', 'stv', 'surgut', 'syzran', 'tambov', 'tatarstan', 'test', 'tlt', 'tom', 'tomsk', 'tsaritsyn', 'tsk', 'tula', 'tuva', 'tver', 'tyumen', 'udm', 'udmurtia', 'ulan-ude', 'vdonsk', 'vladikavkaz', 'vladimir', 'vladivostok', 'volgograd', 'vologda', 'voronezh', 'vrn', 'vyatka', 'yakutia', 'yamal', 'yaroslavl', 'yekaterinburg', 'yuzhno-sakhalinsk', 'zgrad'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rw':
+ if (['gov', 'net', 'edu', 'ac', 'com', 'co', 'int', 'mil', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sa':
+ if (['com', 'edu', 'gov', 'med', 'net', 'org', 'pub', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sc':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sd':
+ if (['com', 'edu', 'gov', 'info', 'med', 'net', 'org', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'se':
+ if (['a', 'ac', 'b', 'bd', 'brand', 'c', 'd', 'e', 'f', 'fh', 'fhsk', 'fhv', 'g', 'h', 'i', 'k', 'komforb', 'kommunalforbund', 'komvux', 'l', 'lanbib', 'm', 'n', 'naturbruksgymn', 'o', 'org', 'p', 'parti', 'pp', 'press', 'r', 's', 't', 'tm', 'u', 'w', 'x', 'y', 'z'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sg':
+ if (['com', 'edu', 'gov', 'idn', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sh':
+ if (['com', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sl':
+ if (['com', 'net', 'edu', 'gov', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sn':
+ if (['art', 'com', 'edu', 'gouv', 'org', 'perso', 'univ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'so':
+ if (['com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'st':
+ if (['co', 'com', 'consulado', 'edu', 'embaixada', 'gov', 'mil', 'net', 'org', 'principe', 'saotome', 'store'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sv':
+ if (['edu', 'gov', 'com', 'org', 'red', 'gob'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sy':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sz':
+ if (['co', 'ac', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'th':
+ if (['ac', 'co', 'go', 'in', 'mi', 'net', 'or'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tj':
+ if (['ac', 'aero', 'biz', 'co', 'com', 'coop', 'dyn', 'edu', 'go', 'gov', 'info', 'int', 'mil', 'museum', 'my', 'name', 'net', 'nic', 'org', 'per', 'pro', 'test', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tl':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tm':
+ if (['com', 'co', 'org', 'net', 'nom', 'gov', 'mil', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tn':
+ if (['agrinet', 'com', 'defense', 'edunet', 'ens', 'fin', 'gov', 'ind', 'info', 'intl', 'mincom', 'nat', 'net', 'org', 'perso', 'rnrt', 'rns', 'rnu', 'tourism', 'turen'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'to':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tr':
+ if (['av', 'bbs', 'bel', 'biz', 'com', 'dr', 'edu', 'gen', 'gov', 'info', 'k12', 'kep', 'mil', 'name', 'nc', 'net', 'org', 'pol', 'tel', 'tv', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tt':
+ if (['co', 'com', 'org', 'net', 'biz', 'info', 'pro', 'int', 'coop', 'jobs', 'mobi', 'travel', 'museum', 'aero', 'name', 'gov', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tw':
+ if (['club', 'com', 'ebiz', 'edu', 'game', 'gov', 'idv', 'mil', 'net', 'org', 'xn--czrw28b', 'xn--uc0atv', 'xn--zf0ao64a'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tz':
+ if (['ac', 'co', 'go', 'hotel', 'info', 'me', 'mil', 'mobi', 'ne', 'or', 'sc', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ua':
+ if (['at', 'cherkassy', 'cherkasy', 'chernigov', 'chernihiv', 'chernivtsi', 'chernovtsy', 'ck', 'cn', 'co', 'com', 'cr', 'crimea', 'cv', 'dn', 'dnepropetrovsk', 'dnipropetrovsk', 'dominic', 'donetsk', 'dp', 'edu', 'gov', 'if', 'in', 'ivano-frankivsk', 'kh', 'kharkiv', 'kharkov', 'kherson', 'khmelnitskiy', 'khmelnytskyi', 'kiev', 'kirovograd', 'km', 'kr', 'krym', 'ks', 'kv', 'kyiv', 'lg', 'lt', 'lugansk', 'lutsk', 'lv', 'lviv', 'mk', 'mykolaiv', 'net', 'nikolaev', 'od', 'odesa', 'odessa', 'org', 'pl', 'poltava', 'pp', 'rivne', 'rovno', 'rv', 'sb', 'sebastopol', 'sevastopol', 'sm', 'sumy', 'te', 'ternopil', 'uz', 'uzhgorod', 'vinnica', 'vinnytsia', 'vn', 'volyn', 'yalta', 'zaporizhzhe', 'zaporizhzhia', 'zhitomir', 'zhytomyr', 'zp', 'zt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ug':
+ if (['co', 'ac', 'sc', 'go', 'ne', 'or', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uk':
+ if (['ac', 'bl', 'british-library', 'co', 'gov', 'govt', 'jcpc', 'jet', 'judiciary', 'lea', 'ltd', 'me', 'mil', 'mod', 'net', 'nhs', 'nic', 'nls', 'org', 'orgn', 'parliament', 'plc', 'police', 'royal', 'sch', 'supremecourt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'us':
+ if (['aa', 'ae', 'ak', 'al', 'ap', 'ar', 'as', 'az', 'ca', 'cm', 'co', 'ct', 'cz', 'dc', 'de', 'dni', 'fed', 'fl', 'fm', 'ga', 'gu', 'hi', 'ia', 'id', 'il', 'in', 'isa', 'kids', 'ks', 'ky', 'la', 'ma', 'md', 'me', 'mh', 'mi', 'mn', 'mo', 'mp', 'ms', 'mt', 'nb', 'nc', 'nd', 'ne', 'nh', 'nj', 'nm', 'nsn', 'nv', 'ny', 'oh', 'ok', 'or', 'pa', 'pi', 'pr', 'pw', 'ri', 'sc', 'sd', 'tn', 'tt', 'tx', 'ut', 'va', 'vi', 'vt', 'wa', 'wi', 'wv', 'wy'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uy':
+ if (['com', 'edu', 'gub', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uz':
+ if (['co', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vc':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 've':
+ if (['arts', 'co', 'com', 'e12', 'edu', 'firm', 'gob', 'gov', 'info', 'int', 'mil', 'net', 'org', 'radio', 'rec', 'store', 'tec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vi':
+ if (['co', 'org', 'com', 'net', 'k12'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vn':
+ if (['ac', 'biz', 'com', 'edu', 'gov', 'health', 'info', 'int', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vu':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ws':
+ if (['org', 'gov', 'edu', 'com', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--90a3ac':
+ if (['xn--o1ac', 'xn--c1avg', 'xn--90azh', 'xn--d1at', 'xn--o1ach', 'xn--80au'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--j6w193g':
+ if (['xn--55qx5d', 'xn--wcvs22d', 'xn--mxtq1m', 'xn--gmqw5a', 'xn--od0alg', 'xn--uc0atv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--o3cw4h':
+ if (['xn--12c1fe0br', 'xn--12co0c3b4eva', 'xn--h3cuzk1di', 'xn--o3cyx2a', 'xn--m3ch0j3a', 'xn--12cfi8ixb8l'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'za':
+ if (['ac', 'agric', 'alt', 'bourse', 'city', 'co', 'cybernet', 'db', 'edu', 'gov', 'grondar', 'iaccess', 'imt', 'inca', 'landesign', 'law', 'mil', 'net', 'ngo', 'nis', 'nom', 'olivetti', 'org', 'pix', 'school', 'tm', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zm':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gov', 'info', 'mil', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zw':
+ if (['co', 'ac', 'org', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ }
+ return wa[1] + '.' + wa[0];
+}
+function update_icon(tid, url) {
+ let _nu = new URL(url);
+ let cf_hostname = _nu.hostname;
+ if ((_nu.protocol != 'https:' && _nu.protocol != 'http:') || cf_hostname.length < 1) {
+ browser.browserAction.setIcon({
+ tabId: tid,
+ path: cf_flag_ok
+ });
+ return;
+ }
+ cf_hostname = get_realdomain(cf_hostname);
+ if (my_cf_ignore.includes(cf_hostname) || force_whitelist.includes(cf_hostname)) {
+ browser.browserAction.setIcon({
+ tabId: tid,
+ path: cf_flag_ok
+ });
+ return;
+ }
+ if (my_cf_collection.includes(cf_hostname)) {
+ browser.browserAction.setIcon({
+ tabId: tid,
+ path: cf_flag_ng
+ });
+ return;
+ }
+ browser.browserAction.setIcon({
+ tabId: tid,
+ path: cf_flag_ok
+ });
+ return;
+}
+function tell_me(ok, mgT, mgD) {
+ if (ok) {
+ browser.notifications.clear(infobox);
+ browser.notifications.create(infobox, {
+ 'type': 'basic',
+ 'iconUrl': browser.runtime.getURL('icons/cf_1.png'),
+ 'title': mgT + ' [' + ((new Date()).toLocaleString()) + ']',
+ 'message': mgD
+ });
+ }
+}
+browser.webRequest.onHeadersReceived.addListener(function (wr) {
+ if (wr.type != 'main_frame' && (my_action == 2 || my_action == 4)) {
+ return;
+ }
+ let _a = document.createElement('a');
+ _a.setAttribute('href', wr.url);
+ let wr_protocol = _a.protocol,
+ wr_hostname = _a.hostname;
+ _a = null;
+ if ((wr_protocol != 'http:' && wr_protocol != 'https:') || wr_hostname.length < 4) {
+ return;
+ }
+ wr_hostname = get_realdomain(wr_hostname);
+ if (my_action == 1) {
+ if (wr.type == 'main_frame') {
+ return;
+ }
+ if (wr.documentUrl) {
+ let _b = document.createElement('a');
+ _b.setAttribute('href', wr.documentUrl);
+ if (wr_hostname == get_realdomain(_b.hostname)) {
+ return;
+ }
+ _b = null;
+ }
+ }
+ if (my_cf_ignore.includes(wr_hostname) || force_whitelist.includes(wr_hostname)) {
+ return;
+ }
+ let cf_is = (my_cf_collection.includes(wr_hostname)) ? true : false;
+ if (!cf_is) {
+ let cf_headers = wr.responseHeaders,
+ cf_v_name, cf_v_value;
+ for (let i = 0; i < cf_headers.length; i++) {
+ cf_v_name = cf_headers[i]['name'].toLowerCase();
+ cf_v_value = (cf_headers[i]['value'] != undefined) ? cf_headers[i]['value'].toLowerCase() : '';
+ if (cf_v_name == 'cf-ray' || cf_v_name == 'cf-cache-status' || cf_v_name == 'cf-chl-bypass') {
+ cf_is = true;
+ break;
+ }
+ if (cf_v_name == 'server' && cf_v_value.includes('cloudflare')) {
+ cf_is = true;
+ break;
+ }
+ if (cf_v_name == 'set-cookie' && cf_v_value.includes('_cfduid')) {
+ cf_is = true;
+ break;
+ }
+ }
+ }
+ if (cf_is) {
+ if (my_cf_collection.length > 500) {
+ my_cf_collection.splice(0, 50);
+ }
+ if (!my_cf_collection.includes(wr_hostname)) {
+ my_cf_collection.push(wr_hostname);
+ browser.storage.local.set({
+ 'collection': my_cf_collection.join("\n")
+ });
+ }
+ console.log('BCMA: Block Cloudflare RH', wr_hostname);
+ if (my_action == 0 || my_action == 1) {
+ tell_me(my_nfo_cfd, trans[my_nfo_lang]['detemi'], trans[my_nfo_lang]['virus'] + wr_hostname);
+ if (wr.type == 'image') {
+ return {
+ redirectUrl: 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAAACwAAAAAAQABAAACAkQBADs='
+ };
+ } else {
+ return {
+ cancel: true
+ };
+ }
+ }
+ if (my_action == 2) {
+ tell_me(my_nfo_alu, trans[my_nfo_lang]['cflrmi'], trans[my_nfo_lang]['redir'] + wr_hostname);
+ return {
+ redirectUrl: 'https://web.archive.org/web/' + wr.url
+ };
+ }
+ if (my_action == 4) {
+ tell_me(my_nfo_alu, trans[my_nfo_lang]['cflrmi'], trans[my_nfo_lang]['redir'] + wr_hostname);
+ return {
+ redirectUrl: my_customurl.replace('%%URL%%', wr.url)
+ };
+ }
+ }
+ return;
+}, {
+ urls: ["http://*/*", "https://*/*"]
+}, ["blocking", "responseHeaders"]);
+browser.webRequest.onBeforeRequest.addListener(function (wr) {
+ if (wr.type != 'main_frame' && (my_action == 2 || my_action == 4)) {
+ return;
+ }
+ let _a = document.createElement('a');
+ _a.setAttribute('href', wr.url);
+ let wr_protocol = _a.protocol,
+ wr_hostname = _a.hostname;
+ _a = null;
+ if ((wr_protocol != 'http:' && wr_protocol != 'https:') || wr_hostname.length < 4) {
+ return;
+ }
+ wr_hostname = get_realdomain(wr_hostname);
+ if (my_action == 1) {
+ if (wr.type == 'main_frame') {
+ return;
+ }
+ if (wr.documentUrl) {
+ let _b = document.createElement('a');
+ _b.setAttribute('href', wr.documentUrl);
+ if (wr_hostname == get_realdomain(_b.hostname)) {
+ return;
+ }
+ _b = null;
+ }
+ }
+ if (my_cf_ignore.includes(wr_hostname) || force_whitelist.includes(wr_hostname)) {
+ return;
+ }
+ let cf_is = (my_cf_collection.includes(wr_hostname)) ? true : false;
+ if (cf_is) {
+ console.log('BCMA: Block Cloudflare BR', wr_hostname);
+ if (my_action == 0 || my_action == 1) {
+ tell_me(my_nfo_cfd, trans[my_nfo_lang]['detemi'], trans[my_nfo_lang]['virus'] + wr_hostname);
+ if (wr.type == 'image') {
+ return {
+ redirectUrl: 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAAACwAAAAAAQABAAACAkQBADs='
+ };
+ } else {
+ return {
+ cancel: true
+ };
+ }
+ }
+ if (my_action == 2) {
+ tell_me(my_nfo_alu, trans[my_nfo_lang]['cflrmi'], trans[my_nfo_lang]['redir'] + wr_hostname);
+ return {
+ redirectUrl: 'https://web.archive.org/web/' + wr.url
+ };
+ }
+ if (my_action == 4) {
+ tell_me(my_nfo_alu, trans[my_nfo_lang]['cflrmi'], trans[my_nfo_lang]['redir'] + wr_hostname);
+ return {
+ redirectUrl: my_customurl.replace('%%URL%%', wr.url)
+ };
+ }
+ }
+ return;
+}, {
+ urls: ["http://*/*", "https://*/*"]
+}, ["blocking"]);
+browser.notifications.clear(infobox);
+browser.storage.local.get(null).then((d) => {
+ my_cf_collection = (d.collection || '').split("\n").filter(v => v != '');
+ my_cf_ignore = (d.ignore || '').split("\n").filter(v => v != '');
+ my_action = (d.action != undefined) ? Number(d.action) : 2;
+ my_customurl = (d.customurl != undefined) ? d.customurl : def_customurl;
+ my_nfo_alu = (d.nfoau == 'n') ? false : true;
+ my_nfo_cfd = (d.nfocf == 'n') ? false : true;
+ my_nfo_lang = d.ul || 'eo';
+});
+browser.runtime.onMessage.addListener(function (a, b, c) {
+ if (a[0] == 'cf') {
+ c([JSON.stringify(my_cf_collection), JSON.stringify(my_cf_ignore), my_action, my_customurl, [!my_nfo_alu, !my_nfo_cfd], my_nfo_lang]);
+ }
+ if (a[0] == 'ul') {
+ my_nfo_lang = a[1];
+ browser.storage.local.set({
+ 'ul': a[1]
+ });
+ }
+ if (a[0] == 'dy') {
+ my_cf_collection = [];
+ browser.storage.local.set({
+ 'collection': ''
+ });
+ }
+ if (a[0] == 'ta') {
+ if (['0', '1', '2', '3', '4'].includes(a[1])) {
+ my_action = Number(a[1]);
+ browser.storage.local.set({
+ 'action': a[1]
+ });
+ }
+ }
+ if (a[0] == 'nnf') {
+ if (a[1] == '1') {
+ my_nfo_alu = !a[2];
+ browser.storage.local.set({
+ 'nfoau': (a[2]) ? 'n' : 'y'
+ });
+ }
+ if (a[1] == '2') {
+ my_nfo_cfd = !a[2];
+ browser.storage.local.set({
+ 'nfocf': (a[2]) ? 'n' : 'y'
+ });
+ }
+ }
+ if (a[0] == 'ig') {
+ my_cf_ignore = a[1].sort().filter(v => v != '');
+ browser.storage.local.set({
+ 'ignore': my_cf_ignore.join("\n")
+ });
+ }
+ if (a[0] == 'au') {
+ my_customurl = (/^http(|s):\/\/([a-z0-9.-]{4,})\/(.*)%%URL%%(.*)$/.test(a[1])) ? a[1] : def_customurl;
+ browser.storage.local.set({
+ 'customurl': my_customurl
+ });
+ }
+ return true;
+});
+browser.tabs.onActivated.addListener(function (i) {
+ browser.tabs.query({
+ active: true,
+ currentWindow: true
+ }).then(function (t) {
+ if (t[0]) {
+ update_icon(t[0].id, t[0].url);
+ }
+ });
+});
+browser.tabs.onUpdated.addListener(function (a, b, t) {
+ if (t.active) {
+ update_icon(t.id, t.url);
+ }
+});
+browser.webNavigation.onDOMContentLoaded.addListener(function (d) {
+ browser.tabs.query({
+ active: true,
+ currentWindow: true
+ }).then(function (t) {
+ if (t[0]) {
+ update_icon(t[0].id, t[0].url);
+ }
+ });
+});
+browser.webNavigation.onCompleted.addListener(function (d) {
+ browser.tabs.query({
+ active: true,
+ currentWindow: true
+ }).then(function (t) {
+ if (t[0]) {
+ update_icon(t[0].id, t[0].url);
+ }
+ });
+});
+browser.browserAction.onClicked.addListener(() => {
+ browser.runtime.openOptionsPage();
+});
\ No newline at end of file
diff --git a/addons/bcmaFX/cg.html b/addons/bcmaFX/cg.html
new file mode 100644
index 000000000..e1a06126a
--- /dev/null
+++ b/addons/bcmaFX/cg.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ 📢
+
+
+
+
+
+
+ 🖇
+
+
+
+
+ 🔔
+
+
+
+ 📒
+
+
+
+
+
+ 🏳
+
+
+
+
+ 💬 Internacio
+
+
+ 📚
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/bcmaFX/cg.js b/addons/bcmaFX/cg.js
new file mode 100644
index 000000000..74a0492b2
--- /dev/null
+++ b/addons/bcmaFX/cg.js
@@ -0,0 +1,111 @@
+document.addEventListener('DOMContentLoaded', () => {
+ browser.runtime.sendMessage(['cf']).then((r) => {
+ fetch('i18n/' + r[5] + '.json', {
+ method: 'GET'
+ }).then(j => j.json()).then(j => {
+ document.querySelectorAll('span[transk]').forEach(x => {
+ x.innerText = j[x.getAttribute('transk')];
+ });
+ });
+ document.getElementById('t').value = JSON.parse(r[0]).join("\n");
+ document.getElementById('g').value = JSON.parse(r[1]).join("\n");
+ document.getElementById('vau').value = r[3];
+ document.getElementById('nnf1').checked = r[4][0];
+ document.getElementById('nnf2').checked = r[4][1];
+ switch (r[2]) {
+ case 0:
+ document.getElementById('ta0').checked = true;
+ document.getElementById('ta1').checked = false;
+ document.getElementById('ta2').checked = false;
+ document.getElementById('ta3').checked = false;
+ document.getElementById('ta4').checked = false;
+ break;
+ case 1:
+ document.getElementById('ta0').checked = false;
+ document.getElementById('ta1').checked = true;
+ document.getElementById('ta2').checked = false;
+ document.getElementById('ta3').checked = false;
+ document.getElementById('ta4').checked = false;
+ break;
+ case 3:
+ document.getElementById('ta0').checked = false;
+ document.getElementById('ta1').checked = false;
+ document.getElementById('ta2').checked = false;
+ document.getElementById('ta3').checked = true;
+ document.getElementById('ta4').checked = false;
+ break;
+ case 4:
+ document.getElementById('ta0').checked = false;
+ document.getElementById('ta1').checked = false;
+ document.getElementById('ta2').checked = false;
+ document.getElementById('ta3').checked = false;
+ document.getElementById('ta4').checked = true;
+ break;
+ default:
+ document.getElementById('ta0').checked = false;
+ document.getElementById('ta1').checked = false;
+ document.getElementById('ta2').checked = true;
+ document.getElementById('ta3').checked = false;
+ document.getElementById('ta4').checked = false;
+ break;
+ }
+ });
+ document.getElementById('aus').addEventListener('click', function () {
+ browser.runtime.sendMessage(['au', document.getElementById('vau').value]);
+ });
+ document.getElementById('exp').addEventListener('click', () => {
+ browser.tabs.create({
+ active: true,
+ url: 'about:blank'
+ }).then(function (t) {
+ browser.tabs.executeScript(t.id, {
+ matchAboutBlank: true,
+ code: "document.documentElement.innerHTML=''+atob('" + btoa(document.getElementById('t').value) + "')+'
';window.stop();"
+ });
+ });
+ });
+ document.getElementById('clr').addEventListener('click', () => {
+ browser.runtime.sendMessage(['dy']);
+ document.getElementById('t').value = '';
+ });
+ document.getElementById('nnf1').addEventListener('click', function () {
+ browser.runtime.sendMessage(['nnf', '1', (this.checked ? true : false)]);
+ });
+ document.getElementById('nnf2').addEventListener('click', function () {
+ browser.runtime.sendMessage(['nnf', '2', (this.checked ? true : false)]);
+ });
+ document.getElementById('ta0').addEventListener('click', function () {
+ if (this.checked) {
+ browser.runtime.sendMessage(['ta', '0']);
+ }
+ });
+ document.getElementById('ta1').addEventListener('click', function () {
+ if (this.checked) {
+ browser.runtime.sendMessage(['ta', '1']);
+ }
+ });
+ document.getElementById('ta2').addEventListener('click', function () {
+ if (this.checked) {
+ browser.runtime.sendMessage(['ta', '2']);
+ }
+ });
+ document.getElementById('ta3').addEventListener('click', function () {
+ if (this.checked) {
+ browser.runtime.sendMessage(['ta', '3']);
+ }
+ });
+ document.getElementById('ta4').addEventListener('click', function () {
+ if (this.checked) {
+ browser.runtime.sendMessage(['ta', '4']);
+ }
+ });
+ document.getElementById('ign').addEventListener('click', function () {
+ browser.runtime.sendMessage(['ig', document.getElementById('g').value.split("\n")]);
+ });
+ document.getElementById('myul').addEventListener('change', () => {
+ if (document.getElementById('myul').value != '') {
+ browser.runtime.sendMessage(['ul', document.getElementById('myul').value]);
+ location.reload(true);
+ }
+ });
+});
\ No newline at end of file
diff --git a/addons/bcmaFX/manifest.json b/addons/bcmaFX/manifest.json
new file mode 100644
index 000000000..1db614ea5
--- /dev/null
+++ b/addons/bcmaFX/manifest.json
@@ -0,0 +1,44 @@
+{
+ "manifest_version": 2,
+ "name": "Bloku Cloudflaron MITM-Atakon",
+ "description": "Submetiĝu al tutmonda gvatado aŭ rezistu. La elekto estas via.",
+ "version": "1.0.3.6",
+ "homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
+ "author": "Ss",
+ "permissions": [
+ "",
+ "activeTab",
+ "tabs",
+ "webRequest",
+ "webRequestBlocking",
+ "webNavigation",
+ "notifications",
+ "storage",
+ "unlimitedStorage"
+ ],
+ "icons": {
+ "72": "icons/72.png"
+ },
+ "background": {
+ "scripts": [
+ "cf.js"
+ ]
+ },
+ "options_ui": {
+ "browser_style": true,
+ "page": "cg.html"
+ },
+ "browser_action": {
+ "browser_style": true,
+ "default_icon": {
+ "32": "icons/cf_0.png"
+ }
+ },
+ "applications": {
+ "gecko": {
+ "id": "bcma@searxes.eu.org",
+ "strict_min_version": "68.0",
+ "update_url": "https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=bcma"
+ }
+ }
+}
\ No newline at end of file
diff --git a/addons/isattlinkCR/README.md b/addons/isattlinkCR/README.md
new file mode 100644
index 000000000..7abbc8ad3
--- /dev/null
+++ b/addons/isattlinkCR/README.md
@@ -0,0 +1,2 @@
+- [More Information / Download](../../subfiles/about.isat.md)
+- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
\ No newline at end of file
diff --git a/addons/isattlinkCR/bg.js b/addons/isattlinkCR/bg.js
new file mode 100644
index 000000000..92519f5c8
--- /dev/null
+++ b/addons/isattlinkCR/bg.js
@@ -0,0 +1,267 @@
+let localUse = false,
+ localDB = [],
+ timr, memcache = {},
+ forcePurge = false,
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
+/*
+chrome.storage.local.get(['cep'], g => {
+ if (g.cep == 'y') {
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
+ } else {
+ if (g.cep != 'n') {
+ chrome.storage.local.set({
+ 'cep': 'n'
+ });
+ fetch('http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ok.php', {
+ method: 'GET',
+ mode: 'cors'
+ }).then(r => r.text()).then(r => {
+ if (r == 'ok') {
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
+ chrome.storage.local.set({
+ 'cep': 'y'
+ });
+ }
+ }).catch(() => {});
+ }
+ }
+});
+*/
+function is_hostile(f) {
+ if (localUse) {
+ return new Promise((g, b) => {
+ g(localDB.includes(f) ? true : false);
+ });
+ }
+ return new Promise((g, b) => {
+ fetch(apiurl, {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ body: 'f=' + f
+ }).then(r => r.json()).then(r => {
+ if (r[0]) {
+ g(r[1]);
+ } else {
+ b();
+ }
+ }).catch(b);
+ });
+}
+function i_know_you(f) {
+ if (!/^([a-z0-9_.-]{1,255})\.([a-z]{2,80})$/.test(f)) {
+ return new Promise((g, b) => {
+ g(200);
+ });
+ }
+ let m;
+ if (memcache[f] != undefined) {
+ m = memcache[f];
+ return new Promise((g, b) => {
+ g(m);
+ });
+ }
+ return new Promise((g, b) => {
+ chrome.storage.local.get([f], (ff) => {
+ if (ff[f]) {
+ if (ff[f] == 'y') {
+ memcache[f] = 1;
+ g(1);
+ } else {
+ memcache[f] = -1;
+ g(-1);
+ }
+ } else {
+ g(0);
+ }
+ });
+ });
+}
+function forget_cache() {
+ chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], g => {
+ chrome.storage.local.clear();
+ memcache = {};
+ chrome.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ chrome.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ chrome.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ chrome.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ chrome.storage.local.set({
+ 'lastV': (chrome.runtime.getManifest()).version
+ });
+ });
+ clearTimeout(timr);
+ timr = setTimeout(function () {
+ forget_cache();
+ }, 1814400000);
+}
+chrome.storage.local.get(['lastU', 'lastV', 'ldb', 'opd'], g => {
+ localUse = (g.opd == 'n') ? true : false;
+ localDB = JSON.parse(g.ldb || '[]');
+ if (g.lastU) {
+ if (Math.abs(Math.round((new Date()).getTime() / 1000) - g.lastU) > 1814400) {
+ chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], g => {
+ chrome.storage.local.clear();
+ memcache = {};
+ chrome.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ chrome.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ chrome.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ chrome.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ });
+ }
+ } else {
+ chrome.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ }
+ let nowVer = (chrome.runtime.getManifest()).version;
+ if (g.lastV != nowVer || forcePurge) {
+ chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], g => {
+ chrome.storage.local.clear();
+ memcache = {};
+ chrome.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ chrome.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ chrome.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ chrome.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ chrome.storage.local.set({
+ 'lastV': (chrome.runtime.getManifest()).version
+ });
+ });
+ }
+ timr = setTimeout(function () {
+ forget_cache();
+ }, 1814400000);
+});
+chrome.runtime.onMessage.addListener((requests, sender, sendResponse) => {
+ if (requests) {
+ if (requests === 'clear') {
+ forget_cache();
+ return;
+ }
+ if (requests.indexOf('dbmode,') === 0) {
+ switch (requests) {
+ case 'dbmode,s1':
+ chrome.storage.local.set({
+ 'opd': 'y'
+ });
+ localUse = false;
+ break;
+ case 'dbmode,s0':
+ chrome.storage.local.set({
+ 'opd': 'n'
+ });
+ localUse = true;
+ break;
+ case 'dbmode,cl':
+ chrome.storage.local.set({
+ 'ldb': '[]'
+ });
+ localDB = [];
+ break;
+ case 'dbmode,rl':
+ chrome.storage.local.get(['ldb'], (g) => {
+ localDB = JSON.parse(g.ldb || '[]');
+ });
+ break;
+ }
+ return;
+ }
+ requests.forEach(request => {
+ i_know_you(request).then((r) => {
+ if (r == 1 || r == -1) {
+ chrome.tabs.sendMessage(sender.tab.id, [request, ((r == 1) ? true : false)]);
+ }
+ if (r == 0) {
+ is_hostile(request).then((a) => {
+ if (a) {
+ chrome.storage.local.set({
+ [request]: 'y'
+ });
+ } else {
+ chrome.storage.local.set({
+ [request]: 'n'
+ });
+ }
+ if (Object.keys(memcache).length > 650) {
+ memcache = {};
+ }
+ chrome.tabs.sendMessage(sender.tab.id, [request, a]);
+ }, () => {
+ chrome.tabs.sendMessage(sender.tab.id, [request, false]);
+ });
+ }
+ }, () => {});
+ });
+ }
+ return;
+});
\ No newline at end of file
diff --git a/addons/isattlinkCR/cfg.html b/addons/isattlinkCR/cfg.html
new file mode 100644
index 000000000..d43b1f425
--- /dev/null
+++ b/addons/isattlinkCR/cfg.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ [ → Ss API ]
+ [ → ]
+
+ 💬
+
+
+
+
+
+
+ : ?
+ : ?
+ : ?
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/isattlinkCR/cg.js b/addons/isattlinkCR/cg.js
new file mode 100644
index 000000000..9e5462c36
--- /dev/null
+++ b/addons/isattlinkCR/cg.js
@@ -0,0 +1,90 @@
+document.addEventListener('DOMContentLoaded', () => {
+ chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'mul', 'opd'], g => {
+ document.getElementById('ign1').checked = (g.ign1 == 'y') ? true : false;
+ document.getElementById('obs').checked = (g.obs == 'y') ? true : false;
+ document.getElementById('alt').checked = (g.alt == 'y') ? true : false;
+ document.getElementById('opon').checked = (g.opd != 'n') ? true : false;
+ document.getElementById('opoff').checked = (g.opd == 'n') ? true : false;
+ let ul = g.mul || 'eo';
+ fetch('i18n/' + ul + '.json', {
+ method: 'GET'
+ }).then(j => j.json()).then(j => {
+ document.querySelectorAll('span[tek]').forEach(x => {
+ x.innerText = j[x.getAttribute('tek')];
+ });
+ });
+ document.body.style.display = 'block';
+ });
+});
+document.getElementById('myul').addEventListener('change', () => {
+ let xul = document.getElementById('myul').value;
+ if (xul.length == 2) {
+ chrome.storage.local.set({
+ 'mul': xul
+ });
+ location.reload(true);
+ }
+});
+document.getElementById('ign1').addEventListener('click', () => {
+ chrome.storage.local.set({
+ 'ign1': (document.getElementById('ign1').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('obs').addEventListener('click', () => {
+ chrome.storage.local.set({
+ 'obs': (document.getElementById('obs').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('alt').addEventListener('click', () => {
+ chrome.storage.local.set({
+ 'alt': (document.getElementById('alt').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('opon').addEventListener('click', () => {
+ chrome.runtime.sendMessage('dbmode,s1', () => {
+ location.reload();
+ });
+});
+document.getElementById('opoff').addEventListener('click', () => {
+ chrome.runtime.sendMessage('dbmode,s0', () => {
+ location.reload();
+ });
+});
+document.getElementById('crs').addEventListener('click', () => {
+ chrome.runtime.sendMessage('clear', () => {
+ location.reload();
+ });
+});
+document.getElementById('sms').addEventListener('click', () => {
+ document.getElementById('smsa').style.display = 'none';
+ chrome.storage.local.get(null, g => {
+ let iY = 0,
+ iN = 0,
+ iT, tmp, akd = [];
+ Object.keys(g).forEach(a => {
+ if (!['ign1', 'obs', 'dbg', 'alt', 'lastU', 'lastV', 'cep', 'mul', 'opd', 'ldb'].includes(a) && (g[a] == 'y' || g[a] == 'n')) {
+ if (!akd.includes(a)) {
+ akd.push(a);
+ if (g[a] == 'y') {
+ iY++;
+ } else {
+ iN++;
+ }
+ }
+ }
+ });
+ iT = iY + iN;
+ if (iT > 0) {
+ tmp = (iY * 100 / iT).toFixed(1);
+ document.getElementById('viry').innerText = iY + ' (' + tmp + '%)';
+ tmp = (iN * 100 / iT).toFixed(1);
+ document.getElementById('virn').innerText = iN + ' (' + tmp + '%)';
+ document.getElementById('viro').innerText = (iY + iN);
+ } else {
+ document.getElementById('viry').innerText = 0;
+ document.getElementById('virn').innerText = 0;
+ document.getElementById('viro').innerText = 0;
+ }
+ document.getElementById('smsb').style.display = 'inline';
+ });
+});
\ No newline at end of file
diff --git a/addons/isattlinkCR/cs.js b/addons/isattlinkCR/cs.js
new file mode 100644
index 000000000..92b833e20
--- /dev/null
+++ b/addons/isattlinkCR/cs.js
@@ -0,0 +1,1126 @@
+if (document.body && !['ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org'].includes(location.hostname)) {
+ let cs = (function () {
+ let s = document.createElement('style');
+ document.head.appendChild(s);
+ return s.sheet;
+ })();
+ if (cs) {
+ cs.insertRule("a[data-iatt=y]{cursor:not-allowed !important;text-decoration-line:line-through !important;text-decoration-color:red !important;text-decoration-style:double !important}", 0);
+ cs.insertRule("a[data-iatt=y]::after{content:'[\\1F6A8]';font-weight:bold !important;color:red !important;display:inline-block !important}", 1);
+ cs.insertRule("a[data-iatt=y]:hover::after{content:'[\\1F622]'}", 2);
+ cs.insertRule("a[data-iatt=y]:hover{color:red !important}", 3);
+ cs.insertRule("a[data-iatt=y][data-mitm=y]{border:1px dotted purple !important}", 4);
+ }
+ chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt'], g => {
+ function get_realdomain(w) {
+ let wa = w.split('.');
+ let wa_l = wa.length;
+ if (wa_l < 3 || (wa_l == 4 && /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(w))) {
+ return w;
+ }
+ wa.reverse();
+ switch (wa[0]) {
+ case 'ac':
+ if (['com', 'edu', 'gov', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ad':
+ if (wa[1] == 'nom') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ae':
+ if (['co', 'net', 'org', 'sch', 'ac', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aero':
+ if (['accident-investigation', 'accident-prevention', 'aerobatic', 'aeroclub', 'aerodrome', 'agents', 'aircraft', 'airline', 'airport', 'air-surveillance', 'airtraffic', 'air-traffic-control', 'ambulance', 'amusement', 'association', 'author', 'ballooning', 'broker', 'caa', 'cargo', 'catering', 'certification', 'championship', 'charter', 'civilaviation', 'club', 'conference', 'consultant', 'consulting', 'control', 'council', 'crew', 'design', 'dgca', 'educator', 'emergency', 'engine', 'engineer', 'entertainment', 'equipment', 'exchange', 'express', 'federation', 'flight', 'freight', 'fuel', 'gliding', 'government', 'groundhandling', 'group', 'hanggliding', 'homebuilt', 'insurance', 'journal', 'journalist', 'leasing', 'logistics', 'magazine', 'maintenance', 'media', 'microlight', 'modelling', 'navigation', 'parachuting', 'paragliding', 'passenger-association', 'pilot', 'press', 'production', 'recreation', 'repbody', 'res', 'research', 'rotorcraft', 'safety', 'scientist', 'services', 'show', 'skydiving', 'software', 'student', 'trader', 'trading', 'trainer', 'union', 'workinggroup', 'works'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'af':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ag':
+ if (['com', 'net', 'org', 'co', 'nom', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ai':
+ if (['off', 'com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'al':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ao':
+ if (['co', 'ed', 'it', 'og', 'pb', 'gv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ar':
+ if (['com', 'edu', 'gov', 'gob', 'int', 'mil', 'net', 'org', 'tur', 'musica'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'as':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'at':
+ if (['gv', 'ac', 'co', 'or', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'au':
+ if (wa[1] == 'gov' && wa[3] != undefined) {
+ if (['act', 'nsw', 'nt', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (wa[1] == 'edu' && wa[3] != undefined) {
+ if (['act', 'catholic', 'eq', 'nsw', 'nt', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['act', 'asn', 'com', 'conf', 'csiro', 'edu', 'gov', 'id', 'info', 'net', 'nsw', 'nt', 'org', 'oz', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aw':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'az':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'int', 'mil', 'name', 'net', 'org', 'pp', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ba':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'net', 'org', 'rs'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bb':
+ if (['biz', 'co', 'com', 'edu', 'gov', 'info', 'net', 'org', 'store', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bd':
+ if (['com', 'edu', 'ac', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'be':
+ if (wa[1] == 'ac') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bf':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bg':
+ if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bh':
+ if (['com', 'info', 'cc', 'edu', 'biz', 'net', 'org', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bi':
+ if (['ac', 'co', 'com', 'edu', 'gouv', 'gov', 'int', 'mil', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bj':
+ if (['asso', 'barreau', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bn':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bo':
+ if (['academia', 'agro', 'arte', 'blog', 'bolivia', 'ciencia', 'com', 'cooperativa', 'democracia', 'deporte', 'ecologia', 'economia', 'edu', 'empresa', 'gob', 'gov', 'indigena', 'industria', 'info', 'int', 'medicina', 'mil', 'movimiento', 'musica', 'natural', 'net', 'nombre', 'noticias', 'org', 'patria', 'plurinacional', 'politica', 'profesional', 'pueblo', 'revista', 'salud', 'tecnologia', 'tksat', 'transporte', 'tv', 'web', 'wiki'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'br':
+ if (['9guacu', 'abc', 'adm', 'adv', 'agr', 'aju', 'am', 'anani', 'aparecida', 'arq', 'art', 'ato', 'b', 'barueri', 'belem', 'bhz', 'bio', 'blog', 'bmd', 'boavista', 'bsb', 'campinagrande', 'campinas', 'caxias', 'cim', 'cng', 'cnt', 'com', 'contagem', 'coop', 'cri', 'cuiaba', 'curitiba', 'def', 'ecn', 'eco', 'edu', 'emp', 'eng', 'esp', 'etc', 'eti', 'far', 'feira', 'flog', 'floripa', 'fm', 'fnd', 'fortal', 'fot', 'foz', 'fst', 'g12', 'ggf', 'goiania', 'gov', 'gru', 'imb', 'ind', 'inf', 'jab', 'jampa', 'jdf', 'joinville', 'jor', 'jus', 'leg', 'lel', 'londrina', 'macapa', 'maceio', 'manaus', 'maringa', 'mat', 'med', 'mil', 'morena', 'mp', 'mus', 'natal', 'net', 'niteroi', 'nom', 'not', 'ntr', 'odo', 'ong', 'org', 'osasco', 'palmas', 'poa', 'ppg', 'pro', 'psc', 'psi', 'pvh', 'qsl', 'radio', 'rec', 'recife', 'ribeirao', 'rio', 'riobranco', 'riopreto', 'salvador', 'sampa', 'santamaria', 'santoandre', 'saobernardo', 'saogonca', 'sjc', 'slg', 'slz', 'sorocaba', 'srv', 'taxi', 'teo', 'the', 'tmp', 'trd', 'tur', 'tv', 'udi', 'vet', 'vix', 'vlog', 'wiki', 'zlg'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bs':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bw':
+ if (['org', 'ac', 'co', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'by':
+ if (['gov', 'mil', 'com', 'of'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'nym', 'of', 'org', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ca':
+ if (['ab', 'bc', 'gc', 'mb', 'nb', 'nf', 'nl', 'ns', 'nt', 'nu', 'on', 'pe', 'qc', 'sk', 'yk'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cd':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ci':
+ if (['ac', 'asso', 'co', 'com', 'ed', 'edu', 'go', 'gouv', 'int', 'md', 'net', 'or', 'org', 'presse', 'xn--aroport-bya'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ck':
+ if (['biz', 'co', 'edu', 'gen', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cl':
+ if (['gov', 'gob', 'co', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cm':
+ if (['co', 'com', 'gov', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cn':
+ if (['ac', 'ah', 'bj', 'com', 'cq', 'edu', 'fj', 'gd', 'gov', 'gs', 'gx', 'gz', 'ha', 'hb', 'he', 'hi', 'hk', 'hl', 'hn', 'jl', 'js', 'jx', 'ln', 'mil', 'mo', 'net', 'nm', 'nx', 'org', 'qh', 'sc', 'sd', 'sh', 'sn', 'sx', 'tj', 'tw', 'xj', 'xn--55qx5d', 'xn--io0a7i', 'xn--od0alg', 'xz', 'yn', 'zj'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'co':
+ if (['arts', 'com', 'edu', 'firm', 'gov', 'info', 'int', 'mil', 'net', 'nom', 'org', 'rec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'com':
+ if (['africa', 'ar', 'br', 'cn', 'co', 'de', 'eu', 'gb', 'gr', 'hu', 'jpn', 'kr', 'mex', 'no', 'qc', 'ru', 'sa', 'se', 'uk', 'us', 'uy', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cr':
+ if (['ac', 'co', 'ed', 'fi', 'go', 'or', 'sa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cu':
+ if (['com', 'edu', 'org', 'net', 'gov', 'inf'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cw':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cy':
+ if (['ac', 'biz', 'com', 'ekloges', 'gov', 'ltd', 'name', 'net', 'org', 'parliament', 'press', 'pro', 'tm'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dm':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'do':
+ if (['art', 'com', 'edu', 'gob', 'gov', 'mil', 'net', 'org', 'sld', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dz':
+ if (['art', 'asso', 'com', 'edu', 'gov', 'net', 'org', 'pol'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ec':
+ if (['com', 'edu', 'fin', 'gob', 'gov', 'info', 'k12', 'med', 'mil', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ee':
+ if (['aip', 'com', 'edu', 'fie', 'gov', 'lib', 'med', 'org', 'pri', 'riik'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'eg':
+ if (['com', 'edu', 'eun', 'gov', 'mil', 'name', 'net', 'org', 'sci'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'es':
+ if (['com', 'nom', 'org', 'gob', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'et':
+ if (['com', 'gov', 'org', 'edu', 'net', 'biz', 'name', 'info'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fi':
+ if (wa[1] == 'aland') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fj':
+ if (['ac', 'biz', 'com', 'info', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fr':
+ if (['aeroport', 'assedic', 'asso', 'avocat', 'avoues', 'cci', 'chambagri', 'chirurgiens-dentistes', 'com', 'experts-comptables', 'geometre-expert', 'gouv', 'greta', 'huissier-justice', 'medecin', 'nom', 'notaires', 'pharmacien', 'port', 'prd', 'presse', 'tm', 'veterinaire'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ge':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'pvt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gg':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gh':
+ if (['com', 'edu', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gi':
+ if (['com', 'edu', 'gov', 'ltd', 'mod', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gl':
+ if (['co', 'com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gn':
+ if (['ac', 'com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gov':
+ if (['al', 'alabama', 'alaska', 'americansamoa', 'ar', 'arizona', 'arkansas', 'as', 'az', 'ca', 'co', 'colorado', 'ct', 'dc', 'de', 'delaware', 'ehawaii', 'fl', 'florida', 'ga', 'georgia', 'guam', 'hawaii', 'ia', 'idaho', 'il', 'illinois', 'in', 'indiana', 'iowa', 'kansas', 'kentucky', 'ks', 'ky', 'la', 'louisiana', 'ma', 'maine', 'maryland', 'mass', 'massachusetts', 'md', 'mi', 'michigan', 'minnesota', 'mississippi', 'missouri', 'mn', 'mo', 'montana', 'ms', 'mt', 'nc', 'nd', 'ne', 'nebraska', 'nevada', 'newjersey', 'newmexico', 'nh', 'nj', 'northcarolina', 'northdakota', 'nv', 'ny', 'ohio', 'ok', 'oklahoma', 'oregon', 'pa', 'pennsylvania', 'pr', 'rhodeisland', 'ri', 'sc', 'sd', 'tennessee', 'texas', 'tn', 'utah', 'vermont', 'vi', 'virginia', 'vt', 'wa', 'washington', 'wi', 'wisconsin', 'wv', 'wy', 'wyoming'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gp':
+ if (['com', 'net', 'mobi', 'edu', 'org', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gr':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'mod', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gt':
+ if (['com', 'edu', 'net', 'gob', 'org', 'mil', 'ind'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gu':
+ if (['com', 'edu', 'gov', 'guam', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gy':
+ if (['co', 'com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hk':
+ if (['com', 'edu', 'gov', 'idv', 'net', 'org', 'xn--55qx5d', 'xn--ciqpn', 'xn--gmq050i', 'xn--gmqw5a', 'xn--io0a7i', 'xn--lcvr32d', 'xn--mk0axi', 'xn--mxtq1m', 'xn--od0alg', 'xn--od0aq3b', 'xn--tn0ag', 'xn--uc0atv', 'xn--uc0ay4a', 'xn--wcvs22d', 'xn--zf0avx'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hn':
+ if (['com', 'edu', 'gob', 'net', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hr':
+ if (['iz', 'from', 'name', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ht':
+ if (['com', 'shop', 'firm', 'info', 'adult', 'net', 'pro', 'org', 'med', 'art', 'coop', 'pol', 'asso', 'edu', 'rel', 'gouv', 'perso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hu':
+ if (['2000', 'agrar', 'bolt', 'casino', 'city', 'co', 'edu', 'erotica', 'erotika', 'film', 'forum', 'games', 'gov', 'hotel', 'info', 'ingatlan', 'jogasz', 'konyvelo', 'lakas', 'media', 'mobi', 'net', 'news', 'org', 'priv', 'reklam', 'sex', 'shop', 'sport', 'suli', 'szex', 'tm', 'tozsde', 'utazas', 'video'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'id':
+ if (['ac', 'biz', 'co', 'desa', 'go', 'mil', 'my', 'net', 'or', 'ponpes', 'sch', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ie':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'il':
+ if (['ac', 'co', 'gov', 'idf', 'k12', 'muni', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'im':
+ if (['ac', 'co', 'com', 'gov', 'net', 'org', 'ro', 'tt', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'in':
+ if (['ac', 'co', 'edu', 'ernet', 'firm', 'gen', 'gov', 'ind', 'mil', 'net', 'org', 'res', 'nic'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'int':
+ if (wa[1] == 'eu') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'io':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'iq':
+ if (['gov', 'edu', 'mil', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ir':
+ if (['ac', 'co', 'gov', 'id', 'net', 'org', 'sch', 'xn--mgba3a4f16a', 'xn--mgba3a4fra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'is':
+ if (['net', 'com', 'edu', 'gov', 'org', 'int'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'it':
+ if (['abr', 'abruzzo', 'ag', 'agrigento', 'al', 'alessandria', 'alto-adige', 'altoadige', 'an', 'ancona', 'andria-barletta-trani', 'andria-trani-barletta', 'andriabarlettatrani', 'andriatranibarletta', 'ao', 'aosta', 'aosta-valley', 'aostavalley', 'aoste', 'ap', 'aq', 'aquila', 'ar', 'arezzo', 'ascoli-piceno', 'ascolipiceno', 'asti', 'at', 'av', 'avellino', 'ba', 'balsan', 'balsan-sudtirol', 'balsan-suedtirol', 'bari', 'barletta-trani-andria', 'barlettatraniandria', 'bas', 'basilicata', 'belluno', 'benevento', 'bergamo', 'bg', 'bi', 'biella', 'bl', 'bn', 'bo', 'bologna', 'bolzano', 'bolzano-altoadige', 'bozen', 'bozen-sudtirol', 'bozen-suedtirol', 'br', 'brescia', 'brindisi', 'bs', 'bt', 'bulsan', 'bulsan-sudtirol', 'bulsan-suedtirol', 'bz', 'ca', 'cagliari', 'cal', 'calabria', 'caltanissetta', 'cam', 'campania', 'campidano-medio', 'campidanomedio', 'campobasso', 'carbonia-iglesias', 'carboniaiglesias', 'carrara-massa', 'carraramassa', 'caserta', 'catania', 'catanzaro', 'cb', 'ce', 'cesena-forli', 'cesenaforli', 'ch', 'chieti', 'ci', 'cl', 'cn', 'co', 'como', 'cosenza', 'cr', 'cremona', 'crotone', 'cs', 'ct', 'cuneo', 'cz', 'dell-ogliastra', 'dellogliastra', 'edu', 'emilia-romagna', 'emiliaromagna', 'emr', 'en', 'enna', 'fc', 'fe', 'fermo', 'ferrara', 'fg', 'fi', 'firenze', 'florence', 'fm', 'foggia', 'forli-cesena', 'forlicesena', 'fr', 'friuli-v-giulia', 'friuli-ve-giulia', 'friuli-vegiulia', 'friuli-venezia-giulia', 'friuli-veneziagiulia', 'friuli-vgiulia', 'friuliv-giulia', 'friulive-giulia', 'friulivegiulia', 'friulivenezia-giulia', 'friuliveneziagiulia', 'friulivgiulia', 'frosinone', 'fvg', 'ge', 'genoa', 'genova', 'go', 'gorizia', 'gov', 'gr', 'grosseto', 'iglesias-carbonia', 'iglesiascarbonia', 'im', 'imperia', 'is', 'isernia', 'kr', 'la-spezia', 'laquila', 'laspezia', 'latina', 'laz', 'lazio', 'lc', 'le', 'lecce', 'lecco', 'li', 'lig', 'liguria', 'livorno', 'lo', 'lodi', 'lom', 'lombardia', 'lombardy', 'lt', 'lu', 'lucania', 'lucca', 'macerata', 'mantova', 'mar', 'marche', 'massa-carrara', 'massacarrara', 'matera', 'mb', 'mc', 'me', 'medio-campidano', 'mediocampidano', 'messina', 'mi', 'milan', 'milano', 'mn', 'mo', 'modena', 'mol', 'molise', 'monza', 'monza-brianza', 'monza-e-della-brianza', 'monzabrianza', 'monzaebrianza', 'monzaedellabrianza', 'ms', 'mt', 'na', 'naples', 'napoli', 'no', 'novara', 'nu', 'nuoro', 'og', 'ogliastra', 'olbia-tempio', 'olbiatempio', 'or', 'oristano', 'ot', 'pa', 'padova', 'padua', 'palermo', 'parma', 'pavia', 'pc', 'pd', 'pe', 'perugia', 'pesaro-urbino', 'pesarourbino', 'pescara', 'pg', 'pi', 'piacenza', 'piedmont', 'piemonte', 'pisa', 'pistoia', 'pmn', 'pn', 'po', 'pordenone', 'potenza', 'pr', 'prato', 'pt', 'pu', 'pug', 'puglia', 'pv', 'pz', 'ra', 'ragusa', 'ravenna', 'rc', 're', 'reggio-calabria', 'reggio-emilia', 'reggiocalabria', 'reggioemilia', 'rg', 'ri', 'rieti', 'rimini', 'rm', 'rn', 'ro', 'roma', 'rome', 'rovigo', 'sa', 'salerno', 'sar', 'sardegna', 'sardinia', 'sassari', 'savona', 'si', 'sic', 'sicilia', 'sicily', 'siena', 'siracusa', 'so', 'sondrio', 'sp', 'sr', 'ss', 'suedtirol', 'sv', 'ta', 'taa', 'taranto', 'te', 'tempio-olbia', 'tempioolbia', 'teramo', 'terni', 'tn', 'to', 'torino', 'tos', 'toscana', 'tp', 'tr', 'trani-andria-barletta', 'trani-barletta-andria', 'traniandriabarletta', 'tranibarlettaandria', 'trapani', 'trentin-sud-tirol', 'trentin-sudtirol', 'trentin-sued-tirol', 'trentin-suedtirol', 'trentino', 'trentino-a-adige', 'trentino-aadige', 'trentino-alto-adige', 'trentino-altoadige', 'trentino-s-tirol', 'trentino-stirol', 'trentino-sud-tirol', 'trentino-sudtirol', 'trentino-sued-tirol', 'trentino-suedtirol', 'trentinoa-adige', 'trentinoaadige', 'trentinoalto-adige', 'trentinoaltoadige', 'trentinos-tirol', 'trentinostirol', 'trentinosud-tirol', 'trentinosudtirol', 'trentinosued-tirol', 'trentinosuedtirol', 'trentinsud-tirol', 'trentinsudtirol', 'trentinsued-tirol', 'trentinsuedtirol', 'trento', 'treviso', 'trieste', 'ts', 'turin', 'tuscany', 'tv', 'ud', 'udine', 'umb', 'umbria', 'urbino-pesaro', 'urbinopesaro', 'va', 'val-d-aosta', 'val-daosta', 'vald-aosta', 'valdaosta', 'valle-aosta', 'valle-d-aosta', 'valle-daosta', 'valleaosta', 'valled-aosta', 'valledaosta', 'vallee-aoste', 'vallee-d-aoste', 'valleeaoste', 'valleedaoste', 'vao', 'varese', 'vb', 'vc', 'vda', 've', 'ven', 'veneto', 'venezia', 'venice', 'verbania', 'vercelli', 'verona', 'vi', 'vibo-valentia', 'vibovalentia', 'vicenza', 'viterbo', 'vr', 'vs', 'vt', 'vv', 'xn--balsan-sdtirol-nsb', 'xn--bozen-sdtirol-2ob', 'xn--bulsan-sdtirol-nsb', 'xn--cesena-forl-mcb', 'xn--cesenaforl-i8a', 'xn--forl-cesena-fcb', 'xn--forlcesena-c8a', 'xn--sdtirol-n2a', 'xn--trentin-sd-tirol-rzb', 'xn--trentin-sdtirol-7vb', 'xn--trentino-sd-tirol-c3b', 'xn--trentino-sdtirol-szb', 'xn--trentinosd-tirol-rzb', 'xn--trentinosdtirol-7vb', 'xn--trentinsd-tirol-6vb', 'xn--trentinsdtirol-nsb', 'xn--valle-aoste-ebb', 'xn--valle-d-aoste-ehb', 'xn--valleaoste-e7a', 'xn--valledaoste-ebb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'je':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jm':
+ if (['com', 'net', 'org', 'edu', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jo':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jp':
+ if (['ac', 'ad', 'aichi', 'akita', 'aomori', 'chiba', 'co', 'ed', 'ehime', 'fukui', 'fukuoka', 'fukushima', 'gifu', 'go', 'gr', 'gunma', 'hiroshima', 'hokkaido', 'hyogo', 'ibaraki', 'ishikawa', 'iwate', 'kagawa', 'kagoshima', 'kanagawa', 'kochi', 'kumamoto', 'kyoto', 'lg', 'mie', 'miyagi', 'miyazaki', 'nagano', 'nagasaki', 'nara', 'ne', 'niigata', 'oita', 'okayama', 'okinawa', 'or', 'osaka', 'saga', 'saitama', 'shiga', 'shimane', 'shizuoka', 'tochigi', 'tokushima', 'tokyo', 'tottori', 'toyama', 'wakayama', 'xn--0trq7p7nn', 'xn--1ctwo', 'xn--1lqs03n', 'xn--1lqs71d', 'xn--2m4a15e', 'xn--32vp30h', 'xn--4it168d', 'xn--4it797k', 'xn--4pvxs', 'xn--5js045d', 'xn--5rtp49c', 'xn--5rtq34k', 'xn--6btw5a', 'xn--6orx2r', 'xn--7t0a264c', 'xn--8ltr62k', 'xn--8pvr4u', 'xn--c3s14m', 'xn--d5qv7z876c', 'xn--djrs72d6uy', 'xn--djty4k', 'xn--efvn9s', 'xn--ehqz56n', 'xn--elqq16h', 'xn--f6qx53a', 'xn--k7yn95e', 'xn--kbrq7o', 'xn--klt787d', 'xn--kltp7d', 'xn--kltx9a', 'xn--klty5x', 'xn--mkru45i', 'xn--nit225k', 'xn--ntso0iqx3a', 'xn--ntsq17g', 'xn--pssu33l', 'xn--qqqt11m', 'xn--rht27z', 'xn--rht3d', 'xn--rht61e', 'xn--rny31h', 'xn--tor131o', 'xn--uist22h', 'xn--uisz3g', 'xn--uuwu58a', 'xn--vgu402c', 'xn--zbx025d', 'yamagata', 'yamaguchi', 'yamanashi'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ke':
+ if (['ac', 'co', 'go', 'info', 'me', 'mobi', 'ne', 'or', 'sc'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kg':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kh':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ki':
+ if (['edu', 'biz', 'net', 'org', 'gov', 'info', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'km':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'ass', 'com', 'coop', 'asso', 'presse', 'medecin', 'notaires', 'pharmaciens', 'veterinaire', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kn':
+ if (['net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kp':
+ if (['com', 'edu', 'gov', 'org', 'rep', 'tra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kr':
+ if (['ac', 'busan', 'cheju', 'chonbuk', 'chonnam', 'chungbuk', 'chungnam', 'co', 'daegu', 'daejeon', 'es', 'gangwon', 'go', 'gwangju', 'gyeongbuk', 'gyeonggi', 'gyeongnam', 'hs', 'incheon', 'inchon', 'jeju', 'jeonbuk', 'jeonnam', 'kangwon', 'kg', 'kwangju', 'kyongbuk', 'kyonggi', 'kyongnam', 'mil', 'ms', 'ne', 'nm', 'or', 'pe', 'pusan', 're', 'sc', 'seoul', 'taegu', 'taejon', 'ulsan', 'xn--bj0bj06e'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kw':
+ if (['com', 'edu', 'emb', 'gov', 'ind', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ky':
+ if (['edu', 'gov', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'la':
+ if (['int', 'net', 'info', 'edu', 'gov', 'per', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lc':
+ if (['com', 'net', 'co', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lk':
+ if (['ac', 'assn', 'com', 'edu', 'gov', 'grp', 'hotel', 'int', 'ltd', 'net', 'ngo', 'org', 'sch', 'soc', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lr':
+ if (['com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ls':
+ if (['ac', 'co', 'gov', 'net', 'nul', 'org', 'parliament', 'quadrant'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lt':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lv':
+ if (['asn', 'com', 'conf', 'edu', 'gov', 'id', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ly':
+ if (['com', 'edu', 'gov', 'id', 'med', 'net', 'org', 'plc', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ma':
+ if (['ac', 'co', 'gov', 'net', 'org', 'press'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mc':
+ if (['tm', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'me':
+ if (['co', 'net', 'org', 'edu', 'ac', 'gov', 'its', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mg':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'com', 'co'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mk':
+ if (['com', 'edu', 'gov', 'inf', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ml':
+ if (['com', 'edu', 'gouv', 'gov', 'net', 'org', 'presse'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mn':
+ if (['gov', 'edu', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mo':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mr':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ms':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mu':
+ if (['ac', 'co', 'com', 'gov', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'museum':
+ if (['academy', 'agriculture', 'air', 'airguard', 'alabama', 'alaska', 'amber', 'ambulance', 'american', 'americana', 'americanantiques', 'americanart', 'amsterdam', 'and', 'annefrank', 'anthro', 'anthropology', 'antiques', 'aquarium', 'arboretum', 'archaeological', 'archaeology', 'architecture', 'art', 'artanddesign', 'artcenter', 'artdeco', 'arteducation', 'artgallery', 'arts', 'artsandcrafts', 'asmatart', 'assassination', 'assisi', 'association', 'astronomy', 'atlanta', 'austin', 'australia', 'automotive', 'aviation', 'axis', 'badajoz', 'baghdad', 'bahn', 'bale', 'baltimore', 'barcelona', 'baseball', 'basel', 'baths', 'bauern', 'beauxarts', 'beeldengeluid', 'bellevue', 'bergbau', 'berkeley', 'berlin', 'bern', 'bible', 'bilbao', 'bill', 'birdart', 'birthplace', 'bonn', 'boston', 'botanical', 'botanicalgarden', 'botanicgarden', 'botany', 'brandywinevalley', 'brasil', 'bristol', 'british', 'britishcolumbia', 'broadcast', 'brunel', 'brussel', 'brussels', 'bruxelles', 'building', 'burghof', 'bus', 'bushey', 'cadaques', 'california', 'cambridge', 'can', 'canada', 'capebreton', 'carrier', 'cartoonart', 'casadelamoneda', 'castle', 'castres', 'celtic', 'center', 'chattanooga', 'cheltenham', 'chesapeakebay', 'chicago', 'children', 'childrens', 'childrensgarden', 'chiropractic', 'chocolate', 'christiansburg', 'cincinnati', 'cinema', 'circus', 'civilisation', 'civilization', 'civilwar', 'clinton', 'clock', 'coal', 'coastaldefence', 'cody', 'coldwar', 'collection', 'colonialwilliamsburg', 'coloradoplateau', 'columbia', 'columbus', 'communication', 'communications', 'community', 'computer', 'computerhistory', 'comunicações', 'contemporary', 'contemporaryart', 'convent', 'copenhagen', 'corporation', 'correios-e-telecomunicações', 'corvette', 'costume', 'countryestate', 'county', 'crafts', 'cranbrook', 'creation', 'cultural', 'culturalcenter', 'culture', 'cyber', 'cymru', 'dali', 'dallas', 'database', 'ddr', 'decorativearts', 'delaware', 'delmenhorst', 'denmark', 'depot', 'design', 'detroit', 'dinosaur', 'discovery', 'dolls', 'donostia', 'durham', 'eastafrica', 'eastcoast', 'education', 'educational', 'egyptian', 'eisenbahn', 'elburg', 'elvendrell', 'embroidery', 'encyclopedic', 'england', 'entomology', 'environment', 'environmentalconservation', 'epilepsy', 'essex', 'estate', 'ethnology', 'exeter', 'exhibition', 'family', 'farm', 'farmequipment', 'farmers', 'farmstead', 'field', 'figueres', 'filatelia', 'film', 'fineart', 'finearts', 'finland', 'flanders', 'florida', 'force', 'fortmissoula', 'fortworth', 'foundation', 'francaise', 'frankfurt', 'franziskaner', 'freemasonry', 'freiburg', 'fribourg', 'frog', 'fundacio', 'furniture', 'gallery', 'garden', 'gateway', 'geelvinck', 'gemological', 'geology', 'georgia', 'giessen', 'glas', 'glass', 'gorge', 'grandrapids', 'graz', 'guernsey', 'halloffame', 'hamburg', 'handson', 'harvestcelebration', 'hawaii', 'health', 'heimatunduhren', 'hellas', 'helsinki', 'hembygdsforbund', 'heritage', 'histoire', 'historical', 'historicalsociety', 'historichouses', 'historisch', 'historisches', 'history', 'historyofscience', 'horology', 'house', 'humanities', 'illustration', 'imageandsound', 'indian', 'indiana', 'indianapolis', 'indianmarket', 'intelligence', 'interactive', 'iraq', 'iron', 'isleofman', 'jamison', 'jefferson', 'jerusalem', 'jewelry', 'jewish', 'jewishart', 'jfk', 'journalism', 'judaica', 'judygarland', 'juedisches', 'juif', 'karate', 'karikatur', 'kids', 'koebenhavn', 'koeln', 'kunst', 'kunstsammlung', 'kunstunddesign', 'labor', 'labour', 'lajolla', 'lancashire', 'landes', 'lans', 'larsson', 'lewismiller', 'lincoln', 'linz', 'living', 'livinghistory', 'localhistory', 'london', 'losangeles', 'louvre', 'loyalist', 'lucerne', 'luxembourg', 'luzern', 'läns', 'mad', 'madrid', 'mallorca', 'manchester', 'mansion', 'mansions', 'manx', 'marburg', 'maritime', 'maritimo', 'maryland', 'marylhurst', 'media', 'medical', 'medizinhistorisches', 'meeres', 'memorial', 'mesaverde', 'michigan', 'midatlantic', 'military', 'mill', 'miners', 'mining', 'minnesota', 'missile', 'missoula', 'modern', 'moma', 'money', 'monmouth', 'monticello', 'montreal', 'moscow', 'motorcycle', 'muenchen', 'muenster', 'mulhouse', 'muncie', 'museet', 'museumcenter', 'museumvereniging', 'music', 'national', 'nationalfirearms', 'nationalheritage', 'nativeamerican', 'naturalhistory', 'naturalhistorymuseum', 'naturalsciences', 'nature', 'naturhistorisches', 'natuurwetenschappen', 'naumburg', 'naval', 'nebraska', 'neues', 'newhampshire', 'newjersey', 'newmexico', 'newport', 'newspaper', 'newyork', 'niepce', 'norfolk', 'north', 'nrw', 'nuernberg', 'nuremberg', 'nyc', 'nyny', 'oceanographic', 'oceanographique', 'omaha', 'online', 'ontario', 'openair', 'oregon', 'oregontrail', 'otago', 'oxford', 'pacific', 'paderborn', 'palace', 'paleo', 'palmsprings', 'panama', 'paris', 'pasadena', 'pharmacy', 'philadelphia', 'philadelphiaarea', 'philately', 'phoenix', 'photography', 'pilots', 'pittsburgh', 'planetarium', 'plantation', 'plants', 'plaza', 'portal', 'portland', 'portlligat', 'posts-and-telecommunications', 'preservation', 'presidio', 'press', 'project', 'public', 'pubol', 'quebec', 'railroad', 'railway', 'research', 'resistance', 'riodejaneiro', 'rochester', 'rockart', 'roma', 'russia', 'saintlouis', 'salem', 'salvadordali', 'salzburg', 'sandiego', 'sanfrancisco', 'santabarbara', 'santacruz', 'santafe', 'saskatchewan', 'satx', 'savannahga', 'schlesisches', 'schoenbrunn', 'schokoladen', 'school', 'schweiz', 'science', 'science-fiction', 'scienceandhistory', 'scienceandindustry', 'sciencecenter', 'sciencecenters', 'sciencehistory', 'sciences', 'sciencesnaturelles', 'scotland', 'seaport', 'settlement', 'settlers', 'shell', 'sherbrooke', 'sibenik', 'silk', 'ski', 'skole', 'society', 'sologne', 'soundandvision', 'southcarolina', 'southwest', 'space', 'spy', 'square', 'stadt', 'stalbans', 'starnberg', 'state', 'stateofdelaware', 'station', 'steam', 'steiermark', 'stjohn', 'stockholm', 'stpetersburg', 'stuttgart', 'suisse', 'surgeonshall', 'surrey', 'svizzera', 'sweden', 'sydney', 'tank', 'tcm', 'technology', 'telekommunikation', 'television', 'texas', 'textile', 'theater', 'time', 'timekeeping', 'topology', 'torino', 'touch', 'town', 'transport', 'tree', 'trolley', 'trust', 'trustee', 'uhren', 'ulm', 'undersea', 'university', 'usa', 'usantiques', 'usarts', 'uscountryestate', 'usculture', 'usdecorativearts', 'usgarden', 'ushistory', 'ushuaia', 'uslivinghistory', 'utah', 'uvic', 'valley', 'vantaa', 'versailles', 'viking', 'village', 'virginia', 'virtual', 'virtuel', 'vlaanderen', 'volkenkunde', 'wales', 'wallonie', 'war', 'washingtondc', 'watch-and-clock', 'watchandclock', 'western', 'westfalen', 'whaling', 'wildlife', 'williamsburg', 'windmill', 'workshop', 'xn--9dbhblg6di', 'xn--h1aegh', 'york', 'yorkshire', 'yosemite', 'youth', 'zoological', 'zoology'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mv':
+ if (['aero', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'int', 'mil', 'museum', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mw':
+ if (['ac', 'biz', 'co', 'com', 'coop', 'edu', 'gov', 'int', 'museum', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mx':
+ if (['com', 'edu', 'gob', 'net', 'ngo', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'my':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mz':
+ if (['co', 'net', 'org', 'ac', 'gov', 'edu', 'mil', 'adv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'na':
+ if (['info', 'pro', 'name', 'school', 'or', 'dr', 'us', 'mx', 'ca', 'in', 'cc', 'tv', 'ws', 'mobi', 'co', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'name':
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ break;
+ case 'nc':
+ if (['asso', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'net':
+ if (['gb', 'hu', 'in', 'jp', 'ru', 'se', 'uk', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nf':
+ if (['arts', 'com', 'firm', 'info', 'net', 'other', 'per', 'rec', 'store', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ng':
+ if (['com', 'edu', 'gov', 'i', 'mil', 'mobi', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ni':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gob', 'in', 'info', 'int', 'mil', 'net', 'nom', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nl':
+ if (wa[1] == 'bv') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'no':
+ if (['aa', 'aarborte', 'aejrie', 'afjord', 'agdenes', 'ah', 'aknoluokta', 'akrehamn', 'al', 'alaheadju', 'alesund', 'algard', 'alstahaug', 'alta', 'alvdal', 'amli', 'amot', 'andasuolo', 'andebu', 'andoy', 'ardal', 'aremark', 'arendal', 'arna', 'aseral', 'asker', 'askim', 'askoy', 'askvoll', 'asnes', 'audnedaln', 'aukra', 'aure', 'aurland', 'austevoll', 'austrheim', 'averoy', 'badaddja', 'bahcavuotna', 'bahccavuotna', 'baidar', 'bajddar', 'balat', 'balestrand', 'ballangen', 'balsfjord', 'bamble', 'bardu', 'barum', 'batsfjord', 'bearalvahki', 'beardu', 'beiarn', 'berg', 'bergen', 'berlevag', 'bievat', 'bindal', 'birkenes', 'bjarkoy', 'bjerkreim', 'bjugn', 'bodo', 'bokn', 'bomlo', 'bremanger', 'bronnoy', 'bronnoysund', 'brumunddal', 'bryne', 'bu', 'budejju', 'bygland', 'bykle', 'cahcesuolo', 'davvenjarga', 'davvesiida', 'deatnu', 'dep', 'dielddanuorri', 'divtasvuodna', 'divttasvuotna', 'donna', 'dovre', 'drammen', 'drangedal', 'drobak', 'dyroy', 'egersund', 'eid', 'eidfjord', 'eidsberg', 'eidskog', 'eidsvoll', 'eigersund', 'elverum', 'enebakk', 'engerdal', 'etne', 'etnedal', 'evenassi', 'evenes', 'farsund', 'fauske', 'fedje', 'fet', 'fetsund', 'fhs', 'finnoy', 'fitjar', 'fjaler', 'fjell', 'fla', 'flakstad', 'flatanger', 'flekkefjord', 'flesberg', 'flora', 'floro', 'fm', 'folkebibl', 'folldal', 'forde', 'forsand', 'fosnes', 'frana', 'fredrikstad', 'frei', 'frogn', 'froland', 'frosta', 'froya', 'fuoisku', 'fuossko', 'fusa', 'fylkesbibl', 'fyresdal', 'gaivuotna', 'galsa', 'gamvik', 'gangaviika', 'gaular', 'gausdal', 'giehtavuoatna', 'gildeskal', 'giske', 'gjemnes', 'gjerdrum', 'gjerstad', 'gjesdal', 'gjovik', 'gloppen', 'gol', 'gran', 'grane', 'granvin', 'gratangen', 'grimstad', 'grong', 'grue', 'gulen', 'guovdageaidnu', 'ha', 'habmer', 'hadsel', 'hagebostad', 'halden', 'halsa', 'hamar', 'hamaroy', 'hammarfeasta', 'hammerfest', 'hapmir', 'haram', 'hareid', 'harstad', 'hasvik', 'hattfjelldal', 'haugesund', 'hemne', 'hemnes', 'hemsedal', 'herad', 'hitra', 'hjartdal', 'hjelmeland', 'hl', 'hm', 'hobol', 'hof', 'hokksund', 'hol', 'hole', 'holmestrand', 'holtalen', 'honefoss', 'hornindal', 'horten', 'hoyanger', 'hoylandet', 'hurdal', 'hurum', 'hvaler', 'hyllestad', 'ibestad', 'idrett', 'inderoy', 'iveland', 'ivgu', 'jessheim', 'jevnaker', 'jolster', 'jondal', 'jorpeland', 'kafjord', 'karasjohka', 'karasjok', 'karlsoy', 'karmoy', 'kautokeino', 'kirkenes', 'klabu', 'klepp', 'kommune', 'kongsberg', 'kongsvinger', 'kopervik', 'kraanghke', 'kragero', 'kristiansand', 'kristiansund', 'krodsherad', 'krokstadelva', 'kvafjord', 'kvalsund', 'kvam', 'kvanangen', 'kvinesdal', 'kvinnherad', 'kviteseid', 'kvitsoy', 'laakesvuemie', 'lahppi', 'langevag', 'lardal', 'larvik', 'lavagis', 'lavangen', 'leangaviika', 'lebesby', 'leikanger', 'leirfjord', 'leirvik', 'leka', 'leksvik', 'lenvik', 'lerdal', 'lesja', 'levanger', 'lier', 'lierne', 'lillehammer', 'lillesand', 'lindas', 'lindesnes', 'loabat', 'lodingen', 'lom', 'loppa', 'lorenskog', 'loten', 'lund', 'lunner', 'luroy', 'luster', 'lyngdal', 'lyngen', 'malatvuopmi', 'malselv', 'malvik', 'mandal', 'marker', 'marnardal', 'masfjorden', 'masoy', 'meland', 'meldal', 'melhus', 'meloy', 'meraker', 'midsund', 'mil', 'mjondalen', 'moareke', 'modalen', 'modum', 'molde', 'mosjoen', 'moskenes', 'moss', 'mosvik', 'mr', 'muosat', 'museum', 'naamesjevuemie', 'namdalseid', 'namsos', 'namsskogan', 'nannestad', 'naroy', 'narviika', 'narvik', 'naustdal', 'navuotna', 'nesna', 'nesodden', 'nesoddtangen', 'nesseby', 'nesset', 'nissedal', 'nittedal', 'nl', 'norddal', 'nordkapp', 'nordreisa', 'notodden', 'notteroy', 'nt', 'odda', 'of', 'oksnes', 'ol', 'omasvuotna', 'oppdal', 'oppegard', 'orkanger', 'orkdal', 'orland', 'orskog', 'orsta', 'osen', 'oslo', 'osoyro', 'osteroy', 'overhalla', 'oyer', 'oygarden', 'porsanger', 'porsangu', 'porsgrunn', 'priv', 'rade', 'radoy', 'rahkkeravju', 'raholt', 'raisa', 'rakkestad', 'ralingen', 'rana', 'randaberg', 'rauma', 'rendalen', 'rennebu', 'rennesoy', 'rindal', 'ringebu', 'ringerike', 'ringsaker', 'risor', 'rissa', 'rl', 'roan', 'rodoy', 'rollag', 'romsa', 'romskog', 'roros', 'rost', 'royken', 'royrvik', 'ruovat', 'rygge', 'salangen', 'salat', 'saltdal', 'samnanger', 'sandefjord', 'sandnes', 'sandnessjoen', 'sandoy', 'sarpsborg', 'sauda', 'sauherad', 'sel', 'selbu', 'selje', 'seljord', 'sf', 'siellak', 'sigdal', 'siljan', 'sirdal', 'skanit', 'skanland', 'skaun', 'skedsmo', 'skedsmokorset', 'ski', 'skien', 'skierva', 'skiptvet', 'skjak', 'skjervoy', 'skodje', 'slattum', 'smola', 'snaase', 'snasa', 'snillfjord', 'snoasa', 'sogndal', 'sogne', 'sokndal', 'sola', 'solund', 'somna', 'songdalen', 'sorfold', 'sorreisa', 'sortland', 'sorum', 'spjelkavik', 'spydeberg', 'st', 'stange', 'stat', 'stathelle', 'stavanger', 'stavern', 'steigen', 'steinkjer', 'stjordal', 'stjordalshalsen', 'stokke', 'stord', 'stordal', 'storfjord', 'strand', 'stranda', 'stryn', 'sula', 'suldal', 'sund', 'sunndal', 'surnadal', 'svalbard', 'sveio', 'svelvik', 'sykkylven', 'tana', 'tananger', 'time', 'tingvoll', 'tinn', 'tjeldsund', 'tjome', 'tm', 'tokke', 'tolga', 'tonsberg', 'torsken', 'tr', 'trana', 'tranby', 'tranoy', 'troandin', 'trogstad', 'tromsa', 'tromso', 'trondheim', 'trysil', 'tvedestrand', 'tydal', 'tynset', 'tysfjord', 'tysnes', 'tysvar', 'ullensaker', 'ullensvang', 'ulvik', 'unjarga', 'utsira', 'va', 'vaapste', 'vadso', 'vaga', 'vagan', 'vagsoy', 'vaksdal', 'valle', 'vang', 'vanylven', 'vardo', 'varggat', 'varoy', 'vefsn', 'vega', 'vegarshei', 'vennesla', 'verdal', 'verran', 'vestby', 'vestnes', 'vestvagoy', 'vevelstad', 'vf', 'vgs', 'vik', 'vikna', 'vindafjord', 'voagat', 'volda', 'voss', 'vossevangen', 'xn--andy-ira', 'xn--asky-ira', 'xn--aurskog-hland-jnb', 'xn--avery-yua', 'xn--bdddj-mrabd', 'xn--bearalvhki-y4a', 'xn--berlevg-jxa', 'xn--bhcavuotna-s4a', 'xn--bhccavuotna-k7a', 'xn--bidr-5nac', 'xn--bievt-0qa', 'xn--bjarky-fya', 'xn--bjddar-pta', 'xn--blt-elab', 'xn--bmlo-gra', 'xn--bod-2na', 'xn--brnny-wuac', 'xn--brnnysund-m8ac', 'xn--brum-voa', 'xn--btsfjord-9za', 'xn--davvenjrga-y4a', 'xn--dnna-gra', 'xn--drbak-wua', 'xn--dyry-ira', 'xn--eveni-0qa01ga', 'xn--finny-yua', 'xn--fjord-lra', 'xn--fl-zia', 'xn--flor-jra', 'xn--frde-gra', 'xn--frna-woa', 'xn--frya-hra', 'xn--ggaviika-8ya47h', 'xn--gildeskl-g0a', 'xn--givuotna-8ya', 'xn--gjvik-wua', 'xn--gls-elac', 'xn--h-2fa', 'xn--hbmer-xqa', 'xn--hcesuolo-7ya35b', 'xn--hgebostad-g3a', 'xn--hmmrfeasta-s4ac', 'xn--hnefoss-q1a', 'xn--hobl-ira', 'xn--holtlen-hxa', 'xn--hpmir-xqa', 'xn--hyanger-q1a', 'xn--hylandet-54a', 'xn--indery-fya', 'xn--jlster-bya', 'xn--jrpeland-54a', 'xn--karmy-yua', 'xn--kfjord-iua', 'xn--klbu-woa', 'xn--koluokta-7ya57h', 'xn--krager-gya', 'xn--kranghke-b0a', 'xn--krdsherad-m8a', 'xn--krehamn-dxa', 'xn--krjohka-hwab49j', 'xn--ksnes-uua', 'xn--kvfjord-nxa', 'xn--kvitsy-fya', 'xn--kvnangen-k0a', 'xn--l-1fa', 'xn--laheadju-7ya', 'xn--langevg-jxa', 'xn--ldingen-q1a', 'xn--leagaviika-52b', 'xn--lesund-hua', 'xn--lgrd-poac', 'xn--lhppi-xqa', 'xn--linds-pra', 'xn--loabt-0qa', 'xn--lrdal-sra', 'xn--lrenskog-54a', 'xn--lt-liac', 'xn--lten-gra', 'xn--lury-ira', 'xn--mely-ira', 'xn--merker-kua', 'xn--mjndalen-64a', 'xn--mlatvuopmi-s4a', 'xn--mli-tla', 'xn--mlselv-iua', 'xn--moreke-jua', 'xn--mosjen-eya', 'xn--mot-tla', 'xn--msy-ula0h', 'xn--mtta-vrjjat-k7af', 'xn--muost-0qa', 'xn--nmesjevuemie-tcba', 'xn--nry-yla5g', 'xn--nttery-byae', 'xn--nvuotna-hwa', 'xn--oppegrd-ixa', 'xn--ostery-fya', 'xn--osyro-wua', 'xn--porsgu-sta26f', 'xn--rady-ira', 'xn--rdal-poa', 'xn--rde-ula', 'xn--rdy-0nab', 'xn--rennesy-v1a', 'xn--rhkkervju-01af', 'xn--rholt-mra', 'xn--risa-5na', 'xn--risr-ira', 'xn--rland-uua', 'xn--rlingen-mxa', 'xn--rmskog-bya', 'xn--rros-gra', 'xn--rskog-uua', 'xn--rst-0na', 'xn--rsta-fra', 'xn--ryken-vua', 'xn--ryrvik-bya', 'xn--s-1fa', 'xn--sandnessjen-ogb', 'xn--sandy-yua', 'xn--seral-lra', 'xn--sgne-gra', 'xn--skierv-uta', 'xn--skjervy-v1a', 'xn--skjk-soa', 'xn--sknit-yqa', 'xn--sknland-fxa', 'xn--slat-5na', 'xn--slt-elab', 'xn--smla-hra', 'xn--smna-gra', 'xn--snase-nra', 'xn--sndre-land-0cb', 'xn--snes-poa', 'xn--snsa-roa', 'xn--sr-aurdal-l8a', 'xn--sr-fron-q1a', 'xn--sr-odal-q1a', 'xn--sr-varanger-ggb', 'xn--srfold-bya', 'xn--srreisa-q1a', 'xn--srum-gra', 'xn--stjrdal-s1a', 'xn--stjrdalshalsen-sqb', 'xn--stre-toten-zcb', 'xn--tjme-hra', 'xn--tnsberg-q1a', 'xn--trany-yua', 'xn--trgstad-r1a', 'xn--trna-woa', 'xn--troms-zua', 'xn--tysvr-vra', 'xn--unjrga-rta', 'xn--vads-jra', 'xn--vard-jra', 'xn--vegrshei-c0a', 'xn--vestvgy-ixa6o', 'xn--vg-yiab', 'xn--vgan-qoa', 'xn--vgsy-qoa0j', 'xn--vre-eiker-k8a', 'xn--vrggt-xqad', 'xn--vry-yla5g', 'xn--yer-zna', 'xn--ygarden-p1a', 'xn--ystre-slidre-ujb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'np':
+ if (['aero', 'asia', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'jobs', 'mil', 'mobi', 'museum', 'name', 'net', 'org', 'pro', 'travel'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nr':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nz':
+ if (['ac', 'archie', 'co', 'cri', 'geek', 'gen', 'govt', 'health', 'iwi', 'kiwi', 'maori', 'mil', 'net', 'org', 'parliament', 'school', 'xn--mori-qsa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'om':
+ if (['co', 'com', 'edu', 'gov', 'med', 'museum', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'org':
+ if (wa[1] == 'eu' && wa[3] != undefined) {
+ if (['al', 'asso', 'at', 'au', 'be', 'bg', 'ca', 'cd', 'ch', 'cn', 'cy', 'cz', 'de', 'dk', 'edu', 'ee', 'es', 'fi', 'fr', 'gr', 'hr', 'hu', 'ie', 'il', 'in', 'int', 'is', 'it', 'jp', 'kr', 'lt', 'lu', 'lv', 'me', 'mk', 'mt', 'my', 'net', 'ng', 'nl', 'no', 'nz', 'pl', 'pt', 'ro', 'ru', 'se', 'si', 'sk', 'tr', 'uk', 'us'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['ae', 'eu', 'hk', 'jpn', 'js', 'us', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pa':
+ if (['abo', 'ac', 'com', 'edu', 'gob', 'ing', 'med', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pe':
+ if (['com', 'edu', 'gob', 'mil', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pf':
+ if (['com', 'org', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pg':
+ if (['com', 'net', 'ac', 'gov', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ph':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'ngo', 'i'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pk':
+ if (['biz', 'com', 'edu', 'fam', 'gob', 'gok', 'gon', 'gop', 'gos', 'gov', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pl':
+ if (['agro', 'aid', 'art', 'atm', 'augustow', 'auto', 'babia-gora', 'bedzin', 'beskidy', 'bialowieza', 'bialystok', 'bielawa', 'bieszczady', 'biz', 'boleslawiec', 'bydgoszcz', 'bytom', 'cieszyn', 'com', 'czeladz', 'czest', 'dlugoleka', 'edu', 'elblag', 'elk', 'gda', 'gdansk', 'glogow', 'gmina', 'gniezno', 'gorlice', 'gov', 'grajewo', 'gsm', 'ilawa', 'info', 'jaworzno', 'jelenia-gora', 'jgora', 'kalisz', 'karpacz', 'kartuzy', 'kaszuby', 'katowice', 'kazimierz-dolny', 'kepno', 'ketrzyn', 'klodzko', 'kobierzyce', 'kolobrzeg', 'konin', 'konskowola', 'krakow', 'kutno', 'lapy', 'lebork', 'legnica', 'lezajsk', 'limanowa', 'lodz', 'lomza', 'lowicz', 'lubin', 'lublin', 'lukow', 'mail', 'malbork', 'malopolska', 'mazowsze', 'mazury', 'media', 'miasta', 'mielec', 'mielno', 'mil', 'mragowo', 'naklo', 'net', 'ngo', 'nieruchomosci', 'nom', 'nowaruda', 'nysa', 'olawa', 'olecko', 'olkusz', 'olsztyn', 'opoczno', 'opole', 'org', 'ostroda', 'ostroleka', 'ostrowiec', 'ostrowwlkp', 'pc', 'pila', 'pisz', 'podhale', 'podlasie', 'polkowice', 'pomorskie', 'pomorze', 'powiat', 'poznan', 'priv', 'prochowice', 'pruszkow', 'przeworsk', 'pulawy', 'radom', 'rawa-maz', 'realestate', 'rel', 'rybnik', 'rzeszow', 'sanok', 'sejny', 'sex', 'shop', 'sklep', 'skoczow', 'slask', 'slupsk', 'sos', 'sosnowiec', 'stalowa-wola', 'starachowice', 'stargard', 'suwalki', 'swidnica', 'swiebodzin', 'swinoujscie', 'szczecin', 'szczytno', 'szkola', 'targi', 'tarnobrzeg', 'tgory', 'tm', 'torun', 'tourism', 'travel', 'turek', 'turystyka', 'tychy', 'ustka', 'walbrzych', 'warmia', 'warszawa', 'waw', 'wegrow', 'wielun', 'wlocl', 'wloclawek', 'wodzislaw', 'wolomin', 'wroc', 'wroclaw', 'zachpomor', 'zagan', 'zarow', 'zgora', 'zgorzelec'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pn':
+ if (['in', 'co', 'eu', 'org', 'net', 'me', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pr':
+ if (['ac', 'biz', 'com', 'edu', 'est', 'gov', 'info', 'isla', 'name', 'net', 'org', 'pro', 'prof'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pro':
+ if (['aaa', 'aca', 'acct', 'eng', 'avocat', 'bar', 'jur', 'recht', 'law', 'med', 'cpa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ps':
+ if (['edu', 'gov', 'sec', 'plo', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pt':
+ if (['com', 'edu', 'gov', 'int', 'net', 'nome', 'org', 'publ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pw':
+ if (['co', 'ne', 'or', 'ed', 'go', 'belau'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'py':
+ if (['com', 'coop', 'edu', 'mil', 'gov', 'org', 'net', 'una'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'qa':
+ if (['com', 'edu', 'sch', 'gov', 'mil', 'net', 'org', 'name'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 're':
+ if (['asso', 'com', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ro':
+ if (['arts', 'com', 'firm', 'info', 'nom', 'nt', 'org', 'rec', 'store', 'tm', 'www'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rs':
+ if (['ac', 'co', 'edu', 'gov', 'in', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ru':
+ if (['ac', 'adygeya', 'altai', 'amur', 'amursk', 'arkhangelsk', 'astrakhan', 'baikal', 'bashkiria', 'belgorod', 'bir', 'bryansk', 'buryatia', 'cap', 'cbg', 'chel', 'chelyabinsk', 'chita', 'chukotka', 'cmw', 'com', 'dagestan', 'e-burg', 'edu', 'fareast', 'gov', 'grozny', 'int', 'irkutsk', 'ivanovo', 'izhevsk', 'jamal', 'jar', 'joshkar-ola', 'k-uralsk', 'kalmykia', 'kaluga', 'kamchatka', 'karelia', 'kazan', 'kchr', 'kemerovo', 'khabarovsk', 'khakassia', 'khv', 'kirov', 'kms', 'koenig', 'komi', 'kostroma', 'krasnoyarsk', 'kuban', 'kurgan', 'kursk', 'kustanai', 'kuzbass', 'lipetsk', 'magadan', 'magnitka', 'mari', 'mari-el', 'marine', 'mil', 'mordovia', 'mos', 'mosreg', 'msk', 'murmansk', 'mytis', 'nakhodka', 'nalchik', 'net', 'nkz', 'nnov', 'norilsk', 'nov', 'novosibirsk', 'nsk', 'omsk', 'orenburg', 'org', 'oryol', 'oskol', 'palana', 'penza', 'perm', 'pp', 'pskov', 'ptz', 'pyatigorsk', 'rnd', 'rubtsovsk', 'ryazan', 'sakhalin', 'samara', 'saratov', 'simbirsk', 'smolensk', 'snz', 'spb', 'stavropol', 'stv', 'surgut', 'syzran', 'tambov', 'tatarstan', 'test', 'tlt', 'tom', 'tomsk', 'tsaritsyn', 'tsk', 'tula', 'tuva', 'tver', 'tyumen', 'udm', 'udmurtia', 'ulan-ude', 'vdonsk', 'vladikavkaz', 'vladimir', 'vladivostok', 'volgograd', 'vologda', 'voronezh', 'vrn', 'vyatka', 'yakutia', 'yamal', 'yaroslavl', 'yekaterinburg', 'yuzhno-sakhalinsk', 'zgrad'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rw':
+ if (['gov', 'net', 'edu', 'ac', 'com', 'co', 'int', 'mil', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sa':
+ if (['com', 'edu', 'gov', 'med', 'net', 'org', 'pub', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sc':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sd':
+ if (['com', 'edu', 'gov', 'info', 'med', 'net', 'org', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'se':
+ if (['a', 'ac', 'b', 'bd', 'brand', 'c', 'd', 'e', 'f', 'fh', 'fhsk', 'fhv', 'g', 'h', 'i', 'k', 'komforb', 'kommunalforbund', 'komvux', 'l', 'lanbib', 'm', 'n', 'naturbruksgymn', 'o', 'org', 'p', 'parti', 'pp', 'press', 'r', 's', 't', 'tm', 'u', 'w', 'x', 'y', 'z'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sg':
+ if (['com', 'edu', 'gov', 'idn', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sh':
+ if (['com', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sl':
+ if (['com', 'net', 'edu', 'gov', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sn':
+ if (['art', 'com', 'edu', 'gouv', 'org', 'perso', 'univ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'so':
+ if (['com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'st':
+ if (['co', 'com', 'consulado', 'edu', 'embaixada', 'gov', 'mil', 'net', 'org', 'principe', 'saotome', 'store'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sv':
+ if (['edu', 'gov', 'com', 'org', 'red', 'gob'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sy':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sz':
+ if (['co', 'ac', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'th':
+ if (['ac', 'co', 'go', 'in', 'mi', 'net', 'or'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tj':
+ if (['ac', 'aero', 'biz', 'co', 'com', 'coop', 'dyn', 'edu', 'go', 'gov', 'info', 'int', 'mil', 'museum', 'my', 'name', 'net', 'nic', 'org', 'per', 'pro', 'test', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tl':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tm':
+ if (['com', 'co', 'org', 'net', 'nom', 'gov', 'mil', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tn':
+ if (['agrinet', 'com', 'defense', 'edunet', 'ens', 'fin', 'gov', 'ind', 'info', 'intl', 'mincom', 'nat', 'net', 'org', 'perso', 'rnrt', 'rns', 'rnu', 'tourism', 'turen'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'to':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tr':
+ if (['av', 'bbs', 'bel', 'biz', 'com', 'dr', 'edu', 'gen', 'gov', 'info', 'k12', 'kep', 'mil', 'name', 'nc', 'net', 'org', 'pol', 'tel', 'tv', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tt':
+ if (['co', 'com', 'org', 'net', 'biz', 'info', 'pro', 'int', 'coop', 'jobs', 'mobi', 'travel', 'museum', 'aero', 'name', 'gov', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tw':
+ if (['club', 'com', 'ebiz', 'edu', 'game', 'gov', 'idv', 'mil', 'net', 'org', 'xn--czrw28b', 'xn--uc0atv', 'xn--zf0ao64a'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tz':
+ if (['ac', 'co', 'go', 'hotel', 'info', 'me', 'mil', 'mobi', 'ne', 'or', 'sc', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ua':
+ if (['at', 'cherkassy', 'cherkasy', 'chernigov', 'chernihiv', 'chernivtsi', 'chernovtsy', 'ck', 'cn', 'co', 'com', 'cr', 'crimea', 'cv', 'dn', 'dnepropetrovsk', 'dnipropetrovsk', 'dominic', 'donetsk', 'dp', 'edu', 'gov', 'if', 'in', 'ivano-frankivsk', 'kh', 'kharkiv', 'kharkov', 'kherson', 'khmelnitskiy', 'khmelnytskyi', 'kiev', 'kirovograd', 'km', 'kr', 'krym', 'ks', 'kv', 'kyiv', 'lg', 'lt', 'lugansk', 'lutsk', 'lv', 'lviv', 'mk', 'mykolaiv', 'net', 'nikolaev', 'od', 'odesa', 'odessa', 'org', 'pl', 'poltava', 'pp', 'rivne', 'rovno', 'rv', 'sb', 'sebastopol', 'sevastopol', 'sm', 'sumy', 'te', 'ternopil', 'uz', 'uzhgorod', 'vinnica', 'vinnytsia', 'vn', 'volyn', 'yalta', 'zaporizhzhe', 'zaporizhzhia', 'zhitomir', 'zhytomyr', 'zp', 'zt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ug':
+ if (['co', 'ac', 'sc', 'go', 'ne', 'or', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uk':
+ if (['ac', 'bl', 'british-library', 'co', 'gov', 'govt', 'jcpc', 'jet', 'judiciary', 'lea', 'ltd', 'me', 'mil', 'mod', 'net', 'nhs', 'nic', 'nls', 'org', 'orgn', 'parliament', 'plc', 'police', 'royal', 'sch', 'supremecourt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'us':
+ if (['aa', 'ae', 'ak', 'al', 'ap', 'ar', 'as', 'az', 'ca', 'cm', 'co', 'ct', 'cz', 'dc', 'de', 'dni', 'fed', 'fl', 'fm', 'ga', 'gu', 'hi', 'ia', 'id', 'il', 'in', 'isa', 'kids', 'ks', 'ky', 'la', 'ma', 'md', 'me', 'mh', 'mi', 'mn', 'mo', 'mp', 'ms', 'mt', 'nb', 'nc', 'nd', 'ne', 'nh', 'nj', 'nm', 'nsn', 'nv', 'ny', 'oh', 'ok', 'or', 'pa', 'pi', 'pr', 'pw', 'ri', 'sc', 'sd', 'tn', 'tt', 'tx', 'ut', 'va', 'vi', 'vt', 'wa', 'wi', 'wv', 'wy'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uy':
+ if (['com', 'edu', 'gub', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uz':
+ if (['co', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vc':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 've':
+ if (['arts', 'co', 'com', 'e12', 'edu', 'firm', 'gob', 'gov', 'info', 'int', 'mil', 'net', 'org', 'radio', 'rec', 'store', 'tec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vi':
+ if (['co', 'org', 'com', 'net', 'k12'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vn':
+ if (['ac', 'biz', 'com', 'edu', 'gov', 'health', 'info', 'int', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vu':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ws':
+ if (['org', 'gov', 'edu', 'com', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--90a3ac':
+ if (['xn--o1ac', 'xn--c1avg', 'xn--90azh', 'xn--d1at', 'xn--o1ach', 'xn--80au'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--j6w193g':
+ if (['xn--55qx5d', 'xn--wcvs22d', 'xn--mxtq1m', 'xn--gmqw5a', 'xn--od0alg', 'xn--uc0atv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--o3cw4h':
+ if (['xn--12c1fe0br', 'xn--12co0c3b4eva', 'xn--h3cuzk1di', 'xn--o3cyx2a', 'xn--m3ch0j3a', 'xn--12cfi8ixb8l'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'za':
+ if (['ac', 'agric', 'alt', 'bourse', 'city', 'co', 'cybernet', 'db', 'edu', 'gov', 'grondar', 'iaccess', 'imt', 'inca', 'landesign', 'law', 'mil', 'net', 'ngo', 'nis', 'nom', 'olivetti', 'org', 'pix', 'school', 'tm', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zm':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gov', 'info', 'mil', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zw':
+ if (['co', 'ac', 'org', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ }
+ return wa[1] + '.' + wa[0];
+ }
+ let bdom = get_realdomain(location.hostname),
+ asked = ['', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org', 'addons.mozilla.org', 'addons.thunderbird.net', 'web.archive.org', 't.co'];
+ if (g.ign1 == 'y') {
+ asked.push(location.hostname);
+ }
+ let running = false;
+ function scanme() {
+ if (!running) {
+ running = true;
+ let unknown = [];
+ document.querySelectorAll('a[href]:not([data-iatt])').forEach(a => {
+ let aF = (new URL(a.href)).hostname || '';
+ a.dataset.iatt = aF;
+ if (!asked.includes(aF)) {
+ asked.push(aF);
+ if (!/^(.*)\.(danwin1210\.me|wikipedia\.org|onion|i2p|invalid|test|local|localhost|([0-9]{1,3})|bbs|chan|cyb|dyn|geek|gopher|indy|libre|neo|null|o|oss|oz|parody|pirate|bit|lib|coin|emc|bazar|fur)$/.test(aF) && get_realdomain(aF) != bdom && aF.length >= 4) {
+ unknown.push(aF);
+ }
+ }
+ });
+ if (unknown.length > 0) {
+ chrome.runtime.sendMessage(unknown);
+ }
+ running = false;
+ }
+ }
+ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
+ if (request.length == 2) {
+ document.querySelectorAll("a[href][data-iatt='" + request[0] + "']").forEach(a => {
+ if (request[1]) {
+ a.dataset.iatt = 'y';
+ if (g.alt == 'y') {
+ if (!a.href.startsWith('https://web.archive.org/web/')) {
+ a.href = 'https://web.archive.org/web/' + a.href;
+ }
+ a.title = 'Arkivo!';
+ } else {
+ a.title = 'Malamiko!';
+ }
+ } else {
+ a.dataset.iatt = 'n';
+ }
+ });
+ }
+ sendResponse(true);
+ return;
+ });
+ scanme();
+ if (g.obs == 'y') {
+ (new MutationObserver(scanme)).observe(document, {
+ attributes: true,
+ attributeFilter: ['href'],
+ childList: true,
+ subtree: true
+ });
+ }
+ });
+}
\ No newline at end of file
diff --git a/addons/isattlinkCR/localdb.html b/addons/isattlinkCR/localdb.html
new file mode 100644
index 000000000..5e358f85c
--- /dev/null
+++ b/addons/isattlinkCR/localdb.html
@@ -0,0 +1,17 @@
+
+
+
+ 🗄
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/isattlinkCR/localdb.js b/addons/isattlinkCR/localdb.js
new file mode 100644
index 000000000..d23904c13
--- /dev/null
+++ b/addons/isattlinkCR/localdb.js
@@ -0,0 +1,67 @@
+let irun = false;
+document.addEventListener('DOMContentLoaded', () => {
+ chrome.storage.local.get(['mul'], g => {
+ let ul = g.mul || 'eo';
+ fetch('i18n/' + ul + '.json', {
+ method: 'GET'
+ }).then(j => j.json()).then(j => {
+ document.querySelectorAll('span[tek]').forEach(x => {
+ x.innerText = j[x.getAttribute('tek')];
+ });
+ document.body.style.display = 'block';
+ });
+ });
+});
+document.getElementById('f').addEventListener('change', e => {
+ let ff = e.target.files[0];
+ if (ff) {
+ let r = new FileReader();
+ r.addEventListener('load', e => {
+ if (ff.size > 4) {
+ let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
+ if (g.length > 0) {
+ chrome.storage.local.get(['ldb'], gs => {
+ irun = true;
+ let cnt0, cnt1 = 0,
+ gc = 1,
+ db = JSON.parse(gs.ldb || '[]');
+ cnt0 = db.length;
+ document.getElementById('pbr').max = g.length;
+ g.forEach(x => {
+ document.getElementById('pbr').value = gc;
+ gc++;
+ if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
+ db.push(x);
+ }
+ });
+ g = null;
+ cnt1 = db.length;
+ if (cnt1 != cnt0) {
+ chrome.storage.local.set({
+ 'ldb': JSON.stringify(db)
+ });
+ }
+ chrome.runtime.sendMessage('dbmode,rl', () => {
+ alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
+ location.reload();
+ });
+ });
+ }
+ }
+ });
+ r.readAsText(ff);
+ }
+});
+document.getElementById('ldb_i').addEventListener('click', () => {
+ if (!irun) {
+ document.getElementById('f').click();
+ }
+});
+document.getElementById('ldb_c').addEventListener('click', () => {
+ if (!irun) {
+ chrome.runtime.sendMessage('dbmode,cl', () => {
+ alert(document.querySelector('span[tek=opxdone]').innerText);
+ location.reload();
+ });
+ }
+});
\ No newline at end of file
diff --git a/addons/isattlinkCR/manifest.json b/addons/isattlinkCR/manifest.json
new file mode 100644
index 000000000..ee1ee70c2
--- /dev/null
+++ b/addons/isattlinkCR/manifest.json
@@ -0,0 +1,37 @@
+{
+ "manifest_version": 2,
+ "name": "Ĉu ĉi tiuj ligoj blokos Tor-uzanton?",
+ "version": "1.0.2.2",
+ "minimum_chrome_version": "68",
+ "homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
+ "author": "Ss",
+ "incognito": "split",
+ "permissions": [
+ "storage",
+ "unlimitedStorage"
+ ],
+ "icons": {
+ "72": "icons/72.png"
+ },
+ "background": {
+ "scripts": [
+ "bg.js"
+ ]
+ },
+ "options_ui": {
+ "chrome_style": false,
+ "page": "cfg.html"
+ },
+ "content_scripts": [
+ {
+ "matches": [
+ "http://*/*",
+ "https://*/*"
+ ],
+ "js": [
+ "cs.js"
+ ],
+ "run_at": "document_end"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/addons/isattlinkFX/README.md b/addons/isattlinkFX/README.md
new file mode 100644
index 000000000..7abbc8ad3
--- /dev/null
+++ b/addons/isattlinkFX/README.md
@@ -0,0 +1,2 @@
+- [More Information / Download](../../subfiles/about.isat.md)
+- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
\ No newline at end of file
diff --git a/addons/isattlinkFX/bg.js b/addons/isattlinkFX/bg.js
new file mode 100644
index 000000000..50e7e5830
--- /dev/null
+++ b/addons/isattlinkFX/bg.js
@@ -0,0 +1,270 @@
+let localUse = false,
+ localDB = [],
+ timr, memcache = {},
+ forcePurge = false,
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
+/*
+browser.storage.local.get(['cep']).then(g => {
+ if (g.cep == 'y') {
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
+ } else {
+ if (g.cep != 'n') {
+ browser.storage.local.set({
+ 'cep': 'n'
+ });
+ fetch('http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ok.php', {
+ method: 'GET',
+ mode: 'cors'
+ }).then(r => r.text()).then(r => {
+ if (r == 'ok') {
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
+ browser.storage.local.set({
+ 'cep': 'y'
+ });
+ }
+ }).catch(() => {});
+ }
+ }
+});
+*/
+function is_hostile(f) {
+ if (localUse) {
+ return new Promise((g, b) => {
+ g(localDB.includes(f) ? true : false);
+ });
+ }
+ return new Promise((g, b) => {
+ fetch(apiurl, {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ body: 'f=' + f
+ }).then(r => r.json()).then(r => {
+ if (r[0]) {
+ g(r[1]);
+ } else {
+ b();
+ }
+ }).catch(b);
+ });
+}
+function i_know_you(f) {
+ if (!/^([a-z0-9_.-]{1,255})\.([a-z]{2,80})$/.test(f)) {
+ return new Promise((g, b) => {
+ g(200);
+ });
+ }
+ let m;
+ if (memcache[f] != undefined) {
+ m = memcache[f];
+ return new Promise((g, b) => {
+ g(m);
+ });
+ }
+ return new Promise((g, b) => {
+ browser.storage.local.get([f]).then((ff) => {
+ if (ff[f]) {
+ if (ff[f] == 'y') {
+ memcache[f] = 1;
+ g(1);
+ } else {
+ memcache[f] = -1;
+ g(-1);
+ }
+ } else {
+ g(0);
+ }
+ }, () => {
+ g(0);
+ });
+ });
+}
+function forget_cache() {
+ browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
+ browser.storage.local.clear();
+ memcache = {};
+ browser.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ browser.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ browser.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ browser.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ browser.storage.local.set({
+ 'lastV': (browser.runtime.getManifest()).version
+ });
+ });
+ clearTimeout(timr);
+ timr = setTimeout(function () {
+ forget_cache();
+ }, 1814400000);
+}
+browser.storage.local.get(['lastU', 'lastV', 'ldb', 'opd']).then(g => {
+ localUse = (g.opd == 'n') ? true : false;
+ localDB = JSON.parse(g.ldb || '[]');
+ if (g.lastU) {
+ if (Math.abs(Math.round((new Date()).getTime() / 1000) - g.lastU) > 1814400) {
+ browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
+ browser.storage.local.clear();
+ memcache = {};
+ browser.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ browser.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ browser.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ browser.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ });
+ }
+ } else {
+ browser.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ }
+ let nowVer = (browser.runtime.getManifest()).version;
+ if (g.lastV != nowVer || forcePurge) {
+ console.log('Updated', nowVer);
+ browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
+ browser.storage.local.clear();
+ memcache = {};
+ browser.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ browser.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ browser.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ browser.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ browser.storage.local.set({
+ 'lastV': (browser.runtime.getManifest()).version
+ });
+ });
+ }
+ timr = setTimeout(function () {
+ forget_cache();
+ }, 1814400000);
+});
+browser.runtime.onMessage.addListener((requests, sender, sendResponse) => {
+ if (requests) {
+ if (requests === 'clear') {
+ forget_cache();
+ return;
+ }
+ if (requests.indexOf('dbmode,') === 0) {
+ switch (requests) {
+ case 'dbmode,s1':
+ browser.storage.local.set({
+ 'opd': 'y'
+ });
+ localUse = false;
+ break;
+ case 'dbmode,s0':
+ browser.storage.local.set({
+ 'opd': 'n'
+ });
+ localUse = true;
+ break;
+ case 'dbmode,cl':
+ browser.storage.local.set({
+ 'ldb': '[]'
+ });
+ localDB = [];
+ break;
+ case 'dbmode,rl':
+ browser.storage.local.get(['ldb']).then(g => {
+ localDB = JSON.parse(g.ldb || '[]');
+ });
+ break;
+ }
+ return;
+ }
+ requests.forEach(request => {
+ i_know_you(request).then((r) => {
+ if (r == 1 || r == -1) {
+ browser.tabs.sendMessage(sender.tab.id, [request, ((r == 1) ? true : false)]);
+ }
+ if (r == 0) {
+ is_hostile(request).then((a) => {
+ if (a) {
+ browser.storage.local.set({
+ [request]: 'y'
+ });
+ } else {
+ browser.storage.local.set({
+ [request]: 'n'
+ });
+ }
+ if (Object.keys(memcache).length > 650) {
+ memcache = {};
+ }
+ browser.tabs.sendMessage(sender.tab.id, [request, a]);
+ }, () => {
+ browser.tabs.sendMessage(sender.tab.id, [request, false]);
+ });
+ }
+ }, () => {});
+ });
+ }
+ return;
+});
\ No newline at end of file
diff --git a/addons/isattlinkFX/cfg.html b/addons/isattlinkFX/cfg.html
new file mode 100644
index 000000000..364e4f1ae
--- /dev/null
+++ b/addons/isattlinkFX/cfg.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ [ → Ss API ]
+ [ → ]
+
+ 💬
+
+
+
+
+
+
+ : ?
+ : ?
+ : ?
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/isattlinkFX/cg.js b/addons/isattlinkFX/cg.js
new file mode 100644
index 000000000..1627c77b3
--- /dev/null
+++ b/addons/isattlinkFX/cg.js
@@ -0,0 +1,96 @@
+document.addEventListener('DOMContentLoaded', () => {
+ browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'mul', 'opd']).then(g => {
+ document.getElementById('ign1').checked = (g.ign1 == 'y') ? true : false;
+ document.getElementById('obs').checked = (g.obs == 'y') ? true : false;
+ document.getElementById('dbg').checked = (g.dbg == 'y') ? true : false;
+ document.getElementById('alt').checked = (g.alt == 'y') ? true : false;
+ document.getElementById('opon').checked = (g.opd != 'n') ? true : false;
+ document.getElementById('opoff').checked = (g.opd == 'n') ? true : false;
+ let ul = g.mul || 'eo';
+ fetch('i18n/' + ul + '.json', {
+ method: 'GET'
+ }).then(j => j.json()).then(j => {
+ document.querySelectorAll('span[tek]').forEach(x => {
+ x.innerText = j[x.getAttribute('tek')];
+ });
+ document.body.style.display = 'block';
+ });
+ });
+});
+document.getElementById('myul').addEventListener('change', () => {
+ let xul = document.getElementById('myul').value;
+ if (xul.length == 2) {
+ browser.storage.local.set({
+ 'mul': xul
+ });
+ location.reload(true);
+ }
+});
+document.getElementById('ign1').addEventListener('click', () => {
+ browser.storage.local.set({
+ 'ign1': (document.getElementById('ign1').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('obs').addEventListener('click', () => {
+ browser.storage.local.set({
+ 'obs': (document.getElementById('obs').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('dbg').addEventListener('click', () => {
+ browser.storage.local.set({
+ 'dbg': (document.getElementById('dbg').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('alt').addEventListener('click', () => {
+ browser.storage.local.set({
+ 'alt': (document.getElementById('alt').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('opon').addEventListener('click', () => {
+ browser.runtime.sendMessage('dbmode,s1').then(() => {
+ location.reload();
+ });
+});
+document.getElementById('opoff').addEventListener('click', () => {
+ browser.runtime.sendMessage('dbmode,s0').then(() => {
+ location.reload();
+ });
+});
+document.getElementById('crs').addEventListener('click', () => {
+ browser.runtime.sendMessage('clear').then(() => {
+ location.reload();
+ });
+});
+document.getElementById('sms').addEventListener('click', () => {
+ document.getElementById('smsa').style.display = 'none';
+ browser.storage.local.get().then(g => {
+ let iY = 0,
+ iN = 0,
+ iT, tmp, akd = [];
+ Object.keys(g).forEach(a => {
+ if (!['ign1', 'obs', 'dbg', 'alt', 'lastU', 'lastV', 'cep', 'mul', 'opd', 'ldb'].includes(a) && (g[a] == 'y' || g[a] == 'n')) {
+ if (!akd.includes(a)) {
+ akd.push(a);
+ if (g[a] == 'y') {
+ iY++;
+ } else {
+ iN++;
+ }
+ }
+ }
+ });
+ iT = iY + iN;
+ if (iT > 0) {
+ tmp = (iY * 100 / iT).toFixed(1);
+ document.getElementById('viry').innerText = iY + ' (' + tmp + '%)';
+ tmp = (iN * 100 / iT).toFixed(1);
+ document.getElementById('virn').innerText = iN + ' (' + tmp + '%)';
+ document.getElementById('viro').innerText = (iY + iN);
+ } else {
+ document.getElementById('viry').innerText = 0;
+ document.getElementById('virn').innerText = 0;
+ document.getElementById('viro').innerText = 0;
+ }
+ document.getElementById('smsb').style.display = 'inline';
+ });
+});
\ No newline at end of file
diff --git a/addons/isattlinkFX/cs.js b/addons/isattlinkFX/cs.js
new file mode 100644
index 000000000..a9e35b3fd
--- /dev/null
+++ b/addons/isattlinkFX/cs.js
@@ -0,0 +1,1129 @@
+if (document.body && !['ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org'].includes(location.hostname)) {
+ let cs = (function () {
+ let s = document.createElement('style');
+ document.head.appendChild(s);
+ return s.sheet;
+ })();
+ if (cs) {
+ cs.insertRule("a[data-iatt=y]{cursor:not-allowed !important;text-decoration-line:line-through !important;text-decoration-color:red !important;text-decoration-style:double !important}", 0);
+ cs.insertRule("a[data-iatt=y]::after{content:'[\\1F6A8]';font-weight:bold !important;color:red !important;display:inline-block !important}", 1);
+ cs.insertRule("a[data-iatt=y]:hover::after{content:'[\\1F622]'}", 2);
+ cs.insertRule("a[data-iatt=y]:hover{color:red !important}", 3);
+ cs.insertRule("a[data-iatt=y][data-mitm=y]{border:1px dotted purple !important}", 4);
+ }
+ browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt']).then(g => {
+ function get_realdomain(w) {
+ let wa = w.split('.');
+ let wa_l = wa.length;
+ if (wa_l < 3 || (wa_l == 4 && /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(w))) {
+ return w;
+ }
+ wa.reverse();
+ switch (wa[0]) {
+ case 'ac':
+ if (['com', 'edu', 'gov', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ad':
+ if (wa[1] == 'nom') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ae':
+ if (['co', 'net', 'org', 'sch', 'ac', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aero':
+ if (['accident-investigation', 'accident-prevention', 'aerobatic', 'aeroclub', 'aerodrome', 'agents', 'aircraft', 'airline', 'airport', 'air-surveillance', 'airtraffic', 'air-traffic-control', 'ambulance', 'amusement', 'association', 'author', 'ballooning', 'broker', 'caa', 'cargo', 'catering', 'certification', 'championship', 'charter', 'civilaviation', 'club', 'conference', 'consultant', 'consulting', 'control', 'council', 'crew', 'design', 'dgca', 'educator', 'emergency', 'engine', 'engineer', 'entertainment', 'equipment', 'exchange', 'express', 'federation', 'flight', 'freight', 'fuel', 'gliding', 'government', 'groundhandling', 'group', 'hanggliding', 'homebuilt', 'insurance', 'journal', 'journalist', 'leasing', 'logistics', 'magazine', 'maintenance', 'media', 'microlight', 'modelling', 'navigation', 'parachuting', 'paragliding', 'passenger-association', 'pilot', 'press', 'production', 'recreation', 'repbody', 'res', 'research', 'rotorcraft', 'safety', 'scientist', 'services', 'show', 'skydiving', 'software', 'student', 'trader', 'trading', 'trainer', 'union', 'workinggroup', 'works'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'af':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ag':
+ if (['com', 'net', 'org', 'co', 'nom', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ai':
+ if (['off', 'com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'al':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ao':
+ if (['co', 'ed', 'it', 'og', 'pb', 'gv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ar':
+ if (['com', 'edu', 'gov', 'gob', 'int', 'mil', 'net', 'org', 'tur', 'musica'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'as':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'at':
+ if (['gv', 'ac', 'co', 'or', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'au':
+ if (wa[1] == 'gov' && wa[3] != undefined) {
+ if (['act', 'nsw', 'nt', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (wa[1] == 'edu' && wa[3] != undefined) {
+ if (['act', 'catholic', 'eq', 'nsw', 'nt', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['act', 'asn', 'com', 'conf', 'csiro', 'edu', 'gov', 'id', 'info', 'net', 'nsw', 'nt', 'org', 'oz', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aw':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'az':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'int', 'mil', 'name', 'net', 'org', 'pp', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ba':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'net', 'org', 'rs'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bb':
+ if (['biz', 'co', 'com', 'edu', 'gov', 'info', 'net', 'org', 'store', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bd':
+ if (['com', 'edu', 'ac', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'be':
+ if (wa[1] == 'ac') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bf':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bg':
+ if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bh':
+ if (['com', 'info', 'cc', 'edu', 'biz', 'net', 'org', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bi':
+ if (['ac', 'co', 'com', 'edu', 'gouv', 'gov', 'int', 'mil', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bj':
+ if (['asso', 'barreau', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bn':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bo':
+ if (['academia', 'agro', 'arte', 'blog', 'bolivia', 'ciencia', 'com', 'cooperativa', 'democracia', 'deporte', 'ecologia', 'economia', 'edu', 'empresa', 'gob', 'gov', 'indigena', 'industria', 'info', 'int', 'medicina', 'mil', 'movimiento', 'musica', 'natural', 'net', 'nombre', 'noticias', 'org', 'patria', 'plurinacional', 'politica', 'profesional', 'pueblo', 'revista', 'salud', 'tecnologia', 'tksat', 'transporte', 'tv', 'web', 'wiki'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'br':
+ if (['9guacu', 'abc', 'adm', 'adv', 'agr', 'aju', 'am', 'anani', 'aparecida', 'arq', 'art', 'ato', 'b', 'barueri', 'belem', 'bhz', 'bio', 'blog', 'bmd', 'boavista', 'bsb', 'campinagrande', 'campinas', 'caxias', 'cim', 'cng', 'cnt', 'com', 'contagem', 'coop', 'cri', 'cuiaba', 'curitiba', 'def', 'ecn', 'eco', 'edu', 'emp', 'eng', 'esp', 'etc', 'eti', 'far', 'feira', 'flog', 'floripa', 'fm', 'fnd', 'fortal', 'fot', 'foz', 'fst', 'g12', 'ggf', 'goiania', 'gov', 'gru', 'imb', 'ind', 'inf', 'jab', 'jampa', 'jdf', 'joinville', 'jor', 'jus', 'leg', 'lel', 'londrina', 'macapa', 'maceio', 'manaus', 'maringa', 'mat', 'med', 'mil', 'morena', 'mp', 'mus', 'natal', 'net', 'niteroi', 'nom', 'not', 'ntr', 'odo', 'ong', 'org', 'osasco', 'palmas', 'poa', 'ppg', 'pro', 'psc', 'psi', 'pvh', 'qsl', 'radio', 'rec', 'recife', 'ribeirao', 'rio', 'riobranco', 'riopreto', 'salvador', 'sampa', 'santamaria', 'santoandre', 'saobernardo', 'saogonca', 'sjc', 'slg', 'slz', 'sorocaba', 'srv', 'taxi', 'teo', 'the', 'tmp', 'trd', 'tur', 'tv', 'udi', 'vet', 'vix', 'vlog', 'wiki', 'zlg'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bs':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bw':
+ if (['org', 'ac', 'co', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'by':
+ if (['gov', 'mil', 'com', 'of'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'nym', 'of', 'org', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ca':
+ if (['ab', 'bc', 'gc', 'mb', 'nb', 'nf', 'nl', 'ns', 'nt', 'nu', 'on', 'pe', 'qc', 'sk', 'yk'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cd':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ci':
+ if (['ac', 'asso', 'co', 'com', 'ed', 'edu', 'go', 'gouv', 'int', 'md', 'net', 'or', 'org', 'presse', 'xn--aroport-bya'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ck':
+ if (['biz', 'co', 'edu', 'gen', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cl':
+ if (['gov', 'gob', 'co', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cm':
+ if (['co', 'com', 'gov', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cn':
+ if (['ac', 'ah', 'bj', 'com', 'cq', 'edu', 'fj', 'gd', 'gov', 'gs', 'gx', 'gz', 'ha', 'hb', 'he', 'hi', 'hk', 'hl', 'hn', 'jl', 'js', 'jx', 'ln', 'mil', 'mo', 'net', 'nm', 'nx', 'org', 'qh', 'sc', 'sd', 'sh', 'sn', 'sx', 'tj', 'tw', 'xj', 'xn--55qx5d', 'xn--io0a7i', 'xn--od0alg', 'xz', 'yn', 'zj'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'co':
+ if (['arts', 'com', 'edu', 'firm', 'gov', 'info', 'int', 'mil', 'net', 'nom', 'org', 'rec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'com':
+ if (['africa', 'ar', 'br', 'cn', 'co', 'de', 'eu', 'gb', 'gr', 'hu', 'jpn', 'kr', 'mex', 'no', 'qc', 'ru', 'sa', 'se', 'uk', 'us', 'uy', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cr':
+ if (['ac', 'co', 'ed', 'fi', 'go', 'or', 'sa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cu':
+ if (['com', 'edu', 'org', 'net', 'gov', 'inf'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cw':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cy':
+ if (['ac', 'biz', 'com', 'ekloges', 'gov', 'ltd', 'name', 'net', 'org', 'parliament', 'press', 'pro', 'tm'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dm':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'do':
+ if (['art', 'com', 'edu', 'gob', 'gov', 'mil', 'net', 'org', 'sld', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dz':
+ if (['art', 'asso', 'com', 'edu', 'gov', 'net', 'org', 'pol'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ec':
+ if (['com', 'edu', 'fin', 'gob', 'gov', 'info', 'k12', 'med', 'mil', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ee':
+ if (['aip', 'com', 'edu', 'fie', 'gov', 'lib', 'med', 'org', 'pri', 'riik'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'eg':
+ if (['com', 'edu', 'eun', 'gov', 'mil', 'name', 'net', 'org', 'sci'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'es':
+ if (['com', 'nom', 'org', 'gob', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'et':
+ if (['com', 'gov', 'org', 'edu', 'net', 'biz', 'name', 'info'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fi':
+ if (wa[1] == 'aland') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fj':
+ if (['ac', 'biz', 'com', 'info', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fr':
+ if (['aeroport', 'assedic', 'asso', 'avocat', 'avoues', 'cci', 'chambagri', 'chirurgiens-dentistes', 'com', 'experts-comptables', 'geometre-expert', 'gouv', 'greta', 'huissier-justice', 'medecin', 'nom', 'notaires', 'pharmacien', 'port', 'prd', 'presse', 'tm', 'veterinaire'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ge':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'pvt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gg':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gh':
+ if (['com', 'edu', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gi':
+ if (['com', 'edu', 'gov', 'ltd', 'mod', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gl':
+ if (['co', 'com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gn':
+ if (['ac', 'com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gov':
+ if (['al', 'alabama', 'alaska', 'americansamoa', 'ar', 'arizona', 'arkansas', 'as', 'az', 'ca', 'co', 'colorado', 'ct', 'dc', 'de', 'delaware', 'ehawaii', 'fl', 'florida', 'ga', 'georgia', 'guam', 'hawaii', 'ia', 'idaho', 'il', 'illinois', 'in', 'indiana', 'iowa', 'kansas', 'kentucky', 'ks', 'ky', 'la', 'louisiana', 'ma', 'maine', 'maryland', 'mass', 'massachusetts', 'md', 'mi', 'michigan', 'minnesota', 'mississippi', 'missouri', 'mn', 'mo', 'montana', 'ms', 'mt', 'nc', 'nd', 'ne', 'nebraska', 'nevada', 'newjersey', 'newmexico', 'nh', 'nj', 'northcarolina', 'northdakota', 'nv', 'ny', 'ohio', 'ok', 'oklahoma', 'oregon', 'pa', 'pennsylvania', 'pr', 'rhodeisland', 'ri', 'sc', 'sd', 'tennessee', 'texas', 'tn', 'utah', 'vermont', 'vi', 'virginia', 'vt', 'wa', 'washington', 'wi', 'wisconsin', 'wv', 'wy', 'wyoming'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gp':
+ if (['com', 'net', 'mobi', 'edu', 'org', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gr':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'mod', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gt':
+ if (['com', 'edu', 'net', 'gob', 'org', 'mil', 'ind'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gu':
+ if (['com', 'edu', 'gov', 'guam', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gy':
+ if (['co', 'com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hk':
+ if (['com', 'edu', 'gov', 'idv', 'net', 'org', 'xn--55qx5d', 'xn--ciqpn', 'xn--gmq050i', 'xn--gmqw5a', 'xn--io0a7i', 'xn--lcvr32d', 'xn--mk0axi', 'xn--mxtq1m', 'xn--od0alg', 'xn--od0aq3b', 'xn--tn0ag', 'xn--uc0atv', 'xn--uc0ay4a', 'xn--wcvs22d', 'xn--zf0avx'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hn':
+ if (['com', 'edu', 'gob', 'net', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hr':
+ if (['iz', 'from', 'name', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ht':
+ if (['com', 'shop', 'firm', 'info', 'adult', 'net', 'pro', 'org', 'med', 'art', 'coop', 'pol', 'asso', 'edu', 'rel', 'gouv', 'perso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hu':
+ if (['2000', 'agrar', 'bolt', 'casino', 'city', 'co', 'edu', 'erotica', 'erotika', 'film', 'forum', 'games', 'gov', 'hotel', 'info', 'ingatlan', 'jogasz', 'konyvelo', 'lakas', 'media', 'mobi', 'net', 'news', 'org', 'priv', 'reklam', 'sex', 'shop', 'sport', 'suli', 'szex', 'tm', 'tozsde', 'utazas', 'video'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'id':
+ if (['ac', 'biz', 'co', 'desa', 'go', 'mil', 'my', 'net', 'or', 'ponpes', 'sch', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ie':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'il':
+ if (['ac', 'co', 'gov', 'idf', 'k12', 'muni', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'im':
+ if (['ac', 'co', 'com', 'gov', 'net', 'org', 'ro', 'tt', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'in':
+ if (['ac', 'co', 'edu', 'ernet', 'firm', 'gen', 'gov', 'ind', 'mil', 'net', 'org', 'res', 'nic'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'int':
+ if (wa[1] == 'eu') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'io':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'iq':
+ if (['gov', 'edu', 'mil', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ir':
+ if (['ac', 'co', 'gov', 'id', 'net', 'org', 'sch', 'xn--mgba3a4f16a', 'xn--mgba3a4fra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'is':
+ if (['net', 'com', 'edu', 'gov', 'org', 'int'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'it':
+ if (['abr', 'abruzzo', 'ag', 'agrigento', 'al', 'alessandria', 'alto-adige', 'altoadige', 'an', 'ancona', 'andria-barletta-trani', 'andria-trani-barletta', 'andriabarlettatrani', 'andriatranibarletta', 'ao', 'aosta', 'aosta-valley', 'aostavalley', 'aoste', 'ap', 'aq', 'aquila', 'ar', 'arezzo', 'ascoli-piceno', 'ascolipiceno', 'asti', 'at', 'av', 'avellino', 'ba', 'balsan', 'balsan-sudtirol', 'balsan-suedtirol', 'bari', 'barletta-trani-andria', 'barlettatraniandria', 'bas', 'basilicata', 'belluno', 'benevento', 'bergamo', 'bg', 'bi', 'biella', 'bl', 'bn', 'bo', 'bologna', 'bolzano', 'bolzano-altoadige', 'bozen', 'bozen-sudtirol', 'bozen-suedtirol', 'br', 'brescia', 'brindisi', 'bs', 'bt', 'bulsan', 'bulsan-sudtirol', 'bulsan-suedtirol', 'bz', 'ca', 'cagliari', 'cal', 'calabria', 'caltanissetta', 'cam', 'campania', 'campidano-medio', 'campidanomedio', 'campobasso', 'carbonia-iglesias', 'carboniaiglesias', 'carrara-massa', 'carraramassa', 'caserta', 'catania', 'catanzaro', 'cb', 'ce', 'cesena-forli', 'cesenaforli', 'ch', 'chieti', 'ci', 'cl', 'cn', 'co', 'como', 'cosenza', 'cr', 'cremona', 'crotone', 'cs', 'ct', 'cuneo', 'cz', 'dell-ogliastra', 'dellogliastra', 'edu', 'emilia-romagna', 'emiliaromagna', 'emr', 'en', 'enna', 'fc', 'fe', 'fermo', 'ferrara', 'fg', 'fi', 'firenze', 'florence', 'fm', 'foggia', 'forli-cesena', 'forlicesena', 'fr', 'friuli-v-giulia', 'friuli-ve-giulia', 'friuli-vegiulia', 'friuli-venezia-giulia', 'friuli-veneziagiulia', 'friuli-vgiulia', 'friuliv-giulia', 'friulive-giulia', 'friulivegiulia', 'friulivenezia-giulia', 'friuliveneziagiulia', 'friulivgiulia', 'frosinone', 'fvg', 'ge', 'genoa', 'genova', 'go', 'gorizia', 'gov', 'gr', 'grosseto', 'iglesias-carbonia', 'iglesiascarbonia', 'im', 'imperia', 'is', 'isernia', 'kr', 'la-spezia', 'laquila', 'laspezia', 'latina', 'laz', 'lazio', 'lc', 'le', 'lecce', 'lecco', 'li', 'lig', 'liguria', 'livorno', 'lo', 'lodi', 'lom', 'lombardia', 'lombardy', 'lt', 'lu', 'lucania', 'lucca', 'macerata', 'mantova', 'mar', 'marche', 'massa-carrara', 'massacarrara', 'matera', 'mb', 'mc', 'me', 'medio-campidano', 'mediocampidano', 'messina', 'mi', 'milan', 'milano', 'mn', 'mo', 'modena', 'mol', 'molise', 'monza', 'monza-brianza', 'monza-e-della-brianza', 'monzabrianza', 'monzaebrianza', 'monzaedellabrianza', 'ms', 'mt', 'na', 'naples', 'napoli', 'no', 'novara', 'nu', 'nuoro', 'og', 'ogliastra', 'olbia-tempio', 'olbiatempio', 'or', 'oristano', 'ot', 'pa', 'padova', 'padua', 'palermo', 'parma', 'pavia', 'pc', 'pd', 'pe', 'perugia', 'pesaro-urbino', 'pesarourbino', 'pescara', 'pg', 'pi', 'piacenza', 'piedmont', 'piemonte', 'pisa', 'pistoia', 'pmn', 'pn', 'po', 'pordenone', 'potenza', 'pr', 'prato', 'pt', 'pu', 'pug', 'puglia', 'pv', 'pz', 'ra', 'ragusa', 'ravenna', 'rc', 're', 'reggio-calabria', 'reggio-emilia', 'reggiocalabria', 'reggioemilia', 'rg', 'ri', 'rieti', 'rimini', 'rm', 'rn', 'ro', 'roma', 'rome', 'rovigo', 'sa', 'salerno', 'sar', 'sardegna', 'sardinia', 'sassari', 'savona', 'si', 'sic', 'sicilia', 'sicily', 'siena', 'siracusa', 'so', 'sondrio', 'sp', 'sr', 'ss', 'suedtirol', 'sv', 'ta', 'taa', 'taranto', 'te', 'tempio-olbia', 'tempioolbia', 'teramo', 'terni', 'tn', 'to', 'torino', 'tos', 'toscana', 'tp', 'tr', 'trani-andria-barletta', 'trani-barletta-andria', 'traniandriabarletta', 'tranibarlettaandria', 'trapani', 'trentin-sud-tirol', 'trentin-sudtirol', 'trentin-sued-tirol', 'trentin-suedtirol', 'trentino', 'trentino-a-adige', 'trentino-aadige', 'trentino-alto-adige', 'trentino-altoadige', 'trentino-s-tirol', 'trentino-stirol', 'trentino-sud-tirol', 'trentino-sudtirol', 'trentino-sued-tirol', 'trentino-suedtirol', 'trentinoa-adige', 'trentinoaadige', 'trentinoalto-adige', 'trentinoaltoadige', 'trentinos-tirol', 'trentinostirol', 'trentinosud-tirol', 'trentinosudtirol', 'trentinosued-tirol', 'trentinosuedtirol', 'trentinsud-tirol', 'trentinsudtirol', 'trentinsued-tirol', 'trentinsuedtirol', 'trento', 'treviso', 'trieste', 'ts', 'turin', 'tuscany', 'tv', 'ud', 'udine', 'umb', 'umbria', 'urbino-pesaro', 'urbinopesaro', 'va', 'val-d-aosta', 'val-daosta', 'vald-aosta', 'valdaosta', 'valle-aosta', 'valle-d-aosta', 'valle-daosta', 'valleaosta', 'valled-aosta', 'valledaosta', 'vallee-aoste', 'vallee-d-aoste', 'valleeaoste', 'valleedaoste', 'vao', 'varese', 'vb', 'vc', 'vda', 've', 'ven', 'veneto', 'venezia', 'venice', 'verbania', 'vercelli', 'verona', 'vi', 'vibo-valentia', 'vibovalentia', 'vicenza', 'viterbo', 'vr', 'vs', 'vt', 'vv', 'xn--balsan-sdtirol-nsb', 'xn--bozen-sdtirol-2ob', 'xn--bulsan-sdtirol-nsb', 'xn--cesena-forl-mcb', 'xn--cesenaforl-i8a', 'xn--forl-cesena-fcb', 'xn--forlcesena-c8a', 'xn--sdtirol-n2a', 'xn--trentin-sd-tirol-rzb', 'xn--trentin-sdtirol-7vb', 'xn--trentino-sd-tirol-c3b', 'xn--trentino-sdtirol-szb', 'xn--trentinosd-tirol-rzb', 'xn--trentinosdtirol-7vb', 'xn--trentinsd-tirol-6vb', 'xn--trentinsdtirol-nsb', 'xn--valle-aoste-ebb', 'xn--valle-d-aoste-ehb', 'xn--valleaoste-e7a', 'xn--valledaoste-ebb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'je':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jm':
+ if (['com', 'net', 'org', 'edu', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jo':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jp':
+ if (['ac', 'ad', 'aichi', 'akita', 'aomori', 'chiba', 'co', 'ed', 'ehime', 'fukui', 'fukuoka', 'fukushima', 'gifu', 'go', 'gr', 'gunma', 'hiroshima', 'hokkaido', 'hyogo', 'ibaraki', 'ishikawa', 'iwate', 'kagawa', 'kagoshima', 'kanagawa', 'kochi', 'kumamoto', 'kyoto', 'lg', 'mie', 'miyagi', 'miyazaki', 'nagano', 'nagasaki', 'nara', 'ne', 'niigata', 'oita', 'okayama', 'okinawa', 'or', 'osaka', 'saga', 'saitama', 'shiga', 'shimane', 'shizuoka', 'tochigi', 'tokushima', 'tokyo', 'tottori', 'toyama', 'wakayama', 'xn--0trq7p7nn', 'xn--1ctwo', 'xn--1lqs03n', 'xn--1lqs71d', 'xn--2m4a15e', 'xn--32vp30h', 'xn--4it168d', 'xn--4it797k', 'xn--4pvxs', 'xn--5js045d', 'xn--5rtp49c', 'xn--5rtq34k', 'xn--6btw5a', 'xn--6orx2r', 'xn--7t0a264c', 'xn--8ltr62k', 'xn--8pvr4u', 'xn--c3s14m', 'xn--d5qv7z876c', 'xn--djrs72d6uy', 'xn--djty4k', 'xn--efvn9s', 'xn--ehqz56n', 'xn--elqq16h', 'xn--f6qx53a', 'xn--k7yn95e', 'xn--kbrq7o', 'xn--klt787d', 'xn--kltp7d', 'xn--kltx9a', 'xn--klty5x', 'xn--mkru45i', 'xn--nit225k', 'xn--ntso0iqx3a', 'xn--ntsq17g', 'xn--pssu33l', 'xn--qqqt11m', 'xn--rht27z', 'xn--rht3d', 'xn--rht61e', 'xn--rny31h', 'xn--tor131o', 'xn--uist22h', 'xn--uisz3g', 'xn--uuwu58a', 'xn--vgu402c', 'xn--zbx025d', 'yamagata', 'yamaguchi', 'yamanashi'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ke':
+ if (['ac', 'co', 'go', 'info', 'me', 'mobi', 'ne', 'or', 'sc'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kg':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kh':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ki':
+ if (['edu', 'biz', 'net', 'org', 'gov', 'info', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'km':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'ass', 'com', 'coop', 'asso', 'presse', 'medecin', 'notaires', 'pharmaciens', 'veterinaire', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kn':
+ if (['net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kp':
+ if (['com', 'edu', 'gov', 'org', 'rep', 'tra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kr':
+ if (['ac', 'busan', 'cheju', 'chonbuk', 'chonnam', 'chungbuk', 'chungnam', 'co', 'daegu', 'daejeon', 'es', 'gangwon', 'go', 'gwangju', 'gyeongbuk', 'gyeonggi', 'gyeongnam', 'hs', 'incheon', 'inchon', 'jeju', 'jeonbuk', 'jeonnam', 'kangwon', 'kg', 'kwangju', 'kyongbuk', 'kyonggi', 'kyongnam', 'mil', 'ms', 'ne', 'nm', 'or', 'pe', 'pusan', 're', 'sc', 'seoul', 'taegu', 'taejon', 'ulsan', 'xn--bj0bj06e'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kw':
+ if (['com', 'edu', 'emb', 'gov', 'ind', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ky':
+ if (['edu', 'gov', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'la':
+ if (['int', 'net', 'info', 'edu', 'gov', 'per', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lc':
+ if (['com', 'net', 'co', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lk':
+ if (['ac', 'assn', 'com', 'edu', 'gov', 'grp', 'hotel', 'int', 'ltd', 'net', 'ngo', 'org', 'sch', 'soc', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lr':
+ if (['com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ls':
+ if (['ac', 'co', 'gov', 'net', 'nul', 'org', 'parliament', 'quadrant'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lt':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lv':
+ if (['asn', 'com', 'conf', 'edu', 'gov', 'id', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ly':
+ if (['com', 'edu', 'gov', 'id', 'med', 'net', 'org', 'plc', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ma':
+ if (['ac', 'co', 'gov', 'net', 'org', 'press'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mc':
+ if (['tm', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'me':
+ if (['co', 'net', 'org', 'edu', 'ac', 'gov', 'its', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mg':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'com', 'co'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mk':
+ if (['com', 'edu', 'gov', 'inf', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ml':
+ if (['com', 'edu', 'gouv', 'gov', 'net', 'org', 'presse'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mn':
+ if (['gov', 'edu', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mo':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mr':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ms':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mu':
+ if (['ac', 'co', 'com', 'gov', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'museum':
+ if (['academy', 'agriculture', 'air', 'airguard', 'alabama', 'alaska', 'amber', 'ambulance', 'american', 'americana', 'americanantiques', 'americanart', 'amsterdam', 'and', 'annefrank', 'anthro', 'anthropology', 'antiques', 'aquarium', 'arboretum', 'archaeological', 'archaeology', 'architecture', 'art', 'artanddesign', 'artcenter', 'artdeco', 'arteducation', 'artgallery', 'arts', 'artsandcrafts', 'asmatart', 'assassination', 'assisi', 'association', 'astronomy', 'atlanta', 'austin', 'australia', 'automotive', 'aviation', 'axis', 'badajoz', 'baghdad', 'bahn', 'bale', 'baltimore', 'barcelona', 'baseball', 'basel', 'baths', 'bauern', 'beauxarts', 'beeldengeluid', 'bellevue', 'bergbau', 'berkeley', 'berlin', 'bern', 'bible', 'bilbao', 'bill', 'birdart', 'birthplace', 'bonn', 'boston', 'botanical', 'botanicalgarden', 'botanicgarden', 'botany', 'brandywinevalley', 'brasil', 'bristol', 'british', 'britishcolumbia', 'broadcast', 'brunel', 'brussel', 'brussels', 'bruxelles', 'building', 'burghof', 'bus', 'bushey', 'cadaques', 'california', 'cambridge', 'can', 'canada', 'capebreton', 'carrier', 'cartoonart', 'casadelamoneda', 'castle', 'castres', 'celtic', 'center', 'chattanooga', 'cheltenham', 'chesapeakebay', 'chicago', 'children', 'childrens', 'childrensgarden', 'chiropractic', 'chocolate', 'christiansburg', 'cincinnati', 'cinema', 'circus', 'civilisation', 'civilization', 'civilwar', 'clinton', 'clock', 'coal', 'coastaldefence', 'cody', 'coldwar', 'collection', 'colonialwilliamsburg', 'coloradoplateau', 'columbia', 'columbus', 'communication', 'communications', 'community', 'computer', 'computerhistory', 'comunicações', 'contemporary', 'contemporaryart', 'convent', 'copenhagen', 'corporation', 'correios-e-telecomunicações', 'corvette', 'costume', 'countryestate', 'county', 'crafts', 'cranbrook', 'creation', 'cultural', 'culturalcenter', 'culture', 'cyber', 'cymru', 'dali', 'dallas', 'database', 'ddr', 'decorativearts', 'delaware', 'delmenhorst', 'denmark', 'depot', 'design', 'detroit', 'dinosaur', 'discovery', 'dolls', 'donostia', 'durham', 'eastafrica', 'eastcoast', 'education', 'educational', 'egyptian', 'eisenbahn', 'elburg', 'elvendrell', 'embroidery', 'encyclopedic', 'england', 'entomology', 'environment', 'environmentalconservation', 'epilepsy', 'essex', 'estate', 'ethnology', 'exeter', 'exhibition', 'family', 'farm', 'farmequipment', 'farmers', 'farmstead', 'field', 'figueres', 'filatelia', 'film', 'fineart', 'finearts', 'finland', 'flanders', 'florida', 'force', 'fortmissoula', 'fortworth', 'foundation', 'francaise', 'frankfurt', 'franziskaner', 'freemasonry', 'freiburg', 'fribourg', 'frog', 'fundacio', 'furniture', 'gallery', 'garden', 'gateway', 'geelvinck', 'gemological', 'geology', 'georgia', 'giessen', 'glas', 'glass', 'gorge', 'grandrapids', 'graz', 'guernsey', 'halloffame', 'hamburg', 'handson', 'harvestcelebration', 'hawaii', 'health', 'heimatunduhren', 'hellas', 'helsinki', 'hembygdsforbund', 'heritage', 'histoire', 'historical', 'historicalsociety', 'historichouses', 'historisch', 'historisches', 'history', 'historyofscience', 'horology', 'house', 'humanities', 'illustration', 'imageandsound', 'indian', 'indiana', 'indianapolis', 'indianmarket', 'intelligence', 'interactive', 'iraq', 'iron', 'isleofman', 'jamison', 'jefferson', 'jerusalem', 'jewelry', 'jewish', 'jewishart', 'jfk', 'journalism', 'judaica', 'judygarland', 'juedisches', 'juif', 'karate', 'karikatur', 'kids', 'koebenhavn', 'koeln', 'kunst', 'kunstsammlung', 'kunstunddesign', 'labor', 'labour', 'lajolla', 'lancashire', 'landes', 'lans', 'larsson', 'lewismiller', 'lincoln', 'linz', 'living', 'livinghistory', 'localhistory', 'london', 'losangeles', 'louvre', 'loyalist', 'lucerne', 'luxembourg', 'luzern', 'läns', 'mad', 'madrid', 'mallorca', 'manchester', 'mansion', 'mansions', 'manx', 'marburg', 'maritime', 'maritimo', 'maryland', 'marylhurst', 'media', 'medical', 'medizinhistorisches', 'meeres', 'memorial', 'mesaverde', 'michigan', 'midatlantic', 'military', 'mill', 'miners', 'mining', 'minnesota', 'missile', 'missoula', 'modern', 'moma', 'money', 'monmouth', 'monticello', 'montreal', 'moscow', 'motorcycle', 'muenchen', 'muenster', 'mulhouse', 'muncie', 'museet', 'museumcenter', 'museumvereniging', 'music', 'national', 'nationalfirearms', 'nationalheritage', 'nativeamerican', 'naturalhistory', 'naturalhistorymuseum', 'naturalsciences', 'nature', 'naturhistorisches', 'natuurwetenschappen', 'naumburg', 'naval', 'nebraska', 'neues', 'newhampshire', 'newjersey', 'newmexico', 'newport', 'newspaper', 'newyork', 'niepce', 'norfolk', 'north', 'nrw', 'nuernberg', 'nuremberg', 'nyc', 'nyny', 'oceanographic', 'oceanographique', 'omaha', 'online', 'ontario', 'openair', 'oregon', 'oregontrail', 'otago', 'oxford', 'pacific', 'paderborn', 'palace', 'paleo', 'palmsprings', 'panama', 'paris', 'pasadena', 'pharmacy', 'philadelphia', 'philadelphiaarea', 'philately', 'phoenix', 'photography', 'pilots', 'pittsburgh', 'planetarium', 'plantation', 'plants', 'plaza', 'portal', 'portland', 'portlligat', 'posts-and-telecommunications', 'preservation', 'presidio', 'press', 'project', 'public', 'pubol', 'quebec', 'railroad', 'railway', 'research', 'resistance', 'riodejaneiro', 'rochester', 'rockart', 'roma', 'russia', 'saintlouis', 'salem', 'salvadordali', 'salzburg', 'sandiego', 'sanfrancisco', 'santabarbara', 'santacruz', 'santafe', 'saskatchewan', 'satx', 'savannahga', 'schlesisches', 'schoenbrunn', 'schokoladen', 'school', 'schweiz', 'science', 'science-fiction', 'scienceandhistory', 'scienceandindustry', 'sciencecenter', 'sciencecenters', 'sciencehistory', 'sciences', 'sciencesnaturelles', 'scotland', 'seaport', 'settlement', 'settlers', 'shell', 'sherbrooke', 'sibenik', 'silk', 'ski', 'skole', 'society', 'sologne', 'soundandvision', 'southcarolina', 'southwest', 'space', 'spy', 'square', 'stadt', 'stalbans', 'starnberg', 'state', 'stateofdelaware', 'station', 'steam', 'steiermark', 'stjohn', 'stockholm', 'stpetersburg', 'stuttgart', 'suisse', 'surgeonshall', 'surrey', 'svizzera', 'sweden', 'sydney', 'tank', 'tcm', 'technology', 'telekommunikation', 'television', 'texas', 'textile', 'theater', 'time', 'timekeeping', 'topology', 'torino', 'touch', 'town', 'transport', 'tree', 'trolley', 'trust', 'trustee', 'uhren', 'ulm', 'undersea', 'university', 'usa', 'usantiques', 'usarts', 'uscountryestate', 'usculture', 'usdecorativearts', 'usgarden', 'ushistory', 'ushuaia', 'uslivinghistory', 'utah', 'uvic', 'valley', 'vantaa', 'versailles', 'viking', 'village', 'virginia', 'virtual', 'virtuel', 'vlaanderen', 'volkenkunde', 'wales', 'wallonie', 'war', 'washingtondc', 'watch-and-clock', 'watchandclock', 'western', 'westfalen', 'whaling', 'wildlife', 'williamsburg', 'windmill', 'workshop', 'xn--9dbhblg6di', 'xn--h1aegh', 'york', 'yorkshire', 'yosemite', 'youth', 'zoological', 'zoology'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mv':
+ if (['aero', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'int', 'mil', 'museum', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mw':
+ if (['ac', 'biz', 'co', 'com', 'coop', 'edu', 'gov', 'int', 'museum', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mx':
+ if (['com', 'edu', 'gob', 'net', 'ngo', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'my':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mz':
+ if (['co', 'net', 'org', 'ac', 'gov', 'edu', 'mil', 'adv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'na':
+ if (['info', 'pro', 'name', 'school', 'or', 'dr', 'us', 'mx', 'ca', 'in', 'cc', 'tv', 'ws', 'mobi', 'co', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'name':
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ break;
+ case 'nc':
+ if (['asso', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'net':
+ if (['gb', 'hu', 'in', 'jp', 'ru', 'se', 'uk', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nf':
+ if (['arts', 'com', 'firm', 'info', 'net', 'other', 'per', 'rec', 'store', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ng':
+ if (['com', 'edu', 'gov', 'i', 'mil', 'mobi', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ni':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gob', 'in', 'info', 'int', 'mil', 'net', 'nom', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nl':
+ if (wa[1] == 'bv') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'no':
+ if (['aa', 'aarborte', 'aejrie', 'afjord', 'agdenes', 'ah', 'aknoluokta', 'akrehamn', 'al', 'alaheadju', 'alesund', 'algard', 'alstahaug', 'alta', 'alvdal', 'amli', 'amot', 'andasuolo', 'andebu', 'andoy', 'ardal', 'aremark', 'arendal', 'arna', 'aseral', 'asker', 'askim', 'askoy', 'askvoll', 'asnes', 'audnedaln', 'aukra', 'aure', 'aurland', 'austevoll', 'austrheim', 'averoy', 'badaddja', 'bahcavuotna', 'bahccavuotna', 'baidar', 'bajddar', 'balat', 'balestrand', 'ballangen', 'balsfjord', 'bamble', 'bardu', 'barum', 'batsfjord', 'bearalvahki', 'beardu', 'beiarn', 'berg', 'bergen', 'berlevag', 'bievat', 'bindal', 'birkenes', 'bjarkoy', 'bjerkreim', 'bjugn', 'bodo', 'bokn', 'bomlo', 'bremanger', 'bronnoy', 'bronnoysund', 'brumunddal', 'bryne', 'bu', 'budejju', 'bygland', 'bykle', 'cahcesuolo', 'davvenjarga', 'davvesiida', 'deatnu', 'dep', 'dielddanuorri', 'divtasvuodna', 'divttasvuotna', 'donna', 'dovre', 'drammen', 'drangedal', 'drobak', 'dyroy', 'egersund', 'eid', 'eidfjord', 'eidsberg', 'eidskog', 'eidsvoll', 'eigersund', 'elverum', 'enebakk', 'engerdal', 'etne', 'etnedal', 'evenassi', 'evenes', 'farsund', 'fauske', 'fedje', 'fet', 'fetsund', 'fhs', 'finnoy', 'fitjar', 'fjaler', 'fjell', 'fla', 'flakstad', 'flatanger', 'flekkefjord', 'flesberg', 'flora', 'floro', 'fm', 'folkebibl', 'folldal', 'forde', 'forsand', 'fosnes', 'frana', 'fredrikstad', 'frei', 'frogn', 'froland', 'frosta', 'froya', 'fuoisku', 'fuossko', 'fusa', 'fylkesbibl', 'fyresdal', 'gaivuotna', 'galsa', 'gamvik', 'gangaviika', 'gaular', 'gausdal', 'giehtavuoatna', 'gildeskal', 'giske', 'gjemnes', 'gjerdrum', 'gjerstad', 'gjesdal', 'gjovik', 'gloppen', 'gol', 'gran', 'grane', 'granvin', 'gratangen', 'grimstad', 'grong', 'grue', 'gulen', 'guovdageaidnu', 'ha', 'habmer', 'hadsel', 'hagebostad', 'halden', 'halsa', 'hamar', 'hamaroy', 'hammarfeasta', 'hammerfest', 'hapmir', 'haram', 'hareid', 'harstad', 'hasvik', 'hattfjelldal', 'haugesund', 'hemne', 'hemnes', 'hemsedal', 'herad', 'hitra', 'hjartdal', 'hjelmeland', 'hl', 'hm', 'hobol', 'hof', 'hokksund', 'hol', 'hole', 'holmestrand', 'holtalen', 'honefoss', 'hornindal', 'horten', 'hoyanger', 'hoylandet', 'hurdal', 'hurum', 'hvaler', 'hyllestad', 'ibestad', 'idrett', 'inderoy', 'iveland', 'ivgu', 'jessheim', 'jevnaker', 'jolster', 'jondal', 'jorpeland', 'kafjord', 'karasjohka', 'karasjok', 'karlsoy', 'karmoy', 'kautokeino', 'kirkenes', 'klabu', 'klepp', 'kommune', 'kongsberg', 'kongsvinger', 'kopervik', 'kraanghke', 'kragero', 'kristiansand', 'kristiansund', 'krodsherad', 'krokstadelva', 'kvafjord', 'kvalsund', 'kvam', 'kvanangen', 'kvinesdal', 'kvinnherad', 'kviteseid', 'kvitsoy', 'laakesvuemie', 'lahppi', 'langevag', 'lardal', 'larvik', 'lavagis', 'lavangen', 'leangaviika', 'lebesby', 'leikanger', 'leirfjord', 'leirvik', 'leka', 'leksvik', 'lenvik', 'lerdal', 'lesja', 'levanger', 'lier', 'lierne', 'lillehammer', 'lillesand', 'lindas', 'lindesnes', 'loabat', 'lodingen', 'lom', 'loppa', 'lorenskog', 'loten', 'lund', 'lunner', 'luroy', 'luster', 'lyngdal', 'lyngen', 'malatvuopmi', 'malselv', 'malvik', 'mandal', 'marker', 'marnardal', 'masfjorden', 'masoy', 'meland', 'meldal', 'melhus', 'meloy', 'meraker', 'midsund', 'mil', 'mjondalen', 'moareke', 'modalen', 'modum', 'molde', 'mosjoen', 'moskenes', 'moss', 'mosvik', 'mr', 'muosat', 'museum', 'naamesjevuemie', 'namdalseid', 'namsos', 'namsskogan', 'nannestad', 'naroy', 'narviika', 'narvik', 'naustdal', 'navuotna', 'nesna', 'nesodden', 'nesoddtangen', 'nesseby', 'nesset', 'nissedal', 'nittedal', 'nl', 'norddal', 'nordkapp', 'nordreisa', 'notodden', 'notteroy', 'nt', 'odda', 'of', 'oksnes', 'ol', 'omasvuotna', 'oppdal', 'oppegard', 'orkanger', 'orkdal', 'orland', 'orskog', 'orsta', 'osen', 'oslo', 'osoyro', 'osteroy', 'overhalla', 'oyer', 'oygarden', 'porsanger', 'porsangu', 'porsgrunn', 'priv', 'rade', 'radoy', 'rahkkeravju', 'raholt', 'raisa', 'rakkestad', 'ralingen', 'rana', 'randaberg', 'rauma', 'rendalen', 'rennebu', 'rennesoy', 'rindal', 'ringebu', 'ringerike', 'ringsaker', 'risor', 'rissa', 'rl', 'roan', 'rodoy', 'rollag', 'romsa', 'romskog', 'roros', 'rost', 'royken', 'royrvik', 'ruovat', 'rygge', 'salangen', 'salat', 'saltdal', 'samnanger', 'sandefjord', 'sandnes', 'sandnessjoen', 'sandoy', 'sarpsborg', 'sauda', 'sauherad', 'sel', 'selbu', 'selje', 'seljord', 'sf', 'siellak', 'sigdal', 'siljan', 'sirdal', 'skanit', 'skanland', 'skaun', 'skedsmo', 'skedsmokorset', 'ski', 'skien', 'skierva', 'skiptvet', 'skjak', 'skjervoy', 'skodje', 'slattum', 'smola', 'snaase', 'snasa', 'snillfjord', 'snoasa', 'sogndal', 'sogne', 'sokndal', 'sola', 'solund', 'somna', 'songdalen', 'sorfold', 'sorreisa', 'sortland', 'sorum', 'spjelkavik', 'spydeberg', 'st', 'stange', 'stat', 'stathelle', 'stavanger', 'stavern', 'steigen', 'steinkjer', 'stjordal', 'stjordalshalsen', 'stokke', 'stord', 'stordal', 'storfjord', 'strand', 'stranda', 'stryn', 'sula', 'suldal', 'sund', 'sunndal', 'surnadal', 'svalbard', 'sveio', 'svelvik', 'sykkylven', 'tana', 'tananger', 'time', 'tingvoll', 'tinn', 'tjeldsund', 'tjome', 'tm', 'tokke', 'tolga', 'tonsberg', 'torsken', 'tr', 'trana', 'tranby', 'tranoy', 'troandin', 'trogstad', 'tromsa', 'tromso', 'trondheim', 'trysil', 'tvedestrand', 'tydal', 'tynset', 'tysfjord', 'tysnes', 'tysvar', 'ullensaker', 'ullensvang', 'ulvik', 'unjarga', 'utsira', 'va', 'vaapste', 'vadso', 'vaga', 'vagan', 'vagsoy', 'vaksdal', 'valle', 'vang', 'vanylven', 'vardo', 'varggat', 'varoy', 'vefsn', 'vega', 'vegarshei', 'vennesla', 'verdal', 'verran', 'vestby', 'vestnes', 'vestvagoy', 'vevelstad', 'vf', 'vgs', 'vik', 'vikna', 'vindafjord', 'voagat', 'volda', 'voss', 'vossevangen', 'xn--andy-ira', 'xn--asky-ira', 'xn--aurskog-hland-jnb', 'xn--avery-yua', 'xn--bdddj-mrabd', 'xn--bearalvhki-y4a', 'xn--berlevg-jxa', 'xn--bhcavuotna-s4a', 'xn--bhccavuotna-k7a', 'xn--bidr-5nac', 'xn--bievt-0qa', 'xn--bjarky-fya', 'xn--bjddar-pta', 'xn--blt-elab', 'xn--bmlo-gra', 'xn--bod-2na', 'xn--brnny-wuac', 'xn--brnnysund-m8ac', 'xn--brum-voa', 'xn--btsfjord-9za', 'xn--davvenjrga-y4a', 'xn--dnna-gra', 'xn--drbak-wua', 'xn--dyry-ira', 'xn--eveni-0qa01ga', 'xn--finny-yua', 'xn--fjord-lra', 'xn--fl-zia', 'xn--flor-jra', 'xn--frde-gra', 'xn--frna-woa', 'xn--frya-hra', 'xn--ggaviika-8ya47h', 'xn--gildeskl-g0a', 'xn--givuotna-8ya', 'xn--gjvik-wua', 'xn--gls-elac', 'xn--h-2fa', 'xn--hbmer-xqa', 'xn--hcesuolo-7ya35b', 'xn--hgebostad-g3a', 'xn--hmmrfeasta-s4ac', 'xn--hnefoss-q1a', 'xn--hobl-ira', 'xn--holtlen-hxa', 'xn--hpmir-xqa', 'xn--hyanger-q1a', 'xn--hylandet-54a', 'xn--indery-fya', 'xn--jlster-bya', 'xn--jrpeland-54a', 'xn--karmy-yua', 'xn--kfjord-iua', 'xn--klbu-woa', 'xn--koluokta-7ya57h', 'xn--krager-gya', 'xn--kranghke-b0a', 'xn--krdsherad-m8a', 'xn--krehamn-dxa', 'xn--krjohka-hwab49j', 'xn--ksnes-uua', 'xn--kvfjord-nxa', 'xn--kvitsy-fya', 'xn--kvnangen-k0a', 'xn--l-1fa', 'xn--laheadju-7ya', 'xn--langevg-jxa', 'xn--ldingen-q1a', 'xn--leagaviika-52b', 'xn--lesund-hua', 'xn--lgrd-poac', 'xn--lhppi-xqa', 'xn--linds-pra', 'xn--loabt-0qa', 'xn--lrdal-sra', 'xn--lrenskog-54a', 'xn--lt-liac', 'xn--lten-gra', 'xn--lury-ira', 'xn--mely-ira', 'xn--merker-kua', 'xn--mjndalen-64a', 'xn--mlatvuopmi-s4a', 'xn--mli-tla', 'xn--mlselv-iua', 'xn--moreke-jua', 'xn--mosjen-eya', 'xn--mot-tla', 'xn--msy-ula0h', 'xn--mtta-vrjjat-k7af', 'xn--muost-0qa', 'xn--nmesjevuemie-tcba', 'xn--nry-yla5g', 'xn--nttery-byae', 'xn--nvuotna-hwa', 'xn--oppegrd-ixa', 'xn--ostery-fya', 'xn--osyro-wua', 'xn--porsgu-sta26f', 'xn--rady-ira', 'xn--rdal-poa', 'xn--rde-ula', 'xn--rdy-0nab', 'xn--rennesy-v1a', 'xn--rhkkervju-01af', 'xn--rholt-mra', 'xn--risa-5na', 'xn--risr-ira', 'xn--rland-uua', 'xn--rlingen-mxa', 'xn--rmskog-bya', 'xn--rros-gra', 'xn--rskog-uua', 'xn--rst-0na', 'xn--rsta-fra', 'xn--ryken-vua', 'xn--ryrvik-bya', 'xn--s-1fa', 'xn--sandnessjen-ogb', 'xn--sandy-yua', 'xn--seral-lra', 'xn--sgne-gra', 'xn--skierv-uta', 'xn--skjervy-v1a', 'xn--skjk-soa', 'xn--sknit-yqa', 'xn--sknland-fxa', 'xn--slat-5na', 'xn--slt-elab', 'xn--smla-hra', 'xn--smna-gra', 'xn--snase-nra', 'xn--sndre-land-0cb', 'xn--snes-poa', 'xn--snsa-roa', 'xn--sr-aurdal-l8a', 'xn--sr-fron-q1a', 'xn--sr-odal-q1a', 'xn--sr-varanger-ggb', 'xn--srfold-bya', 'xn--srreisa-q1a', 'xn--srum-gra', 'xn--stjrdal-s1a', 'xn--stjrdalshalsen-sqb', 'xn--stre-toten-zcb', 'xn--tjme-hra', 'xn--tnsberg-q1a', 'xn--trany-yua', 'xn--trgstad-r1a', 'xn--trna-woa', 'xn--troms-zua', 'xn--tysvr-vra', 'xn--unjrga-rta', 'xn--vads-jra', 'xn--vard-jra', 'xn--vegrshei-c0a', 'xn--vestvgy-ixa6o', 'xn--vg-yiab', 'xn--vgan-qoa', 'xn--vgsy-qoa0j', 'xn--vre-eiker-k8a', 'xn--vrggt-xqad', 'xn--vry-yla5g', 'xn--yer-zna', 'xn--ygarden-p1a', 'xn--ystre-slidre-ujb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'np':
+ if (['aero', 'asia', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'jobs', 'mil', 'mobi', 'museum', 'name', 'net', 'org', 'pro', 'travel'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nr':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nz':
+ if (['ac', 'archie', 'co', 'cri', 'geek', 'gen', 'govt', 'health', 'iwi', 'kiwi', 'maori', 'mil', 'net', 'org', 'parliament', 'school', 'xn--mori-qsa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'om':
+ if (['co', 'com', 'edu', 'gov', 'med', 'museum', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'org':
+ if (wa[1] == 'eu' && wa[3] != undefined) {
+ if (['al', 'asso', 'at', 'au', 'be', 'bg', 'ca', 'cd', 'ch', 'cn', 'cy', 'cz', 'de', 'dk', 'edu', 'ee', 'es', 'fi', 'fr', 'gr', 'hr', 'hu', 'ie', 'il', 'in', 'int', 'is', 'it', 'jp', 'kr', 'lt', 'lu', 'lv', 'me', 'mk', 'mt', 'my', 'net', 'ng', 'nl', 'no', 'nz', 'pl', 'pt', 'ro', 'ru', 'se', 'si', 'sk', 'tr', 'uk', 'us'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['ae', 'eu', 'hk', 'jpn', 'js', 'us', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pa':
+ if (['abo', 'ac', 'com', 'edu', 'gob', 'ing', 'med', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pe':
+ if (['com', 'edu', 'gob', 'mil', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pf':
+ if (['com', 'org', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pg':
+ if (['com', 'net', 'ac', 'gov', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ph':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'ngo', 'i'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pk':
+ if (['biz', 'com', 'edu', 'fam', 'gob', 'gok', 'gon', 'gop', 'gos', 'gov', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pl':
+ if (['agro', 'aid', 'art', 'atm', 'augustow', 'auto', 'babia-gora', 'bedzin', 'beskidy', 'bialowieza', 'bialystok', 'bielawa', 'bieszczady', 'biz', 'boleslawiec', 'bydgoszcz', 'bytom', 'cieszyn', 'com', 'czeladz', 'czest', 'dlugoleka', 'edu', 'elblag', 'elk', 'gda', 'gdansk', 'glogow', 'gmina', 'gniezno', 'gorlice', 'gov', 'grajewo', 'gsm', 'ilawa', 'info', 'jaworzno', 'jelenia-gora', 'jgora', 'kalisz', 'karpacz', 'kartuzy', 'kaszuby', 'katowice', 'kazimierz-dolny', 'kepno', 'ketrzyn', 'klodzko', 'kobierzyce', 'kolobrzeg', 'konin', 'konskowola', 'krakow', 'kutno', 'lapy', 'lebork', 'legnica', 'lezajsk', 'limanowa', 'lodz', 'lomza', 'lowicz', 'lubin', 'lublin', 'lukow', 'mail', 'malbork', 'malopolska', 'mazowsze', 'mazury', 'media', 'miasta', 'mielec', 'mielno', 'mil', 'mragowo', 'naklo', 'net', 'ngo', 'nieruchomosci', 'nom', 'nowaruda', 'nysa', 'olawa', 'olecko', 'olkusz', 'olsztyn', 'opoczno', 'opole', 'org', 'ostroda', 'ostroleka', 'ostrowiec', 'ostrowwlkp', 'pc', 'pila', 'pisz', 'podhale', 'podlasie', 'polkowice', 'pomorskie', 'pomorze', 'powiat', 'poznan', 'priv', 'prochowice', 'pruszkow', 'przeworsk', 'pulawy', 'radom', 'rawa-maz', 'realestate', 'rel', 'rybnik', 'rzeszow', 'sanok', 'sejny', 'sex', 'shop', 'sklep', 'skoczow', 'slask', 'slupsk', 'sos', 'sosnowiec', 'stalowa-wola', 'starachowice', 'stargard', 'suwalki', 'swidnica', 'swiebodzin', 'swinoujscie', 'szczecin', 'szczytno', 'szkola', 'targi', 'tarnobrzeg', 'tgory', 'tm', 'torun', 'tourism', 'travel', 'turek', 'turystyka', 'tychy', 'ustka', 'walbrzych', 'warmia', 'warszawa', 'waw', 'wegrow', 'wielun', 'wlocl', 'wloclawek', 'wodzislaw', 'wolomin', 'wroc', 'wroclaw', 'zachpomor', 'zagan', 'zarow', 'zgora', 'zgorzelec'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pn':
+ if (['in', 'co', 'eu', 'org', 'net', 'me', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pr':
+ if (['ac', 'biz', 'com', 'edu', 'est', 'gov', 'info', 'isla', 'name', 'net', 'org', 'pro', 'prof'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pro':
+ if (['aaa', 'aca', 'acct', 'eng', 'avocat', 'bar', 'jur', 'recht', 'law', 'med', 'cpa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ps':
+ if (['edu', 'gov', 'sec', 'plo', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pt':
+ if (['com', 'edu', 'gov', 'int', 'net', 'nome', 'org', 'publ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pw':
+ if (['co', 'ne', 'or', 'ed', 'go', 'belau'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'py':
+ if (['com', 'coop', 'edu', 'mil', 'gov', 'org', 'net', 'una'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'qa':
+ if (['com', 'edu', 'sch', 'gov', 'mil', 'net', 'org', 'name'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 're':
+ if (['asso', 'com', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ro':
+ if (['arts', 'com', 'firm', 'info', 'nom', 'nt', 'org', 'rec', 'store', 'tm', 'www'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rs':
+ if (['ac', 'co', 'edu', 'gov', 'in', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ru':
+ if (['ac', 'adygeya', 'altai', 'amur', 'amursk', 'arkhangelsk', 'astrakhan', 'baikal', 'bashkiria', 'belgorod', 'bir', 'bryansk', 'buryatia', 'cap', 'cbg', 'chel', 'chelyabinsk', 'chita', 'chukotka', 'cmw', 'com', 'dagestan', 'e-burg', 'edu', 'fareast', 'gov', 'grozny', 'int', 'irkutsk', 'ivanovo', 'izhevsk', 'jamal', 'jar', 'joshkar-ola', 'k-uralsk', 'kalmykia', 'kaluga', 'kamchatka', 'karelia', 'kazan', 'kchr', 'kemerovo', 'khabarovsk', 'khakassia', 'khv', 'kirov', 'kms', 'koenig', 'komi', 'kostroma', 'krasnoyarsk', 'kuban', 'kurgan', 'kursk', 'kustanai', 'kuzbass', 'lipetsk', 'magadan', 'magnitka', 'mari', 'mari-el', 'marine', 'mil', 'mordovia', 'mos', 'mosreg', 'msk', 'murmansk', 'mytis', 'nakhodka', 'nalchik', 'net', 'nkz', 'nnov', 'norilsk', 'nov', 'novosibirsk', 'nsk', 'omsk', 'orenburg', 'org', 'oryol', 'oskol', 'palana', 'penza', 'perm', 'pp', 'pskov', 'ptz', 'pyatigorsk', 'rnd', 'rubtsovsk', 'ryazan', 'sakhalin', 'samara', 'saratov', 'simbirsk', 'smolensk', 'snz', 'spb', 'stavropol', 'stv', 'surgut', 'syzran', 'tambov', 'tatarstan', 'test', 'tlt', 'tom', 'tomsk', 'tsaritsyn', 'tsk', 'tula', 'tuva', 'tver', 'tyumen', 'udm', 'udmurtia', 'ulan-ude', 'vdonsk', 'vladikavkaz', 'vladimir', 'vladivostok', 'volgograd', 'vologda', 'voronezh', 'vrn', 'vyatka', 'yakutia', 'yamal', 'yaroslavl', 'yekaterinburg', 'yuzhno-sakhalinsk', 'zgrad'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rw':
+ if (['gov', 'net', 'edu', 'ac', 'com', 'co', 'int', 'mil', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sa':
+ if (['com', 'edu', 'gov', 'med', 'net', 'org', 'pub', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sc':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sd':
+ if (['com', 'edu', 'gov', 'info', 'med', 'net', 'org', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'se':
+ if (['a', 'ac', 'b', 'bd', 'brand', 'c', 'd', 'e', 'f', 'fh', 'fhsk', 'fhv', 'g', 'h', 'i', 'k', 'komforb', 'kommunalforbund', 'komvux', 'l', 'lanbib', 'm', 'n', 'naturbruksgymn', 'o', 'org', 'p', 'parti', 'pp', 'press', 'r', 's', 't', 'tm', 'u', 'w', 'x', 'y', 'z'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sg':
+ if (['com', 'edu', 'gov', 'idn', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sh':
+ if (['com', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sl':
+ if (['com', 'net', 'edu', 'gov', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sn':
+ if (['art', 'com', 'edu', 'gouv', 'org', 'perso', 'univ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'so':
+ if (['com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'st':
+ if (['co', 'com', 'consulado', 'edu', 'embaixada', 'gov', 'mil', 'net', 'org', 'principe', 'saotome', 'store'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sv':
+ if (['edu', 'gov', 'com', 'org', 'red', 'gob'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sy':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sz':
+ if (['co', 'ac', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'th':
+ if (['ac', 'co', 'go', 'in', 'mi', 'net', 'or'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tj':
+ if (['ac', 'aero', 'biz', 'co', 'com', 'coop', 'dyn', 'edu', 'go', 'gov', 'info', 'int', 'mil', 'museum', 'my', 'name', 'net', 'nic', 'org', 'per', 'pro', 'test', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tl':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tm':
+ if (['com', 'co', 'org', 'net', 'nom', 'gov', 'mil', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tn':
+ if (['agrinet', 'com', 'defense', 'edunet', 'ens', 'fin', 'gov', 'ind', 'info', 'intl', 'mincom', 'nat', 'net', 'org', 'perso', 'rnrt', 'rns', 'rnu', 'tourism', 'turen'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'to':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tr':
+ if (['av', 'bbs', 'bel', 'biz', 'com', 'dr', 'edu', 'gen', 'gov', 'info', 'k12', 'kep', 'mil', 'name', 'nc', 'net', 'org', 'pol', 'tel', 'tv', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tt':
+ if (['co', 'com', 'org', 'net', 'biz', 'info', 'pro', 'int', 'coop', 'jobs', 'mobi', 'travel', 'museum', 'aero', 'name', 'gov', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tw':
+ if (['club', 'com', 'ebiz', 'edu', 'game', 'gov', 'idv', 'mil', 'net', 'org', 'xn--czrw28b', 'xn--uc0atv', 'xn--zf0ao64a'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tz':
+ if (['ac', 'co', 'go', 'hotel', 'info', 'me', 'mil', 'mobi', 'ne', 'or', 'sc', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ua':
+ if (['at', 'cherkassy', 'cherkasy', 'chernigov', 'chernihiv', 'chernivtsi', 'chernovtsy', 'ck', 'cn', 'co', 'com', 'cr', 'crimea', 'cv', 'dn', 'dnepropetrovsk', 'dnipropetrovsk', 'dominic', 'donetsk', 'dp', 'edu', 'gov', 'if', 'in', 'ivano-frankivsk', 'kh', 'kharkiv', 'kharkov', 'kherson', 'khmelnitskiy', 'khmelnytskyi', 'kiev', 'kirovograd', 'km', 'kr', 'krym', 'ks', 'kv', 'kyiv', 'lg', 'lt', 'lugansk', 'lutsk', 'lv', 'lviv', 'mk', 'mykolaiv', 'net', 'nikolaev', 'od', 'odesa', 'odessa', 'org', 'pl', 'poltava', 'pp', 'rivne', 'rovno', 'rv', 'sb', 'sebastopol', 'sevastopol', 'sm', 'sumy', 'te', 'ternopil', 'uz', 'uzhgorod', 'vinnica', 'vinnytsia', 'vn', 'volyn', 'yalta', 'zaporizhzhe', 'zaporizhzhia', 'zhitomir', 'zhytomyr', 'zp', 'zt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ug':
+ if (['co', 'ac', 'sc', 'go', 'ne', 'or', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uk':
+ if (['ac', 'bl', 'british-library', 'co', 'gov', 'govt', 'jcpc', 'jet', 'judiciary', 'lea', 'ltd', 'me', 'mil', 'mod', 'net', 'nhs', 'nic', 'nls', 'org', 'orgn', 'parliament', 'plc', 'police', 'royal', 'sch', 'supremecourt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'us':
+ if (['aa', 'ae', 'ak', 'al', 'ap', 'ar', 'as', 'az', 'ca', 'cm', 'co', 'ct', 'cz', 'dc', 'de', 'dni', 'fed', 'fl', 'fm', 'ga', 'gu', 'hi', 'ia', 'id', 'il', 'in', 'isa', 'kids', 'ks', 'ky', 'la', 'ma', 'md', 'me', 'mh', 'mi', 'mn', 'mo', 'mp', 'ms', 'mt', 'nb', 'nc', 'nd', 'ne', 'nh', 'nj', 'nm', 'nsn', 'nv', 'ny', 'oh', 'ok', 'or', 'pa', 'pi', 'pr', 'pw', 'ri', 'sc', 'sd', 'tn', 'tt', 'tx', 'ut', 'va', 'vi', 'vt', 'wa', 'wi', 'wv', 'wy'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uy':
+ if (['com', 'edu', 'gub', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uz':
+ if (['co', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vc':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 've':
+ if (['arts', 'co', 'com', 'e12', 'edu', 'firm', 'gob', 'gov', 'info', 'int', 'mil', 'net', 'org', 'radio', 'rec', 'store', 'tec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vi':
+ if (['co', 'org', 'com', 'net', 'k12'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vn':
+ if (['ac', 'biz', 'com', 'edu', 'gov', 'health', 'info', 'int', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vu':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ws':
+ if (['org', 'gov', 'edu', 'com', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--90a3ac':
+ if (['xn--o1ac', 'xn--c1avg', 'xn--90azh', 'xn--d1at', 'xn--o1ach', 'xn--80au'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--j6w193g':
+ if (['xn--55qx5d', 'xn--wcvs22d', 'xn--mxtq1m', 'xn--gmqw5a', 'xn--od0alg', 'xn--uc0atv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--o3cw4h':
+ if (['xn--12c1fe0br', 'xn--12co0c3b4eva', 'xn--h3cuzk1di', 'xn--o3cyx2a', 'xn--m3ch0j3a', 'xn--12cfi8ixb8l'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'za':
+ if (['ac', 'agric', 'alt', 'bourse', 'city', 'co', 'cybernet', 'db', 'edu', 'gov', 'grondar', 'iaccess', 'imt', 'inca', 'landesign', 'law', 'mil', 'net', 'ngo', 'nis', 'nom', 'olivetti', 'org', 'pix', 'school', 'tm', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zm':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gov', 'info', 'mil', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zw':
+ if (['co', 'ac', 'org', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ }
+ return wa[1] + '.' + wa[0];
+ }
+ let bdom = get_realdomain(location.hostname),
+ asked = ['', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org', 'addons.mozilla.org', 'addons.thunderbird.net', 'web.archive.org', 't.co'];
+ if (g.ign1 == 'y') {
+ asked.push(location.hostname);
+ }
+ let running = false;
+ function scanme() {
+ if (!running) {
+ running = true;
+ let unknown = [];
+ document.querySelectorAll('a[href]:not([data-iatt])').forEach(a => {
+ let aF = (new URL(a.href)).hostname || '';
+ a.dataset.iatt = aF;
+ if (!asked.includes(aF)) {
+ asked.push(aF);
+ if (!/^(.*)\.(danwin1210\.me|wikipedia\.org|onion|i2p|invalid|test|local|localhost|([0-9]{1,3})|bbs|chan|cyb|dyn|geek|gopher|indy|libre|neo|null|o|oss|oz|parody|pirate|bit|lib|coin|emc|bazar|fur)$/.test(aF) && get_realdomain(aF) != bdom && aF.length >= 4) {
+ unknown.push(aF);
+ }
+ }
+ });
+ if (unknown.length > 0) {
+ browser.runtime.sendMessage(unknown);
+ }
+ running = false;
+ }
+ }
+ browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
+ if (request.length == 2) {
+ if (g.dbg == 'y') {
+ console.log('isAntiTor:', request[0], request[1]);
+ }
+ document.querySelectorAll("a[href][data-iatt='" + request[0] + "']").forEach(a => {
+ if (request[1]) {
+ a.dataset.iatt = 'y';
+ if (g.alt == 'y') {
+ if (!a.href.startsWith('https://web.archive.org/web/')) {
+ a.href = 'https://web.archive.org/web/' + a.href;
+ }
+ a.title = 'Arkivo!';
+ } else {
+ a.title = 'Malamiko!';
+ }
+ } else {
+ a.dataset.iatt = 'n';
+ }
+ });
+ }
+ sendResponse(true);
+ return;
+ });
+ scanme();
+ if (g.obs == 'y') {
+ (new MutationObserver(scanme)).observe(document, {
+ attributes: true,
+ attributeFilter: ['href'],
+ childList: true,
+ subtree: true
+ });
+ }
+ });
+}
\ No newline at end of file
diff --git a/addons/isattlinkFX/localdb.html b/addons/isattlinkFX/localdb.html
new file mode 100644
index 000000000..5e358f85c
--- /dev/null
+++ b/addons/isattlinkFX/localdb.html
@@ -0,0 +1,17 @@
+
+
+
+ 🗄
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/isattlinkFX/localdb.js b/addons/isattlinkFX/localdb.js
new file mode 100644
index 000000000..d2b25c56e
--- /dev/null
+++ b/addons/isattlinkFX/localdb.js
@@ -0,0 +1,67 @@
+let irun = false;
+document.addEventListener('DOMContentLoaded', () => {
+ browser.storage.local.get(['mul']).then(g => {
+ let ul = g.mul || 'eo';
+ fetch('i18n/' + ul + '.json', {
+ method: 'GET'
+ }).then(j => j.json()).then(j => {
+ document.querySelectorAll('span[tek]').forEach(x => {
+ x.innerText = j[x.getAttribute('tek')];
+ });
+ document.body.style.display = 'block';
+ });
+ });
+});
+document.getElementById('f').addEventListener('change', e => {
+ let ff = e.target.files[0];
+ if (ff) {
+ let r = new FileReader();
+ r.addEventListener('load', e => {
+ if (ff.size > 4) {
+ let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
+ if (g.length > 0) {
+ browser.storage.local.get(['ldb']).then(gs => {
+ irun = true;
+ let cnt0, cnt1 = 0,
+ gc = 1,
+ db = JSON.parse(gs.ldb || '[]');
+ cnt0 = db.length;
+ document.getElementById('pbr').max = g.length;
+ g.forEach(x => {
+ document.getElementById('pbr').value = gc;
+ gc++;
+ if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
+ db.push(x);
+ }
+ });
+ g = null;
+ cnt1 = db.length;
+ if (cnt1 != cnt0) {
+ browser.storage.local.set({
+ 'ldb': JSON.stringify(db)
+ });
+ }
+ browser.runtime.sendMessage('dbmode,rl').then(() => {
+ alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
+ location.reload();
+ });
+ });
+ }
+ }
+ });
+ r.readAsText(ff);
+ }
+});
+document.getElementById('ldb_i').addEventListener('click', () => {
+ if (!irun) {
+ document.getElementById('f').click();
+ }
+});
+document.getElementById('ldb_c').addEventListener('click', () => {
+ if (!irun) {
+ browser.runtime.sendMessage('dbmode,cl').then(() => {
+ alert(document.querySelector('span[tek=opxdone]').innerText);
+ location.reload();
+ });
+ }
+});
\ No newline at end of file
diff --git a/addons/isattlinkFX/manifest.json b/addons/isattlinkFX/manifest.json
new file mode 100644
index 000000000..750da00c1
--- /dev/null
+++ b/addons/isattlinkFX/manifest.json
@@ -0,0 +1,43 @@
+{
+ "manifest_version": 2,
+ "name": "Ĉu ĉi tiuj ligoj blokos Tor-uzanton?",
+ "description": "Skanu FQDN uzante la API de Ss",
+ "version": "1.0.2.2",
+ "homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
+ "author": "Ss",
+ "permissions": [
+ "storage",
+ "unlimitedStorage"
+ ],
+ "icons": {
+ "72": "icons/72.png"
+ },
+ "background": {
+ "scripts": [
+ "bg.js"
+ ]
+ },
+ "content_scripts": [
+ {
+ "matches": [
+ "http://*/*",
+ "https://*/*"
+ ],
+ "js": [
+ "cs.js"
+ ],
+ "run_at": "document_end"
+ }
+ ],
+ "options_ui": {
+ "browser_style": true,
+ "page": "cfg.html"
+ },
+ "applications": {
+ "gecko": {
+ "id": "torwatch@searxes.eu.org",
+ "strict_min_version": "68.0",
+ "update_url": "https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=isattlink"
+ }
+ }
+}
\ No newline at end of file
diff --git a/addons/ismitmlinkCR/README.md b/addons/ismitmlinkCR/README.md
new file mode 100644
index 000000000..f0a171bcf
--- /dev/null
+++ b/addons/ismitmlinkCR/README.md
@@ -0,0 +1,2 @@
+- [More Information / Download](../../subfiles/about.ismm.md)
+- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
\ No newline at end of file
diff --git a/addons/ismitmlinkCR/bg.js b/addons/ismitmlinkCR/bg.js
new file mode 100644
index 000000000..5889c115a
--- /dev/null
+++ b/addons/ismitmlinkCR/bg.js
@@ -0,0 +1,1340 @@
+let localUse = false,
+ localDB = [],
+ timr, memcache = {},
+ forcePurge = false,
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ismitm.php';
+/*
+chrome.storage.local.get(['cep'], g => {
+ if (g.cep == 'y') {
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ismitm.php';
+ } else {
+ if (g.cep != 'n') {
+ chrome.storage.local.set({
+ 'cep': 'n'
+ });
+ fetch('http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ok.php', {
+ method: 'GET',
+ mode: 'cors'
+ }).then(r => r.text()).then(r => {
+ if (r == 'ok') {
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ismitm.php';
+ chrome.storage.local.set({
+ 'cep': 'y'
+ });
+ }
+ }).catch(() => {});
+ }
+ }
+});
+*/
+function get_realdomain(w) {
+ let wa = w.split('.');
+ let wa_l = wa.length;
+ if (wa_l < 3 || (wa_l == 4 && /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(w))) {
+ return w;
+ }
+ wa.reverse();
+ switch (wa[0]) {
+ case 'ac':
+ if (['com', 'edu', 'gov', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ad':
+ if (wa[1] == 'nom') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ae':
+ if (['co', 'net', 'org', 'sch', 'ac', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aero':
+ if (['accident-investigation', 'accident-prevention', 'aerobatic', 'aeroclub', 'aerodrome', 'agents', 'aircraft', 'airline', 'airport', 'air-surveillance', 'airtraffic', 'air-traffic-control', 'ambulance', 'amusement', 'association', 'author', 'ballooning', 'broker', 'caa', 'cargo', 'catering', 'certification', 'championship', 'charter', 'civilaviation', 'club', 'conference', 'consultant', 'consulting', 'control', 'council', 'crew', 'design', 'dgca', 'educator', 'emergency', 'engine', 'engineer', 'entertainment', 'equipment', 'exchange', 'express', 'federation', 'flight', 'freight', 'fuel', 'gliding', 'government', 'groundhandling', 'group', 'hanggliding', 'homebuilt', 'insurance', 'journal', 'journalist', 'leasing', 'logistics', 'magazine', 'maintenance', 'media', 'microlight', 'modelling', 'navigation', 'parachuting', 'paragliding', 'passenger-association', 'pilot', 'press', 'production', 'recreation', 'repbody', 'res', 'research', 'rotorcraft', 'safety', 'scientist', 'services', 'show', 'skydiving', 'software', 'student', 'trader', 'trading', 'trainer', 'union', 'workinggroup', 'works'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'af':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ag':
+ if (['com', 'net', 'org', 'co', 'nom', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ai':
+ if (['off', 'com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'al':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ao':
+ if (['co', 'ed', 'it', 'og', 'pb', 'gv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ar':
+ if (['com', 'edu', 'gov', 'gob', 'int', 'mil', 'net', 'org', 'tur', 'musica'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'as':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'at':
+ if (['gv', 'ac', 'co', 'or', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'au':
+ if (wa[1] == 'gov' && wa[3] != undefined) {
+ if (['act', 'nsw', 'nt', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (wa[1] == 'edu' && wa[3] != undefined) {
+ if (['act', 'catholic', 'eq', 'nsw', 'nt', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['act', 'asn', 'com', 'conf', 'csiro', 'edu', 'gov', 'id', 'info', 'net', 'nsw', 'nt', 'org', 'oz', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aw':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'az':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'int', 'mil', 'name', 'net', 'org', 'pp', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ba':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'net', 'org', 'rs'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bb':
+ if (['biz', 'co', 'com', 'edu', 'gov', 'info', 'net', 'org', 'store', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bd':
+ if (['com', 'edu', 'ac', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'be':
+ if (wa[1] == 'ac') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bf':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bg':
+ if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bh':
+ if (['com', 'info', 'cc', 'edu', 'biz', 'net', 'org', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bi':
+ if (['ac', 'co', 'com', 'edu', 'gouv', 'gov', 'int', 'mil', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bj':
+ if (['asso', 'barreau', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bn':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bo':
+ if (['academia', 'agro', 'arte', 'blog', 'bolivia', 'ciencia', 'com', 'cooperativa', 'democracia', 'deporte', 'ecologia', 'economia', 'edu', 'empresa', 'gob', 'gov', 'indigena', 'industria', 'info', 'int', 'medicina', 'mil', 'movimiento', 'musica', 'natural', 'net', 'nombre', 'noticias', 'org', 'patria', 'plurinacional', 'politica', 'profesional', 'pueblo', 'revista', 'salud', 'tecnologia', 'tksat', 'transporte', 'tv', 'web', 'wiki'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'br':
+ if (['9guacu', 'abc', 'adm', 'adv', 'agr', 'aju', 'am', 'anani', 'aparecida', 'arq', 'art', 'ato', 'b', 'barueri', 'belem', 'bhz', 'bio', 'blog', 'bmd', 'boavista', 'bsb', 'campinagrande', 'campinas', 'caxias', 'cim', 'cng', 'cnt', 'com', 'contagem', 'coop', 'cri', 'cuiaba', 'curitiba', 'def', 'ecn', 'eco', 'edu', 'emp', 'eng', 'esp', 'etc', 'eti', 'far', 'feira', 'flog', 'floripa', 'fm', 'fnd', 'fortal', 'fot', 'foz', 'fst', 'g12', 'ggf', 'goiania', 'gov', 'gru', 'imb', 'ind', 'inf', 'jab', 'jampa', 'jdf', 'joinville', 'jor', 'jus', 'leg', 'lel', 'londrina', 'macapa', 'maceio', 'manaus', 'maringa', 'mat', 'med', 'mil', 'morena', 'mp', 'mus', 'natal', 'net', 'niteroi', 'nom', 'not', 'ntr', 'odo', 'ong', 'org', 'osasco', 'palmas', 'poa', 'ppg', 'pro', 'psc', 'psi', 'pvh', 'qsl', 'radio', 'rec', 'recife', 'ribeirao', 'rio', 'riobranco', 'riopreto', 'salvador', 'sampa', 'santamaria', 'santoandre', 'saobernardo', 'saogonca', 'sjc', 'slg', 'slz', 'sorocaba', 'srv', 'taxi', 'teo', 'the', 'tmp', 'trd', 'tur', 'tv', 'udi', 'vet', 'vix', 'vlog', 'wiki', 'zlg'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bs':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bw':
+ if (['org', 'ac', 'co', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'by':
+ if (['gov', 'mil', 'com', 'of'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'nym', 'of', 'org', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ca':
+ if (['ab', 'bc', 'gc', 'mb', 'nb', 'nf', 'nl', 'ns', 'nt', 'nu', 'on', 'pe', 'qc', 'sk', 'yk'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cd':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ci':
+ if (['ac', 'asso', 'co', 'com', 'ed', 'edu', 'go', 'gouv', 'int', 'md', 'net', 'or', 'org', 'presse', 'xn--aroport-bya'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ck':
+ if (['biz', 'co', 'edu', 'gen', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cl':
+ if (['gov', 'gob', 'co', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cm':
+ if (['co', 'com', 'gov', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cn':
+ if (['ac', 'ah', 'bj', 'com', 'cq', 'edu', 'fj', 'gd', 'gov', 'gs', 'gx', 'gz', 'ha', 'hb', 'he', 'hi', 'hk', 'hl', 'hn', 'jl', 'js', 'jx', 'ln', 'mil', 'mo', 'net', 'nm', 'nx', 'org', 'qh', 'sc', 'sd', 'sh', 'sn', 'sx', 'tj', 'tw', 'xj', 'xn--55qx5d', 'xn--io0a7i', 'xn--od0alg', 'xz', 'yn', 'zj'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'co':
+ if (['arts', 'com', 'edu', 'firm', 'gov', 'info', 'int', 'mil', 'net', 'nom', 'org', 'rec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'com':
+ if (['africa', 'ar', 'br', 'cn', 'co', 'de', 'eu', 'gb', 'gr', 'hu', 'jpn', 'kr', 'mex', 'no', 'qc', 'ru', 'sa', 'se', 'uk', 'us', 'uy', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cr':
+ if (['ac', 'co', 'ed', 'fi', 'go', 'or', 'sa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cu':
+ if (['com', 'edu', 'org', 'net', 'gov', 'inf'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cw':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cy':
+ if (['ac', 'biz', 'com', 'ekloges', 'gov', 'ltd', 'name', 'net', 'org', 'parliament', 'press', 'pro', 'tm'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dm':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'do':
+ if (['art', 'com', 'edu', 'gob', 'gov', 'mil', 'net', 'org', 'sld', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dz':
+ if (['art', 'asso', 'com', 'edu', 'gov', 'net', 'org', 'pol'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ec':
+ if (['com', 'edu', 'fin', 'gob', 'gov', 'info', 'k12', 'med', 'mil', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ee':
+ if (['aip', 'com', 'edu', 'fie', 'gov', 'lib', 'med', 'org', 'pri', 'riik'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'eg':
+ if (['com', 'edu', 'eun', 'gov', 'mil', 'name', 'net', 'org', 'sci'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'es':
+ if (['com', 'nom', 'org', 'gob', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'et':
+ if (['com', 'gov', 'org', 'edu', 'net', 'biz', 'name', 'info'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fi':
+ if (wa[1] == 'aland') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fj':
+ if (['ac', 'biz', 'com', 'info', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fr':
+ if (['aeroport', 'assedic', 'asso', 'avocat', 'avoues', 'cci', 'chambagri', 'chirurgiens-dentistes', 'com', 'experts-comptables', 'geometre-expert', 'gouv', 'greta', 'huissier-justice', 'medecin', 'nom', 'notaires', 'pharmacien', 'port', 'prd', 'presse', 'tm', 'veterinaire'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ge':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'pvt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gg':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gh':
+ if (['com', 'edu', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gi':
+ if (['com', 'edu', 'gov', 'ltd', 'mod', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gl':
+ if (['co', 'com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gn':
+ if (['ac', 'com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gov':
+ if (['al', 'alabama', 'alaska', 'americansamoa', 'ar', 'arizona', 'arkansas', 'as', 'az', 'ca', 'co', 'colorado', 'ct', 'dc', 'de', 'delaware', 'ehawaii', 'fl', 'florida', 'ga', 'georgia', 'guam', 'hawaii', 'ia', 'idaho', 'il', 'illinois', 'in', 'indiana', 'iowa', 'kansas', 'kentucky', 'ks', 'ky', 'la', 'louisiana', 'ma', 'maine', 'maryland', 'mass', 'massachusetts', 'md', 'mi', 'michigan', 'minnesota', 'mississippi', 'missouri', 'mn', 'mo', 'montana', 'ms', 'mt', 'nc', 'nd', 'ne', 'nebraska', 'nevada', 'newjersey', 'newmexico', 'nh', 'nj', 'northcarolina', 'northdakota', 'nv', 'ny', 'ohio', 'ok', 'oklahoma', 'oregon', 'pa', 'pennsylvania', 'pr', 'rhodeisland', 'ri', 'sc', 'sd', 'tennessee', 'texas', 'tn', 'utah', 'vermont', 'vi', 'virginia', 'vt', 'wa', 'washington', 'wi', 'wisconsin', 'wv', 'wy', 'wyoming'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gp':
+ if (['com', 'net', 'mobi', 'edu', 'org', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gr':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'mod', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gt':
+ if (['com', 'edu', 'net', 'gob', 'org', 'mil', 'ind'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gu':
+ if (['com', 'edu', 'gov', 'guam', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gy':
+ if (['co', 'com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hk':
+ if (['com', 'edu', 'gov', 'idv', 'net', 'org', 'xn--55qx5d', 'xn--ciqpn', 'xn--gmq050i', 'xn--gmqw5a', 'xn--io0a7i', 'xn--lcvr32d', 'xn--mk0axi', 'xn--mxtq1m', 'xn--od0alg', 'xn--od0aq3b', 'xn--tn0ag', 'xn--uc0atv', 'xn--uc0ay4a', 'xn--wcvs22d', 'xn--zf0avx'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hn':
+ if (['com', 'edu', 'gob', 'net', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hr':
+ if (['iz', 'from', 'name', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ht':
+ if (['com', 'shop', 'firm', 'info', 'adult', 'net', 'pro', 'org', 'med', 'art', 'coop', 'pol', 'asso', 'edu', 'rel', 'gouv', 'perso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hu':
+ if (['2000', 'agrar', 'bolt', 'casino', 'city', 'co', 'edu', 'erotica', 'erotika', 'film', 'forum', 'games', 'gov', 'hotel', 'info', 'ingatlan', 'jogasz', 'konyvelo', 'lakas', 'media', 'mobi', 'net', 'news', 'org', 'priv', 'reklam', 'sex', 'shop', 'sport', 'suli', 'szex', 'tm', 'tozsde', 'utazas', 'video'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'id':
+ if (['ac', 'biz', 'co', 'desa', 'go', 'mil', 'my', 'net', 'or', 'ponpes', 'sch', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ie':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'il':
+ if (['ac', 'co', 'gov', 'idf', 'k12', 'muni', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'im':
+ if (['ac', 'co', 'com', 'gov', 'net', 'org', 'ro', 'tt', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'in':
+ if (['ac', 'co', 'edu', 'ernet', 'firm', 'gen', 'gov', 'ind', 'mil', 'net', 'org', 'res', 'nic'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'int':
+ if (wa[1] == 'eu') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'io':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'iq':
+ if (['gov', 'edu', 'mil', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ir':
+ if (['ac', 'co', 'gov', 'id', 'net', 'org', 'sch', 'xn--mgba3a4f16a', 'xn--mgba3a4fra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'is':
+ if (['net', 'com', 'edu', 'gov', 'org', 'int'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'it':
+ if (['abr', 'abruzzo', 'ag', 'agrigento', 'al', 'alessandria', 'alto-adige', 'altoadige', 'an', 'ancona', 'andria-barletta-trani', 'andria-trani-barletta', 'andriabarlettatrani', 'andriatranibarletta', 'ao', 'aosta', 'aosta-valley', 'aostavalley', 'aoste', 'ap', 'aq', 'aquila', 'ar', 'arezzo', 'ascoli-piceno', 'ascolipiceno', 'asti', 'at', 'av', 'avellino', 'ba', 'balsan', 'balsan-sudtirol', 'balsan-suedtirol', 'bari', 'barletta-trani-andria', 'barlettatraniandria', 'bas', 'basilicata', 'belluno', 'benevento', 'bergamo', 'bg', 'bi', 'biella', 'bl', 'bn', 'bo', 'bologna', 'bolzano', 'bolzano-altoadige', 'bozen', 'bozen-sudtirol', 'bozen-suedtirol', 'br', 'brescia', 'brindisi', 'bs', 'bt', 'bulsan', 'bulsan-sudtirol', 'bulsan-suedtirol', 'bz', 'ca', 'cagliari', 'cal', 'calabria', 'caltanissetta', 'cam', 'campania', 'campidano-medio', 'campidanomedio', 'campobasso', 'carbonia-iglesias', 'carboniaiglesias', 'carrara-massa', 'carraramassa', 'caserta', 'catania', 'catanzaro', 'cb', 'ce', 'cesena-forli', 'cesenaforli', 'ch', 'chieti', 'ci', 'cl', 'cn', 'co', 'como', 'cosenza', 'cr', 'cremona', 'crotone', 'cs', 'ct', 'cuneo', 'cz', 'dell-ogliastra', 'dellogliastra', 'edu', 'emilia-romagna', 'emiliaromagna', 'emr', 'en', 'enna', 'fc', 'fe', 'fermo', 'ferrara', 'fg', 'fi', 'firenze', 'florence', 'fm', 'foggia', 'forli-cesena', 'forlicesena', 'fr', 'friuli-v-giulia', 'friuli-ve-giulia', 'friuli-vegiulia', 'friuli-venezia-giulia', 'friuli-veneziagiulia', 'friuli-vgiulia', 'friuliv-giulia', 'friulive-giulia', 'friulivegiulia', 'friulivenezia-giulia', 'friuliveneziagiulia', 'friulivgiulia', 'frosinone', 'fvg', 'ge', 'genoa', 'genova', 'go', 'gorizia', 'gov', 'gr', 'grosseto', 'iglesias-carbonia', 'iglesiascarbonia', 'im', 'imperia', 'is', 'isernia', 'kr', 'la-spezia', 'laquila', 'laspezia', 'latina', 'laz', 'lazio', 'lc', 'le', 'lecce', 'lecco', 'li', 'lig', 'liguria', 'livorno', 'lo', 'lodi', 'lom', 'lombardia', 'lombardy', 'lt', 'lu', 'lucania', 'lucca', 'macerata', 'mantova', 'mar', 'marche', 'massa-carrara', 'massacarrara', 'matera', 'mb', 'mc', 'me', 'medio-campidano', 'mediocampidano', 'messina', 'mi', 'milan', 'milano', 'mn', 'mo', 'modena', 'mol', 'molise', 'monza', 'monza-brianza', 'monza-e-della-brianza', 'monzabrianza', 'monzaebrianza', 'monzaedellabrianza', 'ms', 'mt', 'na', 'naples', 'napoli', 'no', 'novara', 'nu', 'nuoro', 'og', 'ogliastra', 'olbia-tempio', 'olbiatempio', 'or', 'oristano', 'ot', 'pa', 'padova', 'padua', 'palermo', 'parma', 'pavia', 'pc', 'pd', 'pe', 'perugia', 'pesaro-urbino', 'pesarourbino', 'pescara', 'pg', 'pi', 'piacenza', 'piedmont', 'piemonte', 'pisa', 'pistoia', 'pmn', 'pn', 'po', 'pordenone', 'potenza', 'pr', 'prato', 'pt', 'pu', 'pug', 'puglia', 'pv', 'pz', 'ra', 'ragusa', 'ravenna', 'rc', 're', 'reggio-calabria', 'reggio-emilia', 'reggiocalabria', 'reggioemilia', 'rg', 'ri', 'rieti', 'rimini', 'rm', 'rn', 'ro', 'roma', 'rome', 'rovigo', 'sa', 'salerno', 'sar', 'sardegna', 'sardinia', 'sassari', 'savona', 'si', 'sic', 'sicilia', 'sicily', 'siena', 'siracusa', 'so', 'sondrio', 'sp', 'sr', 'ss', 'suedtirol', 'sv', 'ta', 'taa', 'taranto', 'te', 'tempio-olbia', 'tempioolbia', 'teramo', 'terni', 'tn', 'to', 'torino', 'tos', 'toscana', 'tp', 'tr', 'trani-andria-barletta', 'trani-barletta-andria', 'traniandriabarletta', 'tranibarlettaandria', 'trapani', 'trentin-sud-tirol', 'trentin-sudtirol', 'trentin-sued-tirol', 'trentin-suedtirol', 'trentino', 'trentino-a-adige', 'trentino-aadige', 'trentino-alto-adige', 'trentino-altoadige', 'trentino-s-tirol', 'trentino-stirol', 'trentino-sud-tirol', 'trentino-sudtirol', 'trentino-sued-tirol', 'trentino-suedtirol', 'trentinoa-adige', 'trentinoaadige', 'trentinoalto-adige', 'trentinoaltoadige', 'trentinos-tirol', 'trentinostirol', 'trentinosud-tirol', 'trentinosudtirol', 'trentinosued-tirol', 'trentinosuedtirol', 'trentinsud-tirol', 'trentinsudtirol', 'trentinsued-tirol', 'trentinsuedtirol', 'trento', 'treviso', 'trieste', 'ts', 'turin', 'tuscany', 'tv', 'ud', 'udine', 'umb', 'umbria', 'urbino-pesaro', 'urbinopesaro', 'va', 'val-d-aosta', 'val-daosta', 'vald-aosta', 'valdaosta', 'valle-aosta', 'valle-d-aosta', 'valle-daosta', 'valleaosta', 'valled-aosta', 'valledaosta', 'vallee-aoste', 'vallee-d-aoste', 'valleeaoste', 'valleedaoste', 'vao', 'varese', 'vb', 'vc', 'vda', 've', 'ven', 'veneto', 'venezia', 'venice', 'verbania', 'vercelli', 'verona', 'vi', 'vibo-valentia', 'vibovalentia', 'vicenza', 'viterbo', 'vr', 'vs', 'vt', 'vv', 'xn--balsan-sdtirol-nsb', 'xn--bozen-sdtirol-2ob', 'xn--bulsan-sdtirol-nsb', 'xn--cesena-forl-mcb', 'xn--cesenaforl-i8a', 'xn--forl-cesena-fcb', 'xn--forlcesena-c8a', 'xn--sdtirol-n2a', 'xn--trentin-sd-tirol-rzb', 'xn--trentin-sdtirol-7vb', 'xn--trentino-sd-tirol-c3b', 'xn--trentino-sdtirol-szb', 'xn--trentinosd-tirol-rzb', 'xn--trentinosdtirol-7vb', 'xn--trentinsd-tirol-6vb', 'xn--trentinsdtirol-nsb', 'xn--valle-aoste-ebb', 'xn--valle-d-aoste-ehb', 'xn--valleaoste-e7a', 'xn--valledaoste-ebb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'je':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jm':
+ if (['com', 'net', 'org', 'edu', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jo':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jp':
+ if (['ac', 'ad', 'aichi', 'akita', 'aomori', 'chiba', 'co', 'ed', 'ehime', 'fukui', 'fukuoka', 'fukushima', 'gifu', 'go', 'gr', 'gunma', 'hiroshima', 'hokkaido', 'hyogo', 'ibaraki', 'ishikawa', 'iwate', 'kagawa', 'kagoshima', 'kanagawa', 'kochi', 'kumamoto', 'kyoto', 'lg', 'mie', 'miyagi', 'miyazaki', 'nagano', 'nagasaki', 'nara', 'ne', 'niigata', 'oita', 'okayama', 'okinawa', 'or', 'osaka', 'saga', 'saitama', 'shiga', 'shimane', 'shizuoka', 'tochigi', 'tokushima', 'tokyo', 'tottori', 'toyama', 'wakayama', 'xn--0trq7p7nn', 'xn--1ctwo', 'xn--1lqs03n', 'xn--1lqs71d', 'xn--2m4a15e', 'xn--32vp30h', 'xn--4it168d', 'xn--4it797k', 'xn--4pvxs', 'xn--5js045d', 'xn--5rtp49c', 'xn--5rtq34k', 'xn--6btw5a', 'xn--6orx2r', 'xn--7t0a264c', 'xn--8ltr62k', 'xn--8pvr4u', 'xn--c3s14m', 'xn--d5qv7z876c', 'xn--djrs72d6uy', 'xn--djty4k', 'xn--efvn9s', 'xn--ehqz56n', 'xn--elqq16h', 'xn--f6qx53a', 'xn--k7yn95e', 'xn--kbrq7o', 'xn--klt787d', 'xn--kltp7d', 'xn--kltx9a', 'xn--klty5x', 'xn--mkru45i', 'xn--nit225k', 'xn--ntso0iqx3a', 'xn--ntsq17g', 'xn--pssu33l', 'xn--qqqt11m', 'xn--rht27z', 'xn--rht3d', 'xn--rht61e', 'xn--rny31h', 'xn--tor131o', 'xn--uist22h', 'xn--uisz3g', 'xn--uuwu58a', 'xn--vgu402c', 'xn--zbx025d', 'yamagata', 'yamaguchi', 'yamanashi'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ke':
+ if (['ac', 'co', 'go', 'info', 'me', 'mobi', 'ne', 'or', 'sc'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kg':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kh':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ki':
+ if (['edu', 'biz', 'net', 'org', 'gov', 'info', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'km':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'ass', 'com', 'coop', 'asso', 'presse', 'medecin', 'notaires', 'pharmaciens', 'veterinaire', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kn':
+ if (['net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kp':
+ if (['com', 'edu', 'gov', 'org', 'rep', 'tra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kr':
+ if (['ac', 'busan', 'cheju', 'chonbuk', 'chonnam', 'chungbuk', 'chungnam', 'co', 'daegu', 'daejeon', 'es', 'gangwon', 'go', 'gwangju', 'gyeongbuk', 'gyeonggi', 'gyeongnam', 'hs', 'incheon', 'inchon', 'jeju', 'jeonbuk', 'jeonnam', 'kangwon', 'kg', 'kwangju', 'kyongbuk', 'kyonggi', 'kyongnam', 'mil', 'ms', 'ne', 'nm', 'or', 'pe', 'pusan', 're', 'sc', 'seoul', 'taegu', 'taejon', 'ulsan', 'xn--bj0bj06e'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kw':
+ if (['com', 'edu', 'emb', 'gov', 'ind', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ky':
+ if (['edu', 'gov', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'la':
+ if (['int', 'net', 'info', 'edu', 'gov', 'per', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lc':
+ if (['com', 'net', 'co', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lk':
+ if (['ac', 'assn', 'com', 'edu', 'gov', 'grp', 'hotel', 'int', 'ltd', 'net', 'ngo', 'org', 'sch', 'soc', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lr':
+ if (['com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ls':
+ if (['ac', 'co', 'gov', 'net', 'nul', 'org', 'parliament', 'quadrant'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lt':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lv':
+ if (['asn', 'com', 'conf', 'edu', 'gov', 'id', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ly':
+ if (['com', 'edu', 'gov', 'id', 'med', 'net', 'org', 'plc', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ma':
+ if (['ac', 'co', 'gov', 'net', 'org', 'press'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mc':
+ if (['tm', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'me':
+ if (['co', 'net', 'org', 'edu', 'ac', 'gov', 'its', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mg':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'com', 'co'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mk':
+ if (['com', 'edu', 'gov', 'inf', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ml':
+ if (['com', 'edu', 'gouv', 'gov', 'net', 'org', 'presse'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mn':
+ if (['gov', 'edu', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mo':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mr':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ms':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mu':
+ if (['ac', 'co', 'com', 'gov', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'museum':
+ if (['academy', 'agriculture', 'air', 'airguard', 'alabama', 'alaska', 'amber', 'ambulance', 'american', 'americana', 'americanantiques', 'americanart', 'amsterdam', 'and', 'annefrank', 'anthro', 'anthropology', 'antiques', 'aquarium', 'arboretum', 'archaeological', 'archaeology', 'architecture', 'art', 'artanddesign', 'artcenter', 'artdeco', 'arteducation', 'artgallery', 'arts', 'artsandcrafts', 'asmatart', 'assassination', 'assisi', 'association', 'astronomy', 'atlanta', 'austin', 'australia', 'automotive', 'aviation', 'axis', 'badajoz', 'baghdad', 'bahn', 'bale', 'baltimore', 'barcelona', 'baseball', 'basel', 'baths', 'bauern', 'beauxarts', 'beeldengeluid', 'bellevue', 'bergbau', 'berkeley', 'berlin', 'bern', 'bible', 'bilbao', 'bill', 'birdart', 'birthplace', 'bonn', 'boston', 'botanical', 'botanicalgarden', 'botanicgarden', 'botany', 'brandywinevalley', 'brasil', 'bristol', 'british', 'britishcolumbia', 'broadcast', 'brunel', 'brussel', 'brussels', 'bruxelles', 'building', 'burghof', 'bus', 'bushey', 'cadaques', 'california', 'cambridge', 'can', 'canada', 'capebreton', 'carrier', 'cartoonart', 'casadelamoneda', 'castle', 'castres', 'celtic', 'center', 'chattanooga', 'cheltenham', 'chesapeakebay', 'chicago', 'children', 'childrens', 'childrensgarden', 'chiropractic', 'chocolate', 'christiansburg', 'cincinnati', 'cinema', 'circus', 'civilisation', 'civilization', 'civilwar', 'clinton', 'clock', 'coal', 'coastaldefence', 'cody', 'coldwar', 'collection', 'colonialwilliamsburg', 'coloradoplateau', 'columbia', 'columbus', 'communication', 'communications', 'community', 'computer', 'computerhistory', 'comunicações', 'contemporary', 'contemporaryart', 'convent', 'copenhagen', 'corporation', 'correios-e-telecomunicações', 'corvette', 'costume', 'countryestate', 'county', 'crafts', 'cranbrook', 'creation', 'cultural', 'culturalcenter', 'culture', 'cyber', 'cymru', 'dali', 'dallas', 'database', 'ddr', 'decorativearts', 'delaware', 'delmenhorst', 'denmark', 'depot', 'design', 'detroit', 'dinosaur', 'discovery', 'dolls', 'donostia', 'durham', 'eastafrica', 'eastcoast', 'education', 'educational', 'egyptian', 'eisenbahn', 'elburg', 'elvendrell', 'embroidery', 'encyclopedic', 'england', 'entomology', 'environment', 'environmentalconservation', 'epilepsy', 'essex', 'estate', 'ethnology', 'exeter', 'exhibition', 'family', 'farm', 'farmequipment', 'farmers', 'farmstead', 'field', 'figueres', 'filatelia', 'film', 'fineart', 'finearts', 'finland', 'flanders', 'florida', 'force', 'fortmissoula', 'fortworth', 'foundation', 'francaise', 'frankfurt', 'franziskaner', 'freemasonry', 'freiburg', 'fribourg', 'frog', 'fundacio', 'furniture', 'gallery', 'garden', 'gateway', 'geelvinck', 'gemological', 'geology', 'georgia', 'giessen', 'glas', 'glass', 'gorge', 'grandrapids', 'graz', 'guernsey', 'halloffame', 'hamburg', 'handson', 'harvestcelebration', 'hawaii', 'health', 'heimatunduhren', 'hellas', 'helsinki', 'hembygdsforbund', 'heritage', 'histoire', 'historical', 'historicalsociety', 'historichouses', 'historisch', 'historisches', 'history', 'historyofscience', 'horology', 'house', 'humanities', 'illustration', 'imageandsound', 'indian', 'indiana', 'indianapolis', 'indianmarket', 'intelligence', 'interactive', 'iraq', 'iron', 'isleofman', 'jamison', 'jefferson', 'jerusalem', 'jewelry', 'jewish', 'jewishart', 'jfk', 'journalism', 'judaica', 'judygarland', 'juedisches', 'juif', 'karate', 'karikatur', 'kids', 'koebenhavn', 'koeln', 'kunst', 'kunstsammlung', 'kunstunddesign', 'labor', 'labour', 'lajolla', 'lancashire', 'landes', 'lans', 'larsson', 'lewismiller', 'lincoln', 'linz', 'living', 'livinghistory', 'localhistory', 'london', 'losangeles', 'louvre', 'loyalist', 'lucerne', 'luxembourg', 'luzern', 'läns', 'mad', 'madrid', 'mallorca', 'manchester', 'mansion', 'mansions', 'manx', 'marburg', 'maritime', 'maritimo', 'maryland', 'marylhurst', 'media', 'medical', 'medizinhistorisches', 'meeres', 'memorial', 'mesaverde', 'michigan', 'midatlantic', 'military', 'mill', 'miners', 'mining', 'minnesota', 'missile', 'missoula', 'modern', 'moma', 'money', 'monmouth', 'monticello', 'montreal', 'moscow', 'motorcycle', 'muenchen', 'muenster', 'mulhouse', 'muncie', 'museet', 'museumcenter', 'museumvereniging', 'music', 'national', 'nationalfirearms', 'nationalheritage', 'nativeamerican', 'naturalhistory', 'naturalhistorymuseum', 'naturalsciences', 'nature', 'naturhistorisches', 'natuurwetenschappen', 'naumburg', 'naval', 'nebraska', 'neues', 'newhampshire', 'newjersey', 'newmexico', 'newport', 'newspaper', 'newyork', 'niepce', 'norfolk', 'north', 'nrw', 'nuernberg', 'nuremberg', 'nyc', 'nyny', 'oceanographic', 'oceanographique', 'omaha', 'online', 'ontario', 'openair', 'oregon', 'oregontrail', 'otago', 'oxford', 'pacific', 'paderborn', 'palace', 'paleo', 'palmsprings', 'panama', 'paris', 'pasadena', 'pharmacy', 'philadelphia', 'philadelphiaarea', 'philately', 'phoenix', 'photography', 'pilots', 'pittsburgh', 'planetarium', 'plantation', 'plants', 'plaza', 'portal', 'portland', 'portlligat', 'posts-and-telecommunications', 'preservation', 'presidio', 'press', 'project', 'public', 'pubol', 'quebec', 'railroad', 'railway', 'research', 'resistance', 'riodejaneiro', 'rochester', 'rockart', 'roma', 'russia', 'saintlouis', 'salem', 'salvadordali', 'salzburg', 'sandiego', 'sanfrancisco', 'santabarbara', 'santacruz', 'santafe', 'saskatchewan', 'satx', 'savannahga', 'schlesisches', 'schoenbrunn', 'schokoladen', 'school', 'schweiz', 'science', 'science-fiction', 'scienceandhistory', 'scienceandindustry', 'sciencecenter', 'sciencecenters', 'sciencehistory', 'sciences', 'sciencesnaturelles', 'scotland', 'seaport', 'settlement', 'settlers', 'shell', 'sherbrooke', 'sibenik', 'silk', 'ski', 'skole', 'society', 'sologne', 'soundandvision', 'southcarolina', 'southwest', 'space', 'spy', 'square', 'stadt', 'stalbans', 'starnberg', 'state', 'stateofdelaware', 'station', 'steam', 'steiermark', 'stjohn', 'stockholm', 'stpetersburg', 'stuttgart', 'suisse', 'surgeonshall', 'surrey', 'svizzera', 'sweden', 'sydney', 'tank', 'tcm', 'technology', 'telekommunikation', 'television', 'texas', 'textile', 'theater', 'time', 'timekeeping', 'topology', 'torino', 'touch', 'town', 'transport', 'tree', 'trolley', 'trust', 'trustee', 'uhren', 'ulm', 'undersea', 'university', 'usa', 'usantiques', 'usarts', 'uscountryestate', 'usculture', 'usdecorativearts', 'usgarden', 'ushistory', 'ushuaia', 'uslivinghistory', 'utah', 'uvic', 'valley', 'vantaa', 'versailles', 'viking', 'village', 'virginia', 'virtual', 'virtuel', 'vlaanderen', 'volkenkunde', 'wales', 'wallonie', 'war', 'washingtondc', 'watch-and-clock', 'watchandclock', 'western', 'westfalen', 'whaling', 'wildlife', 'williamsburg', 'windmill', 'workshop', 'xn--9dbhblg6di', 'xn--h1aegh', 'york', 'yorkshire', 'yosemite', 'youth', 'zoological', 'zoology'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mv':
+ if (['aero', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'int', 'mil', 'museum', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mw':
+ if (['ac', 'biz', 'co', 'com', 'coop', 'edu', 'gov', 'int', 'museum', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mx':
+ if (['com', 'edu', 'gob', 'net', 'ngo', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'my':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mz':
+ if (['co', 'net', 'org', 'ac', 'gov', 'edu', 'mil', 'adv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'na':
+ if (['info', 'pro', 'name', 'school', 'or', 'dr', 'us', 'mx', 'ca', 'in', 'cc', 'tv', 'ws', 'mobi', 'co', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'name':
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ break;
+ case 'nc':
+ if (['asso', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'net':
+ if (['gb', 'hu', 'in', 'jp', 'ru', 'se', 'uk', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nf':
+ if (['arts', 'com', 'firm', 'info', 'net', 'other', 'per', 'rec', 'store', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ng':
+ if (['com', 'edu', 'gov', 'i', 'mil', 'mobi', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ni':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gob', 'in', 'info', 'int', 'mil', 'net', 'nom', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nl':
+ if (wa[1] == 'bv') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'no':
+ if (['aa', 'aarborte', 'aejrie', 'afjord', 'agdenes', 'ah', 'aknoluokta', 'akrehamn', 'al', 'alaheadju', 'alesund', 'algard', 'alstahaug', 'alta', 'alvdal', 'amli', 'amot', 'andasuolo', 'andebu', 'andoy', 'ardal', 'aremark', 'arendal', 'arna', 'aseral', 'asker', 'askim', 'askoy', 'askvoll', 'asnes', 'audnedaln', 'aukra', 'aure', 'aurland', 'austevoll', 'austrheim', 'averoy', 'badaddja', 'bahcavuotna', 'bahccavuotna', 'baidar', 'bajddar', 'balat', 'balestrand', 'ballangen', 'balsfjord', 'bamble', 'bardu', 'barum', 'batsfjord', 'bearalvahki', 'beardu', 'beiarn', 'berg', 'bergen', 'berlevag', 'bievat', 'bindal', 'birkenes', 'bjarkoy', 'bjerkreim', 'bjugn', 'bodo', 'bokn', 'bomlo', 'bremanger', 'bronnoy', 'bronnoysund', 'brumunddal', 'bryne', 'bu', 'budejju', 'bygland', 'bykle', 'cahcesuolo', 'davvenjarga', 'davvesiida', 'deatnu', 'dep', 'dielddanuorri', 'divtasvuodna', 'divttasvuotna', 'donna', 'dovre', 'drammen', 'drangedal', 'drobak', 'dyroy', 'egersund', 'eid', 'eidfjord', 'eidsberg', 'eidskog', 'eidsvoll', 'eigersund', 'elverum', 'enebakk', 'engerdal', 'etne', 'etnedal', 'evenassi', 'evenes', 'farsund', 'fauske', 'fedje', 'fet', 'fetsund', 'fhs', 'finnoy', 'fitjar', 'fjaler', 'fjell', 'fla', 'flakstad', 'flatanger', 'flekkefjord', 'flesberg', 'flora', 'floro', 'fm', 'folkebibl', 'folldal', 'forde', 'forsand', 'fosnes', 'frana', 'fredrikstad', 'frei', 'frogn', 'froland', 'frosta', 'froya', 'fuoisku', 'fuossko', 'fusa', 'fylkesbibl', 'fyresdal', 'gaivuotna', 'galsa', 'gamvik', 'gangaviika', 'gaular', 'gausdal', 'giehtavuoatna', 'gildeskal', 'giske', 'gjemnes', 'gjerdrum', 'gjerstad', 'gjesdal', 'gjovik', 'gloppen', 'gol', 'gran', 'grane', 'granvin', 'gratangen', 'grimstad', 'grong', 'grue', 'gulen', 'guovdageaidnu', 'ha', 'habmer', 'hadsel', 'hagebostad', 'halden', 'halsa', 'hamar', 'hamaroy', 'hammarfeasta', 'hammerfest', 'hapmir', 'haram', 'hareid', 'harstad', 'hasvik', 'hattfjelldal', 'haugesund', 'hemne', 'hemnes', 'hemsedal', 'herad', 'hitra', 'hjartdal', 'hjelmeland', 'hl', 'hm', 'hobol', 'hof', 'hokksund', 'hol', 'hole', 'holmestrand', 'holtalen', 'honefoss', 'hornindal', 'horten', 'hoyanger', 'hoylandet', 'hurdal', 'hurum', 'hvaler', 'hyllestad', 'ibestad', 'idrett', 'inderoy', 'iveland', 'ivgu', 'jessheim', 'jevnaker', 'jolster', 'jondal', 'jorpeland', 'kafjord', 'karasjohka', 'karasjok', 'karlsoy', 'karmoy', 'kautokeino', 'kirkenes', 'klabu', 'klepp', 'kommune', 'kongsberg', 'kongsvinger', 'kopervik', 'kraanghke', 'kragero', 'kristiansand', 'kristiansund', 'krodsherad', 'krokstadelva', 'kvafjord', 'kvalsund', 'kvam', 'kvanangen', 'kvinesdal', 'kvinnherad', 'kviteseid', 'kvitsoy', 'laakesvuemie', 'lahppi', 'langevag', 'lardal', 'larvik', 'lavagis', 'lavangen', 'leangaviika', 'lebesby', 'leikanger', 'leirfjord', 'leirvik', 'leka', 'leksvik', 'lenvik', 'lerdal', 'lesja', 'levanger', 'lier', 'lierne', 'lillehammer', 'lillesand', 'lindas', 'lindesnes', 'loabat', 'lodingen', 'lom', 'loppa', 'lorenskog', 'loten', 'lund', 'lunner', 'luroy', 'luster', 'lyngdal', 'lyngen', 'malatvuopmi', 'malselv', 'malvik', 'mandal', 'marker', 'marnardal', 'masfjorden', 'masoy', 'meland', 'meldal', 'melhus', 'meloy', 'meraker', 'midsund', 'mil', 'mjondalen', 'moareke', 'modalen', 'modum', 'molde', 'mosjoen', 'moskenes', 'moss', 'mosvik', 'mr', 'muosat', 'museum', 'naamesjevuemie', 'namdalseid', 'namsos', 'namsskogan', 'nannestad', 'naroy', 'narviika', 'narvik', 'naustdal', 'navuotna', 'nesna', 'nesodden', 'nesoddtangen', 'nesseby', 'nesset', 'nissedal', 'nittedal', 'nl', 'norddal', 'nordkapp', 'nordreisa', 'notodden', 'notteroy', 'nt', 'odda', 'of', 'oksnes', 'ol', 'omasvuotna', 'oppdal', 'oppegard', 'orkanger', 'orkdal', 'orland', 'orskog', 'orsta', 'osen', 'oslo', 'osoyro', 'osteroy', 'overhalla', 'oyer', 'oygarden', 'porsanger', 'porsangu', 'porsgrunn', 'priv', 'rade', 'radoy', 'rahkkeravju', 'raholt', 'raisa', 'rakkestad', 'ralingen', 'rana', 'randaberg', 'rauma', 'rendalen', 'rennebu', 'rennesoy', 'rindal', 'ringebu', 'ringerike', 'ringsaker', 'risor', 'rissa', 'rl', 'roan', 'rodoy', 'rollag', 'romsa', 'romskog', 'roros', 'rost', 'royken', 'royrvik', 'ruovat', 'rygge', 'salangen', 'salat', 'saltdal', 'samnanger', 'sandefjord', 'sandnes', 'sandnessjoen', 'sandoy', 'sarpsborg', 'sauda', 'sauherad', 'sel', 'selbu', 'selje', 'seljord', 'sf', 'siellak', 'sigdal', 'siljan', 'sirdal', 'skanit', 'skanland', 'skaun', 'skedsmo', 'skedsmokorset', 'ski', 'skien', 'skierva', 'skiptvet', 'skjak', 'skjervoy', 'skodje', 'slattum', 'smola', 'snaase', 'snasa', 'snillfjord', 'snoasa', 'sogndal', 'sogne', 'sokndal', 'sola', 'solund', 'somna', 'songdalen', 'sorfold', 'sorreisa', 'sortland', 'sorum', 'spjelkavik', 'spydeberg', 'st', 'stange', 'stat', 'stathelle', 'stavanger', 'stavern', 'steigen', 'steinkjer', 'stjordal', 'stjordalshalsen', 'stokke', 'stord', 'stordal', 'storfjord', 'strand', 'stranda', 'stryn', 'sula', 'suldal', 'sund', 'sunndal', 'surnadal', 'svalbard', 'sveio', 'svelvik', 'sykkylven', 'tana', 'tananger', 'time', 'tingvoll', 'tinn', 'tjeldsund', 'tjome', 'tm', 'tokke', 'tolga', 'tonsberg', 'torsken', 'tr', 'trana', 'tranby', 'tranoy', 'troandin', 'trogstad', 'tromsa', 'tromso', 'trondheim', 'trysil', 'tvedestrand', 'tydal', 'tynset', 'tysfjord', 'tysnes', 'tysvar', 'ullensaker', 'ullensvang', 'ulvik', 'unjarga', 'utsira', 'va', 'vaapste', 'vadso', 'vaga', 'vagan', 'vagsoy', 'vaksdal', 'valle', 'vang', 'vanylven', 'vardo', 'varggat', 'varoy', 'vefsn', 'vega', 'vegarshei', 'vennesla', 'verdal', 'verran', 'vestby', 'vestnes', 'vestvagoy', 'vevelstad', 'vf', 'vgs', 'vik', 'vikna', 'vindafjord', 'voagat', 'volda', 'voss', 'vossevangen', 'xn--andy-ira', 'xn--asky-ira', 'xn--aurskog-hland-jnb', 'xn--avery-yua', 'xn--bdddj-mrabd', 'xn--bearalvhki-y4a', 'xn--berlevg-jxa', 'xn--bhcavuotna-s4a', 'xn--bhccavuotna-k7a', 'xn--bidr-5nac', 'xn--bievt-0qa', 'xn--bjarky-fya', 'xn--bjddar-pta', 'xn--blt-elab', 'xn--bmlo-gra', 'xn--bod-2na', 'xn--brnny-wuac', 'xn--brnnysund-m8ac', 'xn--brum-voa', 'xn--btsfjord-9za', 'xn--davvenjrga-y4a', 'xn--dnna-gra', 'xn--drbak-wua', 'xn--dyry-ira', 'xn--eveni-0qa01ga', 'xn--finny-yua', 'xn--fjord-lra', 'xn--fl-zia', 'xn--flor-jra', 'xn--frde-gra', 'xn--frna-woa', 'xn--frya-hra', 'xn--ggaviika-8ya47h', 'xn--gildeskl-g0a', 'xn--givuotna-8ya', 'xn--gjvik-wua', 'xn--gls-elac', 'xn--h-2fa', 'xn--hbmer-xqa', 'xn--hcesuolo-7ya35b', 'xn--hgebostad-g3a', 'xn--hmmrfeasta-s4ac', 'xn--hnefoss-q1a', 'xn--hobl-ira', 'xn--holtlen-hxa', 'xn--hpmir-xqa', 'xn--hyanger-q1a', 'xn--hylandet-54a', 'xn--indery-fya', 'xn--jlster-bya', 'xn--jrpeland-54a', 'xn--karmy-yua', 'xn--kfjord-iua', 'xn--klbu-woa', 'xn--koluokta-7ya57h', 'xn--krager-gya', 'xn--kranghke-b0a', 'xn--krdsherad-m8a', 'xn--krehamn-dxa', 'xn--krjohka-hwab49j', 'xn--ksnes-uua', 'xn--kvfjord-nxa', 'xn--kvitsy-fya', 'xn--kvnangen-k0a', 'xn--l-1fa', 'xn--laheadju-7ya', 'xn--langevg-jxa', 'xn--ldingen-q1a', 'xn--leagaviika-52b', 'xn--lesund-hua', 'xn--lgrd-poac', 'xn--lhppi-xqa', 'xn--linds-pra', 'xn--loabt-0qa', 'xn--lrdal-sra', 'xn--lrenskog-54a', 'xn--lt-liac', 'xn--lten-gra', 'xn--lury-ira', 'xn--mely-ira', 'xn--merker-kua', 'xn--mjndalen-64a', 'xn--mlatvuopmi-s4a', 'xn--mli-tla', 'xn--mlselv-iua', 'xn--moreke-jua', 'xn--mosjen-eya', 'xn--mot-tla', 'xn--msy-ula0h', 'xn--mtta-vrjjat-k7af', 'xn--muost-0qa', 'xn--nmesjevuemie-tcba', 'xn--nry-yla5g', 'xn--nttery-byae', 'xn--nvuotna-hwa', 'xn--oppegrd-ixa', 'xn--ostery-fya', 'xn--osyro-wua', 'xn--porsgu-sta26f', 'xn--rady-ira', 'xn--rdal-poa', 'xn--rde-ula', 'xn--rdy-0nab', 'xn--rennesy-v1a', 'xn--rhkkervju-01af', 'xn--rholt-mra', 'xn--risa-5na', 'xn--risr-ira', 'xn--rland-uua', 'xn--rlingen-mxa', 'xn--rmskog-bya', 'xn--rros-gra', 'xn--rskog-uua', 'xn--rst-0na', 'xn--rsta-fra', 'xn--ryken-vua', 'xn--ryrvik-bya', 'xn--s-1fa', 'xn--sandnessjen-ogb', 'xn--sandy-yua', 'xn--seral-lra', 'xn--sgne-gra', 'xn--skierv-uta', 'xn--skjervy-v1a', 'xn--skjk-soa', 'xn--sknit-yqa', 'xn--sknland-fxa', 'xn--slat-5na', 'xn--slt-elab', 'xn--smla-hra', 'xn--smna-gra', 'xn--snase-nra', 'xn--sndre-land-0cb', 'xn--snes-poa', 'xn--snsa-roa', 'xn--sr-aurdal-l8a', 'xn--sr-fron-q1a', 'xn--sr-odal-q1a', 'xn--sr-varanger-ggb', 'xn--srfold-bya', 'xn--srreisa-q1a', 'xn--srum-gra', 'xn--stjrdal-s1a', 'xn--stjrdalshalsen-sqb', 'xn--stre-toten-zcb', 'xn--tjme-hra', 'xn--tnsberg-q1a', 'xn--trany-yua', 'xn--trgstad-r1a', 'xn--trna-woa', 'xn--troms-zua', 'xn--tysvr-vra', 'xn--unjrga-rta', 'xn--vads-jra', 'xn--vard-jra', 'xn--vegrshei-c0a', 'xn--vestvgy-ixa6o', 'xn--vg-yiab', 'xn--vgan-qoa', 'xn--vgsy-qoa0j', 'xn--vre-eiker-k8a', 'xn--vrggt-xqad', 'xn--vry-yla5g', 'xn--yer-zna', 'xn--ygarden-p1a', 'xn--ystre-slidre-ujb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'np':
+ if (['aero', 'asia', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'jobs', 'mil', 'mobi', 'museum', 'name', 'net', 'org', 'pro', 'travel'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nr':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nz':
+ if (['ac', 'archie', 'co', 'cri', 'geek', 'gen', 'govt', 'health', 'iwi', 'kiwi', 'maori', 'mil', 'net', 'org', 'parliament', 'school', 'xn--mori-qsa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'om':
+ if (['co', 'com', 'edu', 'gov', 'med', 'museum', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'org':
+ if (wa[1] == 'eu' && wa[3] != undefined) {
+ if (['al', 'asso', 'at', 'au', 'be', 'bg', 'ca', 'cd', 'ch', 'cn', 'cy', 'cz', 'de', 'dk', 'edu', 'ee', 'es', 'fi', 'fr', 'gr', 'hr', 'hu', 'ie', 'il', 'in', 'int', 'is', 'it', 'jp', 'kr', 'lt', 'lu', 'lv', 'me', 'mk', 'mt', 'my', 'net', 'ng', 'nl', 'no', 'nz', 'pl', 'pt', 'ro', 'ru', 'se', 'si', 'sk', 'tr', 'uk', 'us'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['ae', 'eu', 'hk', 'jpn', 'js', 'us', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pa':
+ if (['abo', 'ac', 'com', 'edu', 'gob', 'ing', 'med', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pe':
+ if (['com', 'edu', 'gob', 'mil', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pf':
+ if (['com', 'org', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pg':
+ if (['com', 'net', 'ac', 'gov', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ph':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'ngo', 'i'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pk':
+ if (['biz', 'com', 'edu', 'fam', 'gob', 'gok', 'gon', 'gop', 'gos', 'gov', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pl':
+ if (['agro', 'aid', 'art', 'atm', 'augustow', 'auto', 'babia-gora', 'bedzin', 'beskidy', 'bialowieza', 'bialystok', 'bielawa', 'bieszczady', 'biz', 'boleslawiec', 'bydgoszcz', 'bytom', 'cieszyn', 'com', 'czeladz', 'czest', 'dlugoleka', 'edu', 'elblag', 'elk', 'gda', 'gdansk', 'glogow', 'gmina', 'gniezno', 'gorlice', 'gov', 'grajewo', 'gsm', 'ilawa', 'info', 'jaworzno', 'jelenia-gora', 'jgora', 'kalisz', 'karpacz', 'kartuzy', 'kaszuby', 'katowice', 'kazimierz-dolny', 'kepno', 'ketrzyn', 'klodzko', 'kobierzyce', 'kolobrzeg', 'konin', 'konskowola', 'krakow', 'kutno', 'lapy', 'lebork', 'legnica', 'lezajsk', 'limanowa', 'lodz', 'lomza', 'lowicz', 'lubin', 'lublin', 'lukow', 'mail', 'malbork', 'malopolska', 'mazowsze', 'mazury', 'media', 'miasta', 'mielec', 'mielno', 'mil', 'mragowo', 'naklo', 'net', 'ngo', 'nieruchomosci', 'nom', 'nowaruda', 'nysa', 'olawa', 'olecko', 'olkusz', 'olsztyn', 'opoczno', 'opole', 'org', 'ostroda', 'ostroleka', 'ostrowiec', 'ostrowwlkp', 'pc', 'pila', 'pisz', 'podhale', 'podlasie', 'polkowice', 'pomorskie', 'pomorze', 'powiat', 'poznan', 'priv', 'prochowice', 'pruszkow', 'przeworsk', 'pulawy', 'radom', 'rawa-maz', 'realestate', 'rel', 'rybnik', 'rzeszow', 'sanok', 'sejny', 'sex', 'shop', 'sklep', 'skoczow', 'slask', 'slupsk', 'sos', 'sosnowiec', 'stalowa-wola', 'starachowice', 'stargard', 'suwalki', 'swidnica', 'swiebodzin', 'swinoujscie', 'szczecin', 'szczytno', 'szkola', 'targi', 'tarnobrzeg', 'tgory', 'tm', 'torun', 'tourism', 'travel', 'turek', 'turystyka', 'tychy', 'ustka', 'walbrzych', 'warmia', 'warszawa', 'waw', 'wegrow', 'wielun', 'wlocl', 'wloclawek', 'wodzislaw', 'wolomin', 'wroc', 'wroclaw', 'zachpomor', 'zagan', 'zarow', 'zgora', 'zgorzelec'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pn':
+ if (['in', 'co', 'eu', 'org', 'net', 'me', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pr':
+ if (['ac', 'biz', 'com', 'edu', 'est', 'gov', 'info', 'isla', 'name', 'net', 'org', 'pro', 'prof'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pro':
+ if (['aaa', 'aca', 'acct', 'eng', 'avocat', 'bar', 'jur', 'recht', 'law', 'med', 'cpa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ps':
+ if (['edu', 'gov', 'sec', 'plo', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pt':
+ if (['com', 'edu', 'gov', 'int', 'net', 'nome', 'org', 'publ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pw':
+ if (['co', 'ne', 'or', 'ed', 'go', 'belau'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'py':
+ if (['com', 'coop', 'edu', 'mil', 'gov', 'org', 'net', 'una'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'qa':
+ if (['com', 'edu', 'sch', 'gov', 'mil', 'net', 'org', 'name'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 're':
+ if (['asso', 'com', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ro':
+ if (['arts', 'com', 'firm', 'info', 'nom', 'nt', 'org', 'rec', 'store', 'tm', 'www'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rs':
+ if (['ac', 'co', 'edu', 'gov', 'in', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ru':
+ if (['ac', 'adygeya', 'altai', 'amur', 'amursk', 'arkhangelsk', 'astrakhan', 'baikal', 'bashkiria', 'belgorod', 'bir', 'bryansk', 'buryatia', 'cap', 'cbg', 'chel', 'chelyabinsk', 'chita', 'chukotka', 'cmw', 'com', 'dagestan', 'e-burg', 'edu', 'fareast', 'gov', 'grozny', 'int', 'irkutsk', 'ivanovo', 'izhevsk', 'jamal', 'jar', 'joshkar-ola', 'k-uralsk', 'kalmykia', 'kaluga', 'kamchatka', 'karelia', 'kazan', 'kchr', 'kemerovo', 'khabarovsk', 'khakassia', 'khv', 'kirov', 'kms', 'koenig', 'komi', 'kostroma', 'krasnoyarsk', 'kuban', 'kurgan', 'kursk', 'kustanai', 'kuzbass', 'lipetsk', 'magadan', 'magnitka', 'mari', 'mari-el', 'marine', 'mil', 'mordovia', 'mos', 'mosreg', 'msk', 'murmansk', 'mytis', 'nakhodka', 'nalchik', 'net', 'nkz', 'nnov', 'norilsk', 'nov', 'novosibirsk', 'nsk', 'omsk', 'orenburg', 'org', 'oryol', 'oskol', 'palana', 'penza', 'perm', 'pp', 'pskov', 'ptz', 'pyatigorsk', 'rnd', 'rubtsovsk', 'ryazan', 'sakhalin', 'samara', 'saratov', 'simbirsk', 'smolensk', 'snz', 'spb', 'stavropol', 'stv', 'surgut', 'syzran', 'tambov', 'tatarstan', 'test', 'tlt', 'tom', 'tomsk', 'tsaritsyn', 'tsk', 'tula', 'tuva', 'tver', 'tyumen', 'udm', 'udmurtia', 'ulan-ude', 'vdonsk', 'vladikavkaz', 'vladimir', 'vladivostok', 'volgograd', 'vologda', 'voronezh', 'vrn', 'vyatka', 'yakutia', 'yamal', 'yaroslavl', 'yekaterinburg', 'yuzhno-sakhalinsk', 'zgrad'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rw':
+ if (['gov', 'net', 'edu', 'ac', 'com', 'co', 'int', 'mil', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sa':
+ if (['com', 'edu', 'gov', 'med', 'net', 'org', 'pub', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sc':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sd':
+ if (['com', 'edu', 'gov', 'info', 'med', 'net', 'org', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'se':
+ if (['a', 'ac', 'b', 'bd', 'brand', 'c', 'd', 'e', 'f', 'fh', 'fhsk', 'fhv', 'g', 'h', 'i', 'k', 'komforb', 'kommunalforbund', 'komvux', 'l', 'lanbib', 'm', 'n', 'naturbruksgymn', 'o', 'org', 'p', 'parti', 'pp', 'press', 'r', 's', 't', 'tm', 'u', 'w', 'x', 'y', 'z'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sg':
+ if (['com', 'edu', 'gov', 'idn', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sh':
+ if (['com', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sl':
+ if (['com', 'net', 'edu', 'gov', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sn':
+ if (['art', 'com', 'edu', 'gouv', 'org', 'perso', 'univ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'so':
+ if (['com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'st':
+ if (['co', 'com', 'consulado', 'edu', 'embaixada', 'gov', 'mil', 'net', 'org', 'principe', 'saotome', 'store'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sv':
+ if (['edu', 'gov', 'com', 'org', 'red', 'gob'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sy':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sz':
+ if (['co', 'ac', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'th':
+ if (['ac', 'co', 'go', 'in', 'mi', 'net', 'or'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tj':
+ if (['ac', 'aero', 'biz', 'co', 'com', 'coop', 'dyn', 'edu', 'go', 'gov', 'info', 'int', 'mil', 'museum', 'my', 'name', 'net', 'nic', 'org', 'per', 'pro', 'test', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tl':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tm':
+ if (['com', 'co', 'org', 'net', 'nom', 'gov', 'mil', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tn':
+ if (['agrinet', 'com', 'defense', 'edunet', 'ens', 'fin', 'gov', 'ind', 'info', 'intl', 'mincom', 'nat', 'net', 'org', 'perso', 'rnrt', 'rns', 'rnu', 'tourism', 'turen'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'to':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tr':
+ if (['av', 'bbs', 'bel', 'biz', 'com', 'dr', 'edu', 'gen', 'gov', 'info', 'k12', 'kep', 'mil', 'name', 'nc', 'net', 'org', 'pol', 'tel', 'tv', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tt':
+ if (['co', 'com', 'org', 'net', 'biz', 'info', 'pro', 'int', 'coop', 'jobs', 'mobi', 'travel', 'museum', 'aero', 'name', 'gov', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tw':
+ if (['club', 'com', 'ebiz', 'edu', 'game', 'gov', 'idv', 'mil', 'net', 'org', 'xn--czrw28b', 'xn--uc0atv', 'xn--zf0ao64a'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tz':
+ if (['ac', 'co', 'go', 'hotel', 'info', 'me', 'mil', 'mobi', 'ne', 'or', 'sc', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ua':
+ if (['at', 'cherkassy', 'cherkasy', 'chernigov', 'chernihiv', 'chernivtsi', 'chernovtsy', 'ck', 'cn', 'co', 'com', 'cr', 'crimea', 'cv', 'dn', 'dnepropetrovsk', 'dnipropetrovsk', 'dominic', 'donetsk', 'dp', 'edu', 'gov', 'if', 'in', 'ivano-frankivsk', 'kh', 'kharkiv', 'kharkov', 'kherson', 'khmelnitskiy', 'khmelnytskyi', 'kiev', 'kirovograd', 'km', 'kr', 'krym', 'ks', 'kv', 'kyiv', 'lg', 'lt', 'lugansk', 'lutsk', 'lv', 'lviv', 'mk', 'mykolaiv', 'net', 'nikolaev', 'od', 'odesa', 'odessa', 'org', 'pl', 'poltava', 'pp', 'rivne', 'rovno', 'rv', 'sb', 'sebastopol', 'sevastopol', 'sm', 'sumy', 'te', 'ternopil', 'uz', 'uzhgorod', 'vinnica', 'vinnytsia', 'vn', 'volyn', 'yalta', 'zaporizhzhe', 'zaporizhzhia', 'zhitomir', 'zhytomyr', 'zp', 'zt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ug':
+ if (['co', 'ac', 'sc', 'go', 'ne', 'or', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uk':
+ if (['ac', 'bl', 'british-library', 'co', 'gov', 'govt', 'jcpc', 'jet', 'judiciary', 'lea', 'ltd', 'me', 'mil', 'mod', 'net', 'nhs', 'nic', 'nls', 'org', 'orgn', 'parliament', 'plc', 'police', 'royal', 'sch', 'supremecourt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'us':
+ if (['aa', 'ae', 'ak', 'al', 'ap', 'ar', 'as', 'az', 'ca', 'cm', 'co', 'ct', 'cz', 'dc', 'de', 'dni', 'fed', 'fl', 'fm', 'ga', 'gu', 'hi', 'ia', 'id', 'il', 'in', 'isa', 'kids', 'ks', 'ky', 'la', 'ma', 'md', 'me', 'mh', 'mi', 'mn', 'mo', 'mp', 'ms', 'mt', 'nb', 'nc', 'nd', 'ne', 'nh', 'nj', 'nm', 'nsn', 'nv', 'ny', 'oh', 'ok', 'or', 'pa', 'pi', 'pr', 'pw', 'ri', 'sc', 'sd', 'tn', 'tt', 'tx', 'ut', 'va', 'vi', 'vt', 'wa', 'wi', 'wv', 'wy'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uy':
+ if (['com', 'edu', 'gub', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uz':
+ if (['co', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vc':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 've':
+ if (['arts', 'co', 'com', 'e12', 'edu', 'firm', 'gob', 'gov', 'info', 'int', 'mil', 'net', 'org', 'radio', 'rec', 'store', 'tec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vi':
+ if (['co', 'org', 'com', 'net', 'k12'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vn':
+ if (['ac', 'biz', 'com', 'edu', 'gov', 'health', 'info', 'int', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vu':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ws':
+ if (['org', 'gov', 'edu', 'com', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--90a3ac':
+ if (['xn--o1ac', 'xn--c1avg', 'xn--90azh', 'xn--d1at', 'xn--o1ach', 'xn--80au'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--j6w193g':
+ if (['xn--55qx5d', 'xn--wcvs22d', 'xn--mxtq1m', 'xn--gmqw5a', 'xn--od0alg', 'xn--uc0atv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--o3cw4h':
+ if (['xn--12c1fe0br', 'xn--12co0c3b4eva', 'xn--h3cuzk1di', 'xn--o3cyx2a', 'xn--m3ch0j3a', 'xn--12cfi8ixb8l'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'za':
+ if (['ac', 'agric', 'alt', 'bourse', 'city', 'co', 'cybernet', 'db', 'edu', 'gov', 'grondar', 'iaccess', 'imt', 'inca', 'landesign', 'law', 'mil', 'net', 'ngo', 'nis', 'nom', 'olivetti', 'org', 'pix', 'school', 'tm', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zm':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gov', 'info', 'mil', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zw':
+ if (['co', 'ac', 'org', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ }
+ return wa[1] + '.' + wa[0];
+}
+function is_hostile(f) {
+ if (localUse) {
+ return new Promise((g, b) => {
+ g(localDB.includes(f) ? true : false);
+ });
+ }
+ return new Promise((g, b) => {
+ fetch(apiurl, {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ body: 'f=' + f
+ }).then(r => r.json()).then(r => {
+ if (r[0]) {
+ g(r[1]);
+ } else {
+ b();
+ }
+ }).catch(b);
+ });
+}
+function i_know_you(f) {
+ if (!/^([a-z0-9_.-]{1,255})\.([a-z]{2,80})$/.test(f)) {
+ return new Promise((g, b) => {
+ g(200);
+ });
+ }
+ let m, fD = get_realdomain(f);
+ if (fD != f && memcache[fD] != undefined) {
+ m = memcache[fD];
+ return new Promise((g, b) => {
+ g(m);
+ });
+ }
+ if (memcache[f] != undefined) {
+ m = memcache[f];
+ return new Promise((g, b) => {
+ g(m);
+ });
+ }
+ return new Promise((g, b) => {
+ chrome.storage.local.get([fD, f], (ff) => {
+ if (ff[fD] == 'y') {
+ memcache[fD] = 1;
+ g(1);
+ }
+ if (ff[f]) {
+ if (ff[f] == 'y') {
+ memcache[f] = 1;
+ g(1);
+ } else {
+ memcache[f] = -1;
+ g(-1);
+ }
+ } else {
+ g(0);
+ }
+ });
+ });
+}
+function forget_cache() {
+ chrome.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], (g) => {
+ chrome.storage.local.clear();
+ memcache = {};
+ chrome.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'ign2': (g.ign2 == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ chrome.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ chrome.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ chrome.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ chrome.storage.local.set({
+ 'lastV': (chrome.runtime.getManifest()).version
+ });
+ });
+ clearTimeout(timr);
+ timr = setTimeout(function () {
+ forget_cache();
+ }, 1814400000);
+}
+chrome.storage.local.get(['lastU', 'lastV', 'ldb', 'opd'], (g) => {
+ localUse = (g.opd == 'n') ? true : false;
+ localDB = JSON.parse(g.ldb || '[]');
+ if (g.lastU) {
+ if (Math.abs(Math.round((new Date()).getTime() / 1000) - g.lastU) > 1814400) {
+ chrome.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], (g) => {
+ chrome.storage.local.clear();
+ memcache = {};
+ chrome.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'ign2': (g.ign2 == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ chrome.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ chrome.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ chrome.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ });
+ }
+ } else {
+ chrome.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ }
+ let nowVer = (chrome.runtime.getManifest()).version;
+ if (g.lastV != nowVer || forcePurge) {
+ chrome.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], (g) => {
+ chrome.storage.local.clear();
+ memcache = {};
+ chrome.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'ign2': (g.ign2 == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ chrome.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ chrome.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ chrome.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ chrome.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ chrome.storage.local.set({
+ 'lastV': (chrome.runtime.getManifest()).version
+ });
+ });
+ }
+ timr = setTimeout(function () {
+ forget_cache();
+ }, 1814400000);
+});
+chrome.runtime.onMessage.addListener((requests, sender, sendResponse) => {
+ if (requests) {
+ if (requests === 'clear') {
+ forget_cache();
+ return;
+ }
+ if (requests.indexOf('dbmode,') === 0) {
+ switch (requests) {
+ case 'dbmode,s1':
+ chrome.storage.local.set({
+ 'opd': 'y'
+ });
+ localUse = false;
+ break;
+ case 'dbmode,s0':
+ chrome.storage.local.set({
+ 'opd': 'n'
+ });
+ localUse = true;
+ break;
+ case 'dbmode,cl':
+ chrome.storage.local.set({
+ 'ldb': '[]'
+ });
+ localDB = [];
+ break;
+ case 'dbmode,rl':
+ chrome.storage.local.get(['ldb'], (g) => {
+ localDB = JSON.parse(g.ldb || '[]');
+ });
+ break;
+ }
+ return;
+ }
+ requests.forEach(request => {
+ i_know_you(request).then((r) => {
+ if (r == 1 || r == -1) {
+ chrome.tabs.sendMessage(sender.tab.id, [request, ((r == 1) ? true : false)]);
+ }
+ if (r == 0) {
+ is_hostile(request).then((a) => {
+ if (a) {
+ chrome.storage.local.set({
+ [get_realdomain(request)]: 'y'
+ });
+ } else {
+ chrome.storage.local.set({
+ [request]: 'n'
+ });
+ }
+ if (Object.keys(memcache).length > 650) {
+ memcache = {};
+ }
+ chrome.tabs.sendMessage(sender.tab.id, [request, a]);
+ }, () => {
+ chrome.tabs.sendMessage(sender.tab.id, [request, false]);
+ });
+ }
+ }, () => {});
+ });
+ }
+ return;
+});
\ No newline at end of file
diff --git a/addons/ismitmlinkCR/cfg.html b/addons/ismitmlinkCR/cfg.html
new file mode 100644
index 000000000..7dc0f7c3a
--- /dev/null
+++ b/addons/ismitmlinkCR/cfg.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [ → Ss API ]
+ [ → ]
+
+ 💬
+
+
+
+
+
+
+ : ?
+ : ?
+ : ?
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/ismitmlinkCR/cg.js b/addons/ismitmlinkCR/cg.js
new file mode 100644
index 000000000..844a3212b
--- /dev/null
+++ b/addons/ismitmlinkCR/cg.js
@@ -0,0 +1,1151 @@
+document.addEventListener('DOMContentLoaded', () => {
+ chrome.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt', 'mul', 'opd'], (g) => {
+ document.getElementById('ign1').checked = (g.ign1 == 'y') ? true : false;
+ document.getElementById('ign2').checked = (g.ign2 == 'y') ? true : false;
+ document.getElementById('obs').checked = (g.obs == 'y') ? true : false;
+ document.getElementById('alt').checked = (g.alt == 'y') ? true : false;
+ document.getElementById('opon').checked = (g.opd != 'n') ? true : false;
+ document.getElementById('opoff').checked = (g.opd == 'n') ? true : false;
+ let ul = g.mul || 'eo';
+ fetch('i18n/' + ul + '.json', {
+ method: 'GET'
+ }).then(j => j.json()).then(j => {
+ document.querySelectorAll('span[tek]').forEach(x => {
+ x.innerText = j[x.getAttribute('tek')];
+ });
+ });
+ document.body.style.display = 'block';
+ });
+});
+document.getElementById('myul').addEventListener('change', () => {
+ let xul = document.getElementById('myul').value;
+ if (xul.length == 2) {
+ chrome.storage.local.set({
+ 'mul': xul
+ });
+ location.reload(true);
+ }
+});
+document.getElementById('ign1').addEventListener('click', () => {
+ chrome.storage.local.set({
+ 'ign1': (document.getElementById('ign1').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('ign2').addEventListener('click', () => {
+ chrome.storage.local.set({
+ 'ign2': (document.getElementById('ign2').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('obs').addEventListener('click', () => {
+ chrome.storage.local.set({
+ 'obs': (document.getElementById('obs').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('alt').addEventListener('click', () => {
+ chrome.storage.local.set({
+ 'alt': (document.getElementById('alt').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('opon').addEventListener('click', () => {
+ chrome.runtime.sendMessage('dbmode,s1', () => {
+ location.reload();
+ });
+});
+document.getElementById('opoff').addEventListener('click', () => {
+ chrome.runtime.sendMessage('dbmode,s0', () => {
+ location.reload();
+ });
+});
+document.getElementById('crs').addEventListener('click', () => {
+ chrome.runtime.sendMessage('clear', () => {
+ location.reload();
+ });
+});
+function get_realdomain(w) {
+ let wa = w.split('.');
+ let wa_l = wa.length;
+ if (wa_l < 3 || (wa_l == 4 && /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(w))) {
+ return w;
+ }
+ wa.reverse();
+ switch (wa[0]) {
+ case 'ac':
+ if (['com', 'edu', 'gov', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ad':
+ if (wa[1] == 'nom') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ae':
+ if (['co', 'net', 'org', 'sch', 'ac', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aero':
+ if (['accident-investigation', 'accident-prevention', 'aerobatic', 'aeroclub', 'aerodrome', 'agents', 'aircraft', 'airline', 'airport', 'air-surveillance', 'airtraffic', 'air-traffic-control', 'ambulance', 'amusement', 'association', 'author', 'ballooning', 'broker', 'caa', 'cargo', 'catering', 'certification', 'championship', 'charter', 'civilaviation', 'club', 'conference', 'consultant', 'consulting', 'control', 'council', 'crew', 'design', 'dgca', 'educator', 'emergency', 'engine', 'engineer', 'entertainment', 'equipment', 'exchange', 'express', 'federation', 'flight', 'freight', 'fuel', 'gliding', 'government', 'groundhandling', 'group', 'hanggliding', 'homebuilt', 'insurance', 'journal', 'journalist', 'leasing', 'logistics', 'magazine', 'maintenance', 'media', 'microlight', 'modelling', 'navigation', 'parachuting', 'paragliding', 'passenger-association', 'pilot', 'press', 'production', 'recreation', 'repbody', 'res', 'research', 'rotorcraft', 'safety', 'scientist', 'services', 'show', 'skydiving', 'software', 'student', 'trader', 'trading', 'trainer', 'union', 'workinggroup', 'works'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'af':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ag':
+ if (['com', 'net', 'org', 'co', 'nom', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ai':
+ if (['off', 'com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'al':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ao':
+ if (['co', 'ed', 'it', 'og', 'pb', 'gv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ar':
+ if (['com', 'edu', 'gov', 'gob', 'int', 'mil', 'net', 'org', 'tur', 'musica'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'as':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'at':
+ if (['gv', 'ac', 'co', 'or', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'au':
+ if (wa[1] == 'gov' && wa[3] != undefined) {
+ if (['act', 'nsw', 'nt', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (wa[1] == 'edu' && wa[3] != undefined) {
+ if (['act', 'catholic', 'eq', 'nsw', 'nt', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['act', 'asn', 'com', 'conf', 'csiro', 'edu', 'gov', 'id', 'info', 'net', 'nsw', 'nt', 'org', 'oz', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aw':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'az':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'int', 'mil', 'name', 'net', 'org', 'pp', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ba':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'net', 'org', 'rs'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bb':
+ if (['biz', 'co', 'com', 'edu', 'gov', 'info', 'net', 'org', 'store', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bd':
+ if (['com', 'edu', 'ac', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'be':
+ if (wa[1] == 'ac') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bf':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bg':
+ if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bh':
+ if (['com', 'info', 'cc', 'edu', 'biz', 'net', 'org', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bi':
+ if (['ac', 'co', 'com', 'edu', 'gouv', 'gov', 'int', 'mil', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bj':
+ if (['asso', 'barreau', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bn':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bo':
+ if (['academia', 'agro', 'arte', 'blog', 'bolivia', 'ciencia', 'com', 'cooperativa', 'democracia', 'deporte', 'ecologia', 'economia', 'edu', 'empresa', 'gob', 'gov', 'indigena', 'industria', 'info', 'int', 'medicina', 'mil', 'movimiento', 'musica', 'natural', 'net', 'nombre', 'noticias', 'org', 'patria', 'plurinacional', 'politica', 'profesional', 'pueblo', 'revista', 'salud', 'tecnologia', 'tksat', 'transporte', 'tv', 'web', 'wiki'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'br':
+ if (['9guacu', 'abc', 'adm', 'adv', 'agr', 'aju', 'am', 'anani', 'aparecida', 'arq', 'art', 'ato', 'b', 'barueri', 'belem', 'bhz', 'bio', 'blog', 'bmd', 'boavista', 'bsb', 'campinagrande', 'campinas', 'caxias', 'cim', 'cng', 'cnt', 'com', 'contagem', 'coop', 'cri', 'cuiaba', 'curitiba', 'def', 'ecn', 'eco', 'edu', 'emp', 'eng', 'esp', 'etc', 'eti', 'far', 'feira', 'flog', 'floripa', 'fm', 'fnd', 'fortal', 'fot', 'foz', 'fst', 'g12', 'ggf', 'goiania', 'gov', 'gru', 'imb', 'ind', 'inf', 'jab', 'jampa', 'jdf', 'joinville', 'jor', 'jus', 'leg', 'lel', 'londrina', 'macapa', 'maceio', 'manaus', 'maringa', 'mat', 'med', 'mil', 'morena', 'mp', 'mus', 'natal', 'net', 'niteroi', 'nom', 'not', 'ntr', 'odo', 'ong', 'org', 'osasco', 'palmas', 'poa', 'ppg', 'pro', 'psc', 'psi', 'pvh', 'qsl', 'radio', 'rec', 'recife', 'ribeirao', 'rio', 'riobranco', 'riopreto', 'salvador', 'sampa', 'santamaria', 'santoandre', 'saobernardo', 'saogonca', 'sjc', 'slg', 'slz', 'sorocaba', 'srv', 'taxi', 'teo', 'the', 'tmp', 'trd', 'tur', 'tv', 'udi', 'vet', 'vix', 'vlog', 'wiki', 'zlg'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bs':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bw':
+ if (['org', 'ac', 'co', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'by':
+ if (['gov', 'mil', 'com', 'of'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'nym', 'of', 'org', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ca':
+ if (['ab', 'bc', 'gc', 'mb', 'nb', 'nf', 'nl', 'ns', 'nt', 'nu', 'on', 'pe', 'qc', 'sk', 'yk'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cd':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ci':
+ if (['ac', 'asso', 'co', 'com', 'ed', 'edu', 'go', 'gouv', 'int', 'md', 'net', 'or', 'org', 'presse', 'xn--aroport-bya'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ck':
+ if (['biz', 'co', 'edu', 'gen', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cl':
+ if (['gov', 'gob', 'co', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cm':
+ if (['co', 'com', 'gov', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cn':
+ if (['ac', 'ah', 'bj', 'com', 'cq', 'edu', 'fj', 'gd', 'gov', 'gs', 'gx', 'gz', 'ha', 'hb', 'he', 'hi', 'hk', 'hl', 'hn', 'jl', 'js', 'jx', 'ln', 'mil', 'mo', 'net', 'nm', 'nx', 'org', 'qh', 'sc', 'sd', 'sh', 'sn', 'sx', 'tj', 'tw', 'xj', 'xn--55qx5d', 'xn--io0a7i', 'xn--od0alg', 'xz', 'yn', 'zj'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'co':
+ if (['arts', 'com', 'edu', 'firm', 'gov', 'info', 'int', 'mil', 'net', 'nom', 'org', 'rec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'com':
+ if (['africa', 'ar', 'br', 'cn', 'co', 'de', 'eu', 'gb', 'gr', 'hu', 'jpn', 'kr', 'mex', 'no', 'qc', 'ru', 'sa', 'se', 'uk', 'us', 'uy', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cr':
+ if (['ac', 'co', 'ed', 'fi', 'go', 'or', 'sa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cu':
+ if (['com', 'edu', 'org', 'net', 'gov', 'inf'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cw':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cy':
+ if (['ac', 'biz', 'com', 'ekloges', 'gov', 'ltd', 'name', 'net', 'org', 'parliament', 'press', 'pro', 'tm'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dm':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'do':
+ if (['art', 'com', 'edu', 'gob', 'gov', 'mil', 'net', 'org', 'sld', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dz':
+ if (['art', 'asso', 'com', 'edu', 'gov', 'net', 'org', 'pol'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ec':
+ if (['com', 'edu', 'fin', 'gob', 'gov', 'info', 'k12', 'med', 'mil', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ee':
+ if (['aip', 'com', 'edu', 'fie', 'gov', 'lib', 'med', 'org', 'pri', 'riik'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'eg':
+ if (['com', 'edu', 'eun', 'gov', 'mil', 'name', 'net', 'org', 'sci'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'es':
+ if (['com', 'nom', 'org', 'gob', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'et':
+ if (['com', 'gov', 'org', 'edu', 'net', 'biz', 'name', 'info'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fi':
+ if (wa[1] == 'aland') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fj':
+ if (['ac', 'biz', 'com', 'info', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fr':
+ if (['aeroport', 'assedic', 'asso', 'avocat', 'avoues', 'cci', 'chambagri', 'chirurgiens-dentistes', 'com', 'experts-comptables', 'geometre-expert', 'gouv', 'greta', 'huissier-justice', 'medecin', 'nom', 'notaires', 'pharmacien', 'port', 'prd', 'presse', 'tm', 'veterinaire'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ge':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'pvt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gg':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gh':
+ if (['com', 'edu', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gi':
+ if (['com', 'edu', 'gov', 'ltd', 'mod', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gl':
+ if (['co', 'com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gn':
+ if (['ac', 'com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gov':
+ if (['al', 'alabama', 'alaska', 'americansamoa', 'ar', 'arizona', 'arkansas', 'as', 'az', 'ca', 'co', 'colorado', 'ct', 'dc', 'de', 'delaware', 'ehawaii', 'fl', 'florida', 'ga', 'georgia', 'guam', 'hawaii', 'ia', 'idaho', 'il', 'illinois', 'in', 'indiana', 'iowa', 'kansas', 'kentucky', 'ks', 'ky', 'la', 'louisiana', 'ma', 'maine', 'maryland', 'mass', 'massachusetts', 'md', 'mi', 'michigan', 'minnesota', 'mississippi', 'missouri', 'mn', 'mo', 'montana', 'ms', 'mt', 'nc', 'nd', 'ne', 'nebraska', 'nevada', 'newjersey', 'newmexico', 'nh', 'nj', 'northcarolina', 'northdakota', 'nv', 'ny', 'ohio', 'ok', 'oklahoma', 'oregon', 'pa', 'pennsylvania', 'pr', 'rhodeisland', 'ri', 'sc', 'sd', 'tennessee', 'texas', 'tn', 'utah', 'vermont', 'vi', 'virginia', 'vt', 'wa', 'washington', 'wi', 'wisconsin', 'wv', 'wy', 'wyoming'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gp':
+ if (['com', 'net', 'mobi', 'edu', 'org', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gr':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'mod', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gt':
+ if (['com', 'edu', 'net', 'gob', 'org', 'mil', 'ind'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gu':
+ if (['com', 'edu', 'gov', 'guam', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gy':
+ if (['co', 'com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hk':
+ if (['com', 'edu', 'gov', 'idv', 'net', 'org', 'xn--55qx5d', 'xn--ciqpn', 'xn--gmq050i', 'xn--gmqw5a', 'xn--io0a7i', 'xn--lcvr32d', 'xn--mk0axi', 'xn--mxtq1m', 'xn--od0alg', 'xn--od0aq3b', 'xn--tn0ag', 'xn--uc0atv', 'xn--uc0ay4a', 'xn--wcvs22d', 'xn--zf0avx'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hn':
+ if (['com', 'edu', 'gob', 'net', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hr':
+ if (['iz', 'from', 'name', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ht':
+ if (['com', 'shop', 'firm', 'info', 'adult', 'net', 'pro', 'org', 'med', 'art', 'coop', 'pol', 'asso', 'edu', 'rel', 'gouv', 'perso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hu':
+ if (['2000', 'agrar', 'bolt', 'casino', 'city', 'co', 'edu', 'erotica', 'erotika', 'film', 'forum', 'games', 'gov', 'hotel', 'info', 'ingatlan', 'jogasz', 'konyvelo', 'lakas', 'media', 'mobi', 'net', 'news', 'org', 'priv', 'reklam', 'sex', 'shop', 'sport', 'suli', 'szex', 'tm', 'tozsde', 'utazas', 'video'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'id':
+ if (['ac', 'biz', 'co', 'desa', 'go', 'mil', 'my', 'net', 'or', 'ponpes', 'sch', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ie':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'il':
+ if (['ac', 'co', 'gov', 'idf', 'k12', 'muni', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'im':
+ if (['ac', 'co', 'com', 'gov', 'net', 'org', 'ro', 'tt', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'in':
+ if (['ac', 'co', 'edu', 'ernet', 'firm', 'gen', 'gov', 'ind', 'mil', 'net', 'org', 'res', 'nic'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'int':
+ if (wa[1] == 'eu') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'io':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'iq':
+ if (['gov', 'edu', 'mil', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ir':
+ if (['ac', 'co', 'gov', 'id', 'net', 'org', 'sch', 'xn--mgba3a4f16a', 'xn--mgba3a4fra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'is':
+ if (['net', 'com', 'edu', 'gov', 'org', 'int'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'it':
+ if (['abr', 'abruzzo', 'ag', 'agrigento', 'al', 'alessandria', 'alto-adige', 'altoadige', 'an', 'ancona', 'andria-barletta-trani', 'andria-trani-barletta', 'andriabarlettatrani', 'andriatranibarletta', 'ao', 'aosta', 'aosta-valley', 'aostavalley', 'aoste', 'ap', 'aq', 'aquila', 'ar', 'arezzo', 'ascoli-piceno', 'ascolipiceno', 'asti', 'at', 'av', 'avellino', 'ba', 'balsan', 'balsan-sudtirol', 'balsan-suedtirol', 'bari', 'barletta-trani-andria', 'barlettatraniandria', 'bas', 'basilicata', 'belluno', 'benevento', 'bergamo', 'bg', 'bi', 'biella', 'bl', 'bn', 'bo', 'bologna', 'bolzano', 'bolzano-altoadige', 'bozen', 'bozen-sudtirol', 'bozen-suedtirol', 'br', 'brescia', 'brindisi', 'bs', 'bt', 'bulsan', 'bulsan-sudtirol', 'bulsan-suedtirol', 'bz', 'ca', 'cagliari', 'cal', 'calabria', 'caltanissetta', 'cam', 'campania', 'campidano-medio', 'campidanomedio', 'campobasso', 'carbonia-iglesias', 'carboniaiglesias', 'carrara-massa', 'carraramassa', 'caserta', 'catania', 'catanzaro', 'cb', 'ce', 'cesena-forli', 'cesenaforli', 'ch', 'chieti', 'ci', 'cl', 'cn', 'co', 'como', 'cosenza', 'cr', 'cremona', 'crotone', 'cs', 'ct', 'cuneo', 'cz', 'dell-ogliastra', 'dellogliastra', 'edu', 'emilia-romagna', 'emiliaromagna', 'emr', 'en', 'enna', 'fc', 'fe', 'fermo', 'ferrara', 'fg', 'fi', 'firenze', 'florence', 'fm', 'foggia', 'forli-cesena', 'forlicesena', 'fr', 'friuli-v-giulia', 'friuli-ve-giulia', 'friuli-vegiulia', 'friuli-venezia-giulia', 'friuli-veneziagiulia', 'friuli-vgiulia', 'friuliv-giulia', 'friulive-giulia', 'friulivegiulia', 'friulivenezia-giulia', 'friuliveneziagiulia', 'friulivgiulia', 'frosinone', 'fvg', 'ge', 'genoa', 'genova', 'go', 'gorizia', 'gov', 'gr', 'grosseto', 'iglesias-carbonia', 'iglesiascarbonia', 'im', 'imperia', 'is', 'isernia', 'kr', 'la-spezia', 'laquila', 'laspezia', 'latina', 'laz', 'lazio', 'lc', 'le', 'lecce', 'lecco', 'li', 'lig', 'liguria', 'livorno', 'lo', 'lodi', 'lom', 'lombardia', 'lombardy', 'lt', 'lu', 'lucania', 'lucca', 'macerata', 'mantova', 'mar', 'marche', 'massa-carrara', 'massacarrara', 'matera', 'mb', 'mc', 'me', 'medio-campidano', 'mediocampidano', 'messina', 'mi', 'milan', 'milano', 'mn', 'mo', 'modena', 'mol', 'molise', 'monza', 'monza-brianza', 'monza-e-della-brianza', 'monzabrianza', 'monzaebrianza', 'monzaedellabrianza', 'ms', 'mt', 'na', 'naples', 'napoli', 'no', 'novara', 'nu', 'nuoro', 'og', 'ogliastra', 'olbia-tempio', 'olbiatempio', 'or', 'oristano', 'ot', 'pa', 'padova', 'padua', 'palermo', 'parma', 'pavia', 'pc', 'pd', 'pe', 'perugia', 'pesaro-urbino', 'pesarourbino', 'pescara', 'pg', 'pi', 'piacenza', 'piedmont', 'piemonte', 'pisa', 'pistoia', 'pmn', 'pn', 'po', 'pordenone', 'potenza', 'pr', 'prato', 'pt', 'pu', 'pug', 'puglia', 'pv', 'pz', 'ra', 'ragusa', 'ravenna', 'rc', 're', 'reggio-calabria', 'reggio-emilia', 'reggiocalabria', 'reggioemilia', 'rg', 'ri', 'rieti', 'rimini', 'rm', 'rn', 'ro', 'roma', 'rome', 'rovigo', 'sa', 'salerno', 'sar', 'sardegna', 'sardinia', 'sassari', 'savona', 'si', 'sic', 'sicilia', 'sicily', 'siena', 'siracusa', 'so', 'sondrio', 'sp', 'sr', 'ss', 'suedtirol', 'sv', 'ta', 'taa', 'taranto', 'te', 'tempio-olbia', 'tempioolbia', 'teramo', 'terni', 'tn', 'to', 'torino', 'tos', 'toscana', 'tp', 'tr', 'trani-andria-barletta', 'trani-barletta-andria', 'traniandriabarletta', 'tranibarlettaandria', 'trapani', 'trentin-sud-tirol', 'trentin-sudtirol', 'trentin-sued-tirol', 'trentin-suedtirol', 'trentino', 'trentino-a-adige', 'trentino-aadige', 'trentino-alto-adige', 'trentino-altoadige', 'trentino-s-tirol', 'trentino-stirol', 'trentino-sud-tirol', 'trentino-sudtirol', 'trentino-sued-tirol', 'trentino-suedtirol', 'trentinoa-adige', 'trentinoaadige', 'trentinoalto-adige', 'trentinoaltoadige', 'trentinos-tirol', 'trentinostirol', 'trentinosud-tirol', 'trentinosudtirol', 'trentinosued-tirol', 'trentinosuedtirol', 'trentinsud-tirol', 'trentinsudtirol', 'trentinsued-tirol', 'trentinsuedtirol', 'trento', 'treviso', 'trieste', 'ts', 'turin', 'tuscany', 'tv', 'ud', 'udine', 'umb', 'umbria', 'urbino-pesaro', 'urbinopesaro', 'va', 'val-d-aosta', 'val-daosta', 'vald-aosta', 'valdaosta', 'valle-aosta', 'valle-d-aosta', 'valle-daosta', 'valleaosta', 'valled-aosta', 'valledaosta', 'vallee-aoste', 'vallee-d-aoste', 'valleeaoste', 'valleedaoste', 'vao', 'varese', 'vb', 'vc', 'vda', 've', 'ven', 'veneto', 'venezia', 'venice', 'verbania', 'vercelli', 'verona', 'vi', 'vibo-valentia', 'vibovalentia', 'vicenza', 'viterbo', 'vr', 'vs', 'vt', 'vv', 'xn--balsan-sdtirol-nsb', 'xn--bozen-sdtirol-2ob', 'xn--bulsan-sdtirol-nsb', 'xn--cesena-forl-mcb', 'xn--cesenaforl-i8a', 'xn--forl-cesena-fcb', 'xn--forlcesena-c8a', 'xn--sdtirol-n2a', 'xn--trentin-sd-tirol-rzb', 'xn--trentin-sdtirol-7vb', 'xn--trentino-sd-tirol-c3b', 'xn--trentino-sdtirol-szb', 'xn--trentinosd-tirol-rzb', 'xn--trentinosdtirol-7vb', 'xn--trentinsd-tirol-6vb', 'xn--trentinsdtirol-nsb', 'xn--valle-aoste-ebb', 'xn--valle-d-aoste-ehb', 'xn--valleaoste-e7a', 'xn--valledaoste-ebb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'je':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jm':
+ if (['com', 'net', 'org', 'edu', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jo':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jp':
+ if (['ac', 'ad', 'aichi', 'akita', 'aomori', 'chiba', 'co', 'ed', 'ehime', 'fukui', 'fukuoka', 'fukushima', 'gifu', 'go', 'gr', 'gunma', 'hiroshima', 'hokkaido', 'hyogo', 'ibaraki', 'ishikawa', 'iwate', 'kagawa', 'kagoshima', 'kanagawa', 'kochi', 'kumamoto', 'kyoto', 'lg', 'mie', 'miyagi', 'miyazaki', 'nagano', 'nagasaki', 'nara', 'ne', 'niigata', 'oita', 'okayama', 'okinawa', 'or', 'osaka', 'saga', 'saitama', 'shiga', 'shimane', 'shizuoka', 'tochigi', 'tokushima', 'tokyo', 'tottori', 'toyama', 'wakayama', 'xn--0trq7p7nn', 'xn--1ctwo', 'xn--1lqs03n', 'xn--1lqs71d', 'xn--2m4a15e', 'xn--32vp30h', 'xn--4it168d', 'xn--4it797k', 'xn--4pvxs', 'xn--5js045d', 'xn--5rtp49c', 'xn--5rtq34k', 'xn--6btw5a', 'xn--6orx2r', 'xn--7t0a264c', 'xn--8ltr62k', 'xn--8pvr4u', 'xn--c3s14m', 'xn--d5qv7z876c', 'xn--djrs72d6uy', 'xn--djty4k', 'xn--efvn9s', 'xn--ehqz56n', 'xn--elqq16h', 'xn--f6qx53a', 'xn--k7yn95e', 'xn--kbrq7o', 'xn--klt787d', 'xn--kltp7d', 'xn--kltx9a', 'xn--klty5x', 'xn--mkru45i', 'xn--nit225k', 'xn--ntso0iqx3a', 'xn--ntsq17g', 'xn--pssu33l', 'xn--qqqt11m', 'xn--rht27z', 'xn--rht3d', 'xn--rht61e', 'xn--rny31h', 'xn--tor131o', 'xn--uist22h', 'xn--uisz3g', 'xn--uuwu58a', 'xn--vgu402c', 'xn--zbx025d', 'yamagata', 'yamaguchi', 'yamanashi'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ke':
+ if (['ac', 'co', 'go', 'info', 'me', 'mobi', 'ne', 'or', 'sc'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kg':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kh':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ki':
+ if (['edu', 'biz', 'net', 'org', 'gov', 'info', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'km':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'ass', 'com', 'coop', 'asso', 'presse', 'medecin', 'notaires', 'pharmaciens', 'veterinaire', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kn':
+ if (['net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kp':
+ if (['com', 'edu', 'gov', 'org', 'rep', 'tra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kr':
+ if (['ac', 'busan', 'cheju', 'chonbuk', 'chonnam', 'chungbuk', 'chungnam', 'co', 'daegu', 'daejeon', 'es', 'gangwon', 'go', 'gwangju', 'gyeongbuk', 'gyeonggi', 'gyeongnam', 'hs', 'incheon', 'inchon', 'jeju', 'jeonbuk', 'jeonnam', 'kangwon', 'kg', 'kwangju', 'kyongbuk', 'kyonggi', 'kyongnam', 'mil', 'ms', 'ne', 'nm', 'or', 'pe', 'pusan', 're', 'sc', 'seoul', 'taegu', 'taejon', 'ulsan', 'xn--bj0bj06e'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kw':
+ if (['com', 'edu', 'emb', 'gov', 'ind', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ky':
+ if (['edu', 'gov', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'la':
+ if (['int', 'net', 'info', 'edu', 'gov', 'per', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lc':
+ if (['com', 'net', 'co', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lk':
+ if (['ac', 'assn', 'com', 'edu', 'gov', 'grp', 'hotel', 'int', 'ltd', 'net', 'ngo', 'org', 'sch', 'soc', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lr':
+ if (['com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ls':
+ if (['ac', 'co', 'gov', 'net', 'nul', 'org', 'parliament', 'quadrant'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lt':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lv':
+ if (['asn', 'com', 'conf', 'edu', 'gov', 'id', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ly':
+ if (['com', 'edu', 'gov', 'id', 'med', 'net', 'org', 'plc', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ma':
+ if (['ac', 'co', 'gov', 'net', 'org', 'press'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mc':
+ if (['tm', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'me':
+ if (['co', 'net', 'org', 'edu', 'ac', 'gov', 'its', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mg':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'com', 'co'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mk':
+ if (['com', 'edu', 'gov', 'inf', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ml':
+ if (['com', 'edu', 'gouv', 'gov', 'net', 'org', 'presse'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mn':
+ if (['gov', 'edu', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mo':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mr':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ms':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mu':
+ if (['ac', 'co', 'com', 'gov', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'museum':
+ if (['academy', 'agriculture', 'air', 'airguard', 'alabama', 'alaska', 'amber', 'ambulance', 'american', 'americana', 'americanantiques', 'americanart', 'amsterdam', 'and', 'annefrank', 'anthro', 'anthropology', 'antiques', 'aquarium', 'arboretum', 'archaeological', 'archaeology', 'architecture', 'art', 'artanddesign', 'artcenter', 'artdeco', 'arteducation', 'artgallery', 'arts', 'artsandcrafts', 'asmatart', 'assassination', 'assisi', 'association', 'astronomy', 'atlanta', 'austin', 'australia', 'automotive', 'aviation', 'axis', 'badajoz', 'baghdad', 'bahn', 'bale', 'baltimore', 'barcelona', 'baseball', 'basel', 'baths', 'bauern', 'beauxarts', 'beeldengeluid', 'bellevue', 'bergbau', 'berkeley', 'berlin', 'bern', 'bible', 'bilbao', 'bill', 'birdart', 'birthplace', 'bonn', 'boston', 'botanical', 'botanicalgarden', 'botanicgarden', 'botany', 'brandywinevalley', 'brasil', 'bristol', 'british', 'britishcolumbia', 'broadcast', 'brunel', 'brussel', 'brussels', 'bruxelles', 'building', 'burghof', 'bus', 'bushey', 'cadaques', 'california', 'cambridge', 'can', 'canada', 'capebreton', 'carrier', 'cartoonart', 'casadelamoneda', 'castle', 'castres', 'celtic', 'center', 'chattanooga', 'cheltenham', 'chesapeakebay', 'chicago', 'children', 'childrens', 'childrensgarden', 'chiropractic', 'chocolate', 'christiansburg', 'cincinnati', 'cinema', 'circus', 'civilisation', 'civilization', 'civilwar', 'clinton', 'clock', 'coal', 'coastaldefence', 'cody', 'coldwar', 'collection', 'colonialwilliamsburg', 'coloradoplateau', 'columbia', 'columbus', 'communication', 'communications', 'community', 'computer', 'computerhistory', 'comunicações', 'contemporary', 'contemporaryart', 'convent', 'copenhagen', 'corporation', 'correios-e-telecomunicações', 'corvette', 'costume', 'countryestate', 'county', 'crafts', 'cranbrook', 'creation', 'cultural', 'culturalcenter', 'culture', 'cyber', 'cymru', 'dali', 'dallas', 'database', 'ddr', 'decorativearts', 'delaware', 'delmenhorst', 'denmark', 'depot', 'design', 'detroit', 'dinosaur', 'discovery', 'dolls', 'donostia', 'durham', 'eastafrica', 'eastcoast', 'education', 'educational', 'egyptian', 'eisenbahn', 'elburg', 'elvendrell', 'embroidery', 'encyclopedic', 'england', 'entomology', 'environment', 'environmentalconservation', 'epilepsy', 'essex', 'estate', 'ethnology', 'exeter', 'exhibition', 'family', 'farm', 'farmequipment', 'farmers', 'farmstead', 'field', 'figueres', 'filatelia', 'film', 'fineart', 'finearts', 'finland', 'flanders', 'florida', 'force', 'fortmissoula', 'fortworth', 'foundation', 'francaise', 'frankfurt', 'franziskaner', 'freemasonry', 'freiburg', 'fribourg', 'frog', 'fundacio', 'furniture', 'gallery', 'garden', 'gateway', 'geelvinck', 'gemological', 'geology', 'georgia', 'giessen', 'glas', 'glass', 'gorge', 'grandrapids', 'graz', 'guernsey', 'halloffame', 'hamburg', 'handson', 'harvestcelebration', 'hawaii', 'health', 'heimatunduhren', 'hellas', 'helsinki', 'hembygdsforbund', 'heritage', 'histoire', 'historical', 'historicalsociety', 'historichouses', 'historisch', 'historisches', 'history', 'historyofscience', 'horology', 'house', 'humanities', 'illustration', 'imageandsound', 'indian', 'indiana', 'indianapolis', 'indianmarket', 'intelligence', 'interactive', 'iraq', 'iron', 'isleofman', 'jamison', 'jefferson', 'jerusalem', 'jewelry', 'jewish', 'jewishart', 'jfk', 'journalism', 'judaica', 'judygarland', 'juedisches', 'juif', 'karate', 'karikatur', 'kids', 'koebenhavn', 'koeln', 'kunst', 'kunstsammlung', 'kunstunddesign', 'labor', 'labour', 'lajolla', 'lancashire', 'landes', 'lans', 'larsson', 'lewismiller', 'lincoln', 'linz', 'living', 'livinghistory', 'localhistory', 'london', 'losangeles', 'louvre', 'loyalist', 'lucerne', 'luxembourg', 'luzern', 'läns', 'mad', 'madrid', 'mallorca', 'manchester', 'mansion', 'mansions', 'manx', 'marburg', 'maritime', 'maritimo', 'maryland', 'marylhurst', 'media', 'medical', 'medizinhistorisches', 'meeres', 'memorial', 'mesaverde', 'michigan', 'midatlantic', 'military', 'mill', 'miners', 'mining', 'minnesota', 'missile', 'missoula', 'modern', 'moma', 'money', 'monmouth', 'monticello', 'montreal', 'moscow', 'motorcycle', 'muenchen', 'muenster', 'mulhouse', 'muncie', 'museet', 'museumcenter', 'museumvereniging', 'music', 'national', 'nationalfirearms', 'nationalheritage', 'nativeamerican', 'naturalhistory', 'naturalhistorymuseum', 'naturalsciences', 'nature', 'naturhistorisches', 'natuurwetenschappen', 'naumburg', 'naval', 'nebraska', 'neues', 'newhampshire', 'newjersey', 'newmexico', 'newport', 'newspaper', 'newyork', 'niepce', 'norfolk', 'north', 'nrw', 'nuernberg', 'nuremberg', 'nyc', 'nyny', 'oceanographic', 'oceanographique', 'omaha', 'online', 'ontario', 'openair', 'oregon', 'oregontrail', 'otago', 'oxford', 'pacific', 'paderborn', 'palace', 'paleo', 'palmsprings', 'panama', 'paris', 'pasadena', 'pharmacy', 'philadelphia', 'philadelphiaarea', 'philately', 'phoenix', 'photography', 'pilots', 'pittsburgh', 'planetarium', 'plantation', 'plants', 'plaza', 'portal', 'portland', 'portlligat', 'posts-and-telecommunications', 'preservation', 'presidio', 'press', 'project', 'public', 'pubol', 'quebec', 'railroad', 'railway', 'research', 'resistance', 'riodejaneiro', 'rochester', 'rockart', 'roma', 'russia', 'saintlouis', 'salem', 'salvadordali', 'salzburg', 'sandiego', 'sanfrancisco', 'santabarbara', 'santacruz', 'santafe', 'saskatchewan', 'satx', 'savannahga', 'schlesisches', 'schoenbrunn', 'schokoladen', 'school', 'schweiz', 'science', 'science-fiction', 'scienceandhistory', 'scienceandindustry', 'sciencecenter', 'sciencecenters', 'sciencehistory', 'sciences', 'sciencesnaturelles', 'scotland', 'seaport', 'settlement', 'settlers', 'shell', 'sherbrooke', 'sibenik', 'silk', 'ski', 'skole', 'society', 'sologne', 'soundandvision', 'southcarolina', 'southwest', 'space', 'spy', 'square', 'stadt', 'stalbans', 'starnberg', 'state', 'stateofdelaware', 'station', 'steam', 'steiermark', 'stjohn', 'stockholm', 'stpetersburg', 'stuttgart', 'suisse', 'surgeonshall', 'surrey', 'svizzera', 'sweden', 'sydney', 'tank', 'tcm', 'technology', 'telekommunikation', 'television', 'texas', 'textile', 'theater', 'time', 'timekeeping', 'topology', 'torino', 'touch', 'town', 'transport', 'tree', 'trolley', 'trust', 'trustee', 'uhren', 'ulm', 'undersea', 'university', 'usa', 'usantiques', 'usarts', 'uscountryestate', 'usculture', 'usdecorativearts', 'usgarden', 'ushistory', 'ushuaia', 'uslivinghistory', 'utah', 'uvic', 'valley', 'vantaa', 'versailles', 'viking', 'village', 'virginia', 'virtual', 'virtuel', 'vlaanderen', 'volkenkunde', 'wales', 'wallonie', 'war', 'washingtondc', 'watch-and-clock', 'watchandclock', 'western', 'westfalen', 'whaling', 'wildlife', 'williamsburg', 'windmill', 'workshop', 'xn--9dbhblg6di', 'xn--h1aegh', 'york', 'yorkshire', 'yosemite', 'youth', 'zoological', 'zoology'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mv':
+ if (['aero', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'int', 'mil', 'museum', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mw':
+ if (['ac', 'biz', 'co', 'com', 'coop', 'edu', 'gov', 'int', 'museum', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mx':
+ if (['com', 'edu', 'gob', 'net', 'ngo', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'my':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mz':
+ if (['co', 'net', 'org', 'ac', 'gov', 'edu', 'mil', 'adv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'na':
+ if (['info', 'pro', 'name', 'school', 'or', 'dr', 'us', 'mx', 'ca', 'in', 'cc', 'tv', 'ws', 'mobi', 'co', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'name':
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ break;
+ case 'nc':
+ if (['asso', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'net':
+ if (['gb', 'hu', 'in', 'jp', 'ru', 'se', 'uk', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nf':
+ if (['arts', 'com', 'firm', 'info', 'net', 'other', 'per', 'rec', 'store', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ng':
+ if (['com', 'edu', 'gov', 'i', 'mil', 'mobi', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ni':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gob', 'in', 'info', 'int', 'mil', 'net', 'nom', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nl':
+ if (wa[1] == 'bv') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'no':
+ if (['aa', 'aarborte', 'aejrie', 'afjord', 'agdenes', 'ah', 'aknoluokta', 'akrehamn', 'al', 'alaheadju', 'alesund', 'algard', 'alstahaug', 'alta', 'alvdal', 'amli', 'amot', 'andasuolo', 'andebu', 'andoy', 'ardal', 'aremark', 'arendal', 'arna', 'aseral', 'asker', 'askim', 'askoy', 'askvoll', 'asnes', 'audnedaln', 'aukra', 'aure', 'aurland', 'austevoll', 'austrheim', 'averoy', 'badaddja', 'bahcavuotna', 'bahccavuotna', 'baidar', 'bajddar', 'balat', 'balestrand', 'ballangen', 'balsfjord', 'bamble', 'bardu', 'barum', 'batsfjord', 'bearalvahki', 'beardu', 'beiarn', 'berg', 'bergen', 'berlevag', 'bievat', 'bindal', 'birkenes', 'bjarkoy', 'bjerkreim', 'bjugn', 'bodo', 'bokn', 'bomlo', 'bremanger', 'bronnoy', 'bronnoysund', 'brumunddal', 'bryne', 'bu', 'budejju', 'bygland', 'bykle', 'cahcesuolo', 'davvenjarga', 'davvesiida', 'deatnu', 'dep', 'dielddanuorri', 'divtasvuodna', 'divttasvuotna', 'donna', 'dovre', 'drammen', 'drangedal', 'drobak', 'dyroy', 'egersund', 'eid', 'eidfjord', 'eidsberg', 'eidskog', 'eidsvoll', 'eigersund', 'elverum', 'enebakk', 'engerdal', 'etne', 'etnedal', 'evenassi', 'evenes', 'farsund', 'fauske', 'fedje', 'fet', 'fetsund', 'fhs', 'finnoy', 'fitjar', 'fjaler', 'fjell', 'fla', 'flakstad', 'flatanger', 'flekkefjord', 'flesberg', 'flora', 'floro', 'fm', 'folkebibl', 'folldal', 'forde', 'forsand', 'fosnes', 'frana', 'fredrikstad', 'frei', 'frogn', 'froland', 'frosta', 'froya', 'fuoisku', 'fuossko', 'fusa', 'fylkesbibl', 'fyresdal', 'gaivuotna', 'galsa', 'gamvik', 'gangaviika', 'gaular', 'gausdal', 'giehtavuoatna', 'gildeskal', 'giske', 'gjemnes', 'gjerdrum', 'gjerstad', 'gjesdal', 'gjovik', 'gloppen', 'gol', 'gran', 'grane', 'granvin', 'gratangen', 'grimstad', 'grong', 'grue', 'gulen', 'guovdageaidnu', 'ha', 'habmer', 'hadsel', 'hagebostad', 'halden', 'halsa', 'hamar', 'hamaroy', 'hammarfeasta', 'hammerfest', 'hapmir', 'haram', 'hareid', 'harstad', 'hasvik', 'hattfjelldal', 'haugesund', 'hemne', 'hemnes', 'hemsedal', 'herad', 'hitra', 'hjartdal', 'hjelmeland', 'hl', 'hm', 'hobol', 'hof', 'hokksund', 'hol', 'hole', 'holmestrand', 'holtalen', 'honefoss', 'hornindal', 'horten', 'hoyanger', 'hoylandet', 'hurdal', 'hurum', 'hvaler', 'hyllestad', 'ibestad', 'idrett', 'inderoy', 'iveland', 'ivgu', 'jessheim', 'jevnaker', 'jolster', 'jondal', 'jorpeland', 'kafjord', 'karasjohka', 'karasjok', 'karlsoy', 'karmoy', 'kautokeino', 'kirkenes', 'klabu', 'klepp', 'kommune', 'kongsberg', 'kongsvinger', 'kopervik', 'kraanghke', 'kragero', 'kristiansand', 'kristiansund', 'krodsherad', 'krokstadelva', 'kvafjord', 'kvalsund', 'kvam', 'kvanangen', 'kvinesdal', 'kvinnherad', 'kviteseid', 'kvitsoy', 'laakesvuemie', 'lahppi', 'langevag', 'lardal', 'larvik', 'lavagis', 'lavangen', 'leangaviika', 'lebesby', 'leikanger', 'leirfjord', 'leirvik', 'leka', 'leksvik', 'lenvik', 'lerdal', 'lesja', 'levanger', 'lier', 'lierne', 'lillehammer', 'lillesand', 'lindas', 'lindesnes', 'loabat', 'lodingen', 'lom', 'loppa', 'lorenskog', 'loten', 'lund', 'lunner', 'luroy', 'luster', 'lyngdal', 'lyngen', 'malatvuopmi', 'malselv', 'malvik', 'mandal', 'marker', 'marnardal', 'masfjorden', 'masoy', 'meland', 'meldal', 'melhus', 'meloy', 'meraker', 'midsund', 'mil', 'mjondalen', 'moareke', 'modalen', 'modum', 'molde', 'mosjoen', 'moskenes', 'moss', 'mosvik', 'mr', 'muosat', 'museum', 'naamesjevuemie', 'namdalseid', 'namsos', 'namsskogan', 'nannestad', 'naroy', 'narviika', 'narvik', 'naustdal', 'navuotna', 'nesna', 'nesodden', 'nesoddtangen', 'nesseby', 'nesset', 'nissedal', 'nittedal', 'nl', 'norddal', 'nordkapp', 'nordreisa', 'notodden', 'notteroy', 'nt', 'odda', 'of', 'oksnes', 'ol', 'omasvuotna', 'oppdal', 'oppegard', 'orkanger', 'orkdal', 'orland', 'orskog', 'orsta', 'osen', 'oslo', 'osoyro', 'osteroy', 'overhalla', 'oyer', 'oygarden', 'porsanger', 'porsangu', 'porsgrunn', 'priv', 'rade', 'radoy', 'rahkkeravju', 'raholt', 'raisa', 'rakkestad', 'ralingen', 'rana', 'randaberg', 'rauma', 'rendalen', 'rennebu', 'rennesoy', 'rindal', 'ringebu', 'ringerike', 'ringsaker', 'risor', 'rissa', 'rl', 'roan', 'rodoy', 'rollag', 'romsa', 'romskog', 'roros', 'rost', 'royken', 'royrvik', 'ruovat', 'rygge', 'salangen', 'salat', 'saltdal', 'samnanger', 'sandefjord', 'sandnes', 'sandnessjoen', 'sandoy', 'sarpsborg', 'sauda', 'sauherad', 'sel', 'selbu', 'selje', 'seljord', 'sf', 'siellak', 'sigdal', 'siljan', 'sirdal', 'skanit', 'skanland', 'skaun', 'skedsmo', 'skedsmokorset', 'ski', 'skien', 'skierva', 'skiptvet', 'skjak', 'skjervoy', 'skodje', 'slattum', 'smola', 'snaase', 'snasa', 'snillfjord', 'snoasa', 'sogndal', 'sogne', 'sokndal', 'sola', 'solund', 'somna', 'songdalen', 'sorfold', 'sorreisa', 'sortland', 'sorum', 'spjelkavik', 'spydeberg', 'st', 'stange', 'stat', 'stathelle', 'stavanger', 'stavern', 'steigen', 'steinkjer', 'stjordal', 'stjordalshalsen', 'stokke', 'stord', 'stordal', 'storfjord', 'strand', 'stranda', 'stryn', 'sula', 'suldal', 'sund', 'sunndal', 'surnadal', 'svalbard', 'sveio', 'svelvik', 'sykkylven', 'tana', 'tananger', 'time', 'tingvoll', 'tinn', 'tjeldsund', 'tjome', 'tm', 'tokke', 'tolga', 'tonsberg', 'torsken', 'tr', 'trana', 'tranby', 'tranoy', 'troandin', 'trogstad', 'tromsa', 'tromso', 'trondheim', 'trysil', 'tvedestrand', 'tydal', 'tynset', 'tysfjord', 'tysnes', 'tysvar', 'ullensaker', 'ullensvang', 'ulvik', 'unjarga', 'utsira', 'va', 'vaapste', 'vadso', 'vaga', 'vagan', 'vagsoy', 'vaksdal', 'valle', 'vang', 'vanylven', 'vardo', 'varggat', 'varoy', 'vefsn', 'vega', 'vegarshei', 'vennesla', 'verdal', 'verran', 'vestby', 'vestnes', 'vestvagoy', 'vevelstad', 'vf', 'vgs', 'vik', 'vikna', 'vindafjord', 'voagat', 'volda', 'voss', 'vossevangen', 'xn--andy-ira', 'xn--asky-ira', 'xn--aurskog-hland-jnb', 'xn--avery-yua', 'xn--bdddj-mrabd', 'xn--bearalvhki-y4a', 'xn--berlevg-jxa', 'xn--bhcavuotna-s4a', 'xn--bhccavuotna-k7a', 'xn--bidr-5nac', 'xn--bievt-0qa', 'xn--bjarky-fya', 'xn--bjddar-pta', 'xn--blt-elab', 'xn--bmlo-gra', 'xn--bod-2na', 'xn--brnny-wuac', 'xn--brnnysund-m8ac', 'xn--brum-voa', 'xn--btsfjord-9za', 'xn--davvenjrga-y4a', 'xn--dnna-gra', 'xn--drbak-wua', 'xn--dyry-ira', 'xn--eveni-0qa01ga', 'xn--finny-yua', 'xn--fjord-lra', 'xn--fl-zia', 'xn--flor-jra', 'xn--frde-gra', 'xn--frna-woa', 'xn--frya-hra', 'xn--ggaviika-8ya47h', 'xn--gildeskl-g0a', 'xn--givuotna-8ya', 'xn--gjvik-wua', 'xn--gls-elac', 'xn--h-2fa', 'xn--hbmer-xqa', 'xn--hcesuolo-7ya35b', 'xn--hgebostad-g3a', 'xn--hmmrfeasta-s4ac', 'xn--hnefoss-q1a', 'xn--hobl-ira', 'xn--holtlen-hxa', 'xn--hpmir-xqa', 'xn--hyanger-q1a', 'xn--hylandet-54a', 'xn--indery-fya', 'xn--jlster-bya', 'xn--jrpeland-54a', 'xn--karmy-yua', 'xn--kfjord-iua', 'xn--klbu-woa', 'xn--koluokta-7ya57h', 'xn--krager-gya', 'xn--kranghke-b0a', 'xn--krdsherad-m8a', 'xn--krehamn-dxa', 'xn--krjohka-hwab49j', 'xn--ksnes-uua', 'xn--kvfjord-nxa', 'xn--kvitsy-fya', 'xn--kvnangen-k0a', 'xn--l-1fa', 'xn--laheadju-7ya', 'xn--langevg-jxa', 'xn--ldingen-q1a', 'xn--leagaviika-52b', 'xn--lesund-hua', 'xn--lgrd-poac', 'xn--lhppi-xqa', 'xn--linds-pra', 'xn--loabt-0qa', 'xn--lrdal-sra', 'xn--lrenskog-54a', 'xn--lt-liac', 'xn--lten-gra', 'xn--lury-ira', 'xn--mely-ira', 'xn--merker-kua', 'xn--mjndalen-64a', 'xn--mlatvuopmi-s4a', 'xn--mli-tla', 'xn--mlselv-iua', 'xn--moreke-jua', 'xn--mosjen-eya', 'xn--mot-tla', 'xn--msy-ula0h', 'xn--mtta-vrjjat-k7af', 'xn--muost-0qa', 'xn--nmesjevuemie-tcba', 'xn--nry-yla5g', 'xn--nttery-byae', 'xn--nvuotna-hwa', 'xn--oppegrd-ixa', 'xn--ostery-fya', 'xn--osyro-wua', 'xn--porsgu-sta26f', 'xn--rady-ira', 'xn--rdal-poa', 'xn--rde-ula', 'xn--rdy-0nab', 'xn--rennesy-v1a', 'xn--rhkkervju-01af', 'xn--rholt-mra', 'xn--risa-5na', 'xn--risr-ira', 'xn--rland-uua', 'xn--rlingen-mxa', 'xn--rmskog-bya', 'xn--rros-gra', 'xn--rskog-uua', 'xn--rst-0na', 'xn--rsta-fra', 'xn--ryken-vua', 'xn--ryrvik-bya', 'xn--s-1fa', 'xn--sandnessjen-ogb', 'xn--sandy-yua', 'xn--seral-lra', 'xn--sgne-gra', 'xn--skierv-uta', 'xn--skjervy-v1a', 'xn--skjk-soa', 'xn--sknit-yqa', 'xn--sknland-fxa', 'xn--slat-5na', 'xn--slt-elab', 'xn--smla-hra', 'xn--smna-gra', 'xn--snase-nra', 'xn--sndre-land-0cb', 'xn--snes-poa', 'xn--snsa-roa', 'xn--sr-aurdal-l8a', 'xn--sr-fron-q1a', 'xn--sr-odal-q1a', 'xn--sr-varanger-ggb', 'xn--srfold-bya', 'xn--srreisa-q1a', 'xn--srum-gra', 'xn--stjrdal-s1a', 'xn--stjrdalshalsen-sqb', 'xn--stre-toten-zcb', 'xn--tjme-hra', 'xn--tnsberg-q1a', 'xn--trany-yua', 'xn--trgstad-r1a', 'xn--trna-woa', 'xn--troms-zua', 'xn--tysvr-vra', 'xn--unjrga-rta', 'xn--vads-jra', 'xn--vard-jra', 'xn--vegrshei-c0a', 'xn--vestvgy-ixa6o', 'xn--vg-yiab', 'xn--vgan-qoa', 'xn--vgsy-qoa0j', 'xn--vre-eiker-k8a', 'xn--vrggt-xqad', 'xn--vry-yla5g', 'xn--yer-zna', 'xn--ygarden-p1a', 'xn--ystre-slidre-ujb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'np':
+ if (['aero', 'asia', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'jobs', 'mil', 'mobi', 'museum', 'name', 'net', 'org', 'pro', 'travel'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nr':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nz':
+ if (['ac', 'archie', 'co', 'cri', 'geek', 'gen', 'govt', 'health', 'iwi', 'kiwi', 'maori', 'mil', 'net', 'org', 'parliament', 'school', 'xn--mori-qsa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'om':
+ if (['co', 'com', 'edu', 'gov', 'med', 'museum', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'org':
+ if (wa[1] == 'eu' && wa[3] != undefined) {
+ if (['al', 'asso', 'at', 'au', 'be', 'bg', 'ca', 'cd', 'ch', 'cn', 'cy', 'cz', 'de', 'dk', 'edu', 'ee', 'es', 'fi', 'fr', 'gr', 'hr', 'hu', 'ie', 'il', 'in', 'int', 'is', 'it', 'jp', 'kr', 'lt', 'lu', 'lv', 'me', 'mk', 'mt', 'my', 'net', 'ng', 'nl', 'no', 'nz', 'pl', 'pt', 'ro', 'ru', 'se', 'si', 'sk', 'tr', 'uk', 'us'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['ae', 'eu', 'hk', 'jpn', 'js', 'us', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pa':
+ if (['abo', 'ac', 'com', 'edu', 'gob', 'ing', 'med', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pe':
+ if (['com', 'edu', 'gob', 'mil', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pf':
+ if (['com', 'org', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pg':
+ if (['com', 'net', 'ac', 'gov', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ph':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'ngo', 'i'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pk':
+ if (['biz', 'com', 'edu', 'fam', 'gob', 'gok', 'gon', 'gop', 'gos', 'gov', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pl':
+ if (['agro', 'aid', 'art', 'atm', 'augustow', 'auto', 'babia-gora', 'bedzin', 'beskidy', 'bialowieza', 'bialystok', 'bielawa', 'bieszczady', 'biz', 'boleslawiec', 'bydgoszcz', 'bytom', 'cieszyn', 'com', 'czeladz', 'czest', 'dlugoleka', 'edu', 'elblag', 'elk', 'gda', 'gdansk', 'glogow', 'gmina', 'gniezno', 'gorlice', 'gov', 'grajewo', 'gsm', 'ilawa', 'info', 'jaworzno', 'jelenia-gora', 'jgora', 'kalisz', 'karpacz', 'kartuzy', 'kaszuby', 'katowice', 'kazimierz-dolny', 'kepno', 'ketrzyn', 'klodzko', 'kobierzyce', 'kolobrzeg', 'konin', 'konskowola', 'krakow', 'kutno', 'lapy', 'lebork', 'legnica', 'lezajsk', 'limanowa', 'lodz', 'lomza', 'lowicz', 'lubin', 'lublin', 'lukow', 'mail', 'malbork', 'malopolska', 'mazowsze', 'mazury', 'media', 'miasta', 'mielec', 'mielno', 'mil', 'mragowo', 'naklo', 'net', 'ngo', 'nieruchomosci', 'nom', 'nowaruda', 'nysa', 'olawa', 'olecko', 'olkusz', 'olsztyn', 'opoczno', 'opole', 'org', 'ostroda', 'ostroleka', 'ostrowiec', 'ostrowwlkp', 'pc', 'pila', 'pisz', 'podhale', 'podlasie', 'polkowice', 'pomorskie', 'pomorze', 'powiat', 'poznan', 'priv', 'prochowice', 'pruszkow', 'przeworsk', 'pulawy', 'radom', 'rawa-maz', 'realestate', 'rel', 'rybnik', 'rzeszow', 'sanok', 'sejny', 'sex', 'shop', 'sklep', 'skoczow', 'slask', 'slupsk', 'sos', 'sosnowiec', 'stalowa-wola', 'starachowice', 'stargard', 'suwalki', 'swidnica', 'swiebodzin', 'swinoujscie', 'szczecin', 'szczytno', 'szkola', 'targi', 'tarnobrzeg', 'tgory', 'tm', 'torun', 'tourism', 'travel', 'turek', 'turystyka', 'tychy', 'ustka', 'walbrzych', 'warmia', 'warszawa', 'waw', 'wegrow', 'wielun', 'wlocl', 'wloclawek', 'wodzislaw', 'wolomin', 'wroc', 'wroclaw', 'zachpomor', 'zagan', 'zarow', 'zgora', 'zgorzelec'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pn':
+ if (['in', 'co', 'eu', 'org', 'net', 'me', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pr':
+ if (['ac', 'biz', 'com', 'edu', 'est', 'gov', 'info', 'isla', 'name', 'net', 'org', 'pro', 'prof'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pro':
+ if (['aaa', 'aca', 'acct', 'eng', 'avocat', 'bar', 'jur', 'recht', 'law', 'med', 'cpa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ps':
+ if (['edu', 'gov', 'sec', 'plo', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pt':
+ if (['com', 'edu', 'gov', 'int', 'net', 'nome', 'org', 'publ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pw':
+ if (['co', 'ne', 'or', 'ed', 'go', 'belau'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'py':
+ if (['com', 'coop', 'edu', 'mil', 'gov', 'org', 'net', 'una'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'qa':
+ if (['com', 'edu', 'sch', 'gov', 'mil', 'net', 'org', 'name'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 're':
+ if (['asso', 'com', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ro':
+ if (['arts', 'com', 'firm', 'info', 'nom', 'nt', 'org', 'rec', 'store', 'tm', 'www'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rs':
+ if (['ac', 'co', 'edu', 'gov', 'in', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ru':
+ if (['ac', 'adygeya', 'altai', 'amur', 'amursk', 'arkhangelsk', 'astrakhan', 'baikal', 'bashkiria', 'belgorod', 'bir', 'bryansk', 'buryatia', 'cap', 'cbg', 'chel', 'chelyabinsk', 'chita', 'chukotka', 'cmw', 'com', 'dagestan', 'e-burg', 'edu', 'fareast', 'gov', 'grozny', 'int', 'irkutsk', 'ivanovo', 'izhevsk', 'jamal', 'jar', 'joshkar-ola', 'k-uralsk', 'kalmykia', 'kaluga', 'kamchatka', 'karelia', 'kazan', 'kchr', 'kemerovo', 'khabarovsk', 'khakassia', 'khv', 'kirov', 'kms', 'koenig', 'komi', 'kostroma', 'krasnoyarsk', 'kuban', 'kurgan', 'kursk', 'kustanai', 'kuzbass', 'lipetsk', 'magadan', 'magnitka', 'mari', 'mari-el', 'marine', 'mil', 'mordovia', 'mos', 'mosreg', 'msk', 'murmansk', 'mytis', 'nakhodka', 'nalchik', 'net', 'nkz', 'nnov', 'norilsk', 'nov', 'novosibirsk', 'nsk', 'omsk', 'orenburg', 'org', 'oryol', 'oskol', 'palana', 'penza', 'perm', 'pp', 'pskov', 'ptz', 'pyatigorsk', 'rnd', 'rubtsovsk', 'ryazan', 'sakhalin', 'samara', 'saratov', 'simbirsk', 'smolensk', 'snz', 'spb', 'stavropol', 'stv', 'surgut', 'syzran', 'tambov', 'tatarstan', 'test', 'tlt', 'tom', 'tomsk', 'tsaritsyn', 'tsk', 'tula', 'tuva', 'tver', 'tyumen', 'udm', 'udmurtia', 'ulan-ude', 'vdonsk', 'vladikavkaz', 'vladimir', 'vladivostok', 'volgograd', 'vologda', 'voronezh', 'vrn', 'vyatka', 'yakutia', 'yamal', 'yaroslavl', 'yekaterinburg', 'yuzhno-sakhalinsk', 'zgrad'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rw':
+ if (['gov', 'net', 'edu', 'ac', 'com', 'co', 'int', 'mil', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sa':
+ if (['com', 'edu', 'gov', 'med', 'net', 'org', 'pub', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sc':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sd':
+ if (['com', 'edu', 'gov', 'info', 'med', 'net', 'org', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'se':
+ if (['a', 'ac', 'b', 'bd', 'brand', 'c', 'd', 'e', 'f', 'fh', 'fhsk', 'fhv', 'g', 'h', 'i', 'k', 'komforb', 'kommunalforbund', 'komvux', 'l', 'lanbib', 'm', 'n', 'naturbruksgymn', 'o', 'org', 'p', 'parti', 'pp', 'press', 'r', 's', 't', 'tm', 'u', 'w', 'x', 'y', 'z'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sg':
+ if (['com', 'edu', 'gov', 'idn', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sh':
+ if (['com', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sl':
+ if (['com', 'net', 'edu', 'gov', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sn':
+ if (['art', 'com', 'edu', 'gouv', 'org', 'perso', 'univ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'so':
+ if (['com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'st':
+ if (['co', 'com', 'consulado', 'edu', 'embaixada', 'gov', 'mil', 'net', 'org', 'principe', 'saotome', 'store'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sv':
+ if (['edu', 'gov', 'com', 'org', 'red', 'gob'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sy':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sz':
+ if (['co', 'ac', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'th':
+ if (['ac', 'co', 'go', 'in', 'mi', 'net', 'or'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tj':
+ if (['ac', 'aero', 'biz', 'co', 'com', 'coop', 'dyn', 'edu', 'go', 'gov', 'info', 'int', 'mil', 'museum', 'my', 'name', 'net', 'nic', 'org', 'per', 'pro', 'test', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tl':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tm':
+ if (['com', 'co', 'org', 'net', 'nom', 'gov', 'mil', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tn':
+ if (['agrinet', 'com', 'defense', 'edunet', 'ens', 'fin', 'gov', 'ind', 'info', 'intl', 'mincom', 'nat', 'net', 'org', 'perso', 'rnrt', 'rns', 'rnu', 'tourism', 'turen'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'to':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tr':
+ if (['av', 'bbs', 'bel', 'biz', 'com', 'dr', 'edu', 'gen', 'gov', 'info', 'k12', 'kep', 'mil', 'name', 'nc', 'net', 'org', 'pol', 'tel', 'tv', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tt':
+ if (['co', 'com', 'org', 'net', 'biz', 'info', 'pro', 'int', 'coop', 'jobs', 'mobi', 'travel', 'museum', 'aero', 'name', 'gov', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tw':
+ if (['club', 'com', 'ebiz', 'edu', 'game', 'gov', 'idv', 'mil', 'net', 'org', 'xn--czrw28b', 'xn--uc0atv', 'xn--zf0ao64a'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tz':
+ if (['ac', 'co', 'go', 'hotel', 'info', 'me', 'mil', 'mobi', 'ne', 'or', 'sc', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ua':
+ if (['at', 'cherkassy', 'cherkasy', 'chernigov', 'chernihiv', 'chernivtsi', 'chernovtsy', 'ck', 'cn', 'co', 'com', 'cr', 'crimea', 'cv', 'dn', 'dnepropetrovsk', 'dnipropetrovsk', 'dominic', 'donetsk', 'dp', 'edu', 'gov', 'if', 'in', 'ivano-frankivsk', 'kh', 'kharkiv', 'kharkov', 'kherson', 'khmelnitskiy', 'khmelnytskyi', 'kiev', 'kirovograd', 'km', 'kr', 'krym', 'ks', 'kv', 'kyiv', 'lg', 'lt', 'lugansk', 'lutsk', 'lv', 'lviv', 'mk', 'mykolaiv', 'net', 'nikolaev', 'od', 'odesa', 'odessa', 'org', 'pl', 'poltava', 'pp', 'rivne', 'rovno', 'rv', 'sb', 'sebastopol', 'sevastopol', 'sm', 'sumy', 'te', 'ternopil', 'uz', 'uzhgorod', 'vinnica', 'vinnytsia', 'vn', 'volyn', 'yalta', 'zaporizhzhe', 'zaporizhzhia', 'zhitomir', 'zhytomyr', 'zp', 'zt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ug':
+ if (['co', 'ac', 'sc', 'go', 'ne', 'or', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uk':
+ if (['ac', 'bl', 'british-library', 'co', 'gov', 'govt', 'jcpc', 'jet', 'judiciary', 'lea', 'ltd', 'me', 'mil', 'mod', 'net', 'nhs', 'nic', 'nls', 'org', 'orgn', 'parliament', 'plc', 'police', 'royal', 'sch', 'supremecourt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'us':
+ if (['aa', 'ae', 'ak', 'al', 'ap', 'ar', 'as', 'az', 'ca', 'cm', 'co', 'ct', 'cz', 'dc', 'de', 'dni', 'fed', 'fl', 'fm', 'ga', 'gu', 'hi', 'ia', 'id', 'il', 'in', 'isa', 'kids', 'ks', 'ky', 'la', 'ma', 'md', 'me', 'mh', 'mi', 'mn', 'mo', 'mp', 'ms', 'mt', 'nb', 'nc', 'nd', 'ne', 'nh', 'nj', 'nm', 'nsn', 'nv', 'ny', 'oh', 'ok', 'or', 'pa', 'pi', 'pr', 'pw', 'ri', 'sc', 'sd', 'tn', 'tt', 'tx', 'ut', 'va', 'vi', 'vt', 'wa', 'wi', 'wv', 'wy'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uy':
+ if (['com', 'edu', 'gub', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uz':
+ if (['co', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vc':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 've':
+ if (['arts', 'co', 'com', 'e12', 'edu', 'firm', 'gob', 'gov', 'info', 'int', 'mil', 'net', 'org', 'radio', 'rec', 'store', 'tec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vi':
+ if (['co', 'org', 'com', 'net', 'k12'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vn':
+ if (['ac', 'biz', 'com', 'edu', 'gov', 'health', 'info', 'int', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vu':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ws':
+ if (['org', 'gov', 'edu', 'com', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--90a3ac':
+ if (['xn--o1ac', 'xn--c1avg', 'xn--90azh', 'xn--d1at', 'xn--o1ach', 'xn--80au'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--j6w193g':
+ if (['xn--55qx5d', 'xn--wcvs22d', 'xn--mxtq1m', 'xn--gmqw5a', 'xn--od0alg', 'xn--uc0atv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--o3cw4h':
+ if (['xn--12c1fe0br', 'xn--12co0c3b4eva', 'xn--h3cuzk1di', 'xn--o3cyx2a', 'xn--m3ch0j3a', 'xn--12cfi8ixb8l'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'za':
+ if (['ac', 'agric', 'alt', 'bourse', 'city', 'co', 'cybernet', 'db', 'edu', 'gov', 'grondar', 'iaccess', 'imt', 'inca', 'landesign', 'law', 'mil', 'net', 'ngo', 'nis', 'nom', 'olivetti', 'org', 'pix', 'school', 'tm', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zm':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gov', 'info', 'mil', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zw':
+ if (['co', 'ac', 'org', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ }
+ return wa[1] + '.' + wa[0];
+}
+document.getElementById('sms').addEventListener('click', () => {
+ document.getElementById('smsa').style.display = 'none';
+ chrome.storage.local.get(null, (g) => {
+ let iY = 0,
+ iN = 0,
+ iT, tmp, dom, akd = [];
+ Object.keys(g).forEach(a => {
+ if (!['ign1', 'ign2', 'obs', 'dbg', 'alt', 'lastU', 'lastV', 'cep', 'mul', 'opd', 'ldb'].includes(a) && (g[a] == 'y' || g[a] == 'n')) {
+ dom = get_realdomain(a);
+ if (!akd.includes(dom)) {
+ akd.push(dom);
+ if (g[a] == 'y') {
+ iY++;
+ } else {
+ iN++;
+ }
+ }
+ }
+ });
+ iT = iY + iN;
+ if (iT > 0) {
+ tmp = (iY * 100 / iT).toFixed(1);
+ document.getElementById('viry').innerText = iY + ' (' + tmp + '%)';
+ tmp = (iN * 100 / iT).toFixed(1);
+ document.getElementById('virn').innerText = iN + ' (' + tmp + '%)';
+ document.getElementById('viro').innerText = (iY + iN);
+ } else {
+ document.getElementById('viry').innerText = 0;
+ document.getElementById('virn').innerText = 0;
+ document.getElementById('viro').innerText = 0;
+ }
+ document.getElementById('smsb').style.display = 'inline';
+ });
+});
\ No newline at end of file
diff --git a/addons/ismitmlinkCR/cs.js b/addons/ismitmlinkCR/cs.js
new file mode 100644
index 000000000..3c3feda62
--- /dev/null
+++ b/addons/ismitmlinkCR/cs.js
@@ -0,0 +1,73 @@
+if (document.body && !['ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org'].includes(location.hostname)) {
+ let cs = (function () {
+ let s = document.createElement('style');
+ document.head.appendChild(s);
+ return s.sheet;
+ })();
+ if (cs) {
+ cs.insertRule("a[data-mitm=y]{cursor:not-allowed !important;text-decoration-line:line-through !important;text-decoration-color:red !important;text-decoration-style:double !important}", 0);
+ cs.insertRule("a[data-mitm=y]::before{content:'[\\26A0]';font-weight:bold !important;color:red !important;display:inline-block !important}", 1);
+ cs.insertRule("a[data-mitm=y]:hover::before{content:'[\\26A1]'}", 2);
+ cs.insertRule("a[data-mitm=y]:hover{color:red !important}", 3);
+ cs.insertRule("img[data-mitm=y]{cursor:not-allowed !important;border:2px red dotted !important}", 4);
+ cs.insertRule("img[data-mitm=y]:hover{filter:sepia(20%)}", 5);
+ }
+ chrome.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt'], (g) => {
+ let asked = ['', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org', 'addons.mozilla.org', 'addons.thunderbird.net', 'web.archive.org', 't.co'];
+ if (g.ign1 == 'y') {
+ asked.push(location.hostname);
+ }
+ let qstall = (g.ign2 == 'y') ? 'a[href]:not([data-mitm])' : 'a[href]:not([data-mitm]),img[src]:not([data-mitm])';
+ let running = false;
+ function scanme() {
+ if (!running) {
+ running = true;
+ let unknown = [];
+ document.querySelectorAll(qstall).forEach(a => {
+ let aF = (a.tagName == 'A' ? (new URL(a.href)).hostname : (new URL(a.src)).hostname) || '';
+ a.dataset.mitm = aF;
+ if (!asked.includes(aF)) {
+ asked.push(aF);
+ if (!/^(.*)\.(danwin1210\.me|wikipedia\.org|onion|i2p|invalid|test|local|localhost|([0-9]{1,3})|bbs|chan|cyb|dyn|geek|gopher|indy|libre|neo|null|o|oss|oz|parody|pirate|bit|lib|coin|emc|bazar|fur)$/.test(aF) && aF.length >= 4) {
+ unknown.push(aF);
+ }
+ }
+ });
+ if (unknown.length > 0) {
+ chrome.runtime.sendMessage(unknown);
+ }
+ running = false;
+ }
+ }
+ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
+ if (request.length == 2) {
+ document.querySelectorAll(g.ign2 == 'y' ? "a[href][data-mitm='" + request[0] + "']" : "a[href][data-mitm='" + request[0] + "'],img[src][data-mitm='" + request[0] + "']").forEach(a => {
+ if (request[1]) {
+ a.dataset.mitm = 'y';
+ if (g.alt == 'y' && a.tagName == 'A') {
+ if (!a.href.startsWith('https://web.archive.org/web/')) {
+ a.href = 'https://web.archive.org/web/' + a.href;
+ }
+ a.title = 'Arkivo!';
+ } else {
+ a.title = 'MITM!';
+ }
+ } else {
+ a.dataset.mitm = 'n';
+ }
+ });
+ }
+ sendResponse(true);
+ return;
+ });
+ scanme();
+ if (g.obs == 'y') {
+ (new MutationObserver(scanme)).observe(document, {
+ attributes: true,
+ attributeFilter: ['href'],
+ childList: true,
+ subtree: true
+ });
+ }
+ });
+}
\ No newline at end of file
diff --git a/addons/ismitmlinkCR/localdb.html b/addons/ismitmlinkCR/localdb.html
new file mode 100644
index 000000000..5e358f85c
--- /dev/null
+++ b/addons/ismitmlinkCR/localdb.html
@@ -0,0 +1,17 @@
+
+
+
+ 🗄
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/ismitmlinkCR/localdb.js b/addons/ismitmlinkCR/localdb.js
new file mode 100644
index 000000000..d23904c13
--- /dev/null
+++ b/addons/ismitmlinkCR/localdb.js
@@ -0,0 +1,67 @@
+let irun = false;
+document.addEventListener('DOMContentLoaded', () => {
+ chrome.storage.local.get(['mul'], g => {
+ let ul = g.mul || 'eo';
+ fetch('i18n/' + ul + '.json', {
+ method: 'GET'
+ }).then(j => j.json()).then(j => {
+ document.querySelectorAll('span[tek]').forEach(x => {
+ x.innerText = j[x.getAttribute('tek')];
+ });
+ document.body.style.display = 'block';
+ });
+ });
+});
+document.getElementById('f').addEventListener('change', e => {
+ let ff = e.target.files[0];
+ if (ff) {
+ let r = new FileReader();
+ r.addEventListener('load', e => {
+ if (ff.size > 4) {
+ let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
+ if (g.length > 0) {
+ chrome.storage.local.get(['ldb'], gs => {
+ irun = true;
+ let cnt0, cnt1 = 0,
+ gc = 1,
+ db = JSON.parse(gs.ldb || '[]');
+ cnt0 = db.length;
+ document.getElementById('pbr').max = g.length;
+ g.forEach(x => {
+ document.getElementById('pbr').value = gc;
+ gc++;
+ if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
+ db.push(x);
+ }
+ });
+ g = null;
+ cnt1 = db.length;
+ if (cnt1 != cnt0) {
+ chrome.storage.local.set({
+ 'ldb': JSON.stringify(db)
+ });
+ }
+ chrome.runtime.sendMessage('dbmode,rl', () => {
+ alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
+ location.reload();
+ });
+ });
+ }
+ }
+ });
+ r.readAsText(ff);
+ }
+});
+document.getElementById('ldb_i').addEventListener('click', () => {
+ if (!irun) {
+ document.getElementById('f').click();
+ }
+});
+document.getElementById('ldb_c').addEventListener('click', () => {
+ if (!irun) {
+ chrome.runtime.sendMessage('dbmode,cl', () => {
+ alert(document.querySelector('span[tek=opxdone]').innerText);
+ location.reload();
+ });
+ }
+});
\ No newline at end of file
diff --git a/addons/ismitmlinkCR/manifest.json b/addons/ismitmlinkCR/manifest.json
new file mode 100644
index 000000000..4fb9ad265
--- /dev/null
+++ b/addons/ismitmlinkCR/manifest.json
@@ -0,0 +1,37 @@
+{
+ "manifest_version": 2,
+ "name": "Ĉu ligoj estas vundeblaj al MITM-atako?",
+ "version": "1.0.20.2",
+ "minimum_chrome_version": "68",
+ "homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
+ "author": "Ss",
+ "incognito": "split",
+ "permissions": [
+ "storage",
+ "unlimitedStorage"
+ ],
+ "icons": {
+ "72": "icons/72.png"
+ },
+ "background": {
+ "scripts": [
+ "bg.js"
+ ]
+ },
+ "options_ui": {
+ "chrome_style": false,
+ "page": "cfg.html"
+ },
+ "content_scripts": [
+ {
+ "matches": [
+ "http://*/*",
+ "https://*/*"
+ ],
+ "js": [
+ "cs.js"
+ ],
+ "run_at": "document_end"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/addons/ismitmlinkFX/README.md b/addons/ismitmlinkFX/README.md
new file mode 100644
index 000000000..f0a171bcf
--- /dev/null
+++ b/addons/ismitmlinkFX/README.md
@@ -0,0 +1,2 @@
+- [More Information / Download](../../subfiles/about.ismm.md)
+- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
\ No newline at end of file
diff --git a/addons/ismitmlinkFX/bg.js b/addons/ismitmlinkFX/bg.js
new file mode 100644
index 000000000..a28f96246
--- /dev/null
+++ b/addons/ismitmlinkFX/bg.js
@@ -0,0 +1,1343 @@
+let localUse = false,
+ localDB = [],
+ timr, memcache = {},
+ forcePurge = false,
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ismitm.php';
+/*
+browser.storage.local.get(['cep']).then(g => {
+ if (g.cep == 'y') {
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ismitm.php';
+ } else {
+ if (g.cep != 'n') {
+ browser.storage.local.set({
+ 'cep': 'n'
+ });
+ fetch('http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ok.php', {
+ method: 'GET',
+ mode: 'cors'
+ }).then(r => r.text()).then(r => {
+ if (r == 'ok') {
+ apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ismitm.php';
+ browser.storage.local.set({
+ 'cep': 'y'
+ });
+ }
+ }).catch(() => {});
+ }
+ }
+});
+*/
+function get_realdomain(w) {
+ let wa = w.split('.');
+ let wa_l = wa.length;
+ if (wa_l < 3 || (wa_l == 4 && /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(w))) {
+ return w;
+ }
+ wa.reverse();
+ switch (wa[0]) {
+ case 'ac':
+ if (['com', 'edu', 'gov', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ad':
+ if (wa[1] == 'nom') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ae':
+ if (['co', 'net', 'org', 'sch', 'ac', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aero':
+ if (['accident-investigation', 'accident-prevention', 'aerobatic', 'aeroclub', 'aerodrome', 'agents', 'aircraft', 'airline', 'airport', 'air-surveillance', 'airtraffic', 'air-traffic-control', 'ambulance', 'amusement', 'association', 'author', 'ballooning', 'broker', 'caa', 'cargo', 'catering', 'certification', 'championship', 'charter', 'civilaviation', 'club', 'conference', 'consultant', 'consulting', 'control', 'council', 'crew', 'design', 'dgca', 'educator', 'emergency', 'engine', 'engineer', 'entertainment', 'equipment', 'exchange', 'express', 'federation', 'flight', 'freight', 'fuel', 'gliding', 'government', 'groundhandling', 'group', 'hanggliding', 'homebuilt', 'insurance', 'journal', 'journalist', 'leasing', 'logistics', 'magazine', 'maintenance', 'media', 'microlight', 'modelling', 'navigation', 'parachuting', 'paragliding', 'passenger-association', 'pilot', 'press', 'production', 'recreation', 'repbody', 'res', 'research', 'rotorcraft', 'safety', 'scientist', 'services', 'show', 'skydiving', 'software', 'student', 'trader', 'trading', 'trainer', 'union', 'workinggroup', 'works'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'af':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ag':
+ if (['com', 'net', 'org', 'co', 'nom', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ai':
+ if (['off', 'com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'al':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ao':
+ if (['co', 'ed', 'it', 'og', 'pb', 'gv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ar':
+ if (['com', 'edu', 'gov', 'gob', 'int', 'mil', 'net', 'org', 'tur', 'musica'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'as':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'at':
+ if (['gv', 'ac', 'co', 'or', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'au':
+ if (wa[1] == 'gov' && wa[3] != undefined) {
+ if (['act', 'nsw', 'nt', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (wa[1] == 'edu' && wa[3] != undefined) {
+ if (['act', 'catholic', 'eq', 'nsw', 'nt', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['act', 'asn', 'com', 'conf', 'csiro', 'edu', 'gov', 'id', 'info', 'net', 'nsw', 'nt', 'org', 'oz', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aw':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'az':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'int', 'mil', 'name', 'net', 'org', 'pp', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ba':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'net', 'org', 'rs'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bb':
+ if (['biz', 'co', 'com', 'edu', 'gov', 'info', 'net', 'org', 'store', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bd':
+ if (['com', 'edu', 'ac', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'be':
+ if (wa[1] == 'ac') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bf':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bg':
+ if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bh':
+ if (['com', 'info', 'cc', 'edu', 'biz', 'net', 'org', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bi':
+ if (['ac', 'co', 'com', 'edu', 'gouv', 'gov', 'int', 'mil', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bj':
+ if (['asso', 'barreau', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bn':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bo':
+ if (['academia', 'agro', 'arte', 'blog', 'bolivia', 'ciencia', 'com', 'cooperativa', 'democracia', 'deporte', 'ecologia', 'economia', 'edu', 'empresa', 'gob', 'gov', 'indigena', 'industria', 'info', 'int', 'medicina', 'mil', 'movimiento', 'musica', 'natural', 'net', 'nombre', 'noticias', 'org', 'patria', 'plurinacional', 'politica', 'profesional', 'pueblo', 'revista', 'salud', 'tecnologia', 'tksat', 'transporte', 'tv', 'web', 'wiki'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'br':
+ if (['9guacu', 'abc', 'adm', 'adv', 'agr', 'aju', 'am', 'anani', 'aparecida', 'arq', 'art', 'ato', 'b', 'barueri', 'belem', 'bhz', 'bio', 'blog', 'bmd', 'boavista', 'bsb', 'campinagrande', 'campinas', 'caxias', 'cim', 'cng', 'cnt', 'com', 'contagem', 'coop', 'cri', 'cuiaba', 'curitiba', 'def', 'ecn', 'eco', 'edu', 'emp', 'eng', 'esp', 'etc', 'eti', 'far', 'feira', 'flog', 'floripa', 'fm', 'fnd', 'fortal', 'fot', 'foz', 'fst', 'g12', 'ggf', 'goiania', 'gov', 'gru', 'imb', 'ind', 'inf', 'jab', 'jampa', 'jdf', 'joinville', 'jor', 'jus', 'leg', 'lel', 'londrina', 'macapa', 'maceio', 'manaus', 'maringa', 'mat', 'med', 'mil', 'morena', 'mp', 'mus', 'natal', 'net', 'niteroi', 'nom', 'not', 'ntr', 'odo', 'ong', 'org', 'osasco', 'palmas', 'poa', 'ppg', 'pro', 'psc', 'psi', 'pvh', 'qsl', 'radio', 'rec', 'recife', 'ribeirao', 'rio', 'riobranco', 'riopreto', 'salvador', 'sampa', 'santamaria', 'santoandre', 'saobernardo', 'saogonca', 'sjc', 'slg', 'slz', 'sorocaba', 'srv', 'taxi', 'teo', 'the', 'tmp', 'trd', 'tur', 'tv', 'udi', 'vet', 'vix', 'vlog', 'wiki', 'zlg'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bs':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bw':
+ if (['org', 'ac', 'co', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'by':
+ if (['gov', 'mil', 'com', 'of'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'nym', 'of', 'org', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ca':
+ if (['ab', 'bc', 'gc', 'mb', 'nb', 'nf', 'nl', 'ns', 'nt', 'nu', 'on', 'pe', 'qc', 'sk', 'yk'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cd':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ci':
+ if (['ac', 'asso', 'co', 'com', 'ed', 'edu', 'go', 'gouv', 'int', 'md', 'net', 'or', 'org', 'presse', 'xn--aroport-bya'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ck':
+ if (['biz', 'co', 'edu', 'gen', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cl':
+ if (['gov', 'gob', 'co', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cm':
+ if (['co', 'com', 'gov', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cn':
+ if (['ac', 'ah', 'bj', 'com', 'cq', 'edu', 'fj', 'gd', 'gov', 'gs', 'gx', 'gz', 'ha', 'hb', 'he', 'hi', 'hk', 'hl', 'hn', 'jl', 'js', 'jx', 'ln', 'mil', 'mo', 'net', 'nm', 'nx', 'org', 'qh', 'sc', 'sd', 'sh', 'sn', 'sx', 'tj', 'tw', 'xj', 'xn--55qx5d', 'xn--io0a7i', 'xn--od0alg', 'xz', 'yn', 'zj'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'co':
+ if (['arts', 'com', 'edu', 'firm', 'gov', 'info', 'int', 'mil', 'net', 'nom', 'org', 'rec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'com':
+ if (['africa', 'ar', 'br', 'cn', 'co', 'de', 'eu', 'gb', 'gr', 'hu', 'jpn', 'kr', 'mex', 'no', 'qc', 'ru', 'sa', 'se', 'uk', 'us', 'uy', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cr':
+ if (['ac', 'co', 'ed', 'fi', 'go', 'or', 'sa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cu':
+ if (['com', 'edu', 'org', 'net', 'gov', 'inf'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cw':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cy':
+ if (['ac', 'biz', 'com', 'ekloges', 'gov', 'ltd', 'name', 'net', 'org', 'parliament', 'press', 'pro', 'tm'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dm':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'do':
+ if (['art', 'com', 'edu', 'gob', 'gov', 'mil', 'net', 'org', 'sld', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dz':
+ if (['art', 'asso', 'com', 'edu', 'gov', 'net', 'org', 'pol'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ec':
+ if (['com', 'edu', 'fin', 'gob', 'gov', 'info', 'k12', 'med', 'mil', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ee':
+ if (['aip', 'com', 'edu', 'fie', 'gov', 'lib', 'med', 'org', 'pri', 'riik'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'eg':
+ if (['com', 'edu', 'eun', 'gov', 'mil', 'name', 'net', 'org', 'sci'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'es':
+ if (['com', 'nom', 'org', 'gob', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'et':
+ if (['com', 'gov', 'org', 'edu', 'net', 'biz', 'name', 'info'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fi':
+ if (wa[1] == 'aland') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fj':
+ if (['ac', 'biz', 'com', 'info', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fr':
+ if (['aeroport', 'assedic', 'asso', 'avocat', 'avoues', 'cci', 'chambagri', 'chirurgiens-dentistes', 'com', 'experts-comptables', 'geometre-expert', 'gouv', 'greta', 'huissier-justice', 'medecin', 'nom', 'notaires', 'pharmacien', 'port', 'prd', 'presse', 'tm', 'veterinaire'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ge':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'pvt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gg':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gh':
+ if (['com', 'edu', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gi':
+ if (['com', 'edu', 'gov', 'ltd', 'mod', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gl':
+ if (['co', 'com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gn':
+ if (['ac', 'com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gov':
+ if (['al', 'alabama', 'alaska', 'americansamoa', 'ar', 'arizona', 'arkansas', 'as', 'az', 'ca', 'co', 'colorado', 'ct', 'dc', 'de', 'delaware', 'ehawaii', 'fl', 'florida', 'ga', 'georgia', 'guam', 'hawaii', 'ia', 'idaho', 'il', 'illinois', 'in', 'indiana', 'iowa', 'kansas', 'kentucky', 'ks', 'ky', 'la', 'louisiana', 'ma', 'maine', 'maryland', 'mass', 'massachusetts', 'md', 'mi', 'michigan', 'minnesota', 'mississippi', 'missouri', 'mn', 'mo', 'montana', 'ms', 'mt', 'nc', 'nd', 'ne', 'nebraska', 'nevada', 'newjersey', 'newmexico', 'nh', 'nj', 'northcarolina', 'northdakota', 'nv', 'ny', 'ohio', 'ok', 'oklahoma', 'oregon', 'pa', 'pennsylvania', 'pr', 'rhodeisland', 'ri', 'sc', 'sd', 'tennessee', 'texas', 'tn', 'utah', 'vermont', 'vi', 'virginia', 'vt', 'wa', 'washington', 'wi', 'wisconsin', 'wv', 'wy', 'wyoming'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gp':
+ if (['com', 'net', 'mobi', 'edu', 'org', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gr':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'mod', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gt':
+ if (['com', 'edu', 'net', 'gob', 'org', 'mil', 'ind'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gu':
+ if (['com', 'edu', 'gov', 'guam', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gy':
+ if (['co', 'com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hk':
+ if (['com', 'edu', 'gov', 'idv', 'net', 'org', 'xn--55qx5d', 'xn--ciqpn', 'xn--gmq050i', 'xn--gmqw5a', 'xn--io0a7i', 'xn--lcvr32d', 'xn--mk0axi', 'xn--mxtq1m', 'xn--od0alg', 'xn--od0aq3b', 'xn--tn0ag', 'xn--uc0atv', 'xn--uc0ay4a', 'xn--wcvs22d', 'xn--zf0avx'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hn':
+ if (['com', 'edu', 'gob', 'net', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hr':
+ if (['iz', 'from', 'name', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ht':
+ if (['com', 'shop', 'firm', 'info', 'adult', 'net', 'pro', 'org', 'med', 'art', 'coop', 'pol', 'asso', 'edu', 'rel', 'gouv', 'perso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hu':
+ if (['2000', 'agrar', 'bolt', 'casino', 'city', 'co', 'edu', 'erotica', 'erotika', 'film', 'forum', 'games', 'gov', 'hotel', 'info', 'ingatlan', 'jogasz', 'konyvelo', 'lakas', 'media', 'mobi', 'net', 'news', 'org', 'priv', 'reklam', 'sex', 'shop', 'sport', 'suli', 'szex', 'tm', 'tozsde', 'utazas', 'video'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'id':
+ if (['ac', 'biz', 'co', 'desa', 'go', 'mil', 'my', 'net', 'or', 'ponpes', 'sch', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ie':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'il':
+ if (['ac', 'co', 'gov', 'idf', 'k12', 'muni', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'im':
+ if (['ac', 'co', 'com', 'gov', 'net', 'org', 'ro', 'tt', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'in':
+ if (['ac', 'co', 'edu', 'ernet', 'firm', 'gen', 'gov', 'ind', 'mil', 'net', 'org', 'res', 'nic'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'int':
+ if (wa[1] == 'eu') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'io':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'iq':
+ if (['gov', 'edu', 'mil', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ir':
+ if (['ac', 'co', 'gov', 'id', 'net', 'org', 'sch', 'xn--mgba3a4f16a', 'xn--mgba3a4fra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'is':
+ if (['net', 'com', 'edu', 'gov', 'org', 'int'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'it':
+ if (['abr', 'abruzzo', 'ag', 'agrigento', 'al', 'alessandria', 'alto-adige', 'altoadige', 'an', 'ancona', 'andria-barletta-trani', 'andria-trani-barletta', 'andriabarlettatrani', 'andriatranibarletta', 'ao', 'aosta', 'aosta-valley', 'aostavalley', 'aoste', 'ap', 'aq', 'aquila', 'ar', 'arezzo', 'ascoli-piceno', 'ascolipiceno', 'asti', 'at', 'av', 'avellino', 'ba', 'balsan', 'balsan-sudtirol', 'balsan-suedtirol', 'bari', 'barletta-trani-andria', 'barlettatraniandria', 'bas', 'basilicata', 'belluno', 'benevento', 'bergamo', 'bg', 'bi', 'biella', 'bl', 'bn', 'bo', 'bologna', 'bolzano', 'bolzano-altoadige', 'bozen', 'bozen-sudtirol', 'bozen-suedtirol', 'br', 'brescia', 'brindisi', 'bs', 'bt', 'bulsan', 'bulsan-sudtirol', 'bulsan-suedtirol', 'bz', 'ca', 'cagliari', 'cal', 'calabria', 'caltanissetta', 'cam', 'campania', 'campidano-medio', 'campidanomedio', 'campobasso', 'carbonia-iglesias', 'carboniaiglesias', 'carrara-massa', 'carraramassa', 'caserta', 'catania', 'catanzaro', 'cb', 'ce', 'cesena-forli', 'cesenaforli', 'ch', 'chieti', 'ci', 'cl', 'cn', 'co', 'como', 'cosenza', 'cr', 'cremona', 'crotone', 'cs', 'ct', 'cuneo', 'cz', 'dell-ogliastra', 'dellogliastra', 'edu', 'emilia-romagna', 'emiliaromagna', 'emr', 'en', 'enna', 'fc', 'fe', 'fermo', 'ferrara', 'fg', 'fi', 'firenze', 'florence', 'fm', 'foggia', 'forli-cesena', 'forlicesena', 'fr', 'friuli-v-giulia', 'friuli-ve-giulia', 'friuli-vegiulia', 'friuli-venezia-giulia', 'friuli-veneziagiulia', 'friuli-vgiulia', 'friuliv-giulia', 'friulive-giulia', 'friulivegiulia', 'friulivenezia-giulia', 'friuliveneziagiulia', 'friulivgiulia', 'frosinone', 'fvg', 'ge', 'genoa', 'genova', 'go', 'gorizia', 'gov', 'gr', 'grosseto', 'iglesias-carbonia', 'iglesiascarbonia', 'im', 'imperia', 'is', 'isernia', 'kr', 'la-spezia', 'laquila', 'laspezia', 'latina', 'laz', 'lazio', 'lc', 'le', 'lecce', 'lecco', 'li', 'lig', 'liguria', 'livorno', 'lo', 'lodi', 'lom', 'lombardia', 'lombardy', 'lt', 'lu', 'lucania', 'lucca', 'macerata', 'mantova', 'mar', 'marche', 'massa-carrara', 'massacarrara', 'matera', 'mb', 'mc', 'me', 'medio-campidano', 'mediocampidano', 'messina', 'mi', 'milan', 'milano', 'mn', 'mo', 'modena', 'mol', 'molise', 'monza', 'monza-brianza', 'monza-e-della-brianza', 'monzabrianza', 'monzaebrianza', 'monzaedellabrianza', 'ms', 'mt', 'na', 'naples', 'napoli', 'no', 'novara', 'nu', 'nuoro', 'og', 'ogliastra', 'olbia-tempio', 'olbiatempio', 'or', 'oristano', 'ot', 'pa', 'padova', 'padua', 'palermo', 'parma', 'pavia', 'pc', 'pd', 'pe', 'perugia', 'pesaro-urbino', 'pesarourbino', 'pescara', 'pg', 'pi', 'piacenza', 'piedmont', 'piemonte', 'pisa', 'pistoia', 'pmn', 'pn', 'po', 'pordenone', 'potenza', 'pr', 'prato', 'pt', 'pu', 'pug', 'puglia', 'pv', 'pz', 'ra', 'ragusa', 'ravenna', 'rc', 're', 'reggio-calabria', 'reggio-emilia', 'reggiocalabria', 'reggioemilia', 'rg', 'ri', 'rieti', 'rimini', 'rm', 'rn', 'ro', 'roma', 'rome', 'rovigo', 'sa', 'salerno', 'sar', 'sardegna', 'sardinia', 'sassari', 'savona', 'si', 'sic', 'sicilia', 'sicily', 'siena', 'siracusa', 'so', 'sondrio', 'sp', 'sr', 'ss', 'suedtirol', 'sv', 'ta', 'taa', 'taranto', 'te', 'tempio-olbia', 'tempioolbia', 'teramo', 'terni', 'tn', 'to', 'torino', 'tos', 'toscana', 'tp', 'tr', 'trani-andria-barletta', 'trani-barletta-andria', 'traniandriabarletta', 'tranibarlettaandria', 'trapani', 'trentin-sud-tirol', 'trentin-sudtirol', 'trentin-sued-tirol', 'trentin-suedtirol', 'trentino', 'trentino-a-adige', 'trentino-aadige', 'trentino-alto-adige', 'trentino-altoadige', 'trentino-s-tirol', 'trentino-stirol', 'trentino-sud-tirol', 'trentino-sudtirol', 'trentino-sued-tirol', 'trentino-suedtirol', 'trentinoa-adige', 'trentinoaadige', 'trentinoalto-adige', 'trentinoaltoadige', 'trentinos-tirol', 'trentinostirol', 'trentinosud-tirol', 'trentinosudtirol', 'trentinosued-tirol', 'trentinosuedtirol', 'trentinsud-tirol', 'trentinsudtirol', 'trentinsued-tirol', 'trentinsuedtirol', 'trento', 'treviso', 'trieste', 'ts', 'turin', 'tuscany', 'tv', 'ud', 'udine', 'umb', 'umbria', 'urbino-pesaro', 'urbinopesaro', 'va', 'val-d-aosta', 'val-daosta', 'vald-aosta', 'valdaosta', 'valle-aosta', 'valle-d-aosta', 'valle-daosta', 'valleaosta', 'valled-aosta', 'valledaosta', 'vallee-aoste', 'vallee-d-aoste', 'valleeaoste', 'valleedaoste', 'vao', 'varese', 'vb', 'vc', 'vda', 've', 'ven', 'veneto', 'venezia', 'venice', 'verbania', 'vercelli', 'verona', 'vi', 'vibo-valentia', 'vibovalentia', 'vicenza', 'viterbo', 'vr', 'vs', 'vt', 'vv', 'xn--balsan-sdtirol-nsb', 'xn--bozen-sdtirol-2ob', 'xn--bulsan-sdtirol-nsb', 'xn--cesena-forl-mcb', 'xn--cesenaforl-i8a', 'xn--forl-cesena-fcb', 'xn--forlcesena-c8a', 'xn--sdtirol-n2a', 'xn--trentin-sd-tirol-rzb', 'xn--trentin-sdtirol-7vb', 'xn--trentino-sd-tirol-c3b', 'xn--trentino-sdtirol-szb', 'xn--trentinosd-tirol-rzb', 'xn--trentinosdtirol-7vb', 'xn--trentinsd-tirol-6vb', 'xn--trentinsdtirol-nsb', 'xn--valle-aoste-ebb', 'xn--valle-d-aoste-ehb', 'xn--valleaoste-e7a', 'xn--valledaoste-ebb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'je':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jm':
+ if (['com', 'net', 'org', 'edu', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jo':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jp':
+ if (['ac', 'ad', 'aichi', 'akita', 'aomori', 'chiba', 'co', 'ed', 'ehime', 'fukui', 'fukuoka', 'fukushima', 'gifu', 'go', 'gr', 'gunma', 'hiroshima', 'hokkaido', 'hyogo', 'ibaraki', 'ishikawa', 'iwate', 'kagawa', 'kagoshima', 'kanagawa', 'kochi', 'kumamoto', 'kyoto', 'lg', 'mie', 'miyagi', 'miyazaki', 'nagano', 'nagasaki', 'nara', 'ne', 'niigata', 'oita', 'okayama', 'okinawa', 'or', 'osaka', 'saga', 'saitama', 'shiga', 'shimane', 'shizuoka', 'tochigi', 'tokushima', 'tokyo', 'tottori', 'toyama', 'wakayama', 'xn--0trq7p7nn', 'xn--1ctwo', 'xn--1lqs03n', 'xn--1lqs71d', 'xn--2m4a15e', 'xn--32vp30h', 'xn--4it168d', 'xn--4it797k', 'xn--4pvxs', 'xn--5js045d', 'xn--5rtp49c', 'xn--5rtq34k', 'xn--6btw5a', 'xn--6orx2r', 'xn--7t0a264c', 'xn--8ltr62k', 'xn--8pvr4u', 'xn--c3s14m', 'xn--d5qv7z876c', 'xn--djrs72d6uy', 'xn--djty4k', 'xn--efvn9s', 'xn--ehqz56n', 'xn--elqq16h', 'xn--f6qx53a', 'xn--k7yn95e', 'xn--kbrq7o', 'xn--klt787d', 'xn--kltp7d', 'xn--kltx9a', 'xn--klty5x', 'xn--mkru45i', 'xn--nit225k', 'xn--ntso0iqx3a', 'xn--ntsq17g', 'xn--pssu33l', 'xn--qqqt11m', 'xn--rht27z', 'xn--rht3d', 'xn--rht61e', 'xn--rny31h', 'xn--tor131o', 'xn--uist22h', 'xn--uisz3g', 'xn--uuwu58a', 'xn--vgu402c', 'xn--zbx025d', 'yamagata', 'yamaguchi', 'yamanashi'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ke':
+ if (['ac', 'co', 'go', 'info', 'me', 'mobi', 'ne', 'or', 'sc'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kg':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kh':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ki':
+ if (['edu', 'biz', 'net', 'org', 'gov', 'info', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'km':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'ass', 'com', 'coop', 'asso', 'presse', 'medecin', 'notaires', 'pharmaciens', 'veterinaire', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kn':
+ if (['net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kp':
+ if (['com', 'edu', 'gov', 'org', 'rep', 'tra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kr':
+ if (['ac', 'busan', 'cheju', 'chonbuk', 'chonnam', 'chungbuk', 'chungnam', 'co', 'daegu', 'daejeon', 'es', 'gangwon', 'go', 'gwangju', 'gyeongbuk', 'gyeonggi', 'gyeongnam', 'hs', 'incheon', 'inchon', 'jeju', 'jeonbuk', 'jeonnam', 'kangwon', 'kg', 'kwangju', 'kyongbuk', 'kyonggi', 'kyongnam', 'mil', 'ms', 'ne', 'nm', 'or', 'pe', 'pusan', 're', 'sc', 'seoul', 'taegu', 'taejon', 'ulsan', 'xn--bj0bj06e'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kw':
+ if (['com', 'edu', 'emb', 'gov', 'ind', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ky':
+ if (['edu', 'gov', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'la':
+ if (['int', 'net', 'info', 'edu', 'gov', 'per', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lc':
+ if (['com', 'net', 'co', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lk':
+ if (['ac', 'assn', 'com', 'edu', 'gov', 'grp', 'hotel', 'int', 'ltd', 'net', 'ngo', 'org', 'sch', 'soc', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lr':
+ if (['com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ls':
+ if (['ac', 'co', 'gov', 'net', 'nul', 'org', 'parliament', 'quadrant'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lt':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lv':
+ if (['asn', 'com', 'conf', 'edu', 'gov', 'id', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ly':
+ if (['com', 'edu', 'gov', 'id', 'med', 'net', 'org', 'plc', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ma':
+ if (['ac', 'co', 'gov', 'net', 'org', 'press'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mc':
+ if (['tm', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'me':
+ if (['co', 'net', 'org', 'edu', 'ac', 'gov', 'its', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mg':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'com', 'co'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mk':
+ if (['com', 'edu', 'gov', 'inf', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ml':
+ if (['com', 'edu', 'gouv', 'gov', 'net', 'org', 'presse'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mn':
+ if (['gov', 'edu', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mo':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mr':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ms':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mu':
+ if (['ac', 'co', 'com', 'gov', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'museum':
+ if (['academy', 'agriculture', 'air', 'airguard', 'alabama', 'alaska', 'amber', 'ambulance', 'american', 'americana', 'americanantiques', 'americanart', 'amsterdam', 'and', 'annefrank', 'anthro', 'anthropology', 'antiques', 'aquarium', 'arboretum', 'archaeological', 'archaeology', 'architecture', 'art', 'artanddesign', 'artcenter', 'artdeco', 'arteducation', 'artgallery', 'arts', 'artsandcrafts', 'asmatart', 'assassination', 'assisi', 'association', 'astronomy', 'atlanta', 'austin', 'australia', 'automotive', 'aviation', 'axis', 'badajoz', 'baghdad', 'bahn', 'bale', 'baltimore', 'barcelona', 'baseball', 'basel', 'baths', 'bauern', 'beauxarts', 'beeldengeluid', 'bellevue', 'bergbau', 'berkeley', 'berlin', 'bern', 'bible', 'bilbao', 'bill', 'birdart', 'birthplace', 'bonn', 'boston', 'botanical', 'botanicalgarden', 'botanicgarden', 'botany', 'brandywinevalley', 'brasil', 'bristol', 'british', 'britishcolumbia', 'broadcast', 'brunel', 'brussel', 'brussels', 'bruxelles', 'building', 'burghof', 'bus', 'bushey', 'cadaques', 'california', 'cambridge', 'can', 'canada', 'capebreton', 'carrier', 'cartoonart', 'casadelamoneda', 'castle', 'castres', 'celtic', 'center', 'chattanooga', 'cheltenham', 'chesapeakebay', 'chicago', 'children', 'childrens', 'childrensgarden', 'chiropractic', 'chocolate', 'christiansburg', 'cincinnati', 'cinema', 'circus', 'civilisation', 'civilization', 'civilwar', 'clinton', 'clock', 'coal', 'coastaldefence', 'cody', 'coldwar', 'collection', 'colonialwilliamsburg', 'coloradoplateau', 'columbia', 'columbus', 'communication', 'communications', 'community', 'computer', 'computerhistory', 'comunicações', 'contemporary', 'contemporaryart', 'convent', 'copenhagen', 'corporation', 'correios-e-telecomunicações', 'corvette', 'costume', 'countryestate', 'county', 'crafts', 'cranbrook', 'creation', 'cultural', 'culturalcenter', 'culture', 'cyber', 'cymru', 'dali', 'dallas', 'database', 'ddr', 'decorativearts', 'delaware', 'delmenhorst', 'denmark', 'depot', 'design', 'detroit', 'dinosaur', 'discovery', 'dolls', 'donostia', 'durham', 'eastafrica', 'eastcoast', 'education', 'educational', 'egyptian', 'eisenbahn', 'elburg', 'elvendrell', 'embroidery', 'encyclopedic', 'england', 'entomology', 'environment', 'environmentalconservation', 'epilepsy', 'essex', 'estate', 'ethnology', 'exeter', 'exhibition', 'family', 'farm', 'farmequipment', 'farmers', 'farmstead', 'field', 'figueres', 'filatelia', 'film', 'fineart', 'finearts', 'finland', 'flanders', 'florida', 'force', 'fortmissoula', 'fortworth', 'foundation', 'francaise', 'frankfurt', 'franziskaner', 'freemasonry', 'freiburg', 'fribourg', 'frog', 'fundacio', 'furniture', 'gallery', 'garden', 'gateway', 'geelvinck', 'gemological', 'geology', 'georgia', 'giessen', 'glas', 'glass', 'gorge', 'grandrapids', 'graz', 'guernsey', 'halloffame', 'hamburg', 'handson', 'harvestcelebration', 'hawaii', 'health', 'heimatunduhren', 'hellas', 'helsinki', 'hembygdsforbund', 'heritage', 'histoire', 'historical', 'historicalsociety', 'historichouses', 'historisch', 'historisches', 'history', 'historyofscience', 'horology', 'house', 'humanities', 'illustration', 'imageandsound', 'indian', 'indiana', 'indianapolis', 'indianmarket', 'intelligence', 'interactive', 'iraq', 'iron', 'isleofman', 'jamison', 'jefferson', 'jerusalem', 'jewelry', 'jewish', 'jewishart', 'jfk', 'journalism', 'judaica', 'judygarland', 'juedisches', 'juif', 'karate', 'karikatur', 'kids', 'koebenhavn', 'koeln', 'kunst', 'kunstsammlung', 'kunstunddesign', 'labor', 'labour', 'lajolla', 'lancashire', 'landes', 'lans', 'larsson', 'lewismiller', 'lincoln', 'linz', 'living', 'livinghistory', 'localhistory', 'london', 'losangeles', 'louvre', 'loyalist', 'lucerne', 'luxembourg', 'luzern', 'läns', 'mad', 'madrid', 'mallorca', 'manchester', 'mansion', 'mansions', 'manx', 'marburg', 'maritime', 'maritimo', 'maryland', 'marylhurst', 'media', 'medical', 'medizinhistorisches', 'meeres', 'memorial', 'mesaverde', 'michigan', 'midatlantic', 'military', 'mill', 'miners', 'mining', 'minnesota', 'missile', 'missoula', 'modern', 'moma', 'money', 'monmouth', 'monticello', 'montreal', 'moscow', 'motorcycle', 'muenchen', 'muenster', 'mulhouse', 'muncie', 'museet', 'museumcenter', 'museumvereniging', 'music', 'national', 'nationalfirearms', 'nationalheritage', 'nativeamerican', 'naturalhistory', 'naturalhistorymuseum', 'naturalsciences', 'nature', 'naturhistorisches', 'natuurwetenschappen', 'naumburg', 'naval', 'nebraska', 'neues', 'newhampshire', 'newjersey', 'newmexico', 'newport', 'newspaper', 'newyork', 'niepce', 'norfolk', 'north', 'nrw', 'nuernberg', 'nuremberg', 'nyc', 'nyny', 'oceanographic', 'oceanographique', 'omaha', 'online', 'ontario', 'openair', 'oregon', 'oregontrail', 'otago', 'oxford', 'pacific', 'paderborn', 'palace', 'paleo', 'palmsprings', 'panama', 'paris', 'pasadena', 'pharmacy', 'philadelphia', 'philadelphiaarea', 'philately', 'phoenix', 'photography', 'pilots', 'pittsburgh', 'planetarium', 'plantation', 'plants', 'plaza', 'portal', 'portland', 'portlligat', 'posts-and-telecommunications', 'preservation', 'presidio', 'press', 'project', 'public', 'pubol', 'quebec', 'railroad', 'railway', 'research', 'resistance', 'riodejaneiro', 'rochester', 'rockart', 'roma', 'russia', 'saintlouis', 'salem', 'salvadordali', 'salzburg', 'sandiego', 'sanfrancisco', 'santabarbara', 'santacruz', 'santafe', 'saskatchewan', 'satx', 'savannahga', 'schlesisches', 'schoenbrunn', 'schokoladen', 'school', 'schweiz', 'science', 'science-fiction', 'scienceandhistory', 'scienceandindustry', 'sciencecenter', 'sciencecenters', 'sciencehistory', 'sciences', 'sciencesnaturelles', 'scotland', 'seaport', 'settlement', 'settlers', 'shell', 'sherbrooke', 'sibenik', 'silk', 'ski', 'skole', 'society', 'sologne', 'soundandvision', 'southcarolina', 'southwest', 'space', 'spy', 'square', 'stadt', 'stalbans', 'starnberg', 'state', 'stateofdelaware', 'station', 'steam', 'steiermark', 'stjohn', 'stockholm', 'stpetersburg', 'stuttgart', 'suisse', 'surgeonshall', 'surrey', 'svizzera', 'sweden', 'sydney', 'tank', 'tcm', 'technology', 'telekommunikation', 'television', 'texas', 'textile', 'theater', 'time', 'timekeeping', 'topology', 'torino', 'touch', 'town', 'transport', 'tree', 'trolley', 'trust', 'trustee', 'uhren', 'ulm', 'undersea', 'university', 'usa', 'usantiques', 'usarts', 'uscountryestate', 'usculture', 'usdecorativearts', 'usgarden', 'ushistory', 'ushuaia', 'uslivinghistory', 'utah', 'uvic', 'valley', 'vantaa', 'versailles', 'viking', 'village', 'virginia', 'virtual', 'virtuel', 'vlaanderen', 'volkenkunde', 'wales', 'wallonie', 'war', 'washingtondc', 'watch-and-clock', 'watchandclock', 'western', 'westfalen', 'whaling', 'wildlife', 'williamsburg', 'windmill', 'workshop', 'xn--9dbhblg6di', 'xn--h1aegh', 'york', 'yorkshire', 'yosemite', 'youth', 'zoological', 'zoology'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mv':
+ if (['aero', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'int', 'mil', 'museum', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mw':
+ if (['ac', 'biz', 'co', 'com', 'coop', 'edu', 'gov', 'int', 'museum', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mx':
+ if (['com', 'edu', 'gob', 'net', 'ngo', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'my':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mz':
+ if (['co', 'net', 'org', 'ac', 'gov', 'edu', 'mil', 'adv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'na':
+ if (['info', 'pro', 'name', 'school', 'or', 'dr', 'us', 'mx', 'ca', 'in', 'cc', 'tv', 'ws', 'mobi', 'co', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'name':
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ break;
+ case 'nc':
+ if (['asso', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'net':
+ if (['gb', 'hu', 'in', 'jp', 'ru', 'se', 'uk', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nf':
+ if (['arts', 'com', 'firm', 'info', 'net', 'other', 'per', 'rec', 'store', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ng':
+ if (['com', 'edu', 'gov', 'i', 'mil', 'mobi', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ni':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gob', 'in', 'info', 'int', 'mil', 'net', 'nom', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nl':
+ if (wa[1] == 'bv') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'no':
+ if (['aa', 'aarborte', 'aejrie', 'afjord', 'agdenes', 'ah', 'aknoluokta', 'akrehamn', 'al', 'alaheadju', 'alesund', 'algard', 'alstahaug', 'alta', 'alvdal', 'amli', 'amot', 'andasuolo', 'andebu', 'andoy', 'ardal', 'aremark', 'arendal', 'arna', 'aseral', 'asker', 'askim', 'askoy', 'askvoll', 'asnes', 'audnedaln', 'aukra', 'aure', 'aurland', 'austevoll', 'austrheim', 'averoy', 'badaddja', 'bahcavuotna', 'bahccavuotna', 'baidar', 'bajddar', 'balat', 'balestrand', 'ballangen', 'balsfjord', 'bamble', 'bardu', 'barum', 'batsfjord', 'bearalvahki', 'beardu', 'beiarn', 'berg', 'bergen', 'berlevag', 'bievat', 'bindal', 'birkenes', 'bjarkoy', 'bjerkreim', 'bjugn', 'bodo', 'bokn', 'bomlo', 'bremanger', 'bronnoy', 'bronnoysund', 'brumunddal', 'bryne', 'bu', 'budejju', 'bygland', 'bykle', 'cahcesuolo', 'davvenjarga', 'davvesiida', 'deatnu', 'dep', 'dielddanuorri', 'divtasvuodna', 'divttasvuotna', 'donna', 'dovre', 'drammen', 'drangedal', 'drobak', 'dyroy', 'egersund', 'eid', 'eidfjord', 'eidsberg', 'eidskog', 'eidsvoll', 'eigersund', 'elverum', 'enebakk', 'engerdal', 'etne', 'etnedal', 'evenassi', 'evenes', 'farsund', 'fauske', 'fedje', 'fet', 'fetsund', 'fhs', 'finnoy', 'fitjar', 'fjaler', 'fjell', 'fla', 'flakstad', 'flatanger', 'flekkefjord', 'flesberg', 'flora', 'floro', 'fm', 'folkebibl', 'folldal', 'forde', 'forsand', 'fosnes', 'frana', 'fredrikstad', 'frei', 'frogn', 'froland', 'frosta', 'froya', 'fuoisku', 'fuossko', 'fusa', 'fylkesbibl', 'fyresdal', 'gaivuotna', 'galsa', 'gamvik', 'gangaviika', 'gaular', 'gausdal', 'giehtavuoatna', 'gildeskal', 'giske', 'gjemnes', 'gjerdrum', 'gjerstad', 'gjesdal', 'gjovik', 'gloppen', 'gol', 'gran', 'grane', 'granvin', 'gratangen', 'grimstad', 'grong', 'grue', 'gulen', 'guovdageaidnu', 'ha', 'habmer', 'hadsel', 'hagebostad', 'halden', 'halsa', 'hamar', 'hamaroy', 'hammarfeasta', 'hammerfest', 'hapmir', 'haram', 'hareid', 'harstad', 'hasvik', 'hattfjelldal', 'haugesund', 'hemne', 'hemnes', 'hemsedal', 'herad', 'hitra', 'hjartdal', 'hjelmeland', 'hl', 'hm', 'hobol', 'hof', 'hokksund', 'hol', 'hole', 'holmestrand', 'holtalen', 'honefoss', 'hornindal', 'horten', 'hoyanger', 'hoylandet', 'hurdal', 'hurum', 'hvaler', 'hyllestad', 'ibestad', 'idrett', 'inderoy', 'iveland', 'ivgu', 'jessheim', 'jevnaker', 'jolster', 'jondal', 'jorpeland', 'kafjord', 'karasjohka', 'karasjok', 'karlsoy', 'karmoy', 'kautokeino', 'kirkenes', 'klabu', 'klepp', 'kommune', 'kongsberg', 'kongsvinger', 'kopervik', 'kraanghke', 'kragero', 'kristiansand', 'kristiansund', 'krodsherad', 'krokstadelva', 'kvafjord', 'kvalsund', 'kvam', 'kvanangen', 'kvinesdal', 'kvinnherad', 'kviteseid', 'kvitsoy', 'laakesvuemie', 'lahppi', 'langevag', 'lardal', 'larvik', 'lavagis', 'lavangen', 'leangaviika', 'lebesby', 'leikanger', 'leirfjord', 'leirvik', 'leka', 'leksvik', 'lenvik', 'lerdal', 'lesja', 'levanger', 'lier', 'lierne', 'lillehammer', 'lillesand', 'lindas', 'lindesnes', 'loabat', 'lodingen', 'lom', 'loppa', 'lorenskog', 'loten', 'lund', 'lunner', 'luroy', 'luster', 'lyngdal', 'lyngen', 'malatvuopmi', 'malselv', 'malvik', 'mandal', 'marker', 'marnardal', 'masfjorden', 'masoy', 'meland', 'meldal', 'melhus', 'meloy', 'meraker', 'midsund', 'mil', 'mjondalen', 'moareke', 'modalen', 'modum', 'molde', 'mosjoen', 'moskenes', 'moss', 'mosvik', 'mr', 'muosat', 'museum', 'naamesjevuemie', 'namdalseid', 'namsos', 'namsskogan', 'nannestad', 'naroy', 'narviika', 'narvik', 'naustdal', 'navuotna', 'nesna', 'nesodden', 'nesoddtangen', 'nesseby', 'nesset', 'nissedal', 'nittedal', 'nl', 'norddal', 'nordkapp', 'nordreisa', 'notodden', 'notteroy', 'nt', 'odda', 'of', 'oksnes', 'ol', 'omasvuotna', 'oppdal', 'oppegard', 'orkanger', 'orkdal', 'orland', 'orskog', 'orsta', 'osen', 'oslo', 'osoyro', 'osteroy', 'overhalla', 'oyer', 'oygarden', 'porsanger', 'porsangu', 'porsgrunn', 'priv', 'rade', 'radoy', 'rahkkeravju', 'raholt', 'raisa', 'rakkestad', 'ralingen', 'rana', 'randaberg', 'rauma', 'rendalen', 'rennebu', 'rennesoy', 'rindal', 'ringebu', 'ringerike', 'ringsaker', 'risor', 'rissa', 'rl', 'roan', 'rodoy', 'rollag', 'romsa', 'romskog', 'roros', 'rost', 'royken', 'royrvik', 'ruovat', 'rygge', 'salangen', 'salat', 'saltdal', 'samnanger', 'sandefjord', 'sandnes', 'sandnessjoen', 'sandoy', 'sarpsborg', 'sauda', 'sauherad', 'sel', 'selbu', 'selje', 'seljord', 'sf', 'siellak', 'sigdal', 'siljan', 'sirdal', 'skanit', 'skanland', 'skaun', 'skedsmo', 'skedsmokorset', 'ski', 'skien', 'skierva', 'skiptvet', 'skjak', 'skjervoy', 'skodje', 'slattum', 'smola', 'snaase', 'snasa', 'snillfjord', 'snoasa', 'sogndal', 'sogne', 'sokndal', 'sola', 'solund', 'somna', 'songdalen', 'sorfold', 'sorreisa', 'sortland', 'sorum', 'spjelkavik', 'spydeberg', 'st', 'stange', 'stat', 'stathelle', 'stavanger', 'stavern', 'steigen', 'steinkjer', 'stjordal', 'stjordalshalsen', 'stokke', 'stord', 'stordal', 'storfjord', 'strand', 'stranda', 'stryn', 'sula', 'suldal', 'sund', 'sunndal', 'surnadal', 'svalbard', 'sveio', 'svelvik', 'sykkylven', 'tana', 'tananger', 'time', 'tingvoll', 'tinn', 'tjeldsund', 'tjome', 'tm', 'tokke', 'tolga', 'tonsberg', 'torsken', 'tr', 'trana', 'tranby', 'tranoy', 'troandin', 'trogstad', 'tromsa', 'tromso', 'trondheim', 'trysil', 'tvedestrand', 'tydal', 'tynset', 'tysfjord', 'tysnes', 'tysvar', 'ullensaker', 'ullensvang', 'ulvik', 'unjarga', 'utsira', 'va', 'vaapste', 'vadso', 'vaga', 'vagan', 'vagsoy', 'vaksdal', 'valle', 'vang', 'vanylven', 'vardo', 'varggat', 'varoy', 'vefsn', 'vega', 'vegarshei', 'vennesla', 'verdal', 'verran', 'vestby', 'vestnes', 'vestvagoy', 'vevelstad', 'vf', 'vgs', 'vik', 'vikna', 'vindafjord', 'voagat', 'volda', 'voss', 'vossevangen', 'xn--andy-ira', 'xn--asky-ira', 'xn--aurskog-hland-jnb', 'xn--avery-yua', 'xn--bdddj-mrabd', 'xn--bearalvhki-y4a', 'xn--berlevg-jxa', 'xn--bhcavuotna-s4a', 'xn--bhccavuotna-k7a', 'xn--bidr-5nac', 'xn--bievt-0qa', 'xn--bjarky-fya', 'xn--bjddar-pta', 'xn--blt-elab', 'xn--bmlo-gra', 'xn--bod-2na', 'xn--brnny-wuac', 'xn--brnnysund-m8ac', 'xn--brum-voa', 'xn--btsfjord-9za', 'xn--davvenjrga-y4a', 'xn--dnna-gra', 'xn--drbak-wua', 'xn--dyry-ira', 'xn--eveni-0qa01ga', 'xn--finny-yua', 'xn--fjord-lra', 'xn--fl-zia', 'xn--flor-jra', 'xn--frde-gra', 'xn--frna-woa', 'xn--frya-hra', 'xn--ggaviika-8ya47h', 'xn--gildeskl-g0a', 'xn--givuotna-8ya', 'xn--gjvik-wua', 'xn--gls-elac', 'xn--h-2fa', 'xn--hbmer-xqa', 'xn--hcesuolo-7ya35b', 'xn--hgebostad-g3a', 'xn--hmmrfeasta-s4ac', 'xn--hnefoss-q1a', 'xn--hobl-ira', 'xn--holtlen-hxa', 'xn--hpmir-xqa', 'xn--hyanger-q1a', 'xn--hylandet-54a', 'xn--indery-fya', 'xn--jlster-bya', 'xn--jrpeland-54a', 'xn--karmy-yua', 'xn--kfjord-iua', 'xn--klbu-woa', 'xn--koluokta-7ya57h', 'xn--krager-gya', 'xn--kranghke-b0a', 'xn--krdsherad-m8a', 'xn--krehamn-dxa', 'xn--krjohka-hwab49j', 'xn--ksnes-uua', 'xn--kvfjord-nxa', 'xn--kvitsy-fya', 'xn--kvnangen-k0a', 'xn--l-1fa', 'xn--laheadju-7ya', 'xn--langevg-jxa', 'xn--ldingen-q1a', 'xn--leagaviika-52b', 'xn--lesund-hua', 'xn--lgrd-poac', 'xn--lhppi-xqa', 'xn--linds-pra', 'xn--loabt-0qa', 'xn--lrdal-sra', 'xn--lrenskog-54a', 'xn--lt-liac', 'xn--lten-gra', 'xn--lury-ira', 'xn--mely-ira', 'xn--merker-kua', 'xn--mjndalen-64a', 'xn--mlatvuopmi-s4a', 'xn--mli-tla', 'xn--mlselv-iua', 'xn--moreke-jua', 'xn--mosjen-eya', 'xn--mot-tla', 'xn--msy-ula0h', 'xn--mtta-vrjjat-k7af', 'xn--muost-0qa', 'xn--nmesjevuemie-tcba', 'xn--nry-yla5g', 'xn--nttery-byae', 'xn--nvuotna-hwa', 'xn--oppegrd-ixa', 'xn--ostery-fya', 'xn--osyro-wua', 'xn--porsgu-sta26f', 'xn--rady-ira', 'xn--rdal-poa', 'xn--rde-ula', 'xn--rdy-0nab', 'xn--rennesy-v1a', 'xn--rhkkervju-01af', 'xn--rholt-mra', 'xn--risa-5na', 'xn--risr-ira', 'xn--rland-uua', 'xn--rlingen-mxa', 'xn--rmskog-bya', 'xn--rros-gra', 'xn--rskog-uua', 'xn--rst-0na', 'xn--rsta-fra', 'xn--ryken-vua', 'xn--ryrvik-bya', 'xn--s-1fa', 'xn--sandnessjen-ogb', 'xn--sandy-yua', 'xn--seral-lra', 'xn--sgne-gra', 'xn--skierv-uta', 'xn--skjervy-v1a', 'xn--skjk-soa', 'xn--sknit-yqa', 'xn--sknland-fxa', 'xn--slat-5na', 'xn--slt-elab', 'xn--smla-hra', 'xn--smna-gra', 'xn--snase-nra', 'xn--sndre-land-0cb', 'xn--snes-poa', 'xn--snsa-roa', 'xn--sr-aurdal-l8a', 'xn--sr-fron-q1a', 'xn--sr-odal-q1a', 'xn--sr-varanger-ggb', 'xn--srfold-bya', 'xn--srreisa-q1a', 'xn--srum-gra', 'xn--stjrdal-s1a', 'xn--stjrdalshalsen-sqb', 'xn--stre-toten-zcb', 'xn--tjme-hra', 'xn--tnsberg-q1a', 'xn--trany-yua', 'xn--trgstad-r1a', 'xn--trna-woa', 'xn--troms-zua', 'xn--tysvr-vra', 'xn--unjrga-rta', 'xn--vads-jra', 'xn--vard-jra', 'xn--vegrshei-c0a', 'xn--vestvgy-ixa6o', 'xn--vg-yiab', 'xn--vgan-qoa', 'xn--vgsy-qoa0j', 'xn--vre-eiker-k8a', 'xn--vrggt-xqad', 'xn--vry-yla5g', 'xn--yer-zna', 'xn--ygarden-p1a', 'xn--ystre-slidre-ujb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'np':
+ if (['aero', 'asia', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'jobs', 'mil', 'mobi', 'museum', 'name', 'net', 'org', 'pro', 'travel'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nr':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nz':
+ if (['ac', 'archie', 'co', 'cri', 'geek', 'gen', 'govt', 'health', 'iwi', 'kiwi', 'maori', 'mil', 'net', 'org', 'parliament', 'school', 'xn--mori-qsa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'om':
+ if (['co', 'com', 'edu', 'gov', 'med', 'museum', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'org':
+ if (wa[1] == 'eu' && wa[3] != undefined) {
+ if (['al', 'asso', 'at', 'au', 'be', 'bg', 'ca', 'cd', 'ch', 'cn', 'cy', 'cz', 'de', 'dk', 'edu', 'ee', 'es', 'fi', 'fr', 'gr', 'hr', 'hu', 'ie', 'il', 'in', 'int', 'is', 'it', 'jp', 'kr', 'lt', 'lu', 'lv', 'me', 'mk', 'mt', 'my', 'net', 'ng', 'nl', 'no', 'nz', 'pl', 'pt', 'ro', 'ru', 'se', 'si', 'sk', 'tr', 'uk', 'us'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['ae', 'eu', 'hk', 'jpn', 'js', 'us', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pa':
+ if (['abo', 'ac', 'com', 'edu', 'gob', 'ing', 'med', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pe':
+ if (['com', 'edu', 'gob', 'mil', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pf':
+ if (['com', 'org', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pg':
+ if (['com', 'net', 'ac', 'gov', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ph':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'ngo', 'i'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pk':
+ if (['biz', 'com', 'edu', 'fam', 'gob', 'gok', 'gon', 'gop', 'gos', 'gov', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pl':
+ if (['agro', 'aid', 'art', 'atm', 'augustow', 'auto', 'babia-gora', 'bedzin', 'beskidy', 'bialowieza', 'bialystok', 'bielawa', 'bieszczady', 'biz', 'boleslawiec', 'bydgoszcz', 'bytom', 'cieszyn', 'com', 'czeladz', 'czest', 'dlugoleka', 'edu', 'elblag', 'elk', 'gda', 'gdansk', 'glogow', 'gmina', 'gniezno', 'gorlice', 'gov', 'grajewo', 'gsm', 'ilawa', 'info', 'jaworzno', 'jelenia-gora', 'jgora', 'kalisz', 'karpacz', 'kartuzy', 'kaszuby', 'katowice', 'kazimierz-dolny', 'kepno', 'ketrzyn', 'klodzko', 'kobierzyce', 'kolobrzeg', 'konin', 'konskowola', 'krakow', 'kutno', 'lapy', 'lebork', 'legnica', 'lezajsk', 'limanowa', 'lodz', 'lomza', 'lowicz', 'lubin', 'lublin', 'lukow', 'mail', 'malbork', 'malopolska', 'mazowsze', 'mazury', 'media', 'miasta', 'mielec', 'mielno', 'mil', 'mragowo', 'naklo', 'net', 'ngo', 'nieruchomosci', 'nom', 'nowaruda', 'nysa', 'olawa', 'olecko', 'olkusz', 'olsztyn', 'opoczno', 'opole', 'org', 'ostroda', 'ostroleka', 'ostrowiec', 'ostrowwlkp', 'pc', 'pila', 'pisz', 'podhale', 'podlasie', 'polkowice', 'pomorskie', 'pomorze', 'powiat', 'poznan', 'priv', 'prochowice', 'pruszkow', 'przeworsk', 'pulawy', 'radom', 'rawa-maz', 'realestate', 'rel', 'rybnik', 'rzeszow', 'sanok', 'sejny', 'sex', 'shop', 'sklep', 'skoczow', 'slask', 'slupsk', 'sos', 'sosnowiec', 'stalowa-wola', 'starachowice', 'stargard', 'suwalki', 'swidnica', 'swiebodzin', 'swinoujscie', 'szczecin', 'szczytno', 'szkola', 'targi', 'tarnobrzeg', 'tgory', 'tm', 'torun', 'tourism', 'travel', 'turek', 'turystyka', 'tychy', 'ustka', 'walbrzych', 'warmia', 'warszawa', 'waw', 'wegrow', 'wielun', 'wlocl', 'wloclawek', 'wodzislaw', 'wolomin', 'wroc', 'wroclaw', 'zachpomor', 'zagan', 'zarow', 'zgora', 'zgorzelec'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pn':
+ if (['in', 'co', 'eu', 'org', 'net', 'me', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pr':
+ if (['ac', 'biz', 'com', 'edu', 'est', 'gov', 'info', 'isla', 'name', 'net', 'org', 'pro', 'prof'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pro':
+ if (['aaa', 'aca', 'acct', 'eng', 'avocat', 'bar', 'jur', 'recht', 'law', 'med', 'cpa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ps':
+ if (['edu', 'gov', 'sec', 'plo', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pt':
+ if (['com', 'edu', 'gov', 'int', 'net', 'nome', 'org', 'publ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pw':
+ if (['co', 'ne', 'or', 'ed', 'go', 'belau'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'py':
+ if (['com', 'coop', 'edu', 'mil', 'gov', 'org', 'net', 'una'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'qa':
+ if (['com', 'edu', 'sch', 'gov', 'mil', 'net', 'org', 'name'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 're':
+ if (['asso', 'com', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ro':
+ if (['arts', 'com', 'firm', 'info', 'nom', 'nt', 'org', 'rec', 'store', 'tm', 'www'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rs':
+ if (['ac', 'co', 'edu', 'gov', 'in', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ru':
+ if (['ac', 'adygeya', 'altai', 'amur', 'amursk', 'arkhangelsk', 'astrakhan', 'baikal', 'bashkiria', 'belgorod', 'bir', 'bryansk', 'buryatia', 'cap', 'cbg', 'chel', 'chelyabinsk', 'chita', 'chukotka', 'cmw', 'com', 'dagestan', 'e-burg', 'edu', 'fareast', 'gov', 'grozny', 'int', 'irkutsk', 'ivanovo', 'izhevsk', 'jamal', 'jar', 'joshkar-ola', 'k-uralsk', 'kalmykia', 'kaluga', 'kamchatka', 'karelia', 'kazan', 'kchr', 'kemerovo', 'khabarovsk', 'khakassia', 'khv', 'kirov', 'kms', 'koenig', 'komi', 'kostroma', 'krasnoyarsk', 'kuban', 'kurgan', 'kursk', 'kustanai', 'kuzbass', 'lipetsk', 'magadan', 'magnitka', 'mari', 'mari-el', 'marine', 'mil', 'mordovia', 'mos', 'mosreg', 'msk', 'murmansk', 'mytis', 'nakhodka', 'nalchik', 'net', 'nkz', 'nnov', 'norilsk', 'nov', 'novosibirsk', 'nsk', 'omsk', 'orenburg', 'org', 'oryol', 'oskol', 'palana', 'penza', 'perm', 'pp', 'pskov', 'ptz', 'pyatigorsk', 'rnd', 'rubtsovsk', 'ryazan', 'sakhalin', 'samara', 'saratov', 'simbirsk', 'smolensk', 'snz', 'spb', 'stavropol', 'stv', 'surgut', 'syzran', 'tambov', 'tatarstan', 'test', 'tlt', 'tom', 'tomsk', 'tsaritsyn', 'tsk', 'tula', 'tuva', 'tver', 'tyumen', 'udm', 'udmurtia', 'ulan-ude', 'vdonsk', 'vladikavkaz', 'vladimir', 'vladivostok', 'volgograd', 'vologda', 'voronezh', 'vrn', 'vyatka', 'yakutia', 'yamal', 'yaroslavl', 'yekaterinburg', 'yuzhno-sakhalinsk', 'zgrad'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rw':
+ if (['gov', 'net', 'edu', 'ac', 'com', 'co', 'int', 'mil', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sa':
+ if (['com', 'edu', 'gov', 'med', 'net', 'org', 'pub', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sc':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sd':
+ if (['com', 'edu', 'gov', 'info', 'med', 'net', 'org', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'se':
+ if (['a', 'ac', 'b', 'bd', 'brand', 'c', 'd', 'e', 'f', 'fh', 'fhsk', 'fhv', 'g', 'h', 'i', 'k', 'komforb', 'kommunalforbund', 'komvux', 'l', 'lanbib', 'm', 'n', 'naturbruksgymn', 'o', 'org', 'p', 'parti', 'pp', 'press', 'r', 's', 't', 'tm', 'u', 'w', 'x', 'y', 'z'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sg':
+ if (['com', 'edu', 'gov', 'idn', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sh':
+ if (['com', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sl':
+ if (['com', 'net', 'edu', 'gov', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sn':
+ if (['art', 'com', 'edu', 'gouv', 'org', 'perso', 'univ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'so':
+ if (['com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'st':
+ if (['co', 'com', 'consulado', 'edu', 'embaixada', 'gov', 'mil', 'net', 'org', 'principe', 'saotome', 'store'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sv':
+ if (['edu', 'gov', 'com', 'org', 'red', 'gob'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sy':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sz':
+ if (['co', 'ac', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'th':
+ if (['ac', 'co', 'go', 'in', 'mi', 'net', 'or'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tj':
+ if (['ac', 'aero', 'biz', 'co', 'com', 'coop', 'dyn', 'edu', 'go', 'gov', 'info', 'int', 'mil', 'museum', 'my', 'name', 'net', 'nic', 'org', 'per', 'pro', 'test', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tl':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tm':
+ if (['com', 'co', 'org', 'net', 'nom', 'gov', 'mil', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tn':
+ if (['agrinet', 'com', 'defense', 'edunet', 'ens', 'fin', 'gov', 'ind', 'info', 'intl', 'mincom', 'nat', 'net', 'org', 'perso', 'rnrt', 'rns', 'rnu', 'tourism', 'turen'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'to':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tr':
+ if (['av', 'bbs', 'bel', 'biz', 'com', 'dr', 'edu', 'gen', 'gov', 'info', 'k12', 'kep', 'mil', 'name', 'nc', 'net', 'org', 'pol', 'tel', 'tv', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tt':
+ if (['co', 'com', 'org', 'net', 'biz', 'info', 'pro', 'int', 'coop', 'jobs', 'mobi', 'travel', 'museum', 'aero', 'name', 'gov', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tw':
+ if (['club', 'com', 'ebiz', 'edu', 'game', 'gov', 'idv', 'mil', 'net', 'org', 'xn--czrw28b', 'xn--uc0atv', 'xn--zf0ao64a'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tz':
+ if (['ac', 'co', 'go', 'hotel', 'info', 'me', 'mil', 'mobi', 'ne', 'or', 'sc', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ua':
+ if (['at', 'cherkassy', 'cherkasy', 'chernigov', 'chernihiv', 'chernivtsi', 'chernovtsy', 'ck', 'cn', 'co', 'com', 'cr', 'crimea', 'cv', 'dn', 'dnepropetrovsk', 'dnipropetrovsk', 'dominic', 'donetsk', 'dp', 'edu', 'gov', 'if', 'in', 'ivano-frankivsk', 'kh', 'kharkiv', 'kharkov', 'kherson', 'khmelnitskiy', 'khmelnytskyi', 'kiev', 'kirovograd', 'km', 'kr', 'krym', 'ks', 'kv', 'kyiv', 'lg', 'lt', 'lugansk', 'lutsk', 'lv', 'lviv', 'mk', 'mykolaiv', 'net', 'nikolaev', 'od', 'odesa', 'odessa', 'org', 'pl', 'poltava', 'pp', 'rivne', 'rovno', 'rv', 'sb', 'sebastopol', 'sevastopol', 'sm', 'sumy', 'te', 'ternopil', 'uz', 'uzhgorod', 'vinnica', 'vinnytsia', 'vn', 'volyn', 'yalta', 'zaporizhzhe', 'zaporizhzhia', 'zhitomir', 'zhytomyr', 'zp', 'zt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ug':
+ if (['co', 'ac', 'sc', 'go', 'ne', 'or', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uk':
+ if (['ac', 'bl', 'british-library', 'co', 'gov', 'govt', 'jcpc', 'jet', 'judiciary', 'lea', 'ltd', 'me', 'mil', 'mod', 'net', 'nhs', 'nic', 'nls', 'org', 'orgn', 'parliament', 'plc', 'police', 'royal', 'sch', 'supremecourt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'us':
+ if (['aa', 'ae', 'ak', 'al', 'ap', 'ar', 'as', 'az', 'ca', 'cm', 'co', 'ct', 'cz', 'dc', 'de', 'dni', 'fed', 'fl', 'fm', 'ga', 'gu', 'hi', 'ia', 'id', 'il', 'in', 'isa', 'kids', 'ks', 'ky', 'la', 'ma', 'md', 'me', 'mh', 'mi', 'mn', 'mo', 'mp', 'ms', 'mt', 'nb', 'nc', 'nd', 'ne', 'nh', 'nj', 'nm', 'nsn', 'nv', 'ny', 'oh', 'ok', 'or', 'pa', 'pi', 'pr', 'pw', 'ri', 'sc', 'sd', 'tn', 'tt', 'tx', 'ut', 'va', 'vi', 'vt', 'wa', 'wi', 'wv', 'wy'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uy':
+ if (['com', 'edu', 'gub', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uz':
+ if (['co', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vc':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 've':
+ if (['arts', 'co', 'com', 'e12', 'edu', 'firm', 'gob', 'gov', 'info', 'int', 'mil', 'net', 'org', 'radio', 'rec', 'store', 'tec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vi':
+ if (['co', 'org', 'com', 'net', 'k12'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vn':
+ if (['ac', 'biz', 'com', 'edu', 'gov', 'health', 'info', 'int', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vu':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ws':
+ if (['org', 'gov', 'edu', 'com', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--90a3ac':
+ if (['xn--o1ac', 'xn--c1avg', 'xn--90azh', 'xn--d1at', 'xn--o1ach', 'xn--80au'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--j6w193g':
+ if (['xn--55qx5d', 'xn--wcvs22d', 'xn--mxtq1m', 'xn--gmqw5a', 'xn--od0alg', 'xn--uc0atv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--o3cw4h':
+ if (['xn--12c1fe0br', 'xn--12co0c3b4eva', 'xn--h3cuzk1di', 'xn--o3cyx2a', 'xn--m3ch0j3a', 'xn--12cfi8ixb8l'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'za':
+ if (['ac', 'agric', 'alt', 'bourse', 'city', 'co', 'cybernet', 'db', 'edu', 'gov', 'grondar', 'iaccess', 'imt', 'inca', 'landesign', 'law', 'mil', 'net', 'ngo', 'nis', 'nom', 'olivetti', 'org', 'pix', 'school', 'tm', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zm':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gov', 'info', 'mil', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zw':
+ if (['co', 'ac', 'org', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ }
+ return wa[1] + '.' + wa[0];
+}
+function is_hostile(f) {
+ if (localUse) {
+ return new Promise((g, b) => {
+ g(localDB.includes(f) ? true : false);
+ });
+ }
+ return new Promise((g, b) => {
+ fetch(apiurl, {
+ method: 'POST',
+ mode: 'cors',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ body: 'f=' + f
+ }).then(r => r.json()).then(r => {
+ if (r[0]) {
+ g(r[1]);
+ } else {
+ b();
+ }
+ }).catch(b);
+ });
+}
+function i_know_you(f) {
+ if (!/^([a-z0-9_.-]{1,255})\.([a-z]{2,80})$/.test(f)) {
+ return new Promise((g, b) => {
+ g(200);
+ });
+ }
+ let m, fD = get_realdomain(f);
+ if (fD != f && memcache[fD] != undefined) {
+ m = memcache[fD];
+ return new Promise((g, b) => {
+ g(m);
+ });
+ }
+ if (memcache[f] != undefined) {
+ m = memcache[f];
+ return new Promise((g, b) => {
+ g(m);
+ });
+ }
+ return new Promise((g, b) => {
+ browser.storage.local.get([fD, f]).then((ff) => {
+ if (ff[fD] == 'y') {
+ memcache[fD] = 1;
+ g(1);
+ }
+ if (ff[f]) {
+ if (ff[f] == 'y') {
+ memcache[f] = 1;
+ g(1);
+ } else {
+ memcache[f] = -1;
+ g(-1);
+ }
+ } else {
+ g(0);
+ }
+ }, () => {
+ g(0);
+ });
+ });
+}
+function forget_cache() {
+ browser.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
+ browser.storage.local.clear();
+ memcache = {};
+ browser.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'ign2': (g.ign2 == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ browser.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ browser.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ browser.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ browser.storage.local.set({
+ 'lastV': (browser.runtime.getManifest()).version
+ });
+ });
+ clearTimeout(timr);
+ timr = setTimeout(function () {
+ forget_cache();
+ }, 1814400000);
+}
+browser.storage.local.get(['lastU', 'lastV', 'ldb', 'opd']).then(g => {
+ localUse = (g.opd == 'n') ? true : false;
+ localDB = JSON.parse(g.ldb || '[]');
+ if (g.lastU) {
+ if (Math.abs(Math.round((new Date()).getTime() / 1000) - g.lastU) > 1814400) {
+ browser.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
+ browser.storage.local.clear();
+ memcache = {};
+ browser.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'ign2': (g.ign2 == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ browser.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ browser.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ browser.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ });
+ }
+ } else {
+ browser.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ }
+ let nowVer = (browser.runtime.getManifest()).version;
+ if (g.lastV != nowVer || forcePurge) {
+ console.log('Updated', nowVer);
+ browser.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
+ browser.storage.local.clear();
+ memcache = {};
+ browser.storage.local.set({
+ 'ign1': (g.ign1 == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'ign2': (g.ign2 == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'obs': (g.obs == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'dbg': (g.dbg == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'alt': (g.alt == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'cep': (g.cep == 'y' ? 'y' : 'n')
+ });
+ browser.storage.local.set({
+ 'mul': (g.mul != undefined ? g.mul : 'eo')
+ });
+ browser.storage.local.set({
+ 'opd': (g.opd == 'n' ? 'n' : 'y')
+ });
+ browser.storage.local.set({
+ 'ldb': (g.ldb != undefined ? g.ldb : '[]')
+ });
+ browser.storage.local.set({
+ 'lastU': Math.round((new Date()).getTime() / 1000)
+ });
+ browser.storage.local.set({
+ 'lastV': (browser.runtime.getManifest()).version
+ });
+ });
+ }
+ timr = setTimeout(function () {
+ forget_cache();
+ }, 1814400000);
+});
+browser.runtime.onMessage.addListener((requests, sender, sendResponse) => {
+ if (requests) {
+ if (requests === 'clear') {
+ forget_cache();
+ return;
+ }
+ if (requests.indexOf('dbmode,') === 0) {
+ switch (requests) {
+ case 'dbmode,s1':
+ browser.storage.local.set({
+ 'opd': 'y'
+ });
+ localUse = false;
+ break;
+ case 'dbmode,s0':
+ browser.storage.local.set({
+ 'opd': 'n'
+ });
+ localUse = true;
+ break;
+ case 'dbmode,cl':
+ browser.storage.local.set({
+ 'ldb': '[]'
+ });
+ localDB = [];
+ break;
+ case 'dbmode,rl':
+ browser.storage.local.get(['ldb']).then(g => {
+ localDB = JSON.parse(g.ldb || '[]');
+ });
+ break;
+ }
+ return;
+ }
+ requests.forEach(request => {
+ i_know_you(request).then((r) => {
+ if (r == 1 || r == -1) {
+ browser.tabs.sendMessage(sender.tab.id, [request, ((r == 1) ? true : false)]);
+ }
+ if (r == 0) {
+ is_hostile(request).then((a) => {
+ if (a) {
+ browser.storage.local.set({
+ [get_realdomain(request)]: 'y'
+ });
+ } else {
+ browser.storage.local.set({
+ [request]: 'n'
+ });
+ }
+ if (Object.keys(memcache).length > 650) {
+ memcache = {};
+ }
+ browser.tabs.sendMessage(sender.tab.id, [request, a]);
+ }, () => {
+ browser.tabs.sendMessage(sender.tab.id, [request, false]);
+ });
+ }
+ }, () => {});
+ });
+ }
+ return;
+});
\ No newline at end of file
diff --git a/addons/ismitmlinkFX/cfg.html b/addons/ismitmlinkFX/cfg.html
new file mode 100644
index 000000000..7d51f7c51
--- /dev/null
+++ b/addons/ismitmlinkFX/cfg.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [ → Ss API ]
+ [ → ]
+
+ 💬
+
+
+
+
+
+
+ : ?
+ : ?
+ : ?
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/ismitmlinkFX/cg.js b/addons/ismitmlinkFX/cg.js
new file mode 100644
index 000000000..40a7123da
--- /dev/null
+++ b/addons/ismitmlinkFX/cg.js
@@ -0,0 +1,1157 @@
+document.addEventListener('DOMContentLoaded', () => {
+ browser.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt', 'mul', 'opd']).then(g => {
+ document.getElementById('ign1').checked = (g.ign1 == 'y') ? true : false;
+ document.getElementById('ign2').checked = (g.ign2 == 'y') ? true : false;
+ document.getElementById('obs').checked = (g.obs == 'y') ? true : false;
+ document.getElementById('dbg').checked = (g.dbg == 'y') ? true : false;
+ document.getElementById('alt').checked = (g.alt == 'y') ? true : false;
+ document.getElementById('opon').checked = (g.opd != 'n') ? true : false;
+ document.getElementById('opoff').checked = (g.opd == 'n') ? true : false;
+ let ul = g.mul || 'eo';
+ fetch('i18n/' + ul + '.json', {
+ method: 'GET'
+ }).then(j => j.json()).then(j => {
+ document.querySelectorAll('span[tek]').forEach(x => {
+ x.innerText = j[x.getAttribute('tek')];
+ });
+ document.body.style.display = 'block';
+ });
+ });
+});
+document.getElementById('myul').addEventListener('change', () => {
+ let xul = document.getElementById('myul').value;
+ if (xul.length == 2) {
+ browser.storage.local.set({
+ 'mul': xul
+ });
+ location.reload(true);
+ }
+});
+document.getElementById('ign1').addEventListener('click', () => {
+ browser.storage.local.set({
+ 'ign1': (document.getElementById('ign1').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('ign2').addEventListener('click', () => {
+ browser.storage.local.set({
+ 'ign2': (document.getElementById('ign2').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('obs').addEventListener('click', () => {
+ browser.storage.local.set({
+ 'obs': (document.getElementById('obs').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('dbg').addEventListener('click', () => {
+ browser.storage.local.set({
+ 'dbg': (document.getElementById('dbg').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('alt').addEventListener('click', () => {
+ browser.storage.local.set({
+ 'alt': (document.getElementById('alt').checked ? 'y' : 'n')
+ });
+});
+document.getElementById('opon').addEventListener('click', () => {
+ browser.runtime.sendMessage('dbmode,s1').then(() => {
+ location.reload();
+ });
+});
+document.getElementById('opoff').addEventListener('click', () => {
+ browser.runtime.sendMessage('dbmode,s0').then(() => {
+ location.reload();
+ });
+});
+document.getElementById('crs').addEventListener('click', () => {
+ browser.runtime.sendMessage('clear').then(() => {
+ location.reload();
+ });
+});
+function get_realdomain(w) {
+ let wa = w.split('.');
+ let wa_l = wa.length;
+ if (wa_l < 3 || (wa_l == 4 && /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(w))) {
+ return w;
+ }
+ wa.reverse();
+ switch (wa[0]) {
+ case 'ac':
+ if (['com', 'edu', 'gov', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ad':
+ if (wa[1] == 'nom') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ae':
+ if (['co', 'net', 'org', 'sch', 'ac', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aero':
+ if (['accident-investigation', 'accident-prevention', 'aerobatic', 'aeroclub', 'aerodrome', 'agents', 'aircraft', 'airline', 'airport', 'air-surveillance', 'airtraffic', 'air-traffic-control', 'ambulance', 'amusement', 'association', 'author', 'ballooning', 'broker', 'caa', 'cargo', 'catering', 'certification', 'championship', 'charter', 'civilaviation', 'club', 'conference', 'consultant', 'consulting', 'control', 'council', 'crew', 'design', 'dgca', 'educator', 'emergency', 'engine', 'engineer', 'entertainment', 'equipment', 'exchange', 'express', 'federation', 'flight', 'freight', 'fuel', 'gliding', 'government', 'groundhandling', 'group', 'hanggliding', 'homebuilt', 'insurance', 'journal', 'journalist', 'leasing', 'logistics', 'magazine', 'maintenance', 'media', 'microlight', 'modelling', 'navigation', 'parachuting', 'paragliding', 'passenger-association', 'pilot', 'press', 'production', 'recreation', 'repbody', 'res', 'research', 'rotorcraft', 'safety', 'scientist', 'services', 'show', 'skydiving', 'software', 'student', 'trader', 'trading', 'trainer', 'union', 'workinggroup', 'works'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'af':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ag':
+ if (['com', 'net', 'org', 'co', 'nom', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ai':
+ if (['off', 'com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'al':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ao':
+ if (['co', 'ed', 'it', 'og', 'pb', 'gv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ar':
+ if (['com', 'edu', 'gov', 'gob', 'int', 'mil', 'net', 'org', 'tur', 'musica'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'as':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'at':
+ if (['gv', 'ac', 'co', 'or', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'au':
+ if (wa[1] == 'gov' && wa[3] != undefined) {
+ if (['act', 'nsw', 'nt', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (wa[1] == 'edu' && wa[3] != undefined) {
+ if (['act', 'catholic', 'eq', 'nsw', 'nt', 'sa', 'tas', 'vic', 'wa'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['act', 'asn', 'com', 'conf', 'csiro', 'edu', 'gov', 'id', 'info', 'net', 'nsw', 'nt', 'org', 'oz', 'qld', 'sa', 'tas', 'vic', 'wa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'aw':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'az':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'int', 'mil', 'name', 'net', 'org', 'pp', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ba':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'net', 'org', 'rs'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bb':
+ if (['biz', 'co', 'com', 'edu', 'gov', 'info', 'net', 'org', 'store', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bd':
+ if (['com', 'edu', 'ac', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'be':
+ if (wa[1] == 'ac') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bf':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bg':
+ if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bh':
+ if (['com', 'info', 'cc', 'edu', 'biz', 'net', 'org', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bi':
+ if (['ac', 'co', 'com', 'edu', 'gouv', 'gov', 'int', 'mil', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bj':
+ if (['asso', 'barreau', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bn':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bo':
+ if (['academia', 'agro', 'arte', 'blog', 'bolivia', 'ciencia', 'com', 'cooperativa', 'democracia', 'deporte', 'ecologia', 'economia', 'edu', 'empresa', 'gob', 'gov', 'indigena', 'industria', 'info', 'int', 'medicina', 'mil', 'movimiento', 'musica', 'natural', 'net', 'nombre', 'noticias', 'org', 'patria', 'plurinacional', 'politica', 'profesional', 'pueblo', 'revista', 'salud', 'tecnologia', 'tksat', 'transporte', 'tv', 'web', 'wiki'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'br':
+ if (['9guacu', 'abc', 'adm', 'adv', 'agr', 'aju', 'am', 'anani', 'aparecida', 'arq', 'art', 'ato', 'b', 'barueri', 'belem', 'bhz', 'bio', 'blog', 'bmd', 'boavista', 'bsb', 'campinagrande', 'campinas', 'caxias', 'cim', 'cng', 'cnt', 'com', 'contagem', 'coop', 'cri', 'cuiaba', 'curitiba', 'def', 'ecn', 'eco', 'edu', 'emp', 'eng', 'esp', 'etc', 'eti', 'far', 'feira', 'flog', 'floripa', 'fm', 'fnd', 'fortal', 'fot', 'foz', 'fst', 'g12', 'ggf', 'goiania', 'gov', 'gru', 'imb', 'ind', 'inf', 'jab', 'jampa', 'jdf', 'joinville', 'jor', 'jus', 'leg', 'lel', 'londrina', 'macapa', 'maceio', 'manaus', 'maringa', 'mat', 'med', 'mil', 'morena', 'mp', 'mus', 'natal', 'net', 'niteroi', 'nom', 'not', 'ntr', 'odo', 'ong', 'org', 'osasco', 'palmas', 'poa', 'ppg', 'pro', 'psc', 'psi', 'pvh', 'qsl', 'radio', 'rec', 'recife', 'ribeirao', 'rio', 'riobranco', 'riopreto', 'salvador', 'sampa', 'santamaria', 'santoandre', 'saobernardo', 'saogonca', 'sjc', 'slg', 'slz', 'sorocaba', 'srv', 'taxi', 'teo', 'the', 'tmp', 'trd', 'tur', 'tv', 'udi', 'vet', 'vix', 'vlog', 'wiki', 'zlg'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bs':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bw':
+ if (['org', 'ac', 'co', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'by':
+ if (['gov', 'mil', 'com', 'of'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'bz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'nym', 'of', 'org', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ca':
+ if (['ab', 'bc', 'gc', 'mb', 'nb', 'nf', 'nl', 'ns', 'nt', 'nu', 'on', 'pe', 'qc', 'sk', 'yk'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cd':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ci':
+ if (['ac', 'asso', 'co', 'com', 'ed', 'edu', 'go', 'gouv', 'int', 'md', 'net', 'or', 'org', 'presse', 'xn--aroport-bya'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ck':
+ if (['biz', 'co', 'edu', 'gen', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cl':
+ if (['gov', 'gob', 'co', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cm':
+ if (['co', 'com', 'gov', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cn':
+ if (['ac', 'ah', 'bj', 'com', 'cq', 'edu', 'fj', 'gd', 'gov', 'gs', 'gx', 'gz', 'ha', 'hb', 'he', 'hi', 'hk', 'hl', 'hn', 'jl', 'js', 'jx', 'ln', 'mil', 'mo', 'net', 'nm', 'nx', 'org', 'qh', 'sc', 'sd', 'sh', 'sn', 'sx', 'tj', 'tw', 'xj', 'xn--55qx5d', 'xn--io0a7i', 'xn--od0alg', 'xz', 'yn', 'zj'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'co':
+ if (['arts', 'com', 'edu', 'firm', 'gov', 'info', 'int', 'mil', 'net', 'nom', 'org', 'rec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'com':
+ if (['africa', 'ar', 'br', 'cn', 'co', 'de', 'eu', 'gb', 'gr', 'hu', 'jpn', 'kr', 'mex', 'no', 'qc', 'ru', 'sa', 'se', 'uk', 'us', 'uy', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cr':
+ if (['ac', 'co', 'ed', 'fi', 'go', 'or', 'sa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cu':
+ if (['com', 'edu', 'org', 'net', 'gov', 'inf'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cw':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'cy':
+ if (['ac', 'biz', 'com', 'ekloges', 'gov', 'ltd', 'name', 'net', 'org', 'parliament', 'press', 'pro', 'tm'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dm':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'do':
+ if (['art', 'com', 'edu', 'gob', 'gov', 'mil', 'net', 'org', 'sld', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'dz':
+ if (['art', 'asso', 'com', 'edu', 'gov', 'net', 'org', 'pol'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ec':
+ if (['com', 'edu', 'fin', 'gob', 'gov', 'info', 'k12', 'med', 'mil', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ee':
+ if (['aip', 'com', 'edu', 'fie', 'gov', 'lib', 'med', 'org', 'pri', 'riik'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'eg':
+ if (['com', 'edu', 'eun', 'gov', 'mil', 'name', 'net', 'org', 'sci'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'es':
+ if (['com', 'nom', 'org', 'gob', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'et':
+ if (['com', 'gov', 'org', 'edu', 'net', 'biz', 'name', 'info'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fi':
+ if (wa[1] == 'aland') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fj':
+ if (['ac', 'biz', 'com', 'info', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'fr':
+ if (['aeroport', 'assedic', 'asso', 'avocat', 'avoues', 'cci', 'chambagri', 'chirurgiens-dentistes', 'com', 'experts-comptables', 'geometre-expert', 'gouv', 'greta', 'huissier-justice', 'medecin', 'nom', 'notaires', 'pharmacien', 'port', 'prd', 'presse', 'tm', 'veterinaire'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ge':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'pvt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gg':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gh':
+ if (['com', 'edu', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gi':
+ if (['com', 'edu', 'gov', 'ltd', 'mod', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gl':
+ if (['co', 'com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gn':
+ if (['ac', 'com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gov':
+ if (['al', 'alabama', 'alaska', 'americansamoa', 'ar', 'arizona', 'arkansas', 'as', 'az', 'ca', 'co', 'colorado', 'ct', 'dc', 'de', 'delaware', 'ehawaii', 'fl', 'florida', 'ga', 'georgia', 'guam', 'hawaii', 'ia', 'idaho', 'il', 'illinois', 'in', 'indiana', 'iowa', 'kansas', 'kentucky', 'ks', 'ky', 'la', 'louisiana', 'ma', 'maine', 'maryland', 'mass', 'massachusetts', 'md', 'mi', 'michigan', 'minnesota', 'mississippi', 'missouri', 'mn', 'mo', 'montana', 'ms', 'mt', 'nc', 'nd', 'ne', 'nebraska', 'nevada', 'newjersey', 'newmexico', 'nh', 'nj', 'northcarolina', 'northdakota', 'nv', 'ny', 'ohio', 'ok', 'oklahoma', 'oregon', 'pa', 'pennsylvania', 'pr', 'rhodeisland', 'ri', 'sc', 'sd', 'tennessee', 'texas', 'tn', 'utah', 'vermont', 'vi', 'virginia', 'vt', 'wa', 'washington', 'wi', 'wisconsin', 'wv', 'wy', 'wyoming'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gp':
+ if (['com', 'net', 'mobi', 'edu', 'org', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gr':
+ if (['co', 'com', 'edu', 'gov', 'mil', 'mod', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gt':
+ if (['com', 'edu', 'net', 'gob', 'org', 'mil', 'ind'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gu':
+ if (['com', 'edu', 'gov', 'guam', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'gy':
+ if (['co', 'com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hk':
+ if (['com', 'edu', 'gov', 'idv', 'net', 'org', 'xn--55qx5d', 'xn--ciqpn', 'xn--gmq050i', 'xn--gmqw5a', 'xn--io0a7i', 'xn--lcvr32d', 'xn--mk0axi', 'xn--mxtq1m', 'xn--od0alg', 'xn--od0aq3b', 'xn--tn0ag', 'xn--uc0atv', 'xn--uc0ay4a', 'xn--wcvs22d', 'xn--zf0avx'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hn':
+ if (['com', 'edu', 'gob', 'net', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hr':
+ if (['iz', 'from', 'name', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ht':
+ if (['com', 'shop', 'firm', 'info', 'adult', 'net', 'pro', 'org', 'med', 'art', 'coop', 'pol', 'asso', 'edu', 'rel', 'gouv', 'perso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'hu':
+ if (['2000', 'agrar', 'bolt', 'casino', 'city', 'co', 'edu', 'erotica', 'erotika', 'film', 'forum', 'games', 'gov', 'hotel', 'info', 'ingatlan', 'jogasz', 'konyvelo', 'lakas', 'media', 'mobi', 'net', 'news', 'org', 'priv', 'reklam', 'sex', 'shop', 'sport', 'suli', 'szex', 'tm', 'tozsde', 'utazas', 'video'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'id':
+ if (['ac', 'biz', 'co', 'desa', 'go', 'mil', 'my', 'net', 'or', 'ponpes', 'sch', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ie':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'il':
+ if (['ac', 'co', 'gov', 'idf', 'k12', 'muni', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'im':
+ if (['ac', 'co', 'com', 'gov', 'net', 'org', 'ro', 'tt', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'in':
+ if (['ac', 'co', 'edu', 'ernet', 'firm', 'gen', 'gov', 'ind', 'mil', 'net', 'org', 'res', 'nic'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'int':
+ if (wa[1] == 'eu') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'io':
+ if (wa[1] == 'com') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'iq':
+ if (['gov', 'edu', 'mil', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ir':
+ if (['ac', 'co', 'gov', 'id', 'net', 'org', 'sch', 'xn--mgba3a4f16a', 'xn--mgba3a4fra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'is':
+ if (['net', 'com', 'edu', 'gov', 'org', 'int'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'it':
+ if (['abr', 'abruzzo', 'ag', 'agrigento', 'al', 'alessandria', 'alto-adige', 'altoadige', 'an', 'ancona', 'andria-barletta-trani', 'andria-trani-barletta', 'andriabarlettatrani', 'andriatranibarletta', 'ao', 'aosta', 'aosta-valley', 'aostavalley', 'aoste', 'ap', 'aq', 'aquila', 'ar', 'arezzo', 'ascoli-piceno', 'ascolipiceno', 'asti', 'at', 'av', 'avellino', 'ba', 'balsan', 'balsan-sudtirol', 'balsan-suedtirol', 'bari', 'barletta-trani-andria', 'barlettatraniandria', 'bas', 'basilicata', 'belluno', 'benevento', 'bergamo', 'bg', 'bi', 'biella', 'bl', 'bn', 'bo', 'bologna', 'bolzano', 'bolzano-altoadige', 'bozen', 'bozen-sudtirol', 'bozen-suedtirol', 'br', 'brescia', 'brindisi', 'bs', 'bt', 'bulsan', 'bulsan-sudtirol', 'bulsan-suedtirol', 'bz', 'ca', 'cagliari', 'cal', 'calabria', 'caltanissetta', 'cam', 'campania', 'campidano-medio', 'campidanomedio', 'campobasso', 'carbonia-iglesias', 'carboniaiglesias', 'carrara-massa', 'carraramassa', 'caserta', 'catania', 'catanzaro', 'cb', 'ce', 'cesena-forli', 'cesenaforli', 'ch', 'chieti', 'ci', 'cl', 'cn', 'co', 'como', 'cosenza', 'cr', 'cremona', 'crotone', 'cs', 'ct', 'cuneo', 'cz', 'dell-ogliastra', 'dellogliastra', 'edu', 'emilia-romagna', 'emiliaromagna', 'emr', 'en', 'enna', 'fc', 'fe', 'fermo', 'ferrara', 'fg', 'fi', 'firenze', 'florence', 'fm', 'foggia', 'forli-cesena', 'forlicesena', 'fr', 'friuli-v-giulia', 'friuli-ve-giulia', 'friuli-vegiulia', 'friuli-venezia-giulia', 'friuli-veneziagiulia', 'friuli-vgiulia', 'friuliv-giulia', 'friulive-giulia', 'friulivegiulia', 'friulivenezia-giulia', 'friuliveneziagiulia', 'friulivgiulia', 'frosinone', 'fvg', 'ge', 'genoa', 'genova', 'go', 'gorizia', 'gov', 'gr', 'grosseto', 'iglesias-carbonia', 'iglesiascarbonia', 'im', 'imperia', 'is', 'isernia', 'kr', 'la-spezia', 'laquila', 'laspezia', 'latina', 'laz', 'lazio', 'lc', 'le', 'lecce', 'lecco', 'li', 'lig', 'liguria', 'livorno', 'lo', 'lodi', 'lom', 'lombardia', 'lombardy', 'lt', 'lu', 'lucania', 'lucca', 'macerata', 'mantova', 'mar', 'marche', 'massa-carrara', 'massacarrara', 'matera', 'mb', 'mc', 'me', 'medio-campidano', 'mediocampidano', 'messina', 'mi', 'milan', 'milano', 'mn', 'mo', 'modena', 'mol', 'molise', 'monza', 'monza-brianza', 'monza-e-della-brianza', 'monzabrianza', 'monzaebrianza', 'monzaedellabrianza', 'ms', 'mt', 'na', 'naples', 'napoli', 'no', 'novara', 'nu', 'nuoro', 'og', 'ogliastra', 'olbia-tempio', 'olbiatempio', 'or', 'oristano', 'ot', 'pa', 'padova', 'padua', 'palermo', 'parma', 'pavia', 'pc', 'pd', 'pe', 'perugia', 'pesaro-urbino', 'pesarourbino', 'pescara', 'pg', 'pi', 'piacenza', 'piedmont', 'piemonte', 'pisa', 'pistoia', 'pmn', 'pn', 'po', 'pordenone', 'potenza', 'pr', 'prato', 'pt', 'pu', 'pug', 'puglia', 'pv', 'pz', 'ra', 'ragusa', 'ravenna', 'rc', 're', 'reggio-calabria', 'reggio-emilia', 'reggiocalabria', 'reggioemilia', 'rg', 'ri', 'rieti', 'rimini', 'rm', 'rn', 'ro', 'roma', 'rome', 'rovigo', 'sa', 'salerno', 'sar', 'sardegna', 'sardinia', 'sassari', 'savona', 'si', 'sic', 'sicilia', 'sicily', 'siena', 'siracusa', 'so', 'sondrio', 'sp', 'sr', 'ss', 'suedtirol', 'sv', 'ta', 'taa', 'taranto', 'te', 'tempio-olbia', 'tempioolbia', 'teramo', 'terni', 'tn', 'to', 'torino', 'tos', 'toscana', 'tp', 'tr', 'trani-andria-barletta', 'trani-barletta-andria', 'traniandriabarletta', 'tranibarlettaandria', 'trapani', 'trentin-sud-tirol', 'trentin-sudtirol', 'trentin-sued-tirol', 'trentin-suedtirol', 'trentino', 'trentino-a-adige', 'trentino-aadige', 'trentino-alto-adige', 'trentino-altoadige', 'trentino-s-tirol', 'trentino-stirol', 'trentino-sud-tirol', 'trentino-sudtirol', 'trentino-sued-tirol', 'trentino-suedtirol', 'trentinoa-adige', 'trentinoaadige', 'trentinoalto-adige', 'trentinoaltoadige', 'trentinos-tirol', 'trentinostirol', 'trentinosud-tirol', 'trentinosudtirol', 'trentinosued-tirol', 'trentinosuedtirol', 'trentinsud-tirol', 'trentinsudtirol', 'trentinsued-tirol', 'trentinsuedtirol', 'trento', 'treviso', 'trieste', 'ts', 'turin', 'tuscany', 'tv', 'ud', 'udine', 'umb', 'umbria', 'urbino-pesaro', 'urbinopesaro', 'va', 'val-d-aosta', 'val-daosta', 'vald-aosta', 'valdaosta', 'valle-aosta', 'valle-d-aosta', 'valle-daosta', 'valleaosta', 'valled-aosta', 'valledaosta', 'vallee-aoste', 'vallee-d-aoste', 'valleeaoste', 'valleedaoste', 'vao', 'varese', 'vb', 'vc', 'vda', 've', 'ven', 'veneto', 'venezia', 'venice', 'verbania', 'vercelli', 'verona', 'vi', 'vibo-valentia', 'vibovalentia', 'vicenza', 'viterbo', 'vr', 'vs', 'vt', 'vv', 'xn--balsan-sdtirol-nsb', 'xn--bozen-sdtirol-2ob', 'xn--bulsan-sdtirol-nsb', 'xn--cesena-forl-mcb', 'xn--cesenaforl-i8a', 'xn--forl-cesena-fcb', 'xn--forlcesena-c8a', 'xn--sdtirol-n2a', 'xn--trentin-sd-tirol-rzb', 'xn--trentin-sdtirol-7vb', 'xn--trentino-sd-tirol-c3b', 'xn--trentino-sdtirol-szb', 'xn--trentinosd-tirol-rzb', 'xn--trentinosdtirol-7vb', 'xn--trentinsd-tirol-6vb', 'xn--trentinsdtirol-nsb', 'xn--valle-aoste-ebb', 'xn--valle-d-aoste-ehb', 'xn--valleaoste-e7a', 'xn--valledaoste-ebb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'je':
+ if (['co', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jm':
+ if (['com', 'net', 'org', 'edu', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jo':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'jp':
+ if (['ac', 'ad', 'aichi', 'akita', 'aomori', 'chiba', 'co', 'ed', 'ehime', 'fukui', 'fukuoka', 'fukushima', 'gifu', 'go', 'gr', 'gunma', 'hiroshima', 'hokkaido', 'hyogo', 'ibaraki', 'ishikawa', 'iwate', 'kagawa', 'kagoshima', 'kanagawa', 'kochi', 'kumamoto', 'kyoto', 'lg', 'mie', 'miyagi', 'miyazaki', 'nagano', 'nagasaki', 'nara', 'ne', 'niigata', 'oita', 'okayama', 'okinawa', 'or', 'osaka', 'saga', 'saitama', 'shiga', 'shimane', 'shizuoka', 'tochigi', 'tokushima', 'tokyo', 'tottori', 'toyama', 'wakayama', 'xn--0trq7p7nn', 'xn--1ctwo', 'xn--1lqs03n', 'xn--1lqs71d', 'xn--2m4a15e', 'xn--32vp30h', 'xn--4it168d', 'xn--4it797k', 'xn--4pvxs', 'xn--5js045d', 'xn--5rtp49c', 'xn--5rtq34k', 'xn--6btw5a', 'xn--6orx2r', 'xn--7t0a264c', 'xn--8ltr62k', 'xn--8pvr4u', 'xn--c3s14m', 'xn--d5qv7z876c', 'xn--djrs72d6uy', 'xn--djty4k', 'xn--efvn9s', 'xn--ehqz56n', 'xn--elqq16h', 'xn--f6qx53a', 'xn--k7yn95e', 'xn--kbrq7o', 'xn--klt787d', 'xn--kltp7d', 'xn--kltx9a', 'xn--klty5x', 'xn--mkru45i', 'xn--nit225k', 'xn--ntso0iqx3a', 'xn--ntsq17g', 'xn--pssu33l', 'xn--qqqt11m', 'xn--rht27z', 'xn--rht3d', 'xn--rht61e', 'xn--rny31h', 'xn--tor131o', 'xn--uist22h', 'xn--uisz3g', 'xn--uuwu58a', 'xn--vgu402c', 'xn--zbx025d', 'yamagata', 'yamaguchi', 'yamanashi'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ke':
+ if (['ac', 'co', 'go', 'info', 'me', 'mobi', 'ne', 'or', 'sc'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kg':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kh':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ki':
+ if (['edu', 'biz', 'net', 'org', 'gov', 'info', 'com'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'km':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'ass', 'com', 'coop', 'asso', 'presse', 'medecin', 'notaires', 'pharmaciens', 'veterinaire', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kn':
+ if (['net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kp':
+ if (['com', 'edu', 'gov', 'org', 'rep', 'tra'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kr':
+ if (['ac', 'busan', 'cheju', 'chonbuk', 'chonnam', 'chungbuk', 'chungnam', 'co', 'daegu', 'daejeon', 'es', 'gangwon', 'go', 'gwangju', 'gyeongbuk', 'gyeonggi', 'gyeongnam', 'hs', 'incheon', 'inchon', 'jeju', 'jeonbuk', 'jeonnam', 'kangwon', 'kg', 'kwangju', 'kyongbuk', 'kyonggi', 'kyongnam', 'mil', 'ms', 'ne', 'nm', 'or', 'pe', 'pusan', 're', 'sc', 'seoul', 'taegu', 'taejon', 'ulsan', 'xn--bj0bj06e'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kw':
+ if (['com', 'edu', 'emb', 'gov', 'ind', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ky':
+ if (['edu', 'gov', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'kz':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'la':
+ if (['int', 'net', 'info', 'edu', 'gov', 'per', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lc':
+ if (['com', 'net', 'co', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lk':
+ if (['ac', 'assn', 'com', 'edu', 'gov', 'grp', 'hotel', 'int', 'ltd', 'net', 'ngo', 'org', 'sch', 'soc', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lr':
+ if (['com', 'edu', 'gov', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ls':
+ if (['ac', 'co', 'gov', 'net', 'nul', 'org', 'parliament', 'quadrant'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lt':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'lv':
+ if (['asn', 'com', 'conf', 'edu', 'gov', 'id', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ly':
+ if (['com', 'edu', 'gov', 'id', 'med', 'net', 'org', 'plc', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ma':
+ if (['ac', 'co', 'gov', 'net', 'org', 'press'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mc':
+ if (['tm', 'asso'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'me':
+ if (['co', 'net', 'org', 'edu', 'ac', 'gov', 'its', 'priv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mg':
+ if (['org', 'nom', 'gov', 'prd', 'tm', 'edu', 'mil', 'com', 'co'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mk':
+ if (['com', 'edu', 'gov', 'inf', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ml':
+ if (['com', 'edu', 'gouv', 'gov', 'net', 'org', 'presse'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mm':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mn':
+ if (['gov', 'edu', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mo':
+ if (['com', 'net', 'org', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mr':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ms':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mt':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mu':
+ if (['ac', 'co', 'com', 'gov', 'net', 'or', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'museum':
+ if (['academy', 'agriculture', 'air', 'airguard', 'alabama', 'alaska', 'amber', 'ambulance', 'american', 'americana', 'americanantiques', 'americanart', 'amsterdam', 'and', 'annefrank', 'anthro', 'anthropology', 'antiques', 'aquarium', 'arboretum', 'archaeological', 'archaeology', 'architecture', 'art', 'artanddesign', 'artcenter', 'artdeco', 'arteducation', 'artgallery', 'arts', 'artsandcrafts', 'asmatart', 'assassination', 'assisi', 'association', 'astronomy', 'atlanta', 'austin', 'australia', 'automotive', 'aviation', 'axis', 'badajoz', 'baghdad', 'bahn', 'bale', 'baltimore', 'barcelona', 'baseball', 'basel', 'baths', 'bauern', 'beauxarts', 'beeldengeluid', 'bellevue', 'bergbau', 'berkeley', 'berlin', 'bern', 'bible', 'bilbao', 'bill', 'birdart', 'birthplace', 'bonn', 'boston', 'botanical', 'botanicalgarden', 'botanicgarden', 'botany', 'brandywinevalley', 'brasil', 'bristol', 'british', 'britishcolumbia', 'broadcast', 'brunel', 'brussel', 'brussels', 'bruxelles', 'building', 'burghof', 'bus', 'bushey', 'cadaques', 'california', 'cambridge', 'can', 'canada', 'capebreton', 'carrier', 'cartoonart', 'casadelamoneda', 'castle', 'castres', 'celtic', 'center', 'chattanooga', 'cheltenham', 'chesapeakebay', 'chicago', 'children', 'childrens', 'childrensgarden', 'chiropractic', 'chocolate', 'christiansburg', 'cincinnati', 'cinema', 'circus', 'civilisation', 'civilization', 'civilwar', 'clinton', 'clock', 'coal', 'coastaldefence', 'cody', 'coldwar', 'collection', 'colonialwilliamsburg', 'coloradoplateau', 'columbia', 'columbus', 'communication', 'communications', 'community', 'computer', 'computerhistory', 'comunicações', 'contemporary', 'contemporaryart', 'convent', 'copenhagen', 'corporation', 'correios-e-telecomunicações', 'corvette', 'costume', 'countryestate', 'county', 'crafts', 'cranbrook', 'creation', 'cultural', 'culturalcenter', 'culture', 'cyber', 'cymru', 'dali', 'dallas', 'database', 'ddr', 'decorativearts', 'delaware', 'delmenhorst', 'denmark', 'depot', 'design', 'detroit', 'dinosaur', 'discovery', 'dolls', 'donostia', 'durham', 'eastafrica', 'eastcoast', 'education', 'educational', 'egyptian', 'eisenbahn', 'elburg', 'elvendrell', 'embroidery', 'encyclopedic', 'england', 'entomology', 'environment', 'environmentalconservation', 'epilepsy', 'essex', 'estate', 'ethnology', 'exeter', 'exhibition', 'family', 'farm', 'farmequipment', 'farmers', 'farmstead', 'field', 'figueres', 'filatelia', 'film', 'fineart', 'finearts', 'finland', 'flanders', 'florida', 'force', 'fortmissoula', 'fortworth', 'foundation', 'francaise', 'frankfurt', 'franziskaner', 'freemasonry', 'freiburg', 'fribourg', 'frog', 'fundacio', 'furniture', 'gallery', 'garden', 'gateway', 'geelvinck', 'gemological', 'geology', 'georgia', 'giessen', 'glas', 'glass', 'gorge', 'grandrapids', 'graz', 'guernsey', 'halloffame', 'hamburg', 'handson', 'harvestcelebration', 'hawaii', 'health', 'heimatunduhren', 'hellas', 'helsinki', 'hembygdsforbund', 'heritage', 'histoire', 'historical', 'historicalsociety', 'historichouses', 'historisch', 'historisches', 'history', 'historyofscience', 'horology', 'house', 'humanities', 'illustration', 'imageandsound', 'indian', 'indiana', 'indianapolis', 'indianmarket', 'intelligence', 'interactive', 'iraq', 'iron', 'isleofman', 'jamison', 'jefferson', 'jerusalem', 'jewelry', 'jewish', 'jewishart', 'jfk', 'journalism', 'judaica', 'judygarland', 'juedisches', 'juif', 'karate', 'karikatur', 'kids', 'koebenhavn', 'koeln', 'kunst', 'kunstsammlung', 'kunstunddesign', 'labor', 'labour', 'lajolla', 'lancashire', 'landes', 'lans', 'larsson', 'lewismiller', 'lincoln', 'linz', 'living', 'livinghistory', 'localhistory', 'london', 'losangeles', 'louvre', 'loyalist', 'lucerne', 'luxembourg', 'luzern', 'läns', 'mad', 'madrid', 'mallorca', 'manchester', 'mansion', 'mansions', 'manx', 'marburg', 'maritime', 'maritimo', 'maryland', 'marylhurst', 'media', 'medical', 'medizinhistorisches', 'meeres', 'memorial', 'mesaverde', 'michigan', 'midatlantic', 'military', 'mill', 'miners', 'mining', 'minnesota', 'missile', 'missoula', 'modern', 'moma', 'money', 'monmouth', 'monticello', 'montreal', 'moscow', 'motorcycle', 'muenchen', 'muenster', 'mulhouse', 'muncie', 'museet', 'museumcenter', 'museumvereniging', 'music', 'national', 'nationalfirearms', 'nationalheritage', 'nativeamerican', 'naturalhistory', 'naturalhistorymuseum', 'naturalsciences', 'nature', 'naturhistorisches', 'natuurwetenschappen', 'naumburg', 'naval', 'nebraska', 'neues', 'newhampshire', 'newjersey', 'newmexico', 'newport', 'newspaper', 'newyork', 'niepce', 'norfolk', 'north', 'nrw', 'nuernberg', 'nuremberg', 'nyc', 'nyny', 'oceanographic', 'oceanographique', 'omaha', 'online', 'ontario', 'openair', 'oregon', 'oregontrail', 'otago', 'oxford', 'pacific', 'paderborn', 'palace', 'paleo', 'palmsprings', 'panama', 'paris', 'pasadena', 'pharmacy', 'philadelphia', 'philadelphiaarea', 'philately', 'phoenix', 'photography', 'pilots', 'pittsburgh', 'planetarium', 'plantation', 'plants', 'plaza', 'portal', 'portland', 'portlligat', 'posts-and-telecommunications', 'preservation', 'presidio', 'press', 'project', 'public', 'pubol', 'quebec', 'railroad', 'railway', 'research', 'resistance', 'riodejaneiro', 'rochester', 'rockart', 'roma', 'russia', 'saintlouis', 'salem', 'salvadordali', 'salzburg', 'sandiego', 'sanfrancisco', 'santabarbara', 'santacruz', 'santafe', 'saskatchewan', 'satx', 'savannahga', 'schlesisches', 'schoenbrunn', 'schokoladen', 'school', 'schweiz', 'science', 'science-fiction', 'scienceandhistory', 'scienceandindustry', 'sciencecenter', 'sciencecenters', 'sciencehistory', 'sciences', 'sciencesnaturelles', 'scotland', 'seaport', 'settlement', 'settlers', 'shell', 'sherbrooke', 'sibenik', 'silk', 'ski', 'skole', 'society', 'sologne', 'soundandvision', 'southcarolina', 'southwest', 'space', 'spy', 'square', 'stadt', 'stalbans', 'starnberg', 'state', 'stateofdelaware', 'station', 'steam', 'steiermark', 'stjohn', 'stockholm', 'stpetersburg', 'stuttgart', 'suisse', 'surgeonshall', 'surrey', 'svizzera', 'sweden', 'sydney', 'tank', 'tcm', 'technology', 'telekommunikation', 'television', 'texas', 'textile', 'theater', 'time', 'timekeeping', 'topology', 'torino', 'touch', 'town', 'transport', 'tree', 'trolley', 'trust', 'trustee', 'uhren', 'ulm', 'undersea', 'university', 'usa', 'usantiques', 'usarts', 'uscountryestate', 'usculture', 'usdecorativearts', 'usgarden', 'ushistory', 'ushuaia', 'uslivinghistory', 'utah', 'uvic', 'valley', 'vantaa', 'versailles', 'viking', 'village', 'virginia', 'virtual', 'virtuel', 'vlaanderen', 'volkenkunde', 'wales', 'wallonie', 'war', 'washingtondc', 'watch-and-clock', 'watchandclock', 'western', 'westfalen', 'whaling', 'wildlife', 'williamsburg', 'windmill', 'workshop', 'xn--9dbhblg6di', 'xn--h1aegh', 'york', 'yorkshire', 'yosemite', 'youth', 'zoological', 'zoology'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mv':
+ if (['aero', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'int', 'mil', 'museum', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mw':
+ if (['ac', 'biz', 'co', 'com', 'coop', 'edu', 'gov', 'int', 'museum', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mx':
+ if (['com', 'edu', 'gob', 'net', 'ngo', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'my':
+ if (['com', 'edu', 'gov', 'mil', 'name', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'mz':
+ if (['co', 'net', 'org', 'ac', 'gov', 'edu', 'mil', 'adv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'na':
+ if (['info', 'pro', 'name', 'school', 'or', 'dr', 'us', 'mx', 'ca', 'in', 'cc', 'tv', 'ws', 'mobi', 'co', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'name':
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ break;
+ case 'nc':
+ if (['asso', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'net':
+ if (['gb', 'hu', 'in', 'jp', 'ru', 'se', 'uk', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nf':
+ if (['arts', 'com', 'firm', 'info', 'net', 'other', 'per', 'rec', 'store', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ng':
+ if (['com', 'edu', 'gov', 'i', 'mil', 'mobi', 'name', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ni':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gob', 'in', 'info', 'int', 'mil', 'net', 'nom', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nl':
+ if (wa[1] == 'bv') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'no':
+ if (['aa', 'aarborte', 'aejrie', 'afjord', 'agdenes', 'ah', 'aknoluokta', 'akrehamn', 'al', 'alaheadju', 'alesund', 'algard', 'alstahaug', 'alta', 'alvdal', 'amli', 'amot', 'andasuolo', 'andebu', 'andoy', 'ardal', 'aremark', 'arendal', 'arna', 'aseral', 'asker', 'askim', 'askoy', 'askvoll', 'asnes', 'audnedaln', 'aukra', 'aure', 'aurland', 'austevoll', 'austrheim', 'averoy', 'badaddja', 'bahcavuotna', 'bahccavuotna', 'baidar', 'bajddar', 'balat', 'balestrand', 'ballangen', 'balsfjord', 'bamble', 'bardu', 'barum', 'batsfjord', 'bearalvahki', 'beardu', 'beiarn', 'berg', 'bergen', 'berlevag', 'bievat', 'bindal', 'birkenes', 'bjarkoy', 'bjerkreim', 'bjugn', 'bodo', 'bokn', 'bomlo', 'bremanger', 'bronnoy', 'bronnoysund', 'brumunddal', 'bryne', 'bu', 'budejju', 'bygland', 'bykle', 'cahcesuolo', 'davvenjarga', 'davvesiida', 'deatnu', 'dep', 'dielddanuorri', 'divtasvuodna', 'divttasvuotna', 'donna', 'dovre', 'drammen', 'drangedal', 'drobak', 'dyroy', 'egersund', 'eid', 'eidfjord', 'eidsberg', 'eidskog', 'eidsvoll', 'eigersund', 'elverum', 'enebakk', 'engerdal', 'etne', 'etnedal', 'evenassi', 'evenes', 'farsund', 'fauske', 'fedje', 'fet', 'fetsund', 'fhs', 'finnoy', 'fitjar', 'fjaler', 'fjell', 'fla', 'flakstad', 'flatanger', 'flekkefjord', 'flesberg', 'flora', 'floro', 'fm', 'folkebibl', 'folldal', 'forde', 'forsand', 'fosnes', 'frana', 'fredrikstad', 'frei', 'frogn', 'froland', 'frosta', 'froya', 'fuoisku', 'fuossko', 'fusa', 'fylkesbibl', 'fyresdal', 'gaivuotna', 'galsa', 'gamvik', 'gangaviika', 'gaular', 'gausdal', 'giehtavuoatna', 'gildeskal', 'giske', 'gjemnes', 'gjerdrum', 'gjerstad', 'gjesdal', 'gjovik', 'gloppen', 'gol', 'gran', 'grane', 'granvin', 'gratangen', 'grimstad', 'grong', 'grue', 'gulen', 'guovdageaidnu', 'ha', 'habmer', 'hadsel', 'hagebostad', 'halden', 'halsa', 'hamar', 'hamaroy', 'hammarfeasta', 'hammerfest', 'hapmir', 'haram', 'hareid', 'harstad', 'hasvik', 'hattfjelldal', 'haugesund', 'hemne', 'hemnes', 'hemsedal', 'herad', 'hitra', 'hjartdal', 'hjelmeland', 'hl', 'hm', 'hobol', 'hof', 'hokksund', 'hol', 'hole', 'holmestrand', 'holtalen', 'honefoss', 'hornindal', 'horten', 'hoyanger', 'hoylandet', 'hurdal', 'hurum', 'hvaler', 'hyllestad', 'ibestad', 'idrett', 'inderoy', 'iveland', 'ivgu', 'jessheim', 'jevnaker', 'jolster', 'jondal', 'jorpeland', 'kafjord', 'karasjohka', 'karasjok', 'karlsoy', 'karmoy', 'kautokeino', 'kirkenes', 'klabu', 'klepp', 'kommune', 'kongsberg', 'kongsvinger', 'kopervik', 'kraanghke', 'kragero', 'kristiansand', 'kristiansund', 'krodsherad', 'krokstadelva', 'kvafjord', 'kvalsund', 'kvam', 'kvanangen', 'kvinesdal', 'kvinnherad', 'kviteseid', 'kvitsoy', 'laakesvuemie', 'lahppi', 'langevag', 'lardal', 'larvik', 'lavagis', 'lavangen', 'leangaviika', 'lebesby', 'leikanger', 'leirfjord', 'leirvik', 'leka', 'leksvik', 'lenvik', 'lerdal', 'lesja', 'levanger', 'lier', 'lierne', 'lillehammer', 'lillesand', 'lindas', 'lindesnes', 'loabat', 'lodingen', 'lom', 'loppa', 'lorenskog', 'loten', 'lund', 'lunner', 'luroy', 'luster', 'lyngdal', 'lyngen', 'malatvuopmi', 'malselv', 'malvik', 'mandal', 'marker', 'marnardal', 'masfjorden', 'masoy', 'meland', 'meldal', 'melhus', 'meloy', 'meraker', 'midsund', 'mil', 'mjondalen', 'moareke', 'modalen', 'modum', 'molde', 'mosjoen', 'moskenes', 'moss', 'mosvik', 'mr', 'muosat', 'museum', 'naamesjevuemie', 'namdalseid', 'namsos', 'namsskogan', 'nannestad', 'naroy', 'narviika', 'narvik', 'naustdal', 'navuotna', 'nesna', 'nesodden', 'nesoddtangen', 'nesseby', 'nesset', 'nissedal', 'nittedal', 'nl', 'norddal', 'nordkapp', 'nordreisa', 'notodden', 'notteroy', 'nt', 'odda', 'of', 'oksnes', 'ol', 'omasvuotna', 'oppdal', 'oppegard', 'orkanger', 'orkdal', 'orland', 'orskog', 'orsta', 'osen', 'oslo', 'osoyro', 'osteroy', 'overhalla', 'oyer', 'oygarden', 'porsanger', 'porsangu', 'porsgrunn', 'priv', 'rade', 'radoy', 'rahkkeravju', 'raholt', 'raisa', 'rakkestad', 'ralingen', 'rana', 'randaberg', 'rauma', 'rendalen', 'rennebu', 'rennesoy', 'rindal', 'ringebu', 'ringerike', 'ringsaker', 'risor', 'rissa', 'rl', 'roan', 'rodoy', 'rollag', 'romsa', 'romskog', 'roros', 'rost', 'royken', 'royrvik', 'ruovat', 'rygge', 'salangen', 'salat', 'saltdal', 'samnanger', 'sandefjord', 'sandnes', 'sandnessjoen', 'sandoy', 'sarpsborg', 'sauda', 'sauherad', 'sel', 'selbu', 'selje', 'seljord', 'sf', 'siellak', 'sigdal', 'siljan', 'sirdal', 'skanit', 'skanland', 'skaun', 'skedsmo', 'skedsmokorset', 'ski', 'skien', 'skierva', 'skiptvet', 'skjak', 'skjervoy', 'skodje', 'slattum', 'smola', 'snaase', 'snasa', 'snillfjord', 'snoasa', 'sogndal', 'sogne', 'sokndal', 'sola', 'solund', 'somna', 'songdalen', 'sorfold', 'sorreisa', 'sortland', 'sorum', 'spjelkavik', 'spydeberg', 'st', 'stange', 'stat', 'stathelle', 'stavanger', 'stavern', 'steigen', 'steinkjer', 'stjordal', 'stjordalshalsen', 'stokke', 'stord', 'stordal', 'storfjord', 'strand', 'stranda', 'stryn', 'sula', 'suldal', 'sund', 'sunndal', 'surnadal', 'svalbard', 'sveio', 'svelvik', 'sykkylven', 'tana', 'tananger', 'time', 'tingvoll', 'tinn', 'tjeldsund', 'tjome', 'tm', 'tokke', 'tolga', 'tonsberg', 'torsken', 'tr', 'trana', 'tranby', 'tranoy', 'troandin', 'trogstad', 'tromsa', 'tromso', 'trondheim', 'trysil', 'tvedestrand', 'tydal', 'tynset', 'tysfjord', 'tysnes', 'tysvar', 'ullensaker', 'ullensvang', 'ulvik', 'unjarga', 'utsira', 'va', 'vaapste', 'vadso', 'vaga', 'vagan', 'vagsoy', 'vaksdal', 'valle', 'vang', 'vanylven', 'vardo', 'varggat', 'varoy', 'vefsn', 'vega', 'vegarshei', 'vennesla', 'verdal', 'verran', 'vestby', 'vestnes', 'vestvagoy', 'vevelstad', 'vf', 'vgs', 'vik', 'vikna', 'vindafjord', 'voagat', 'volda', 'voss', 'vossevangen', 'xn--andy-ira', 'xn--asky-ira', 'xn--aurskog-hland-jnb', 'xn--avery-yua', 'xn--bdddj-mrabd', 'xn--bearalvhki-y4a', 'xn--berlevg-jxa', 'xn--bhcavuotna-s4a', 'xn--bhccavuotna-k7a', 'xn--bidr-5nac', 'xn--bievt-0qa', 'xn--bjarky-fya', 'xn--bjddar-pta', 'xn--blt-elab', 'xn--bmlo-gra', 'xn--bod-2na', 'xn--brnny-wuac', 'xn--brnnysund-m8ac', 'xn--brum-voa', 'xn--btsfjord-9za', 'xn--davvenjrga-y4a', 'xn--dnna-gra', 'xn--drbak-wua', 'xn--dyry-ira', 'xn--eveni-0qa01ga', 'xn--finny-yua', 'xn--fjord-lra', 'xn--fl-zia', 'xn--flor-jra', 'xn--frde-gra', 'xn--frna-woa', 'xn--frya-hra', 'xn--ggaviika-8ya47h', 'xn--gildeskl-g0a', 'xn--givuotna-8ya', 'xn--gjvik-wua', 'xn--gls-elac', 'xn--h-2fa', 'xn--hbmer-xqa', 'xn--hcesuolo-7ya35b', 'xn--hgebostad-g3a', 'xn--hmmrfeasta-s4ac', 'xn--hnefoss-q1a', 'xn--hobl-ira', 'xn--holtlen-hxa', 'xn--hpmir-xqa', 'xn--hyanger-q1a', 'xn--hylandet-54a', 'xn--indery-fya', 'xn--jlster-bya', 'xn--jrpeland-54a', 'xn--karmy-yua', 'xn--kfjord-iua', 'xn--klbu-woa', 'xn--koluokta-7ya57h', 'xn--krager-gya', 'xn--kranghke-b0a', 'xn--krdsherad-m8a', 'xn--krehamn-dxa', 'xn--krjohka-hwab49j', 'xn--ksnes-uua', 'xn--kvfjord-nxa', 'xn--kvitsy-fya', 'xn--kvnangen-k0a', 'xn--l-1fa', 'xn--laheadju-7ya', 'xn--langevg-jxa', 'xn--ldingen-q1a', 'xn--leagaviika-52b', 'xn--lesund-hua', 'xn--lgrd-poac', 'xn--lhppi-xqa', 'xn--linds-pra', 'xn--loabt-0qa', 'xn--lrdal-sra', 'xn--lrenskog-54a', 'xn--lt-liac', 'xn--lten-gra', 'xn--lury-ira', 'xn--mely-ira', 'xn--merker-kua', 'xn--mjndalen-64a', 'xn--mlatvuopmi-s4a', 'xn--mli-tla', 'xn--mlselv-iua', 'xn--moreke-jua', 'xn--mosjen-eya', 'xn--mot-tla', 'xn--msy-ula0h', 'xn--mtta-vrjjat-k7af', 'xn--muost-0qa', 'xn--nmesjevuemie-tcba', 'xn--nry-yla5g', 'xn--nttery-byae', 'xn--nvuotna-hwa', 'xn--oppegrd-ixa', 'xn--ostery-fya', 'xn--osyro-wua', 'xn--porsgu-sta26f', 'xn--rady-ira', 'xn--rdal-poa', 'xn--rde-ula', 'xn--rdy-0nab', 'xn--rennesy-v1a', 'xn--rhkkervju-01af', 'xn--rholt-mra', 'xn--risa-5na', 'xn--risr-ira', 'xn--rland-uua', 'xn--rlingen-mxa', 'xn--rmskog-bya', 'xn--rros-gra', 'xn--rskog-uua', 'xn--rst-0na', 'xn--rsta-fra', 'xn--ryken-vua', 'xn--ryrvik-bya', 'xn--s-1fa', 'xn--sandnessjen-ogb', 'xn--sandy-yua', 'xn--seral-lra', 'xn--sgne-gra', 'xn--skierv-uta', 'xn--skjervy-v1a', 'xn--skjk-soa', 'xn--sknit-yqa', 'xn--sknland-fxa', 'xn--slat-5na', 'xn--slt-elab', 'xn--smla-hra', 'xn--smna-gra', 'xn--snase-nra', 'xn--sndre-land-0cb', 'xn--snes-poa', 'xn--snsa-roa', 'xn--sr-aurdal-l8a', 'xn--sr-fron-q1a', 'xn--sr-odal-q1a', 'xn--sr-varanger-ggb', 'xn--srfold-bya', 'xn--srreisa-q1a', 'xn--srum-gra', 'xn--stjrdal-s1a', 'xn--stjrdalshalsen-sqb', 'xn--stre-toten-zcb', 'xn--tjme-hra', 'xn--tnsberg-q1a', 'xn--trany-yua', 'xn--trgstad-r1a', 'xn--trna-woa', 'xn--troms-zua', 'xn--tysvr-vra', 'xn--unjrga-rta', 'xn--vads-jra', 'xn--vard-jra', 'xn--vegrshei-c0a', 'xn--vestvgy-ixa6o', 'xn--vg-yiab', 'xn--vgan-qoa', 'xn--vgsy-qoa0j', 'xn--vre-eiker-k8a', 'xn--vrggt-xqad', 'xn--vry-yla5g', 'xn--yer-zna', 'xn--ygarden-p1a', 'xn--ystre-slidre-ujb'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'np':
+ if (['aero', 'asia', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'jobs', 'mil', 'mobi', 'museum', 'name', 'net', 'org', 'pro', 'travel'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nr':
+ if (['biz', 'com', 'edu', 'gov', 'info', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'nz':
+ if (['ac', 'archie', 'co', 'cri', 'geek', 'gen', 'govt', 'health', 'iwi', 'kiwi', 'maori', 'mil', 'net', 'org', 'parliament', 'school', 'xn--mori-qsa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'om':
+ if (['co', 'com', 'edu', 'gov', 'med', 'museum', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'org':
+ if (wa[1] == 'eu' && wa[3] != undefined) {
+ if (['al', 'asso', 'at', 'au', 'be', 'bg', 'ca', 'cd', 'ch', 'cn', 'cy', 'cz', 'de', 'dk', 'edu', 'ee', 'es', 'fi', 'fr', 'gr', 'hr', 'hu', 'ie', 'il', 'in', 'int', 'is', 'it', 'jp', 'kr', 'lt', 'lu', 'lv', 'me', 'mk', 'mt', 'my', 'net', 'ng', 'nl', 'no', 'nz', 'pl', 'pt', 'ro', 'ru', 'se', 'si', 'sk', 'tr', 'uk', 'us'].includes(wa[2])) {
+ return wa[3] + '.' + wa[2] + '.' + wa[1] + '.' + wa[0];
+ }
+ };
+ if (['ae', 'eu', 'hk', 'jpn', 'js', 'us', 'za'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pa':
+ if (['abo', 'ac', 'com', 'edu', 'gob', 'ing', 'med', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pe':
+ if (['com', 'edu', 'gob', 'mil', 'net', 'nom', 'org', 'sld'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pf':
+ if (['com', 'org', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pg':
+ if (['com', 'net', 'ac', 'gov', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ph':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org', 'ngo', 'i'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pk':
+ if (['biz', 'com', 'edu', 'fam', 'gob', 'gok', 'gon', 'gop', 'gos', 'gov', 'info', 'net', 'org', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pl':
+ if (['agro', 'aid', 'art', 'atm', 'augustow', 'auto', 'babia-gora', 'bedzin', 'beskidy', 'bialowieza', 'bialystok', 'bielawa', 'bieszczady', 'biz', 'boleslawiec', 'bydgoszcz', 'bytom', 'cieszyn', 'com', 'czeladz', 'czest', 'dlugoleka', 'edu', 'elblag', 'elk', 'gda', 'gdansk', 'glogow', 'gmina', 'gniezno', 'gorlice', 'gov', 'grajewo', 'gsm', 'ilawa', 'info', 'jaworzno', 'jelenia-gora', 'jgora', 'kalisz', 'karpacz', 'kartuzy', 'kaszuby', 'katowice', 'kazimierz-dolny', 'kepno', 'ketrzyn', 'klodzko', 'kobierzyce', 'kolobrzeg', 'konin', 'konskowola', 'krakow', 'kutno', 'lapy', 'lebork', 'legnica', 'lezajsk', 'limanowa', 'lodz', 'lomza', 'lowicz', 'lubin', 'lublin', 'lukow', 'mail', 'malbork', 'malopolska', 'mazowsze', 'mazury', 'media', 'miasta', 'mielec', 'mielno', 'mil', 'mragowo', 'naklo', 'net', 'ngo', 'nieruchomosci', 'nom', 'nowaruda', 'nysa', 'olawa', 'olecko', 'olkusz', 'olsztyn', 'opoczno', 'opole', 'org', 'ostroda', 'ostroleka', 'ostrowiec', 'ostrowwlkp', 'pc', 'pila', 'pisz', 'podhale', 'podlasie', 'polkowice', 'pomorskie', 'pomorze', 'powiat', 'poznan', 'priv', 'prochowice', 'pruszkow', 'przeworsk', 'pulawy', 'radom', 'rawa-maz', 'realestate', 'rel', 'rybnik', 'rzeszow', 'sanok', 'sejny', 'sex', 'shop', 'sklep', 'skoczow', 'slask', 'slupsk', 'sos', 'sosnowiec', 'stalowa-wola', 'starachowice', 'stargard', 'suwalki', 'swidnica', 'swiebodzin', 'swinoujscie', 'szczecin', 'szczytno', 'szkola', 'targi', 'tarnobrzeg', 'tgory', 'tm', 'torun', 'tourism', 'travel', 'turek', 'turystyka', 'tychy', 'ustka', 'walbrzych', 'warmia', 'warszawa', 'waw', 'wegrow', 'wielun', 'wlocl', 'wloclawek', 'wodzislaw', 'wolomin', 'wroc', 'wroclaw', 'zachpomor', 'zagan', 'zarow', 'zgora', 'zgorzelec'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pn':
+ if (['in', 'co', 'eu', 'org', 'net', 'me', 'edu', 'gov'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pr':
+ if (['ac', 'biz', 'com', 'edu', 'est', 'gov', 'info', 'isla', 'name', 'net', 'org', 'pro', 'prof'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pro':
+ if (['aaa', 'aca', 'acct', 'eng', 'avocat', 'bar', 'jur', 'recht', 'law', 'med', 'cpa'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ps':
+ if (['edu', 'gov', 'sec', 'plo', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pt':
+ if (['com', 'edu', 'gov', 'int', 'net', 'nome', 'org', 'publ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'pw':
+ if (['co', 'ne', 'or', 'ed', 'go', 'belau'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'py':
+ if (['com', 'coop', 'edu', 'mil', 'gov', 'org', 'net', 'una'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'qa':
+ if (['com', 'edu', 'sch', 'gov', 'mil', 'net', 'org', 'name'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 're':
+ if (['asso', 'com', 'nom'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ro':
+ if (['arts', 'com', 'firm', 'info', 'nom', 'nt', 'org', 'rec', 'store', 'tm', 'www'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rs':
+ if (['ac', 'co', 'edu', 'gov', 'in', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ru':
+ if (['ac', 'adygeya', 'altai', 'amur', 'amursk', 'arkhangelsk', 'astrakhan', 'baikal', 'bashkiria', 'belgorod', 'bir', 'bryansk', 'buryatia', 'cap', 'cbg', 'chel', 'chelyabinsk', 'chita', 'chukotka', 'cmw', 'com', 'dagestan', 'e-burg', 'edu', 'fareast', 'gov', 'grozny', 'int', 'irkutsk', 'ivanovo', 'izhevsk', 'jamal', 'jar', 'joshkar-ola', 'k-uralsk', 'kalmykia', 'kaluga', 'kamchatka', 'karelia', 'kazan', 'kchr', 'kemerovo', 'khabarovsk', 'khakassia', 'khv', 'kirov', 'kms', 'koenig', 'komi', 'kostroma', 'krasnoyarsk', 'kuban', 'kurgan', 'kursk', 'kustanai', 'kuzbass', 'lipetsk', 'magadan', 'magnitka', 'mari', 'mari-el', 'marine', 'mil', 'mordovia', 'mos', 'mosreg', 'msk', 'murmansk', 'mytis', 'nakhodka', 'nalchik', 'net', 'nkz', 'nnov', 'norilsk', 'nov', 'novosibirsk', 'nsk', 'omsk', 'orenburg', 'org', 'oryol', 'oskol', 'palana', 'penza', 'perm', 'pp', 'pskov', 'ptz', 'pyatigorsk', 'rnd', 'rubtsovsk', 'ryazan', 'sakhalin', 'samara', 'saratov', 'simbirsk', 'smolensk', 'snz', 'spb', 'stavropol', 'stv', 'surgut', 'syzran', 'tambov', 'tatarstan', 'test', 'tlt', 'tom', 'tomsk', 'tsaritsyn', 'tsk', 'tula', 'tuva', 'tver', 'tyumen', 'udm', 'udmurtia', 'ulan-ude', 'vdonsk', 'vladikavkaz', 'vladimir', 'vladivostok', 'volgograd', 'vologda', 'voronezh', 'vrn', 'vyatka', 'yakutia', 'yamal', 'yaroslavl', 'yekaterinburg', 'yuzhno-sakhalinsk', 'zgrad'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'rw':
+ if (['gov', 'net', 'edu', 'ac', 'com', 'co', 'int', 'mil', 'gouv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sa':
+ if (['com', 'edu', 'gov', 'med', 'net', 'org', 'pub', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sb':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sc':
+ if (['com', 'edu', 'gov', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sd':
+ if (['com', 'edu', 'gov', 'info', 'med', 'net', 'org', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'se':
+ if (['a', 'ac', 'b', 'bd', 'brand', 'c', 'd', 'e', 'f', 'fh', 'fhsk', 'fhv', 'g', 'h', 'i', 'k', 'komforb', 'kommunalforbund', 'komvux', 'l', 'lanbib', 'm', 'n', 'naturbruksgymn', 'o', 'org', 'p', 'parti', 'pp', 'press', 'r', 's', 't', 'tm', 'u', 'w', 'x', 'y', 'z'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sg':
+ if (['com', 'edu', 'gov', 'idn', 'net', 'org', 'per'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sh':
+ if (['com', 'net', 'gov', 'org', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sl':
+ if (['com', 'net', 'edu', 'gov', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sn':
+ if (['art', 'com', 'edu', 'gouv', 'org', 'perso', 'univ'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'so':
+ if (['com', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'st':
+ if (['co', 'com', 'consulado', 'edu', 'embaixada', 'gov', 'mil', 'net', 'org', 'principe', 'saotome', 'store'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sv':
+ if (['edu', 'gov', 'com', 'org', 'red', 'gob'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sx':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sy':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'sz':
+ if (['co', 'ac', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'th':
+ if (['ac', 'co', 'go', 'in', 'mi', 'net', 'or'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tj':
+ if (['ac', 'aero', 'biz', 'co', 'com', 'coop', 'dyn', 'edu', 'go', 'gov', 'info', 'int', 'mil', 'museum', 'my', 'name', 'net', 'nic', 'org', 'per', 'pro', 'test', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tl':
+ if (wa[1] == 'gov') {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tm':
+ if (['com', 'co', 'org', 'net', 'nom', 'gov', 'mil', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tn':
+ if (['agrinet', 'com', 'defense', 'edunet', 'ens', 'fin', 'gov', 'ind', 'info', 'intl', 'mincom', 'nat', 'net', 'org', 'perso', 'rnrt', 'rns', 'rnu', 'tourism', 'turen'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'to':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tr':
+ if (['av', 'bbs', 'bel', 'biz', 'com', 'dr', 'edu', 'gen', 'gov', 'info', 'k12', 'kep', 'mil', 'name', 'nc', 'net', 'org', 'pol', 'tel', 'tv', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tt':
+ if (['co', 'com', 'org', 'net', 'biz', 'info', 'pro', 'int', 'coop', 'jobs', 'mobi', 'travel', 'museum', 'aero', 'name', 'gov', 'edu'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tw':
+ if (['club', 'com', 'ebiz', 'edu', 'game', 'gov', 'idv', 'mil', 'net', 'org', 'xn--czrw28b', 'xn--uc0atv', 'xn--zf0ao64a'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'tz':
+ if (['ac', 'co', 'go', 'hotel', 'info', 'me', 'mil', 'mobi', 'ne', 'or', 'sc', 'tv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ua':
+ if (['at', 'cherkassy', 'cherkasy', 'chernigov', 'chernihiv', 'chernivtsi', 'chernovtsy', 'ck', 'cn', 'co', 'com', 'cr', 'crimea', 'cv', 'dn', 'dnepropetrovsk', 'dnipropetrovsk', 'dominic', 'donetsk', 'dp', 'edu', 'gov', 'if', 'in', 'ivano-frankivsk', 'kh', 'kharkiv', 'kharkov', 'kherson', 'khmelnitskiy', 'khmelnytskyi', 'kiev', 'kirovograd', 'km', 'kr', 'krym', 'ks', 'kv', 'kyiv', 'lg', 'lt', 'lugansk', 'lutsk', 'lv', 'lviv', 'mk', 'mykolaiv', 'net', 'nikolaev', 'od', 'odesa', 'odessa', 'org', 'pl', 'poltava', 'pp', 'rivne', 'rovno', 'rv', 'sb', 'sebastopol', 'sevastopol', 'sm', 'sumy', 'te', 'ternopil', 'uz', 'uzhgorod', 'vinnica', 'vinnytsia', 'vn', 'volyn', 'yalta', 'zaporizhzhe', 'zaporizhzhia', 'zhitomir', 'zhytomyr', 'zp', 'zt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ug':
+ if (['co', 'ac', 'sc', 'go', 'ne', 'or', 'com', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uk':
+ if (['ac', 'bl', 'british-library', 'co', 'gov', 'govt', 'jcpc', 'jet', 'judiciary', 'lea', 'ltd', 'me', 'mil', 'mod', 'net', 'nhs', 'nic', 'nls', 'org', 'orgn', 'parliament', 'plc', 'police', 'royal', 'sch', 'supremecourt'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'us':
+ if (['aa', 'ae', 'ak', 'al', 'ap', 'ar', 'as', 'az', 'ca', 'cm', 'co', 'ct', 'cz', 'dc', 'de', 'dni', 'fed', 'fl', 'fm', 'ga', 'gu', 'hi', 'ia', 'id', 'il', 'in', 'isa', 'kids', 'ks', 'ky', 'la', 'ma', 'md', 'me', 'mh', 'mi', 'mn', 'mo', 'mp', 'ms', 'mt', 'nb', 'nc', 'nd', 'ne', 'nh', 'nj', 'nm', 'nsn', 'nv', 'ny', 'oh', 'ok', 'or', 'pa', 'pi', 'pr', 'pw', 'ri', 'sc', 'sd', 'tn', 'tt', 'tx', 'ut', 'va', 'vi', 'vt', 'wa', 'wi', 'wv', 'wy'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uy':
+ if (['com', 'edu', 'gub', 'net', 'mil', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'uz':
+ if (['co', 'com', 'org', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vc':
+ if (['com', 'edu', 'gov', 'mil', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 've':
+ if (['arts', 'co', 'com', 'e12', 'edu', 'firm', 'gob', 'gov', 'info', 'int', 'mil', 'net', 'org', 'radio', 'rec', 'store', 'tec', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vi':
+ if (['co', 'org', 'com', 'net', 'k12'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vn':
+ if (['ac', 'biz', 'com', 'edu', 'gov', 'health', 'info', 'int', 'mil', 'name', 'net', 'org', 'pro'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'vu':
+ if (['com', 'edu', 'net', 'org'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'ws':
+ if (['org', 'gov', 'edu', 'com', 'net'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--90a3ac':
+ if (['xn--o1ac', 'xn--c1avg', 'xn--90azh', 'xn--d1at', 'xn--o1ach', 'xn--80au'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--j6w193g':
+ if (['xn--55qx5d', 'xn--wcvs22d', 'xn--mxtq1m', 'xn--gmqw5a', 'xn--od0alg', 'xn--uc0atv'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'xn--o3cw4h':
+ if (['xn--12c1fe0br', 'xn--12co0c3b4eva', 'xn--h3cuzk1di', 'xn--o3cyx2a', 'xn--m3ch0j3a', 'xn--12cfi8ixb8l'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'za':
+ if (['ac', 'agric', 'alt', 'bourse', 'city', 'co', 'cybernet', 'db', 'edu', 'gov', 'grondar', 'iaccess', 'imt', 'inca', 'landesign', 'law', 'mil', 'net', 'ngo', 'nis', 'nom', 'olivetti', 'org', 'pix', 'school', 'tm', 'web'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zm':
+ if (['ac', 'biz', 'co', 'com', 'edu', 'gov', 'info', 'mil', 'net', 'org', 'sch'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ case 'zw':
+ if (['co', 'ac', 'org', 'gov', 'mil'].includes(wa[1])) {
+ return wa[2] + '.' + wa[1] + '.' + wa[0];
+ };
+ break;
+ }
+ return wa[1] + '.' + wa[0];
+}
+document.getElementById('sms').addEventListener('click', () => {
+ document.getElementById('smsa').style.display = 'none';
+ browser.storage.local.get().then(g => {
+ let iY = 0,
+ iN = 0,
+ iT, tmp, dom, akd = [];
+ Object.keys(g).forEach(a => {
+ if (!['ign1', 'ign2', 'obs', 'dbg', 'alt', 'lastU', 'lastV', 'cep', 'mul', 'opd', 'ldb'].includes(a) && (g[a] == 'y' || g[a] == 'n')) {
+ dom = get_realdomain(a);
+ if (!akd.includes(dom)) {
+ akd.push(dom);
+ if (g[a] == 'y') {
+ iY++;
+ } else {
+ iN++;
+ }
+ }
+ }
+ });
+ iT = iY + iN;
+ if (iT > 0) {
+ tmp = (iY * 100 / iT).toFixed(1);
+ document.getElementById('viry').innerText = iY + ' (' + tmp + '%)';
+ tmp = (iN * 100 / iT).toFixed(1);
+ document.getElementById('virn').innerText = iN + ' (' + tmp + '%)';
+ document.getElementById('viro').innerText = (iY + iN);
+ } else {
+ document.getElementById('viry').innerText = 0;
+ document.getElementById('virn').innerText = 0;
+ document.getElementById('viro').innerText = 0;
+ }
+ document.getElementById('smsb').style.display = 'inline';
+ });
+});
\ No newline at end of file
diff --git a/addons/ismitmlinkFX/cs.js b/addons/ismitmlinkFX/cs.js
new file mode 100644
index 000000000..8ebc4f961
--- /dev/null
+++ b/addons/ismitmlinkFX/cs.js
@@ -0,0 +1,76 @@
+if (document.body && !['ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org'].includes(location.hostname)) {
+ let cs = (function () {
+ let s = document.createElement('style');
+ document.head.appendChild(s);
+ return s.sheet;
+ })();
+ if (cs) {
+ cs.insertRule("a[data-mitm=y]{cursor:not-allowed !important;text-decoration-line:line-through !important;text-decoration-color:red !important;text-decoration-style:double !important}", 0);
+ cs.insertRule("a[data-mitm=y]::before{content:'[\\26A0]';font-weight:bold !important;color:red !important;display:inline-block !important}", 1);
+ cs.insertRule("a[data-mitm=y]:hover::before{content:'[\\26A1]'}", 2);
+ cs.insertRule("a[data-mitm=y]:hover{color:red !important}", 3);
+ cs.insertRule("img[data-mitm=y]{cursor:not-allowed !important;border:2px red dotted !important}", 4);
+ cs.insertRule("img[data-mitm=y]:hover{filter:sepia(20%)}", 5);
+ }
+ browser.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt']).then(g => {
+ let asked = ['', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org', 'addons.mozilla.org', 'addons.thunderbird.net', 'web.archive.org', 't.co'];
+ if (g.ign1 == 'y') {
+ asked.push(location.hostname);
+ }
+ let qstall = (g.ign2 == 'y') ? 'a[href]:not([data-mitm])' : 'a[href]:not([data-mitm]),img[src]:not([data-mitm])';
+ let running = false;
+ function scanme() {
+ if (!running) {
+ running = true;
+ let unknown = [];
+ document.querySelectorAll(qstall).forEach(a => {
+ let aF = (a.tagName == 'A' ? (new URL(a.href)).hostname : (new URL(a.src)).hostname) || '';
+ a.dataset.mitm = aF;
+ if (!asked.includes(aF)) {
+ asked.push(aF);
+ if (!/^(.*)\.(danwin1210\.me|wikipedia\.org|onion|i2p|invalid|test|local|localhost|([0-9]{1,3})|bbs|chan|cyb|dyn|geek|gopher|indy|libre|neo|null|o|oss|oz|parody|pirate|bit|lib|coin|emc|bazar|fur)$/.test(aF) && aF.length >= 4) {
+ unknown.push(aF);
+ }
+ }
+ });
+ if (unknown.length > 0) {
+ browser.runtime.sendMessage(unknown);
+ }
+ running = false;
+ }
+ }
+ browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
+ if (request.length == 2) {
+ if (g.dbg == 'y') {
+ console.log('isMITM:', request[0], request[1]);
+ }
+ document.querySelectorAll(g.ign2 == 'y' ? "a[href][data-mitm='" + request[0] + "']" : "a[href][data-mitm='" + request[0] + "'],img[src][data-mitm='" + request[0] + "']").forEach(a => {
+ if (request[1]) {
+ a.dataset.mitm = 'y';
+ if (g.alt == 'y' && a.tagName == 'A') {
+ if (!a.href.startsWith('https://web.archive.org/web/')) {
+ a.href = 'https://web.archive.org/web/' + a.href;
+ }
+ a.title = 'Arkivo!';
+ } else {
+ a.title = 'MITM!';
+ }
+ } else {
+ a.dataset.mitm = 'n';
+ }
+ });
+ }
+ sendResponse(true);
+ return;
+ });
+ scanme();
+ if (g.obs == 'y') {
+ (new MutationObserver(scanme)).observe(document, {
+ attributes: true,
+ attributeFilter: ['href'],
+ childList: true,
+ subtree: true
+ });
+ }
+ });
+}
\ No newline at end of file
diff --git a/addons/ismitmlinkFX/localdb.html b/addons/ismitmlinkFX/localdb.html
new file mode 100644
index 000000000..5e358f85c
--- /dev/null
+++ b/addons/ismitmlinkFX/localdb.html
@@ -0,0 +1,17 @@
+
+
+
+ 🗄
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/ismitmlinkFX/localdb.js b/addons/ismitmlinkFX/localdb.js
new file mode 100644
index 000000000..d2b25c56e
--- /dev/null
+++ b/addons/ismitmlinkFX/localdb.js
@@ -0,0 +1,67 @@
+let irun = false;
+document.addEventListener('DOMContentLoaded', () => {
+ browser.storage.local.get(['mul']).then(g => {
+ let ul = g.mul || 'eo';
+ fetch('i18n/' + ul + '.json', {
+ method: 'GET'
+ }).then(j => j.json()).then(j => {
+ document.querySelectorAll('span[tek]').forEach(x => {
+ x.innerText = j[x.getAttribute('tek')];
+ });
+ document.body.style.display = 'block';
+ });
+ });
+});
+document.getElementById('f').addEventListener('change', e => {
+ let ff = e.target.files[0];
+ if (ff) {
+ let r = new FileReader();
+ r.addEventListener('load', e => {
+ if (ff.size > 4) {
+ let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
+ if (g.length > 0) {
+ browser.storage.local.get(['ldb']).then(gs => {
+ irun = true;
+ let cnt0, cnt1 = 0,
+ gc = 1,
+ db = JSON.parse(gs.ldb || '[]');
+ cnt0 = db.length;
+ document.getElementById('pbr').max = g.length;
+ g.forEach(x => {
+ document.getElementById('pbr').value = gc;
+ gc++;
+ if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
+ db.push(x);
+ }
+ });
+ g = null;
+ cnt1 = db.length;
+ if (cnt1 != cnt0) {
+ browser.storage.local.set({
+ 'ldb': JSON.stringify(db)
+ });
+ }
+ browser.runtime.sendMessage('dbmode,rl').then(() => {
+ alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
+ location.reload();
+ });
+ });
+ }
+ }
+ });
+ r.readAsText(ff);
+ }
+});
+document.getElementById('ldb_i').addEventListener('click', () => {
+ if (!irun) {
+ document.getElementById('f').click();
+ }
+});
+document.getElementById('ldb_c').addEventListener('click', () => {
+ if (!irun) {
+ browser.runtime.sendMessage('dbmode,cl').then(() => {
+ alert(document.querySelector('span[tek=opxdone]').innerText);
+ location.reload();
+ });
+ }
+});
\ No newline at end of file
diff --git a/addons/ismitmlinkFX/manifest.json b/addons/ismitmlinkFX/manifest.json
new file mode 100644
index 000000000..7c7bcf55e
--- /dev/null
+++ b/addons/ismitmlinkFX/manifest.json
@@ -0,0 +1,43 @@
+{
+ "manifest_version": 2,
+ "name": "Ĉu ligoj estas vundeblaj al MITM-atako?",
+ "description": "Skanu FQDN uzante la API de Ss",
+ "version": "1.0.20.2",
+ "homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
+ "author": "Ss",
+ "permissions": [
+ "storage",
+ "unlimitedStorage"
+ ],
+ "icons": {
+ "72": "icons/72.png"
+ },
+ "background": {
+ "scripts": [
+ "bg.js"
+ ]
+ },
+ "content_scripts": [
+ {
+ "matches": [
+ "http://*/*",
+ "https://*/*"
+ ],
+ "js": [
+ "cs.js"
+ ],
+ "run_at": "document_end"
+ }
+ ],
+ "options_ui": {
+ "browser_style": true,
+ "page": "cfg.html"
+ },
+ "applications": {
+ "gecko": {
+ "id": "ismitmlink@searxes.danwin1210.me",
+ "strict_min_version": "68.0",
+ "update_url":"https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=ismitmlink"
+ }
+ }
+}
\ No newline at end of file
diff --git a/addons/urejectCR/README.md b/addons/urejectCR/README.md
new file mode 100644
index 000000000..b8def84d4
--- /dev/null
+++ b/addons/urejectCR/README.md
@@ -0,0 +1,2 @@
+- [More Information / Download](../../subfiles/about.urjm.md)
+- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
\ No newline at end of file
diff --git a/addons/urejectCR/bg.js b/addons/urejectCR/bg.js
new file mode 100644
index 000000000..ba904ca74
--- /dev/null
+++ b/addons/urejectCR/bg.js
@@ -0,0 +1,34 @@
+let history = {};
+chrome.webRequest.onResponseStarted.addListener(i => {
+ if ([403, 406, 410, 429, 451, 462].includes(i.statusCode)) {
+ let iFQDN = (new URL(i.url)).hostname;
+ if (['searxes.eu.org', 'ansero.eu.org', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion'].includes(iFQDN)) {
+ return;
+ }
+ let iServer = '?';
+ i.responseHeaders.forEach(x => {
+ if (x.name == 'Server' || x.name == 'server') {
+ iServer = x.value;
+ }
+ });
+ history[iFQDN] = [i.url, iServer, i.statusCode, (new Date()).toUTCString()];
+ }
+ return;
+}, {
+ urls: ['http://*/*', 'https://*/*'],
+ types: ['main_frame']
+}, ['responseHeaders']);
+chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
+ if (request && sender) {
+ if (request == 'get') {
+ sendResponse(history);
+ }
+ if (request == 'clear') {
+ history = {};
+ sendResponse(true);
+ }
+ }
+});
+chrome.browserAction.onClicked.addListener(() => {
+ chrome.runtime.openOptionsPage();
+});
\ No newline at end of file
diff --git a/addons/urejectCR/log.html b/addons/urejectCR/log.html
new file mode 100644
index 000000000..bcbc89c81
--- /dev/null
+++ b/addons/urejectCR/log.html
@@ -0,0 +1,20 @@
+
+
+
+
+ 📝
+
+
+
+ Detaloj
+
+
+
+
+ Nur FQDN
+
+
+
+
\ No newline at end of file
diff --git a/addons/urejectCR/log.js b/addons/urejectCR/log.js
new file mode 100644
index 000000000..5117e5de5
--- /dev/null
+++ b/addons/urejectCR/log.js
@@ -0,0 +1,18 @@
+function newrow(w) {
+ let tt = document.getElementsByTagName('tbody')[0];
+ let tr = tt.insertRow(tt.rows.length);
+ tr.innerHTML = w;
+}
+newrow('FQDN | Servilo | Stato | Kie | Kiam |
');
+chrome.runtime.sendMessage('get', g => {
+ for (let k in g) {
+ newrow('' + k + ' | ' + g[k][1] + ' | ' + g[k][2] + ' | 🔗 | ' + g[k][3] + ' |
');
+ document.getElementById('export').innerHTML += k + "\n";
+ }
+});
+document.body.style.display = 'block';
+document.getElementById('clear').addEventListener('click', () => {
+ chrome.runtime.sendMessage('clear', () => {
+ location.reload(true);
+ });
+});
\ No newline at end of file
diff --git a/addons/urejectCR/manifest.json b/addons/urejectCR/manifest.json
new file mode 100644
index 000000000..7f361cbe0
--- /dev/null
+++ b/addons/urejectCR/manifest.json
@@ -0,0 +1,31 @@
+{
+ "manifest_version": 2,
+ "name": "Kiu retejo malakceptis min?",
+ "version": "1.0.2",
+ "minimum_chrome_version": "60",
+ "homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
+ "author": "Ss",
+ "incognito": "split",
+ "permissions": [
+ "webRequest",
+ ""
+ ],
+ "icons": {
+ "72": "icons/72.png"
+ },
+ "background": {
+ "scripts": [
+ "bg.js"
+ ]
+ },
+ "options_ui": {
+ "open_in_tab": true,
+ "chrome_style": false,
+ "page": "log.html"
+ },
+ "browser_action": {
+ "default_icon": {
+ "72": "icons/72.png"
+ }
+ }
+}
\ No newline at end of file
diff --git a/addons/urejectFX/README.md b/addons/urejectFX/README.md
new file mode 100644
index 000000000..b8def84d4
--- /dev/null
+++ b/addons/urejectFX/README.md
@@ -0,0 +1,2 @@
+- [More Information / Download](../../subfiles/about.urjm.md)
+- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
\ No newline at end of file
diff --git a/addons/urejectFX/bg.js b/addons/urejectFX/bg.js
new file mode 100644
index 000000000..910ac7ecf
--- /dev/null
+++ b/addons/urejectFX/bg.js
@@ -0,0 +1,34 @@
+let history = {};
+browser.webRequest.onResponseStarted.addListener(i => {
+ if ([403, 406, 410, 429, 451, 462].includes(i.statusCode)) {
+ let iFQDN = (new URL(i.url)).hostname;
+ if (['searxes.eu.org', 'ansero.eu.org', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion'].includes(iFQDN)) {
+ return;
+ }
+ let iServer = '?';
+ i.responseHeaders.forEach(x => {
+ if (x.name == 'Server' || x.name == 'server') {
+ iServer = x.value;
+ }
+ });
+ history[iFQDN] = [i.url, iServer, i.statusCode, (new Date()).toUTCString()];
+ }
+ return;
+}, {
+ urls: ['http://*/*', 'https://*/*'],
+ types: ['main_frame']
+}, ['responseHeaders']);
+browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
+ if (request && sender) {
+ if (request == 'get') {
+ sendResponse(history);
+ }
+ if (request == 'clear') {
+ history = {};
+ sendResponse(true);
+ }
+ }
+});
+browser.browserAction.onClicked.addListener(() => {
+ browser.runtime.openOptionsPage();
+});
\ No newline at end of file
diff --git a/addons/urejectFX/log.html b/addons/urejectFX/log.html
new file mode 100644
index 000000000..bcbc89c81
--- /dev/null
+++ b/addons/urejectFX/log.html
@@ -0,0 +1,20 @@
+
+
+
+
+ 📝
+
+
+
+ Detaloj
+
+
+
+
+ Nur FQDN
+
+
+
+
\ No newline at end of file
diff --git a/addons/urejectFX/log.js b/addons/urejectFX/log.js
new file mode 100644
index 000000000..3ea31c605
--- /dev/null
+++ b/addons/urejectFX/log.js
@@ -0,0 +1,18 @@
+function newrow(w) {
+ let tt = document.getElementsByTagName('tbody')[0];
+ let tr = tt.insertRow(tt.rows.length);
+ tr.innerHTML = w;
+}
+newrow('FQDN | Servilo | Stato | Kie | Kiam |
');
+browser.runtime.sendMessage('get').then(g => {
+ for (let k in g) {
+ newrow('' + k + ' | ' + g[k][1] + ' | ' + g[k][2] + ' | 🔗 | ' + g[k][3] + ' |
');
+ document.getElementById('export').innerHTML += k + "\n";
+ }
+});
+document.body.style.display = 'block';
+document.getElementById('clear').addEventListener('click', () => {
+ browser.runtime.sendMessage('clear').then(() => {
+ location.reload(true);
+ });
+});
\ No newline at end of file
diff --git a/addons/urejectFX/manifest.json b/addons/urejectFX/manifest.json
new file mode 100644
index 000000000..256d65b8e
--- /dev/null
+++ b/addons/urejectFX/manifest.json
@@ -0,0 +1,38 @@
+{
+ "manifest_version": 2,
+ "name": "Kiu retejo malakceptis min?",
+ "description": "Via retejo malakceptis min, sed mi scias ke mi fartos bone.",
+ "version": "1.0.2",
+ "homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
+ "author": "Ss",
+ "permissions": [
+ "webRequest",
+ ""
+ ],
+ "icons": {
+ "72": "icons/72.png"
+ },
+ "background": {
+ "scripts": [
+ "bg.js"
+ ]
+ },
+ "options_ui": {
+ "browser_style": false,
+ "open_in_tab": true,
+ "page": "log.html"
+ },
+ "browser_action": {
+ "browser_style": true,
+ "default_icon": {
+ "72": "icons/72.png"
+ }
+ },
+ "applications": {
+ "gecko": {
+ "id": "urejectme@searxes.eu.org",
+ "strict_min_version": "60.0",
+ "update_url": "https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=ureject"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tool/userscript.cf_email_decoder.js b/tool/userscript.cf_email_decoder.js
new file mode 100644
index 000000000..da90432dd
--- /dev/null
+++ b/tool/userscript.cf_email_decoder.js
@@ -0,0 +1,52 @@
+// ==UserScript==
+// @name Decode Cloudflare-encoded email addresses
+// @original https://codeberg.org/smege1001/cf_email_decoder
+// @match *://*/*
+// @grant none
+// @version 1.0
+// @author smege1001
+// ==/UserScript==
+
+/**
+* @license CC0-1.0
+**/
+
+const emailprotectionURLHashRegex = /\/cdn-cgi\/l\/email-protection#([aA0-fF9]*)/;
+const emailprotectionURLNoHashRegex = /\/cdn-cgi\/l\/email-protection/; //hash is stored on data-cfemail
+
+function decodeEmail(hash) { //cloudflare email address decoder
+ var hashArray = []; //split the hash into bytes
+ for (var hAIndex = 0; hAIndex < hash.length; hAIndex += 2) {
+ hashArray.push(parseInt(hash.substring(hAIndex, hAIndex + 2), 16));
+ }
+
+ var decoded = "";
+ var key = hashArray[0]; //get the decode key
+
+ for (var index = 1; index < hashArray.length; index++) {
+ decoded += String.fromCharCode(hashArray[index] ^ key);
+ }
+ return decoded;
+}
+
+var links = document.querySelectorAll("a"); //get all the links
+
+for (var linksIndex = 0; linksIndex < links.length; linksIndex++) {
+ var link = links[linksIndex];
+ if (emailprotectionURLHashRegex.test(link.href)) {
+ var hash = link.href.match(emailprotectionURLHashRegex)[1];
+ link.href = "mailto:" + decodeEmail(hash); //replace the stupid email protection with just a mailto link
+ } else if (emailprotectionURLNoHashRegex.test(link.href) && link.hasAttribute("data-cfemail")) {
+ var hash = link.getAttribute("data-cfemail");
+ var decodedEmail = decodeEmail(hash);
+
+ link.href = "mailto:" + decodedEmail;
+ link.innerText = decodedEmail; //the inner text is just [email protected]
+
+ //remove the useless attributes
+ link.removeAttribute("data-cfemail");
+ link.classList.remove("__cf_email__");
+
+ if (link.getAttribute("class") == "") link.removeAttribute("class");
+ }
+}