From 24992e26ed4734fb5e080037d62e90b421b91be9 Mon Sep 17 00:00:00 2001
From: Thomas Rientjes <synzvato@protonmail.com>
Date: Fri, 29 Jun 2018 15:16:50 +0200
Subject: [PATCH] Update and refactor existing codebase

---
 .extensionrc                                  |   9 ++
 .gitignore                                    |   1 +
 README.md                                     |  35 ++++----
 core/constants.js                             |   5 ++
 core/file-guard.js                            |   8 +-
 core/interceptor.js                           |   9 +-
 core/main.js                                  |   2 +-
 core/mappings.js                              |  22 +++++
 core/state-manager.js                         |  80 +++++++++++++++---
 icons/action/icon16-default.png               | Bin 0 -> 608 bytes
 icons/action/icon16-disabled.png              | Bin 0 -> 540 bytes
 .../action/{icon18.png => icon18-default.png} | Bin
 icons/action/icon18-disabled.png              | Bin 0 -> 596 bytes
 .../action/{icon19.png => icon19-default.png} | Bin
 icons/action/icon19-disabled.png              | Bin 0 -> 629 bytes
 .../action/{icon32.png => icon32-default.png} | Bin
 icons/action/icon32-disabled.png              | Bin 0 -> 1026 bytes
 .../action/{icon36.png => icon36-default.png} | Bin
 icons/action/icon36-disabled.png              | Bin 0 -> 1143 bytes
 .../action/{icon38.png => icon38-default.png} | Bin
 icons/action/icon38-disabled.png              | Bin 0 -> 1183 bytes
 .../action/{icon64.png => icon64-default.png} | Bin
 icons/action/icon64-disabled.png              | Bin 0 -> 1924 bytes
 manifest.json                                 |  13 +--
 modules/fontawesome/icon-bundle.min.js        |   2 +-
 modules/internal/helpers.js                   |   6 ++
 modules/internal/wrappers.js                  |   7 ++
 pages/background/background.html              |   4 +-
 pages/options/options.html                    |   2 +-
 pages/popup/popup.html                        |   2 +-
 pages/welcome/logo.svg                        |  19 ++---
 pages/welcome/welcome.css                     |   4 +-
 pages/welcome/welcome.html                    |   6 +-
 33 files changed, 168 insertions(+), 68 deletions(-)
 create mode 100644 .extensionrc
 create mode 100644 icons/action/icon16-default.png
 create mode 100644 icons/action/icon16-disabled.png
 rename icons/action/{icon18.png => icon18-default.png} (100%)
 create mode 100644 icons/action/icon18-disabled.png
 rename icons/action/{icon19.png => icon19-default.png} (100%)
 create mode 100644 icons/action/icon19-disabled.png
 rename icons/action/{icon32.png => icon32-default.png} (100%)
 create mode 100644 icons/action/icon32-disabled.png
 rename icons/action/{icon36.png => icon36-default.png} (100%)
 create mode 100644 icons/action/icon36-disabled.png
 rename icons/action/{icon38.png => icon38-default.png} (100%)
 create mode 100644 icons/action/icon38-disabled.png
 rename icons/action/{icon64.png => icon64-default.png} (100%)
 create mode 100644 icons/action/icon64-disabled.png

diff --git a/.extensionrc b/.extensionrc
new file mode 100644
index 0000000..7be6783
--- /dev/null
+++ b/.extensionrc
@@ -0,0 +1,9 @@
+module.exports = {
+
+    'artifactsDir': 'artifacts',
+    'ignoreFiles': ['crowdin.yaml'],
+
+    'build': {
+        'overwriteDest': true
+    }
+};
diff --git a/.gitignore b/.gitignore
index ec05012..629b343 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
+artifacts
 audit/node_modules
 audit/report.txt
diff --git a/README.md b/README.md
index 3f12fa5..6ea09fd 100644
--- a/README.md
+++ b/README.md
@@ -1,35 +1,30 @@
-Decentraleyes (Experimental)
+Decentraleyes (Chromium)
 =============
 
-A reimplementation of current features of Decentraleyes. This project will help bring Decentraleyes to WebExtensions (Firefox 57 and higher), as well as Chromium-based browsers, Opera, and possibly even Edge.
+A [web browser extension](https://decentraleyes.org) that emulates Content Delivery Networks to improve your online privacy. It intercepts traffic, finds supported resources locally, and injects them into the environment. All of this happens automatically, so no prior configuration is required. Feel free to use the following [testing utility](https://decentraleyes.org/test/) to find out if you are properly protected. For more information, please read this [basic introduction](https://git.synz.io/Synzvato/decentraleyes/wikis/Simple-Introduction).
 
-## Changelog
+> **Note:** Decentraleyes is no silver bullet, but it does prevent a lot of websites from making you send these kinds of requests. Ultimately, you can make Decentraleyes block requests for any missing CDN resources, too.
 
-Below is a list of all notable changes made to the reimplementation project to date. This includes, but is most certainly not limited to, records of changes such as bug fixes, and new, removed, and updated features.
+## Contributing Code
 
-### v1.3.7.5
+Suggestions in the form of **Issues**, and contributions in the form of **Merge Requests**, are highly welcome. Code **Forks** can be requested from within issues, or via email. You can use the contact details and public PGP key on the extension's [contact page](https://decentraleyes.org/contact/) to get in touch.
 
-* Fix Subresource Integrity (SRI) validation issues.
-* Implement context stripping for allowed CDN requests.
-* Implement request filters to improve performance.
+#### Prerequisites
 
-### v1.3.7.4
+* Chromium / Chrome 58 *(or higher)*.
 
-* Fix rare injection counter issue.
+> **Note:** If you want to contribute to the Firefox Quantum extension, please check out the ```master``` branch. If you are looking for the Firefox legacy extension codebase, please see the ```legacy``` branch.
 
-### v1.3.7.3
+#### Running the Code
 
-* Improve injection state management _(requires a new permission)_.
-* Implement injection overview and icon badge.
+Please read this [developer guide](https://developer.chrome.com/extensions/getstarted) for information on how to run the extension from source.
 
-### v1.3.7.2
+> **Important:** All tagged commits since 26 October 2016 are signed with GPG. It's likely best to ignore unsigned commits, unless you really know what you're doing. Please send an email if you have any questions or security concerns.
 
-* Fix popup icon display issue.
+## Submitting Translations
 
-### v1.3.7.1
+Do you master a non-supported language? Please help out by translating this add-on on [Crowdin](https://crowdin.com/project/decentraleyes).
 
-* Improve compatibility with HTTPS Everywhere.
+## License
 
-### v1.3.7
-
-* Initial release.
+[MPL-2.0](https://www.mozilla.org/MPL/2.0).
diff --git a/core/constants.js b/core/constants.js
index 2681915..5bbc13e 100644
--- a/core/constants.js
+++ b/core/constants.js
@@ -21,10 +21,14 @@ const Address = {
     'ANY': '*://*/*',
     'ANY_PATH': '/*',
     'ANY_PROTOCOL': '*://',
+    'CHROME': 'chrome:',
     'CHROME_EXTENSION': 'chrome-extension:',
+    'DECENTRALEYES': 'decentraleyes.org',
     'EXAMPLE': 'example.org',
     'HTTP': 'http:',
     'HTTPS': 'https:',
+    'RESOURCE_PATH': '/resources',
+    'ROOT_PATH': '/',
     'WWW_PREFIX': 'www.'
 };
 
@@ -63,6 +67,7 @@ const WebRequest = {
 };
 
 const WebRequestType = {
+    'MAIN_FRAME': 'main_frame',
     'XHR': 'xmlhttprequest'
 };
 
diff --git a/core/file-guard.js b/core/file-guard.js
index 004348e..fc71543 100644
--- a/core/file-guard.js
+++ b/core/file-guard.js
@@ -2,7 +2,7 @@
  * File Guard
  * Belongs to Decentraleyes.
  *
- * @see https://github.com/Synzvato/decentraleyes/pull/258
+ * @see https://git.synz.io/Synzvato/decentraleyes/merge_requests/258
  *
  * @author      Thomas Rientjes
  * @since       2018-05-17
@@ -32,14 +32,14 @@ fileGuard._startListening = function () {
 
     chrome.webRequest.onBeforeRequest.addListener(
         fileGuard._verifyRequest,
-        {'urls': [`${fileGuard.path}/*`]},
+        {'urls': [fileGuard.path + Address.ANY_PATH]},
         [WebRequest.BLOCKING]
     );
 };
 
 fileGuard._verifyRequest = function (requestDetails) {
 
-    let redirectUrl = chrome.runtime.getURL('/');
+    let redirectUrl = chrome.runtime.getURL(Address.ROOT_PATH);
 
     if (!requestDetails.url.endsWith(fileGuard.secret)) {
         return {redirectUrl};
@@ -50,7 +50,7 @@ fileGuard._verifyRequest = function (requestDetails) {
  * Initializations
  */
 
-fileGuard.path = chrome.runtime.getURL('/resources');
+fileGuard.path = chrome.runtime.getURL(Address.RESOURCE_PATH);
 fileGuard.secret = '';
 
 if (fileGuard.path.startsWith(Address.CHROME_EXTENSION)) {
diff --git a/core/interceptor.js b/core/interceptor.js
index 2d7be1a..6ca3506 100644
--- a/core/interceptor.js
+++ b/core/interceptor.js
@@ -83,10 +83,7 @@ interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) {
     };
 
     if (undetectableTaintedDomains[tabDomain] || (/yandex\./).test(tabDomain)) {
-
-        if (tabDomain !== 'yandex.ru') {
-            return interceptor._handleMissingCandidate(requestDetails.url);
-        }
+        return interceptor._handleMissingCandidate(requestDetails.url);
     }
 
     targetDetails = requestAnalyzer.getLocalTarget(requestDetails);
@@ -157,7 +154,7 @@ interceptor._handleStorageChanged = function (changes) {
  */
 
 interceptor.amountInjected = 0;
-interceptor.xhrTestDomain = 'decentraleyes.org';
+interceptor.xhrTestDomain = Address.DECENTRALEYES;
 interceptor.blockMissing = false;
 
 interceptor.relatedSettings = [];
@@ -169,7 +166,7 @@ interceptor.relatedSettings.push(Setting.BLOCK_MISSING);
 chrome.storage.local.get(interceptor.relatedSettings, function (items) {
 
     interceptor.amountInjected = items.amountInjected || 0;
-    interceptor.xhrTestDomain = items.xhrTestDomain || 'decentraleyes.org';
+    interceptor.xhrTestDomain = items.xhrTestDomain || Address.DECENTRALEYES;
     interceptor.blockMissing = items.blockMissing || false;
 });
 
diff --git a/core/main.js b/core/main.js
index 30454ba..4bb1edd 100644
--- a/core/main.js
+++ b/core/main.js
@@ -26,7 +26,7 @@ var main = {};
 main._initializeOptions = function () {
 
     let optionDefaults = {
-        [Setting.XHR_TEST_DOMAIN]: 'decentraleyes.org',
+        [Setting.XHR_TEST_DOMAIN]: Address.DECENTRALEYES,
         [Setting.SHOW_ICON_BADGE]: true,
         [Setting.BLOCK_MISSING]: false,
         [Setting.DISABLE_PREFETCH]: true,
diff --git a/core/mappings.js b/core/mappings.js
index 63481f2..2f2a8b4 100644
--- a/core/mappings.js
+++ b/core/mappings.js
@@ -235,6 +235,28 @@ var mappings = {
             'modernizr/modernizr-{version}.': resources.modernizr,
             'mootoolscore/mootools.core-{version}.': resources.mootools
         }
+    },
+    // BootCDN
+    'cdn.bootcss.com': {
+        '/': {
+            'angular.js/{version}/angular.': resources.angular,
+            'backbone.js/{version}/backbone.': resources.backbone,
+            'backbone.js/{version}/backbone-min.': resources.backbone,
+            'dojo/{version}/dojo.': resources.dojo,
+            'ember.js/{version}/ember.': resources.ember,
+            'ext-core/{version}/ext-core.': resources.extCore,
+            'jquery/{version}/jquery.': resources.jQuery,
+            'jqueryui/{version}/jquery-ui.js': resources.jQueryUI,
+            'jqueryui/{version}/jquery-ui.min.js': resources.jQueryUI,
+            'modernizr/{version}/modernizr.': resources.modernizr,
+            'mootools/{version}/mootools-yui-compressed.': resources.mootools,
+            'prototype/{version}/prototype.': resources.prototypeJS,
+            'scriptaculous/{version}/scriptaculous.': resources.scriptaculous,
+            'swfobject/{version}/swfobject.': resources.swfobject,
+            'underscore.js/{version}/underscore.': resources.underscore,
+            'underscore.js/{version}/underscore-min.': resources.underscore,
+            'webfont/{version}/webfontloader.': resources.webfont
+        }
     }
 };
 
diff --git a/core/state-manager.js b/core/state-manager.js
index ba7d472..0620c34 100644
--- a/core/state-manager.js
+++ b/core/state-manager.js
@@ -33,9 +33,14 @@ stateManager.registerInjection = function (tabIdentifier, injection) {
     registeredTab.injections[injectionIdentifier] = injection;
     injectionCount = Object.keys(registeredTab.injections).length || 0;
 
-    if (stateManager.showIconBadge === true) {
+    if (injectionCount > 0) {
 
-        if (injectionCount > 0) {
+        chrome.browserAction.setTitle({
+            'tabId': tabIdentifier,
+            'title': `Decentraleyes (${injectionCount})`
+        });
+
+        if (stateManager.showIconBadge === true) {
 
             wrappers.setBadgeText({
                 'tabId': tabIdentifier,
@@ -100,7 +105,6 @@ stateManager._createTab = function (tab) {
     };
 
     requestFilters = {
-
         'tabId': tabIdentifier,
         'urls': stateManager.validHosts
     };
@@ -119,23 +123,37 @@ stateManager._removeTab = function (tabIdentifier) {
 
 stateManager._updateTab = function (details) {
 
-    let tabIdentifier, frameIdentifier;
+    let tabDomain, domainIsWhitelisted, frameIdentifier, tabIdentifier;
+
+    tabDomain = helpers.extractDomainFromUrl(details.url);
+    domainIsWhitelisted = stateManager._domainIsWhitelisted(tabDomain);
 
-    tabIdentifier = details.tabId;
     frameIdentifier = details.frameId;
+    tabIdentifier = details.tabId;
 
-    if (tabIdentifier === -1 || frameIdentifier !== 0) {
+    if (frameIdentifier !== 0 || tabIdentifier === -1) {
         return;
     }
 
-    if (stateManager.showIconBadge === true) {
+    chrome.browserAction.setTitle({
+        'tabId': tabIdentifier,
+        'title': 'Decentraleyes (0)'
+    });
+
+    if (domainIsWhitelisted) {
 
-        wrappers.setBadgeText({
+        stateManager._setIconDisabled(tabIdentifier);
+
+        chrome.browserAction.setTitle({
             'tabId': tabIdentifier,
-            'text': ''
+            'title': 'Decentraleyes (–)'
         });
     }
 
+    if (stateManager.showIconBadge === true) {
+        stateManager._clearBadgeText(tabIdentifier);
+    }
+
     if (stateManager.tabs[tabIdentifier]) {
         stateManager.tabs[tabIdentifier].injections = {};
     }
@@ -165,20 +183,58 @@ stateManager._handleStorageChanged = function (changes) {
     }
 };
 
-stateManager._removeIconBadgeFromTab = function (tab) {
+stateManager._clearBadgeText = function (tabIdentifier) {
 
     wrappers.setBadgeText({
-        'tabId': tab.id,
+        'tabId': tabIdentifier,
         'text': ''
     });
 };
 
+stateManager._removeIconBadgeFromTab = function (tab) {
+    stateManager._clearBadgeText(tab.id);
+};
+
+stateManager._domainIsWhitelisted = function (domain) {
+
+    if (domain !== null) {
+
+        let whitelistRecord, isWhitelisted;
+
+        whitelistRecord = requestAnalyzer.whitelistedDomains[domain];
+        isWhitelisted = Boolean(whitelistRecord);
+
+        return isWhitelisted;
+    }
+
+    return false;
+};
+
+stateManager._setIconDisabled = function (tabIdentifier) {
+
+    wrappers.setIcon({
+        'path': stateManager.disabledIconPath,
+        'tabId': tabIdentifier
+    });
+};
+
 /**
  * Initializations
  */
 
 stateManager.requests = {};
 stateManager.tabs = {};
+
+stateManager.disabledIconPath = {
+    '16': chrome.runtime.getURL('icons/action/icon16-disabled.png'),
+    '18': chrome.runtime.getURL('icons/action/icon18-disabled.png'),
+    '19': chrome.runtime.getURL('icons/action/icon19-disabled.png'),
+    '32': chrome.runtime.getURL('icons/action/icon32-disabled.png'),
+    '36': chrome.runtime.getURL('icons/action/icon36-disabled.png'),
+    '38': chrome.runtime.getURL('icons/action/icon38-disabled.png'),
+    '64': chrome.runtime.getURL('icons/action/icon64-disabled.png')
+};
+
 stateManager.validHosts = [];
 
 for (let mapping in mappings) {
@@ -216,7 +272,7 @@ chrome.webRequest.onBeforeRequest.addListener(function (requestDetails) {
         };
     }
 
-}, {'types': ['main_frame'], 'urls': [Address.ANY]});
+}, {'types': [WebRequestType.MAIN_FRAME], 'urls': [Address.ANY]});
 
 chrome.webNavigation.onCommitted.addListener(stateManager._updateTab, {
     'url': [{'urlContains': ':'}]
diff --git a/icons/action/icon16-default.png b/icons/action/icon16-default.png
new file mode 100644
index 0000000000000000000000000000000000000000..b18026389f75c47fb8de02258afa4c4e2dc6962f
GIT binary patch
literal 608
zcmV-m0-ybfP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006fNkl<ZcmZ8g
z1Cm~05ZuGWI!1JZI4MS@wQbwBZQHhO+q<2a`SZQStLo?O9_p#Xsx(S>Esl9ih$Ku9
z&IqT3DMA!~<9}>RBQ>5Jmc=oOoJfFqQ54JyBjH+^0;lpMxu^FEu^LB6MH;!=vM3rJ
z)#>P6n#9rBDUQ$2a6;%^nu2*@)NPS&=2#R-BtlMLa$;vCkxsF9awJ5)9-N+_b#??6
zMM^+}=KPRf1UBS~;~^2c7RKR1;Tz|N!-R0lUD6>l_56qh!c7YzFu$`dj!n};FfE9L
zX>K@vggXdK^TLJTSe}Tv?KNcf*2A(`L?T#V!mB1j-1kYqg49iN!|=}b58m7V6}+?i
zBO*SvnK-|^M918yN@;=x&XYPTDc55RF3(5@z6RTBWQA{`c1)12Slpy=CIVs2g}5N)
z^3hKD@Hxo(zJQ2Ym&D#L<T(pWQc)y7RV;(7AiS~prO0&u8%Eh7;(WWHDuoF3f<@e_
zQgtF3LHOuziH`x6Fvtv&>eo&7VQ6(u<*ya-2|sWr)(>`h4yej?)V>IDBuK^EXclND
zq}Vnp72>K{NM+TAsR10Gok&495BJf(G>yTPSs_x3MLedhRFUKKbmJJSM0z;P)b1K=
zAMNufix5Gka+dn<SD&qhNJiPVEav|*-H4>AbOIalkkVa^q^>I3k2HR#oYQpwM&H}W
u5^c1f@x~FB2p8Nc!U7?l@JhFUH{^fUJB$D&*Aa;T0000<MNUMnLSTY)5FHKx

literal 0
HcmV?d00001

diff --git a/icons/action/icon16-disabled.png b/icons/action/icon16-disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..b8ff53850db30159e15dfd93579c4a47b664bc32
GIT binary patch
literal 540
zcmV+%0^|LOP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0005wNkl<ZcmZ9L
zhl(0e7=?YA6awVwEWjoZs)*tPWZleY?1EyMbp-)I1!)E;Dvl9bXi8DRvJw8=^OK__
z!iRIqcW(Fa_xa^X|MU6$J44Li8ZL&j;iusVZRqpmCFc3(_vzW9oHR%-my>KZE9G)o
zN~My1n|fm39gOVU<UYh|wJP)ZT+ZjSTrL-YGDAoo&Vv*4Q2q|N-EOOJJRWcVr_)I$
zlL=-;nOKzHprX-es03j)o9Xn^=``Tz0N)G)ZxQe{lgY?-yVViL<FTNeOeQ57jVh^B
zN`+#vD4Wejdc7V49ueTyYBf$-(;@qOJ_!T@ir??o5XW)kdcDeYI^`@}1iWJHnEG<L
z)P`_4O!-D65`lnIp$sk>&}=p}c`z7gLnsuYNHnxiC{QG?2$&)f>*Hp{<8kqNy_EGk
zkx1}<P`)kUkrfE3R4V#yS(XHYLB+Oh6^Fy2tk>(?61a))QNYgcc01in>@toI9ogA+
zUEL?Nb186n7qaL$8jbV@qT_zQm&IZstJO-&yj-nTi*j7$2ghc}4@|S$?aJYBU=T;u
z^RL(IoKasNRm1xGnC>AtE(bRgVVzC~?*nxlIj3*v`P+XlvTiZtgTXfZGW^C-8CHgb
e;iJmVUH$_NEUB+<fJOfR0000<MNUMnLSTY6TmZEI

literal 0
HcmV?d00001

diff --git a/icons/action/icon18.png b/icons/action/icon18-default.png
similarity index 100%
rename from icons/action/icon18.png
rename to icons/action/icon18-default.png
diff --git a/icons/action/icon18-disabled.png b/icons/action/icon18-disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..a068a8c834e0aef5160502717388f223e587c4ba
GIT binary patch
literal 596
zcmV-a0;~OrP)<h;3K|Lk000e1NJLTq000sI000sQ1^@s6R?d!B0006TNkl<Zcmae{
zgK`{D6y5eyYWD|fyMGgN9BbTBY%F8jw(VrS<I}Tu^454WXK`_^HKAU0b@gYWg4n95
zsktI9h}GKK+7inC9vmFp(nNao_4SYF&`%%=28g>MNvL>BTocggbeNl)!}0MkE-o%`
zb#;Zs#l=9f%euO{*MTHY2s449p&?kURydtbKiF(Gu(VKQ_k_e<FY6wq5aZ+H9!Im;
zjFpuYjEsz6Y-|jjot@#z>{Z!(C(zv747=SfB>VgO&}y~e9KkGLG#Y(nUo`GX@CP<F
zHiU#dK|@1>806>YBP}fr>FMbxDk}0gZf$LeZBI{+{3pjhcSh^{Aw8f{%A*W<d3lJ9
zjrBueVWH^Qc(HG7ZB^teZXzes^z?=$iZU@VF^DK7B_&+BHaC%r{g4P2iv`>zQ6?lL
z1Q8`AB}F9KBw#X`px5g?%B-xcAfnvd+;BuvT3IM1R|1)tnTU&v6J%#+qpGS3jg5_%
zot>4yVyl`>hhIw2(b0j+%S$l~v3zK1YQoXck@RwVd)t5f9Pe#9P4EvUCMG;hKRi6d
z;NT!Q8Nt-llq@NAa5x<3@9$Tc_xWD?GYZXIG__CRAVV1*9u7Vc^_bN=Dl7zgdwV4#
z9|D=^+S(cn27@9o6K|D&AlXYQ$5riYtT=L-fjyfho@l~7b;L~f=gsLH5LY+YWDDx~
i{eR(e=FDM6*9QPXTT;DwBu3T%0000<MNUMnLSTYkh!0u-

literal 0
HcmV?d00001

diff --git a/icons/action/icon19.png b/icons/action/icon19-default.png
similarity index 100%
rename from icons/action/icon19.png
rename to icons/action/icon19-default.png
diff --git a/icons/action/icon19-disabled.png b/icons/action/icon19-disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ff257bf75ec131b48dc45e195b1bf0390ca8515
GIT binary patch
literal 629
zcmV-*0*d{KP)<h;3K|Lk000e1NJLTq000vJ000vR1^@s6a!@wR0006!Nkl<Zcmah}
z1CM4w5PWCb_Wi{3t!*n<+qP}nwsB5h*JL~SFxhXCdg|$#YCS`@($do2Futdzrq=O&
zld;8E<o8y-+ht^AyfSR9l$4aq>=4Qhe;ITFe(^rPyu7@NS|UE}Hg9SYhtkqg8W<R$
z`T2QTT3Vv1sVOQhF193XNlZ+9U`CXlo_>W5?F`Dz%~g&^M@Lo|A0OAL?1sN7nJ*0a
z`T4ZDxhc-HzrRm2Gcz<fISC@2G6jSzL@)WnZ@wcOAyOe`W@d_mE&Sj#JwxT37}V6%
zL_*Zn)ulFZK`1ONjQsumafbqNR%#a(7AQMAThx7qvPQfh(I8q|TO+6hk&}}Xef;>5
z1THQviV%tq4i41*^73*ypdQM$;Eeph*wfRajKRUdW<-L}&`@QstgJ*drlBr@><^?$
zi1qdL%IM|gr6u$6@qt~3pGp~ChKGk~c6L^BK!JgQS~4isk%_V<oiQmXiR|p`Oo{N0
zTx!XXdxI0|Z2A$sB<esI5D-8f9v<Z9=SSS_>U&2=2W@O@P(?+BDWRQ#p+(*pR903-
zhlhu>y}eB}H8r}^Q6R~$dX`ybyfJt|T?9Usl$1!x73tjE9JRHzQA<k;_4f9vwh^M$
z)m6&L$q}*uLsm>o%q7WPZEY>>?Cgk>7U)S6q8b))&hj7jP=*~jLkLg;g&@EI)6>&b
zS662`lRfY|>3<f8S+y~X{}@qRkZXpG1(ola)E&PU#?~>GkCk}BuJij3^ZK#4skn_n
P00000NkvXXu0mjf_xvYr

literal 0
HcmV?d00001

diff --git a/icons/action/icon32.png b/icons/action/icon32-default.png
similarity index 100%
rename from icons/action/icon32.png
rename to icons/action/icon32-default.png
diff --git a/icons/action/icon32-disabled.png b/icons/action/icon32-disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..60344fde9bb497e24dab179da9e081f034079a9b
GIT binary patch
literal 1026
zcmV+d1pWJoP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000BYNkl<ZcmZM{
z7OY;qntRo%RpEfvtAS^`BZxMxZQG6dTWW^=2cK=*uWci*ZQHhOP3JVZo4u1>HNDCC
zu$Xgpcl7Yzclhr*#vo%3U`#|sMOE_OK|KFgTwL6%kNsaC8~up!kg>=hm)K%Nu&A&9
zGjUQ<($j3@3S-j)vBVDJR$yS@6Q0N;A|l@6jrCTBlarGvBO`-yb8`v6zxnFzgw#bw
zM!xHc9M{GhhNY3z)KqF}YNDyBDOy`wBZ=ABSxQSwvlB7Ow!g6@XXklSlJiqgdwV;r
ztgL{@79AZOPERt<B0jY9@>+cZt`;YAAXaE=YjgAq7SJGkLJ7F4FT~p}EiGA+LD=;4
zGy#i?i!?MegxhlKoL5Zb>>!`O+x7Q`QAs*CH%B!!HE=>{&?~n1z@O=k=W9&Dn@2}S
zNs{;U^iX_!yeA@urwI6mJS;5i86H?MCMqf_Tsv22Xefn*gus|3QB_qHb#--7QBjec
z+hFeJar*D|iOI=H6ZzQK7{$iMs(H>4bnV(TI&|m|?ccwj0Q?(c{FEk=($Z38XLWUz
zva+(|E&PmBd)pYu%*-Tt`t0m%6Zz@WrxmfpsZ*y+A{rYTbz8VyDZm#3s*Hi^>T1)5
z@$qrfhRc^PgUA+Fu3S;;)6>)8%*ugNQc~nIR6)RqF@U$y1mFZ}ad>z*9XN2nQNY22
z2Tiwt&@3!0q=bY7Ne)axz`8MjSk?sK4b@^lKR*z-LO?)(+i2J{3Fz<dw|sveA0O8O
zAl8e3F=HSvFHhxsh|ww>!p*e+4llO?rXiqC6dy!`POfnF>{&<hbLY-^Nk~=50}tG8
z2o4UWBS(%{k{>>N7|F?t06z%$&BF!?3JRi=Cr?UpjNzHoIwY^!+FC>wZq&-&??&sj
zBq#9%Wo2c^4V0LeNOGP_Dm{4c08n19lMfCKDrZJjRW@WQ#)ocJ6123m=%rVk!U^2e
zP;YOq%&7mChQswv=yQ}vyPAMgpcI3^iaaMLhbAT_BstnR>D1ettiF)#_buI6Yip}A
zAcWwA5QE$fAY&@Q0!YQ^tmN}v)wxw!M!Tdf5?ARR3kwVK>VZbfHk~KmR<%JZP&l<$
z^5NlObXM-0Qqh)=>KjqTIy*aQd3o897!|anq(r>AB1c>9{Ban)!yB4~0kmW&P>2wu
zYJ?hqr$Wrjx7N|+cyjq6MtP$@V^10Kj$J0ciCp7}Ty)IevY}YUj>oPy*x|~(efY_Z
wpWbXdhSAL!(te)zFv@s7it#5Czv9;J-=~2+1^M^FRR91007*qoM6N<$f_G=`S^xk5

literal 0
HcmV?d00001

diff --git a/icons/action/icon36.png b/icons/action/icon36-default.png
similarity index 100%
rename from icons/action/icon36.png
rename to icons/action/icon36-default.png
diff --git a/icons/action/icon36-disabled.png b/icons/action/icon36-disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..8abada525c511ceb9ea6aacb024a8fd9ba728fa0
GIT binary patch
literal 1143
zcmV--1c>{IP)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ000C&Nkl<ZcmcGS
z1B@<75XaB9FFZ50b@qj4+kCcdV{O~EZQI5(>eWBl+4OXJv`Q+NudDml<=*R@{`vd+
zKN}Db@LOPDpbtwuOBc)Nj0~|<u|)8ie?vk-Ubt>C{!X7hePd8i(8qjG8p~A{av;^X
zfV;c<?F$0K8@@GjYnrEYv3xjZ5Vpvjyn!DJEwH$<+wX7$6B-)&AS)IcZ5k63Lq$bJ
z)X>mCZEbDT+uKW!&dyG%tgNK)@Ng@rLY!d>COA0w0hNo`Vw9VkOG86LboT67GXb0(
zOI2AyA@KO%99cObA%Xh)`*E0UiHeG{1C<{c8F`yo+<3}LSy@>$IXUSFW@2K3IOXjC
z!SaWdFr1oi%8L;vXU?24Ja~F~nudpm;YJ9JkB`HWl#-I-B*?Ea)T=re4#J!GhZ=EV
zMn;AqOm}xT<>cg0SXkIXWnM#keEiL#b-oZ6L_|cu>@o;k2att=kX`q+Sp3q&ACb;7
z%-Gl%@h#?cC<ibuL`g|Ws^3esG=EZT2hq{dva4unYD&3@i;D~G-o2YPZQ4W|Hf*5n
z+qV<986^xZqa_FS&(6+Pt$Plc^^^FqqM||v1F5R2(kc4+`O%gwTWHy`WlGtxV+V0H
z*6GyM)#>)^>+4ei{S9}yiXY{|hg(U(tA>$e+qP|@4l1}+@kAU20H{p+fP-aswY0S8
zl#U-iZVV#Hi4!Mg^|&gdwP^8(VylcJ0Cj60P(NgM6&4oils0ePY#RtxQUx~0tx@0)
z0_dz*m1Ur`v^1U4s#U9O1Fc!J#%U&A0MI$@10r7rLT4A1R<2xW7YOik0_xE|U~EA7
z*I>H3x?}~Uw_PBV1E)a40IC!}q7Idpmm_wR4f5c@gSLSV9XjL`s0?kx%Yg!F5Msj;
zX8rp0#CzL^5z_t_r!9czCR)9EwIR&fwQI@K(^EbS8D<6aC!RGgIt7CG`ud`6=)e%f
zd-m*s6?JQosiUK#h)Zg1Z8e&eP!3+!nroiX?A+1OfvSq})y$0$rHfKiQ_%}`nOjg$
zpo|}}+kdM%XkcJKw^40vEzD}$is|X;%4xHtq(oke%X~izgy9H7lCS`6MBYeiidGXL
zVg=1qIp6^hnJnqFvxRS!=jr#QMK~Or7=oc;=H=y4W@aV?u0V`nv^5-gu})!~4~$-^
zfznNd?ms^PjKQ?&V)p8|hZj^xu0vqY2L>62;8wvDS-trI^*AqVk?I57fsGx3AiL`8
z>x~`*%|1RpkJ@^@a-Dbtvx&S3e}~y&F{3zv;3<UmV^#<=@IrR<zGwRTSTT~tsEA=s
zMv%@*a&ofL8d3oJ;vX5;#y}1L_P-dR<3bOp(A9YkG%JXK8UR=?u>pOS0W|a$84kG*
z#5v$07+L^eR2cz%S`T#KA!u9b9U6WB?dLTC)tLcneI`=O2LRdl?Gi=&pfmsg002ov
JPDHLkV1g+Y7#08k

literal 0
HcmV?d00001

diff --git a/icons/action/icon38.png b/icons/action/icon38-default.png
similarity index 100%
rename from icons/action/icon38.png
rename to icons/action/icon38-default.png
diff --git a/icons/action/icon38-disabled.png b/icons/action/icon38-disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..469c00a899c8108ece6b434ba4c4274a516e39ed
GIT binary patch
literal 1183
zcmV;Q1YrA#P)<h;3K|Lk000e1NJLTq001Tc001Tk1^@s6s6FYf000DLNkl<ZcmZM{
z2drGVQg`+0)p<aA?W$F)ZUgZXAbtnMZ-L?$fb<$5T?wRZ8X6jy0JT^HtSw0py=&WX
z);40SZ6o&D-?nYr{?E2;+qP@#Bs<C6N{|1W<b2HSsy<Wds`gFRbK=B_+j*1U7}*SR
zh<g5zMNIUrOGfC-nKM_i;-6s&26;pu6Pywh6m*p*Qmo`@R+i_PkO1pV<G&wp8%OW6
z@PLVOiin7yl#~?8%F3d`!a~Z=&!^1HOp1w#A$GkL!7kSEmQzw6vEZ;uVQ6S5m6ViF
zS63Ge3=9~erltnut;mh=Uf<ev-xn+}CY5kpP-SJMDH)0A=x95x#a<s<W!@7AP$?WA
zA5Xo#y^cr$aH-9>>*Bp1G|RpmDU_X^?U)eI*w|<pX9AhZY(>G8i__B5OgC?CZl=7v
zJW5PVgmnPz-yr2CTc`MuI(hQsE&M}^ei7oMzrSBesIIP#!otFo$~~f!$=&SJ9)9tY
zegPAuj*bpV2t;8;teH&wt0$JL|1l>gM`<az$w=YBg9i!V^f%r3{Q2{Qa#K}RMX|B5
zsx?*Yk;}A9^s`oXcQ;8=h$X3H-@bjceED*kHf<XH`|rO5;NN(6;J^W8QEq8z@$*1<
zc(`iaOR(0@`j>HWagr3=3c`NE+qZA0DO09^j1tqQPp4hGcKOL%ym(RS#%ZBW0yh02
z{mb(5a+1O_uJ-KNV@gVIJy=zfJ9X+5NpIjtlf=+Y`DE>CYipAMkGSv?T)cR(Bw>gp
zOO}v4(okml`ueD-sL1Hp$_BAI?ZxTSr=_(()KBQpp+mMw0kG`h!-t(_W-Evd${3J`
zv0iBB&Yg~k0lRnac1mp6iWtl-gWfSQe2g1n_4;(i8K;p#9LRLuzkk1DVzPADK)Vcn
zI(P0I6%-U8JJAR#1?SG4YnK$(x~cwoAa>ZP;Fc|0Y!id)T@X7Zy9(P_v0{ZKsWofX
zxSa|9_8mEL<OR0}?#7K92^C%vnmKbOZQZ(+<ocwfBti^VR8%0*%!s|L_4rvvi_lVI
zz%Xi)`NL?(jvXKg7`je2obB!HMm<}Je)#yqVDLa@YRZrhI94267RL_c1yojpwPwpH
zyF)HQd!lHWVMRNH@Da#x6)8+vvM~VqSmq9&{=xV!7NNL8iLzlVEiI*xkPzir7Z4DD
zSrc7}kv!UOb<oR)>({mH(h9MG<@|_l0X<ejLjxe203{5%;B4+huJ$P&Ekg%n@FP&6
z&?{i6)YMcJsXpHOF{^?1LtZ$l7v#~7s;jF#k%A>7BO_I$Mlt!@y(0KQHH{-Knwpv%
z5ke?rWMrrU9T;JJ=k%uM8weVe5nQ5Z4WA?f*Q1CgBqW%XmtHo&+iq`sUSS30W+eed
z^1_7+8tm4&T*h;b35kTb9=Cz4Xox``F~FE7v(M`#-hHfeDWlm1p?1bXj<dVHGcmdP
x#DyDgwEF*>!A3@hKs_UlLt!nidCkq$=6`>mUFP;N1z!LF002ovPDHLkV1gijL3scG

literal 0
HcmV?d00001

diff --git a/icons/action/icon64.png b/icons/action/icon64-default.png
similarity index 100%
rename from icons/action/icon64.png
rename to icons/action/icon64-default.png
diff --git a/icons/action/icon64-disabled.png b/icons/action/icon64-disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..4e895fc7bed9a3bdc71e6c7469df465cb135ba67
GIT binary patch
literal 1924
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
KMNUMnLSTY?2!#Xy

literal 0
HcmV?d00001

diff --git a/manifest.json b/manifest.json
index 3d97048..fb8a3de 100644
--- a/manifest.json
+++ b/manifest.json
@@ -32,12 +32,13 @@
 
   "browser_action": {
     "default_icon": {
-      "18": "icons/action/icon18.png",
-      "19": "icons/action/icon19.png",
-      "32": "icons/action/icon32.png",
-      "36": "icons/action/icon36.png",
-      "38": "icons/action/icon38.png",
-      "64": "icons/action/icon64.png"
+      "16": "icons/action/icon16-default.png",
+      "18": "icons/action/icon18-default.png",
+      "19": "icons/action/icon19-default.png",
+      "32": "icons/action/icon32-default.png",
+      "36": "icons/action/icon36-default.png",
+      "38": "icons/action/icon38-default.png",
+      "64": "icons/action/icon64-default.png"
     },
     "default_popup": "pages/popup/popup.html",
     "browser_style": false
diff --git a/modules/fontawesome/icon-bundle.min.js b/modules/fontawesome/icon-bundle.min.js
index d45be79..c3f8c7d 100644
--- a/modules/fontawesome/icon-bundle.min.js
+++ b/modules/fontawesome/icon-bundle.min.js
@@ -2,4 +2,4 @@
  * Font Awesome Free 5.0.1 by @fontawesome - http://fontawesome.com
  * License - http://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  */
-!function(){"use strict";function c(c){"function"==typeof m.hooks.addPack?m.hooks.addPack(c,a):m.styles[c]=s({},m.styles[c]||{},a)}var h={};try{"undefined"!=typeof window&&(h=window)}catch(c){}var v=(h.navigator||{}).userAgent,l=void 0===v?"":v,z=h,H=(~l.indexOf("MSIE")||l.indexOf("Trident/"),[1,2,3,4,5,6,7,8,9,10]),M=H.concat([11,12,13,14,15,16,17,18,19,20]),a=(["xs","sm","lg","fw","ul","li","border","pull-left","pull-right","spin","pulse","rotate-90","rotate-180","rotate-270","flip-horizontal","flip-vertical","stack","stack-1x","stack-2x","inverse","layers","layers-text","layers-counter"].concat(H.map(function(c){return c+"x"})).concat(M.map(function(c){return"w-"+c})),{btc:[384,512,[],"f15a","M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z"],cog:[512,512,[],"f013","M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z"],cube:[512,512,[],"f1b2","M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"],"exclamation-triangle":[576,512,[],"f071","M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"],"github-alt":[480,512,[],"f113","M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"],globe:[512,512,[],"f0ac","M364.215 192h131.43c5.439 20.419 8.354 41.868 8.354 64s-2.915 43.581-8.354 64h-131.43c5.154-43.049 4.939-86.746 0-128zM185.214 352c10.678 53.68 33.173 112.514 70.125 151.992.221.001.44.008.661.008s.44-.008.661-.008c37.012-39.543 59.467-98.414 70.125-151.992H185.214zm174.13-192h125.385C452.802 84.024 384.128 27.305 300.95 12.075c30.238 43.12 48.821 96.332 58.394 147.925zm-27.35 32H180.006c-5.339 41.914-5.345 86.037 0 128h151.989c5.339-41.915 5.345-86.037-.001-128zM152.656 352H27.271c31.926 75.976 100.6 132.695 183.778 147.925-30.246-43.136-48.823-96.35-58.393-147.925zm206.688 0c-9.575 51.605-28.163 104.814-58.394 147.925 83.178-15.23 151.852-71.949 183.778-147.925H359.344zm-32.558-192c-10.678-53.68-33.174-112.514-70.125-151.992-.221 0-.44-.008-.661-.008s-.44.008-.661.008C218.327 47.551 195.872 106.422 185.214 160h141.572zM16.355 192C10.915 212.419 8 233.868 8 256s2.915 43.581 8.355 64h131.43c-4.939-41.254-5.154-84.951 0-128H16.355zm136.301-32c9.575-51.602 28.161-104.81 58.394-147.925C127.872 27.305 59.198 84.024 27.271 160h125.385z"],monero:[496,512,[],"f3d0","M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z"],"power-off":[512,512,[],"f011","M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"],"shield-alt":[512,512,[],"f3ed","M496 128c0 221.282-135.934 344.645-221.539 380.308a48 48 0 0 1-36.923 0C130.495 463.713 16 326.487 16 128a48 48 0 0 1 29.539-44.308l192-80a48 48 0 0 1 36.923 0l192 80A48 48 0 0 1 496 128zM256 446.313l.066.034c93.735-46.689 172.497-156.308 175.817-307.729L256 65.333v380.98z"],"window-restore":[512,512,[],"f2d2","M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z"]}),V=z||{};V.___FONT_AWESOME___||(V.___FONT_AWESOME___={}),V.___FONT_AWESOME___.styles||(V.___FONT_AWESOME___.styles={}),V.___FONT_AWESOME___.hooks||(V.___FONT_AWESOME___.hooks={}),V.___FONT_AWESOME___.shims||(V.___FONT_AWESOME___.shims=[]);var m=V.___FONT_AWESOME___,s=Object.assign||function(c){for(var h=1;h<arguments.length;h++){var v=arguments[h];for(var l in v)Object.prototype.hasOwnProperty.call(v,l)&&(c[l]=v[l])}return c};!function(c){try{c()}catch(c){}}(function(){c("fai"),c("fa")})}();
+!function(){"use strict";function c(c){"function"==typeof m.hooks.addPack?m.hooks.addPack(c,a):m.styles[c]=s({},m.styles[c]||{},a)}var h={};try{"undefined"!=typeof window&&(h=window)}catch(c){}var v=(h.navigator||{}).userAgent,l=void 0===v?"":v,z=h,H=(~l.indexOf("MSIE")||l.indexOf("Trident/"),[1,2,3,4,5,6,7,8,9,10]),M=H.concat([11,12,13,14,15,16,17,18,19,20]),a=(["xs","sm","lg","fw","ul","li","border","pull-left","pull-right","spin","pulse","rotate-90","rotate-180","rotate-270","flip-horizontal","flip-vertical","stack","stack-1x","stack-2x","inverse","layers","layers-text","layers-counter"].concat(H.map(function(c){return c+"x"})).concat(M.map(function(c){return"w-"+c})),{btc:[384,512,[],"f15a","M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z"],cog:[512,512,[],"f013","M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z"],cube:[512,512,[],"f1b2","M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"],"exclamation-triangle":[576,512,[],"f071","M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"],gitlab:[512,512,[],"f296","M29.782 199.732L256 493.714 8.074 309.699c-6.856-5.142-9.712-13.996-7.141-21.993l28.849-87.974zm75.405-174.806c-3.142-8.854-15.709-8.854-18.851 0L29.782 199.732h131.961L105.187 24.926zm56.556 174.806L256 493.714l94.257-293.982H161.743zm349.324 87.974l-28.849-87.974L256 493.714l247.926-184.015c6.855-5.142 9.711-13.996 7.141-21.993zm-85.404-262.78c-3.142-8.854-15.709-8.854-18.851 0l-56.555 174.806h131.961L425.663 24.926z"],globe:[512,512,[],"f0ac","M364.215 192h131.43c5.439 20.419 8.354 41.868 8.354 64s-2.915 43.581-8.354 64h-131.43c5.154-43.049 4.939-86.746 0-128zM185.214 352c10.678 53.68 33.173 112.514 70.125 151.992.221.001.44.008.661.008s.44-.008.661-.008c37.012-39.543 59.467-98.414 70.125-151.992H185.214zm174.13-192h125.385C452.802 84.024 384.128 27.305 300.95 12.075c30.238 43.12 48.821 96.332 58.394 147.925zm-27.35 32H180.006c-5.339 41.914-5.345 86.037 0 128h151.989c5.339-41.915 5.345-86.037-.001-128zM152.656 352H27.271c31.926 75.976 100.6 132.695 183.778 147.925-30.246-43.136-48.823-96.35-58.393-147.925zm206.688 0c-9.575 51.605-28.163 104.814-58.394 147.925 83.178-15.23 151.852-71.949 183.778-147.925H359.344zm-32.558-192c-10.678-53.68-33.174-112.514-70.125-151.992-.221 0-.44-.008-.661-.008s-.44.008-.661.008C218.327 47.551 195.872 106.422 185.214 160h141.572zM16.355 192C10.915 212.419 8 233.868 8 256s2.915 43.581 8.355 64h131.43c-4.939-41.254-5.154-84.951 0-128H16.355zm136.301-32c9.575-51.602 28.161-104.81 58.394-147.925C127.872 27.305 59.198 84.024 27.271 160h125.385z"],monero:[496,512,[],"f3d0","M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z"],"power-off":[512,512,[],"f011","M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"],"shield-alt":[512,512,[],"f3ed","M496 128c0 221.282-135.934 344.645-221.539 380.308a48 48 0 0 1-36.923 0C130.495 463.713 16 326.487 16 128a48 48 0 0 1 29.539-44.308l192-80a48 48 0 0 1 36.923 0l192 80A48 48 0 0 1 496 128zM256 446.313l.066.034c93.735-46.689 172.497-156.308 175.817-307.729L256 65.333v380.98z"],"window-restore":[512,512,[],"f2d2","M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z"]}),V=z||{};V.___FONT_AWESOME___||(V.___FONT_AWESOME___={}),V.___FONT_AWESOME___.styles||(V.___FONT_AWESOME___.styles={}),V.___FONT_AWESOME___.hooks||(V.___FONT_AWESOME___.hooks={}),V.___FONT_AWESOME___.shims||(V.___FONT_AWESOME___.shims=[]);var m=V.___FONT_AWESOME___,s=Object.assign||function(c){for(var h=1;h<arguments.length;h++){var v=arguments[h];for(var l in v)Object.prototype.hasOwnProperty.call(v,l)&&(c[l]=v[l])}return c};!function(c){try{c()}catch(c){}}(function(){c("fai"),c("fa")})}();
diff --git a/modules/internal/helpers.js b/modules/internal/helpers.js
index aeb6de3..9bacc05 100644
--- a/modules/internal/helpers.js
+++ b/modules/internal/helpers.js
@@ -98,6 +98,10 @@ helpers.extractDomainFromUrl = function (url, normalize) {
         extractedDomain = null;
     }
 
+    if (url.startsWith(Address.CHROME)) {
+        extractedDomain = null;
+    }
+
     if (extractedDomain === '') {
         extractedDomain = null;
     }
@@ -162,6 +166,8 @@ helpers.determineCdnName = function (domainName) {
         return 'Sina Public Resources';
     case 'upcdn.b0.upaiyun.com':
         return 'UpYun Library';
+    case 'cdn.bootcss.com':
+        return 'BootCDN';
     case 'sdn.geekzu.org':
         return 'Geekzu Public Service [Mirror]';
     case 'ajax.proxy.ustclug.org':
diff --git a/modules/internal/wrappers.js b/modules/internal/wrappers.js
index faf1033..9800786 100644
--- a/modules/internal/wrappers.js
+++ b/modules/internal/wrappers.js
@@ -36,3 +36,10 @@ wrappers.setBadgeText = function (details) {
         chrome.browserAction.setBadgeText(details);
     }
 };
+
+wrappers.setIcon = function (details) {
+
+    if (chrome.browserAction.setIcon !== undefined) {
+        chrome.browserAction.setIcon(details);
+    }
+};
diff --git a/pages/background/background.html b/pages/background/background.html
index 0093dbe..f38ed95 100644
--- a/pages/background/background.html
+++ b/pages/background/background.html
@@ -1,6 +1,7 @@
 <!DOCTYPE html>
 
-<html>
+<html lang="en">
+
     <head>
 
         <title>Decentraleyes Background</title>
@@ -27,4 +28,5 @@
         <script src="../../core/main.js"></script>
 
     </body>
+
 </html>
diff --git a/pages/options/options.html b/pages/options/options.html
index fafe71f..ea75412 100644
--- a/pages/options/options.html
+++ b/pages/options/options.html
@@ -6,7 +6,7 @@
 
         <title>Decentraleyes Options</title>
 
-        <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <meta charset="utf-8" />
 
         <link rel="stylesheet" type="text/css" href="options.css">
diff --git a/pages/popup/popup.html b/pages/popup/popup.html
index 2b99540..954c266 100644
--- a/pages/popup/popup.html
+++ b/pages/popup/popup.html
@@ -6,7 +6,7 @@
 
         <title>Decentraleyes Popup</title>
 
-        <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <meta charset="utf-8" />
 
         <link rel="stylesheet" type="text/css" href="popup.css">
diff --git a/pages/welcome/logo.svg b/pages/welcome/logo.svg
index 8f6d677..faf45b4 100644
--- a/pages/welcome/logo.svg
+++ b/pages/welcome/logo.svg
@@ -1,22 +1,21 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="139.98mm" width="213.68mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 757.14843 495.97448" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<svg width="213.68mm" height="139.98mm" version="1.1" viewBox="0 0 757.15 495.97" xmlns="http://www.w3.org/2000/svg">
  <defs>
-  <linearGradient id="a" y2="-1041.7" gradientUnits="userSpaceOnUse" x2="-2153.9" gradientTransform="matrix(.73610 0 0 1.1184 971.67 1120)" y1="-1983.7" x1="-2153.9">
+  <linearGradient id="a" x1="-2153.9" x2="-2153.9" y1="-1983.7" y2="-1041.7" gradientTransform="matrix(.7361 0 0 1.1184 971.67 1120)" gradientUnits="userSpaceOnUse">
    <stop stop-color="#7c9437" offset="0"/>
    <stop stop-color="#eff4e2" offset="1"/>
   </linearGradient>
  </defs>
  <g transform="translate(1012.9 489.91)">
-  <path d="m-633.52-289.08c-4.2555-0.0136-8.5155 0-12.777 0.0312-127.91 0.89658-252.53 19.355-365.63 52.92a378.57 378.57 0 0 0 -0.9259 18.506 378.57 378.57 0 0 0 0.9472 26.779 378.57 378.57 0 0 0 4.5606 37.566 378.57 378.57 0 0 0 8.2871 36.924 378.57 378.57 0 0 0 11.934 35.91 378.57 378.57 0 0 0 15.457 34.541 378.57 378.57 0 0 0 18.83 32.824 378.57 378.57 0 0 0 13.689 19.143h609.77a378.57 378.57 0 0 0 7.5468 -9.9279 378.57 378.57 0 0 0 19.779 -32.262 378.57 378.57 0 0 0 16.459 -34.074 378.57 378.57 0 0 0 12.977 -35.547 378.57 378.57 0 0 0 9.3634 -36.666 378.57 378.57 0 0 0 5.6543 -37.416 378.57 378.57 0 0 0 1.8905 -37.795 378.57 378.57 0 0 0 -0.60143 -17.018c-116.53-35.116-245.29-54.153-377.21-54.44z" fill-rule="evenodd" fill="url(#a)"/>
+  <path d="m-633.52-289.08c-4.2555-0.0136-8.5155 0-12.777 0.0312-127.91 0.89658-252.53 19.355-365.63 52.92a378.57 378.57 0 0 0-0.9259 18.506 378.57 378.57 0 0 0 0.9472 26.779 378.57 378.57 0 0 0 4.5606 37.566 378.57 378.57 0 0 0 8.2871 36.924 378.57 378.57 0 0 0 11.934 35.91 378.57 378.57 0 0 0 15.457 34.541 378.57 378.57 0 0 0 18.83 32.824 378.57 378.57 0 0 0 13.689 19.143h609.77a378.57 378.57 0 0 0 7.5468-9.9279 378.57 378.57 0 0 0 19.779-32.262 378.57 378.57 0 0 0 16.459-34.074 378.57 378.57 0 0 0 12.977-35.547 378.57 378.57 0 0 0 9.3634-36.666 378.57 378.57 0 0 0 5.6543-37.416 378.57 378.57 0 0 0 1.8905-37.795 378.57 378.57 0 0 0-0.60143-17.018c-116.53-35.116-245.29-54.153-377.21-54.44z" fill="url(#a)" fill-rule="evenodd"/>
   <g transform="translate(-3065.9 1490.7)">
-   <path d="m-8140.9-2348.7a274.29 274.29 0 0 0 -266.58 211.04c7.1369-1.3966 14.205-2.9209 21.4-4.2051 15.036-2.6835 30.198-5.1201 45.469-7.3067 15.271-2.1865 30.653-4.1238 46.129-5.8046 15.476-1.6809 31.048-3.1051 46.699-4.2715 15.651-1.1665 31.383-2.0735 47.18-2.7168 15.797-0.6434 31.658-1.0233 47.57-1.1348 16.954-0.1188 33.863 0.067 50.707 0.5527 16.844 0.4858 33.623 1.2711 50.32 2.3516s33.313 2.4557 49.826 4.1211 32.926 3.6208 49.219 5.8613c16.293 2.2406 32.467 4.7664 48.504 7.5723 10.201 1.7849 20.245 3.8763 30.33 5.8867a274.29 274.29 0 0 0 -266.77 -211.94z" transform="translate(10572 368.09)" fill="#69ab90"/>
-   <path d="m-8140.5-2258.2a184.16 184.16 0 0 0 -165.9 104.74c3.9985-0.4699 7.9455-1.0683 11.957-1.5039 15.476-1.6809 31.048-3.1051 46.699-4.2715 15.651-1.1665 31.383-2.0735 47.18-2.7168 15.797-0.6434 31.658-1.0233 47.57-1.1348 16.954-0.1188 33.863 0.067 50.707 0.5527 16.844 0.4858 33.623 1.2711 50.32 2.3516s33.313 2.4557 49.826 4.1211c9.3701 0.945 18.626 2.1953 27.928 3.3262a184.16 184.16 0 0 0 -166.29 -105.46z" transform="translate(10572 368.09)" fill="#4a856d"/>
-   <path d="m-8140.9-2237c-57.78 0.068-111.19 30.788-140.3 80.699 42.151-4.1659 84.969-6.4492 128.16-6.752 51.484-0.3609 102.54 2.0951 152.66 7.2168-29.034-50.162-82.569-81.082-140.53-81.164z" transform="translate(10572 368.09)" fill="#d9ccb5"/>
-   <path d="m-8139.6-2326.4c-68.213-0.4078-132.43 25.777-181.27 74.619-31.322 31.322-53.165 68.409-64.869 109.85 21.087-3.7573 42.424-7.0203 63.961-9.7968 0.1062-0.2386 0.2051-0.474 0.3125-0.7129 10.523-23.415 22.717-41.107 40.772-59.162 29.234-29.234 64.842-47.747 106.23-55.229 14.678-2.6535 47.206-2.9306 64.086-0.5429 14.755 2.0871 19.279 1.4609 27.205-3.7891 11.038-7.311 15.491-22.356 10.088-34.086-5.7671-12.52-13.568-16.585-37.066-19.334-9.8746-1.1551-19.702-1.7562-29.447-1.8145zm209.14 141.75c-15.595-0.072-28.373 12.42-28.373 27.73 0 2.0809 0.2081 4.0855 0.5879 6.0059 17.56 2.3451 34.986 5.0152 52.252 8.0156 0.3927-0.7733 0.7686-1.5899 1.1309-2.457 7.6967-18.421-5.8421-39.204-25.598-39.295z" fill-rule="evenodd" transform="translate(10572 368.09)" fill="#e1eee9"/>
+   <path transform="translate(10572 368.09)" d="m-8140.9-2348.7a274.29 274.29 0 0 0-266.58 211.04c7.1369-1.3966 14.205-2.9209 21.4-4.2051 15.036-2.6835 30.198-5.1201 45.469-7.3067 15.271-2.1865 30.653-4.1238 46.129-5.8046 15.476-1.6809 31.048-3.1051 46.699-4.2715 15.651-1.1665 31.383-2.0735 47.18-2.7168 15.797-0.6434 31.658-1.0233 47.57-1.1348 16.954-0.1188 33.863 0.067 50.707 0.5527 16.844 0.4858 33.623 1.2711 50.32 2.3516s33.313 2.4557 49.826 4.1211 32.926 3.6208 49.219 5.8613c16.293 2.2406 32.467 4.7664 48.504 7.5723 10.201 1.7849 20.245 3.8763 30.33 5.8867a274.29 274.29 0 0 0-266.77-211.94z" fill="#69ab90"/>
+   <path transform="translate(10572 368.09)" d="m-8140.5-2258.2a184.16 184.16 0 0 0-165.9 104.74c3.9985-0.4699 7.9455-1.0683 11.957-1.5039 15.476-1.6809 31.048-3.1051 46.699-4.2715 15.651-1.1665 31.383-2.0735 47.18-2.7168 15.797-0.6434 31.658-1.0233 47.57-1.1348 16.954-0.1188 33.863 0.067 50.707 0.5527 16.844 0.4858 33.623 1.2711 50.32 2.3516s33.313 2.4557 49.826 4.1211c9.3701 0.945 18.626 2.1953 27.928 3.3262a184.16 184.16 0 0 0-166.29-105.46z" fill="#4a856d"/>
+   <path transform="translate(10572 368.09)" d="m-8140.9-2237c-57.78 0.068-111.19 30.788-140.3 80.699 42.151-4.1659 84.969-6.4492 128.16-6.752 51.484-0.3609 102.54 2.0951 152.66 7.2168-29.034-50.162-82.569-81.082-140.53-81.164z" fill="#d9ccb5"/>
+   <path transform="translate(10572 368.09)" d="m-8139.6-2326.4c-68.213-0.4078-132.43 25.777-181.27 74.619-31.322 31.322-53.165 68.409-64.869 109.85 21.087-3.7573 42.424-7.0203 63.961-9.7968 0.1062-0.2386 0.2051-0.474 0.3125-0.7129 10.523-23.415 22.717-41.107 40.772-59.162 29.234-29.234 64.842-47.747 106.23-55.229 14.678-2.6535 47.206-2.9306 64.086-0.5429 14.755 2.0871 19.279 1.4609 27.205-3.7891 11.038-7.311 15.491-22.356 10.088-34.086-5.7671-12.52-13.568-16.585-37.066-19.334-9.8746-1.1551-19.702-1.7562-29.447-1.8145zm209.14 141.75c-15.595-0.072-28.373 12.42-28.373 27.73 0 2.0809 0.2081 4.0855 0.5879 6.0059 17.56 2.3451 34.986 5.0152 52.252 8.0156 0.3927-0.7733 0.7686-1.5899 1.1309-2.457 7.6967-18.421-5.8421-39.204-25.598-39.295z" fill="#e1eee9" fill-rule="evenodd"/>
    <path d="m2566.6-1883.9c-3.0097 3.1329-6.9452 2.2975-14.708-2.4482-4.0467-2.2446-5.5995-3.6343-9.6847-5.7832l-6.0229-3.1961-2.0305 3.9932-2.0327 3.9906-3.4678-4.969c-8.9934-12.89-18.056-26.474-17.742-26.592 4.2273-0.3503 19.763-1.3532 37.471-2.7026 0 0-1.0853 2.1672-2.2943 4.5888l-2.0055 4.2775 6.5539 3.5215c3.6047 1.9372 9.4209 5.7407 12.927 8.4524 1.0018 0.7747 1.7262 1.4006 2.4531 2.0301 4.5629 4.4076 4.9708 7.6508 2.557 12.032-0.6314 1.1465-1.2782 2.081-1.9728 2.8041z" fill="#fff"/>
-   <path d="m-432.68-16.955c-0.92625 0.11186-1.7636 0.61843-2.5957 1.4668-2.5338 2.583-1.7893 5.0501 3.1855 10.545 2.4906 2.751 6.0466 6.7358 7.9004 8.8555 3.7538 4.2926 5.5909 4.8261 8.1582 2.3672 2.8579-2.737 2.1581-5.0574-3.6914-12.246-6.6046-8.1165-10.178-11.324-12.957-10.988z" transform="matrix(1.9024 0 0 1.9024 3412 -1843.7)" fill="#fff"/>
+   <path transform="matrix(1.9024 0 0 1.9024 3412 -1843.7)" d="m-432.68-16.955c-0.92625 0.11186-1.7636 0.61843-2.5957 1.4668-2.5338 2.583-1.7893 5.0501 3.1855 10.545 2.4906 2.751 6.0466 6.7358 7.9004 8.8555 3.7538 4.2926 5.5909 4.8261 8.1582 2.3672 2.8579-2.737 2.1581-5.0574-3.6914-12.246-6.6046-8.1165-10.178-11.324-12.957-10.988z" fill="#fff"/>
   </g>
-  <path style="color-rendering:auto;text-decoration-color:#000000;color:#000000;isolation:auto;mix-blend-mode:normal;shape-rendering:auto;solid-color:#000000;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;image-rendering:auto;white-space:normal;text-indent:0;text-transform:none" d="m-1011-254.39a378.57 378.57 0 0 0 -0.9141 18.264c113.1-33.564 237.73-52.023 365.63-52.92 136.38-0.95605 269.7 18.16 389.99 54.408a378.57 378.57 0 0 0 -0.34565 -9.7598 378.57 378.57 0 0 0 -1.0644 -8.7656c-120.38-35.545-253.06-54.097-388.7-53.147-127.3 0.89224-251.38 18.941-364.6 51.92z" fill="#4a856d"/>
+  <path d="m-1011-254.39a378.57 378.57 0 0 0-0.9141 18.264c113.1-33.564 237.73-52.023 365.63-52.92 136.38-0.95605 269.7 18.16 389.99 54.408a378.57 378.57 0 0 0-0.34565-9.7598 378.57 378.57 0 0 0-1.0644-8.7656c-120.38-35.545-253.06-54.097-388.7-53.147-127.3 0.89224-251.38 18.941-364.6 51.92z" color="#000000" color-rendering="auto" fill="#4a856d" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
   <g fill="#69ab90">
    <path d="m-596.16-130.58h-14.32v72.537h14.32v-30.165h14.789v30.165h14.32v-72.537h-14.32v29.93h-14.789v-29.93z"/>
    <path d="m-556.38-130.58v72.537h39.203v-12.442h-24.883v-17.723h19.719v-12.442h-19.719v-17.489h24.883v-12.442h-39.203z"/>
diff --git a/pages/welcome/welcome.css b/pages/welcome/welcome.css
index edfe6a6..a6395ce 100644
--- a/pages/welcome/welcome.css
+++ b/pages/welcome/welcome.css
@@ -92,11 +92,11 @@ a {
     margin-left: 10px;
 }
 
-.btn-github {
+.btn-gitlab {
     background-color: #24292e;
 }
 
-.btn-github:hover {
+.btn-gitlab:hover {
     background-color: #42474c;
 }
 
diff --git a/pages/welcome/welcome.html b/pages/welcome/welcome.html
index df79c62..314032c 100644
--- a/pages/welcome/welcome.html
+++ b/pages/welcome/welcome.html
@@ -1,12 +1,12 @@
 <!DOCTYPE html>
 
-<html>
+<html lang="en">
 
     <head>
 
         <title>2.0 Says Hello - Decentraleyes</title>
 
-        <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <meta charset="utf-8">
 
         <link rel="stylesheet" type="text/css" href="welcome.css">
@@ -57,7 +57,7 @@
 
                 <a class="btn btn-website" href="https://decentraleyes.org" target="_blank"><i class="btn-icon fai fa-globe" data-fa-transform="grow-2"></i><span class="btn-text">Website</span></a>
 
-                <a class="btn btn-github" href="https://github.com/Synzvato/decentraleyes" target="_blank"><i class="btn-icon fai fa-github-alt" data-fa-transform="grow-2"></i><span class="btn-text">GitHub</span></a>
+                <a class="btn btn-gitlab" href="https://git.synz.io/Synzvato/decentraleyes" target="_blank"><i class="btn-icon fai fa-gitlab" data-fa-transform="grow-2"></i><span class="btn-text">GitLab</span></a>
 
                 <a class="btn btn-bitcoin" href="https://decentraleyes.org/donate/bitcoin/" target="_blank"><i class="btn-icon fai fa-btc" data-fa-transform="grow-2"></i><span class="btn-text">Bitcoin</span></a>
 
-- 
GitLab