Compare commits
1448 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
9a57758425 | 5 years ago |
|
|
64a911333f | 5 years ago |
|
|
300c482314 | 5 years ago |
|
|
ad456600ed | 5 years ago |
|
|
a5a9104e77 | 5 years ago |
|
|
9140e3392d | 5 years ago |
|
|
06b6ca01f1 | 5 years ago |
|
|
1c45aa35a3 | 5 years ago |
|
|
c3fd99a692 | 5 years ago |
|
|
122e5ca082 | 5 years ago |
|
|
088eea918b | 5 years ago |
|
|
e4fd3a0e93 | 5 years ago |
|
|
af770ebeb8 | 5 years ago |
|
|
1cc436b779 | 5 years ago |
|
|
b2f09f89b5 | 5 years ago |
|
|
e9274d6e30 | 5 years ago |
|
|
eca5ca3f32 | 5 years ago |
|
|
bda7383bc8 | 5 years ago |
|
|
7562a3d697 | 5 years ago |
|
|
954d827934 | 5 years ago |
|
|
e7899435fe | 5 years ago |
|
|
93edb4aca0 | 5 years ago |
|
|
c9ddc9d5d0 | 5 years ago |
|
|
0bcb7669e7 | 6 years ago |
|
|
89b7e026c3 | 6 years ago |
|
|
ba0dfe5d9b | 6 years ago |
|
|
57eb9fc150 | 6 years ago |
|
|
e0800f89df | 6 years ago |
|
|
b26b3bb960 | 6 years ago |
|
|
2d8e32c61b | 6 years ago |
|
|
41133dffd2 | 6 years ago |
|
|
a1ec20423c | 6 years ago |
|
|
e3ebfdfba4 | 6 years ago |
|
|
43cd137fff | 6 years ago |
|
|
a697ce0be9 | 6 years ago |
|
|
b75500eff4 | 6 years ago |
|
|
3f4425d9db | 6 years ago |
|
|
f8c82add03 | 6 years ago |
|
|
a78a6465b0 | 6 years ago |
|
|
ae7d450827 | 6 years ago |
|
|
c908ae5210 | 6 years ago |
|
|
ea688f3942 | 6 years ago |
|
|
8a39b0e171 | 6 years ago |
|
|
5c06fed370 | 6 years ago |
|
|
035f3f53a2 | 6 years ago |
|
|
17430ded93 | 6 years ago |
|
|
b8e62f0c55 | 6 years ago |
|
|
e800756163 | 6 years ago |
|
|
0190fdaf3d | 6 years ago |
|
|
0db579da97 | 6 years ago |
|
|
e5cf0d4684 | 6 years ago |
|
|
a2f213492e | 6 years ago |
|
|
a9f32a475f | 6 years ago |
|
|
cb9934f67a | 6 years ago |
|
|
e7140262f2 | 6 years ago |
|
|
a9bcc70a2b | 6 years ago |
|
|
2936d73911 | 6 years ago |
|
|
df4a403473 | 6 years ago |
|
|
d993b8442a | 6 years ago |
|
|
5aab1fb00b | 6 years ago |
|
|
9b292304d3 | 6 years ago |
|
|
1d936742a7 | 6 years ago |
|
|
5156e23a09 | 6 years ago |
|
|
93b28cdd84 | 6 years ago |
|
|
3da449b8a4 | 7 years ago |
|
|
eb2a4699d4 | 7 years ago |
|
|
e01ebef2cf | 7 years ago |
|
|
c3919da2c2 | 7 years ago |
|
|
d5fe3edb15 | 7 years ago |
|
|
f332cd9f68 | 7 years ago |
|
|
d6471b3556 | 7 years ago |
|
|
0da9645d91 | 7 years ago |
|
|
6e9f23c940 | 7 years ago |
|
|
04a9d00a5e | 7 years ago |
|
|
1ddb822509 | 7 years ago |
|
|
0807d71704 | 7 years ago |
|
|
d5f75e84d8 | 7 years ago |
|
|
901c325eab | 7 years ago |
|
|
dbe6218926 | 7 years ago |
|
|
732d0e84d8 | 7 years ago |
|
|
ab303d3c17 | 7 years ago |
|
|
1f1429c47a | 7 years ago |
|
|
5c3661b69c | 7 years ago |
|
|
3f2916ed05 | 7 years ago |
|
|
fa795dd446 | 7 years ago |
|
|
26aedcc5f9 | 7 years ago |
|
|
054935d025 | 7 years ago |
|
|
62fc318e89 | 7 years ago |
|
|
6bba6c4f85 | 7 years ago |
|
|
fb94c85df1 | 7 years ago |
|
|
3cc56afe63 | 7 years ago |
|
|
9789182b2c | 7 years ago |
|
|
4d7109bf99 | 7 years ago |
|
|
130db1f351 | 7 years ago |
|
|
2045397084 | 7 years ago |
|
|
9494da7195 | 7 years ago |
|
|
94fdd3b587 | 7 years ago |
|
|
d7a96081f5 | 7 years ago |
|
|
521430115a | 7 years ago |
|
|
acfb1a6310 | 7 years ago |
|
|
de56cfe351 | 7 years ago |
|
|
5ed6a9703c | 7 years ago |
|
|
f94f0010b6 | 7 years ago |
|
|
9a6b1c2c9c | 7 years ago |
|
|
0f7c82a2d9 | 7 years ago |
|
|
b71eed544f | 7 years ago |
|
|
68e8d96b57 | 7 years ago |
|
|
073500ca81 | 7 years ago |
|
|
494cd9e95c | 7 years ago |
|
|
ae894fb571 | 7 years ago |
|
|
60da12b0ef | 7 years ago |
|
|
5e86922100 | 7 years ago |
|
|
6dcc90c639 | 7 years ago |
|
|
45be8d04e3 | 7 years ago |
|
|
9bbfed8d37 | 7 years ago |
|
|
5b1287d2de | 7 years ago |
|
|
886664abd4 | 7 years ago |
|
|
495dddc389 | 7 years ago |
|
|
b822ae72d9 | 7 years ago |
|
|
742fba96f0 | 7 years ago |
|
|
8eb17934b0 | 7 years ago |
|
|
605368a6e2 | 7 years ago |
|
|
52246a5250 | 7 years ago |
|
|
3ce484688a | 7 years ago |
|
|
ec7accc32c | 7 years ago |
|
|
495c2bc916 | 7 years ago |
|
|
62a7d8f30f | 7 years ago |
|
|
c6e29be792 | 7 years ago |
|
|
fc0bb7a35c | 7 years ago |
|
|
77a7b8febe | 7 years ago |
|
|
7c63d2b03d | 7 years ago |
|
|
136c434b4d | 7 years ago |
|
|
efa0085a67 | 7 years ago |
|
|
9432e3b6eb | 7 years ago |
|
|
7c73664fc8 | 7 years ago |
|
|
228e326111 | 7 years ago |
|
|
6b8be2ca43 | 7 years ago |
|
|
2256552899 | 7 years ago |
|
|
cb2ab59297 | 7 years ago |
|
|
934d497ef5 | 7 years ago |
|
|
e02360f096 | 7 years ago |
|
|
d42abee957 | 7 years ago |
|
|
956b79816b | 7 years ago |
|
|
7328a46086 | 7 years ago |
|
|
8ed8666e77 | 7 years ago |
|
|
db7feed9c5 | 7 years ago |
|
|
6699e5c56f | 7 years ago |
|
|
017c167ea9 | 7 years ago |
|
|
f075f96c58 | 7 years ago |
|
|
7f3122c5fd | 7 years ago |
|
|
be19816f33 | 7 years ago |
|
|
1221431f44 | 7 years ago |
|
|
12a471c3c5 | 7 years ago |
|
|
cc0bed69bf | 7 years ago |
|
|
0f5a155e4f | 7 years ago |
|
|
66ec464b66 | 7 years ago |
|
|
943d1084d4 | 7 years ago |
|
|
bb29ad2c34 | 7 years ago |
|
|
b724a6356a | 7 years ago |
|
|
0ae91ed00f | 7 years ago |
|
|
a7753fd356 | 7 years ago |
|
|
a0c72fc302 | 7 years ago |
|
|
28d50f2347 | 7 years ago |
|
|
3795b99fc5 | 7 years ago |
|
|
4b4db46663 | 7 years ago |
|
|
637c0e42f1 | 7 years ago |
|
|
73891f217d | 7 years ago |
|
|
e6b1648f53 | 7 years ago |
|
|
b53d1be672 | 7 years ago |
|
|
d22981dfbe | 8 years ago |
|
|
5c3e8c6863 | 8 years ago |
|
|
a68f7a7899 | 8 years ago |
|
|
322d689f8b | 8 years ago |
|
|
9693ea9e96 | 8 years ago |
|
|
fbf3f1f263 | 8 years ago |
|
|
3f8794dd89 | 8 years ago |
|
|
4284a57b4e | 8 years ago |
|
|
e1173fc0fd | 8 years ago |
|
|
18490b9bf8 | 8 years ago |
|
|
2714193b73 | 8 years ago |
|
|
1930844e68 | 8 years ago |
|
|
297c2a3b35 | 8 years ago |
|
|
46669115dc | 8 years ago |
|
|
18ecb90bd0 | 8 years ago |
|
|
c1bbf7b199 | 8 years ago |
|
|
925b3bdcc9 | 8 years ago |
|
|
94e4bdd9d6 | 8 years ago |
|
|
8da0dcd84f | 8 years ago |
|
|
d1afcd2e9e | 8 years ago |
|
|
cd4fc2596e | 8 years ago |
|
|
00e62b48be | 8 years ago |
|
|
bd7e864950 | 8 years ago |
|
|
abfe7a8037 | 8 years ago |
|
|
ffcd211dcc | 8 years ago |
|
|
2d97fafbe8 | 8 years ago |
|
|
aba697f2f0 | 8 years ago |
|
|
4564ee3b6d | 8 years ago |
|
|
e768b78b73 | 8 years ago |
|
|
b1d51861e5 | 8 years ago |
|
|
14bcb5ed56 | 8 years ago |
|
|
9fa2777589 | 8 years ago |
|
|
41bec3b53e | 8 years ago |
|
|
6958c4ed26 | 8 years ago |
|
|
b793312143 | 8 years ago |
|
|
b986ff5565 | 8 years ago |
|
|
97bb075cf1 | 8 years ago |
|
|
18aa29860c | 8 years ago |
|
|
fc80b2c581 | 8 years ago |
|
|
4f1c7dd671 | 8 years ago |
|
|
72b89e83e6 | 8 years ago |
|
|
89aed08b4f | 8 years ago |
|
|
a3812d52be | 8 years ago |
|
|
a7eeb40e13 | 8 years ago |
|
|
fe995d2bc8 | 8 years ago |
|
|
762de2aecd | 8 years ago |
|
|
98e012599c | 8 years ago |
|
|
06436c61fc | 8 years ago |
|
|
b627b62f6c | 8 years ago |
|
|
7a1cb53c04 | 8 years ago |
|
|
f45361fa56 | 8 years ago |
|
|
31cc15ca6c | 8 years ago |
|
|
dd5a3a807c | 8 years ago |
|
|
455155c635 | 8 years ago |
|
|
872975656c | 8 years ago |
|
|
62d06792f1 | 8 years ago |
|
|
fde72e4f2a | 8 years ago |
|
|
d4d97d018c | 8 years ago |
|
|
eb3a43a71c | 8 years ago |
|
|
1225405d8e | 8 years ago |
|
|
5b86e2901e | 8 years ago |
|
|
2c2f0f8f03 | 8 years ago |
|
|
5dd6564b6a | 8 years ago |
|
|
fbfce62582 | 8 years ago |
|
|
8741f7ee8e | 8 years ago |
|
|
13451a3a4f | 8 years ago |
|
|
9fd6bdfddd | 8 years ago |
|
|
7c0fd0c9b3 | 8 years ago |
|
|
591483d07e | 8 years ago |
|
|
9d95bbe9b6 | 8 years ago |
|
|
9b9d7e586f | 8 years ago |
|
|
3935b8417b | 8 years ago |
|
|
d9251ce00b | 8 years ago |
|
|
d2a0de861b | 8 years ago |
|
|
24289831c2 | 8 years ago |
|
|
707fd92307 | 8 years ago |
|
|
c8c8430993 | 8 years ago |
|
|
8fa12d8d7e | 8 years ago |
|
|
a976bd0d22 | 8 years ago |
|
|
d825b5562e | 8 years ago |
|
|
747748c9ba | 8 years ago |
|
|
4b368c407b | 8 years ago |
|
|
b6d47f9e86 | 8 years ago |
|
|
a52ea23121 | 8 years ago |
|
|
6e119fbaaf | 8 years ago |
|
|
8e48dd18ba | 8 years ago |
|
|
b4ce23f15e | 8 years ago |
|
|
1470cf12bc | 8 years ago |
|
|
702fbba914 | 8 years ago |
|
|
08a0cdc218 | 8 years ago |
|
|
45ed6a7e25 | 8 years ago |
|
|
f35b230c37 | 8 years ago |
|
|
fb4e07f107 | 8 years ago |
|
|
429af12aa2 | 8 years ago |
|
|
4947019dbb | 8 years ago |
|
|
2f0f038668 | 8 years ago |
|
|
51a68683f8 | 8 years ago |
|
|
4e00e6e3b0 | 8 years ago |
|
|
860e9185cd | 8 years ago |
|
|
21c9480965 | 8 years ago |
|
|
858ee6df69 | 8 years ago |
|
|
335709bc50 | 8 years ago |
|
|
55b9f1c645 | 8 years ago |
|
|
a88a301d81 | 8 years ago |
|
|
91cbd94ba7 | 8 years ago |
|
|
749e8d5cc4 | 8 years ago |
|
|
1a5d7e400d | 8 years ago |
|
|
b5c377ec73 | 8 years ago |
|
|
931a44ee9d | 8 years ago |
|
|
01216b9520 | 8 years ago |
|
|
82ed807bd2 | 8 years ago |
|
|
ebfe08e0a2 | 8 years ago |
|
|
b963ccb778 | 8 years ago |
|
|
c2a46c5da4 | 8 years ago |
|
|
d0a41e09d0 | 8 years ago |
|
|
c90ce95f59 | 8 years ago |
|
|
00df01f633 | 8 years ago |
|
|
081dbf8541 | 8 years ago |
|
|
e9e5aa295c | 8 years ago |
|
|
b8c4eadc7a | 8 years ago |
|
|
7b88cef36d | 8 years ago |
|
|
4ea5334275 | 8 years ago |
|
|
3e4e1d9def | 8 years ago |
|
|
2cf4a57bf4 | 8 years ago |
|
|
bf4f3e71d3 | 8 years ago |
|
|
1867635e0d | 8 years ago |
|
|
6207e35a1e | 8 years ago |
|
|
44a1f6da0d | 8 years ago |
|
|
6abc89dfd5 | 8 years ago |
|
|
b8c0089a1a | 8 years ago |
|
|
1be2f40eae | 8 years ago |
|
|
a9799b70bc | 8 years ago |
|
|
785b430263 | 8 years ago |
|
|
aafb85c6c6 | 8 years ago |
|
|
eeb890000b | 8 years ago |
|
|
6485c2e035 | 8 years ago |
|
|
c89a4cfe5e | 8 years ago |
|
|
08275aa527 | 8 years ago |
|
|
328f9695d8 | 8 years ago |
|
|
7dac50008a | 8 years ago |
|
|
f680fc004c | 8 years ago |
|
|
c3957d3979 | 8 years ago |
|
|
a8ac21ced0 | 8 years ago |
|
|
3435f4f444 | 8 years ago |
|
|
1228ee55d6 | 8 years ago |
|
|
93d827c63a | 8 years ago |
|
|
2aeb7696c3 | 8 years ago |
|
|
e8772404c7 | 8 years ago |
|
|
f1d0e7a3b1 | 8 years ago |
|
|
d766209ab5 | 8 years ago |
|
|
b2e760f40d | 8 years ago |
|
|
ed8556a9fe | 8 years ago |
|
|
533d24b4be | 8 years ago |
|
|
6e273545a4 | 8 years ago |
|
|
c5f90a9cae | 8 years ago |
|
|
32819b5cca | 8 years ago |
|
|
cfaed1e490 | 8 years ago |
|
|
171552370a | 8 years ago |
|
|
2a2685ff84 | 8 years ago |
|
|
6df5e5212c | 8 years ago |
|
|
35ddcc80eb | 8 years ago |
|
|
60cd27c347 | 8 years ago |
|
|
62f48a15ff | 8 years ago |
|
|
821e45751a | 8 years ago |
|
|
b870757e94 | 8 years ago |
|
|
6ecea191b4 | 8 years ago |
|
|
2d14874d69 | 8 years ago |
|
|
c96fbb4d5c | 8 years ago |
|
|
1b1d3ad728 | 8 years ago |
|
|
deeb211c5d | 8 years ago |
|
|
52139a9137 | 8 years ago |
|
|
6d85d53868 | 8 years ago |
|
|
aef92a21ef | 8 years ago |
|
|
204aaae213 | 8 years ago |
|
|
2b02690b93 | 8 years ago |
|
|
c1494d719a | 8 years ago |
|
|
af94a80c59 | 8 years ago |
|
|
19c32608f3 | 8 years ago |
|
|
dba034fd90 | 8 years ago |
|
|
2c262d1198 | 8 years ago |
|
|
9d1b89a0c1 | 8 years ago |
|
|
36e7c874cd | 8 years ago |
|
|
748891a094 | 8 years ago |
|
|
3a6f550223 | 8 years ago |
|
|
12630e8a8a | 8 years ago |
|
|
f459f67e72 | 8 years ago |
|
|
6581071b01 | 8 years ago |
|
|
eebf2c7d32 | 8 years ago |
|
|
157045924b | 8 years ago |
|
|
c1325d06b7 | 8 years ago |
|
|
fc24d902ad | 8 years ago |
|
|
dd14e13db9 | 8 years ago |
|
|
298dac337c | 8 years ago |
|
|
9724cb0013 | 8 years ago |
|
|
c82fab635c | 8 years ago |
|
|
b35aa272d5 | 8 years ago |
|
|
23cefde335 | 8 years ago |
|
|
111d44b7cb | 8 years ago |
|
|
43630426ff | 8 years ago |
|
|
613bab0a9d | 8 years ago |
|
|
3b77c0732e | 8 years ago |
|
|
4b5cd19396 | 8 years ago |
|
|
8e073579f6 | 8 years ago |
|
|
05a312f6d0 | 8 years ago |
|
|
2016e28ee5 | 8 years ago |
|
|
dfb4127583 | 8 years ago |
|
|
8608b29ded | 8 years ago |
|
|
72a9fbf267 | 8 years ago |
|
|
e30f189a19 | 8 years ago |
|
|
c4c0d450fd | 8 years ago |
|
|
ff5789d4ac | 8 years ago |
|
|
1e9f728a3b | 8 years ago |
|
|
b7127541a3 | 8 years ago |
|
|
038b047116 | 8 years ago |
|
|
73c8da05b7 | 8 years ago |
|
|
8615f3b804 | 8 years ago |
|
|
fa2658cd2b | 8 years ago |
|
|
16eceedbf5 | 8 years ago |
|
|
776fda15a0 | 8 years ago |
|
|
a5a69c2fdf | 8 years ago |
|
|
da20f49c59 | 8 years ago |
|
|
cadd9c751d | 8 years ago |
|
|
c983d47c8e | 8 years ago |
|
|
91db7e4a84 | 8 years ago |
|
|
e278a7d4e3 | 8 years ago |
|
|
a90e5cc7b4 | 8 years ago |
|
|
5c340e85e8 | 8 years ago |
|
|
3ff2926871 | 8 years ago |
|
|
8660d35dcf | 8 years ago |
|
|
25128992b1 | 8 years ago |
|
|
3059d15c17 | 8 years ago |
|
|
f80c8b8141 | 8 years ago |
|
|
23047bc23c | 8 years ago |
|
|
3292b030ce | 8 years ago |
|
|
9e2dd8108c | 8 years ago |
|
|
6e15dba281 | 8 years ago |
|
|
4b32e8b4d3 | 8 years ago |
|
|
6a10411f6a | 8 years ago |
|
|
a38a8d9c59 | 8 years ago |
|
|
ebac131247 | 8 years ago |
|
|
6f8a30c0e3 | 8 years ago |
|
|
67e7c8a5bf | 8 years ago |
|
|
c05f9fe9c9 | 8 years ago |
|
|
3f8168ce0b | 8 years ago |
|
|
773fe2da59 | 8 years ago |
|
|
a4ad3a4ea9 | 8 years ago |
|
|
39b2f1ddac | 8 years ago |
|
|
d048ba15cb | 8 years ago |
|
|
0207c91312 | 8 years ago |
|
|
6aa8c856cf | 8 years ago |
|
|
03120f8dd9 | 8 years ago |
|
|
fa95f964de | 8 years ago |
|
|
29a59808ab | 8 years ago |
|
|
43df802cff | 8 years ago |
|
|
db30e572db | 8 years ago |
|
|
9d43f929bc | 8 years ago |
|
|
b5d94c708d | 8 years ago |
|
|
357b44c265 | 8 years ago |
|
|
6f7d793abd | 8 years ago |
|
|
ad9d591b16 | 8 years ago |
|
|
ec5faf04f8 | 8 years ago |
|
|
c095b722fc | 8 years ago |
|
|
040812d813 | 8 years ago |
|
|
5b8bcb1a9a | 8 years ago |
|
|
28d2f0b66e | 8 years ago |
|
|
65d62ec379 | 8 years ago |
|
|
e9968713e4 | 8 years ago |
|
|
c090fa175e | 8 years ago |
|
|
537f8ef79a | 8 years ago |
|
|
07eb60abc6 | 8 years ago |
|
|
f2bb21f129 | 8 years ago |
|
|
9d6d27ae21 | 8 years ago |
|
|
b4112d5641 | 8 years ago |
|
|
2ddde65a57 | 8 years ago |
|
|
706fa4fca4 | 8 years ago |
|
|
a4d2ca6935 | 8 years ago |
|
|
d9cd957f4d | 8 years ago |
|
|
ac7870280a | 8 years ago |
|
|
6e729c517d | 8 years ago |
|
|
0cd3073134 | 8 years ago |
|
|
284b26abf4 | 8 years ago |
|
|
113cd638f5 | 8 years ago |
|
|
3755655239 | 8 years ago |
|
|
040b2a3d7f | 8 years ago |
|
|
2f2fea617b | 8 years ago |
|
|
1825b65d4c | 8 years ago |
|
|
0a43c6fedd | 8 years ago |
|
|
170a665d4a | 8 years ago |
|
|
11a47c189c | 8 years ago |
|
|
d3e789f5da | 8 years ago |
|
|
068ffe6c9a | 8 years ago |
|
|
a36042b5ce | 8 years ago |
|
|
d9bfbb5525 | 8 years ago |
|
|
cacdb07a6e | 8 years ago |
|
|
396f4fc78e | 8 years ago |
|
|
9adc29318e | 8 years ago |
|
|
d4c0c1747b | 8 years ago |
|
|
e6a0379e54 | 8 years ago |
|
|
5a070388ae | 8 years ago |
|
|
53c786e73c | 8 years ago |
|
|
6ca45c66b8 | 8 years ago |
|
|
06d7612bf5 | 8 years ago |
|
|
ca9229e40c | 8 years ago |
|
|
f2a20688c6 | 8 years ago |
|
|
3f07dd4094 | 8 years ago |
|
|
f8a4630095 | 8 years ago |
|
|
ef7b831a82 | 8 years ago |
|
|
083cf4bf46 | 8 years ago |
|
|
61ae0d2bee | 8 years ago |
|
|
8deb398675 | 8 years ago |
|
|
878d4fa6d5 | 8 years ago |
|
|
7c5a4b6e71 | 8 years ago |
|
|
054d3a5b2b | 8 years ago |
|
|
d0a91d5f50 | 8 years ago |
|
|
364d2985db | 8 years ago |
|
|
d7cb45c237 | 8 years ago |
|
|
a699567a61 | 8 years ago |
|
|
dd1cb33626 | 8 years ago |
|
|
b1f53a6d09 | 8 years ago |
|
|
c4718246ea | 8 years ago |
|
|
0b8291c329 | 8 years ago |
|
|
cdffe16b98 | 8 years ago |
|
|
c2f9d10f71 | 8 years ago |
|
|
e8136cb667 | 8 years ago |
|
|
9fd92d2245 | 8 years ago |
|
|
6460e5893c | 8 years ago |
|
|
48eb207fa5 | 8 years ago |
|
|
76639f528a | 8 years ago |
|
|
88912170fc | 8 years ago |
|
|
507c33dc0e | 8 years ago |
|
|
404d740305 | 8 years ago |
|
|
a15f1fa92e | 8 years ago |
|
|
ef09f42af8 | 8 years ago |
|
|
bc1ac63af0 | 8 years ago |
|
|
5ddffa6c00 | 8 years ago |
|
|
e23276b83a | 8 years ago |
|
|
2692e866dd | 8 years ago |
|
|
70b4eb0877 | 8 years ago |
|
|
97957b7bc3 | 8 years ago |
|
|
9c634ebd45 | 8 years ago |
|
|
ffc44db085 | 8 years ago |
|
|
00d9f0c003 | 8 years ago |
|
|
540436fe7f | 8 years ago |
|
|
b8121aae79 | 8 years ago |
|
|
f2d7d32d1e | 8 years ago |
|
|
6de0f2b9b9 | 8 years ago |
|
|
9672465292 | 8 years ago |
|
|
893b885b5a | 8 years ago |
|
|
acf318d83c | 8 years ago |
|
|
84aa1fd0e6 | 8 years ago |
|
|
71fd4427cc | 8 years ago |
|
|
08f93ae95a | 8 years ago |
|
|
c374ce60c3 | 8 years ago |
|
|
9eda7bf59c | 8 years ago |
|
|
f36735a6b4 | 8 years ago |
|
|
bb84ffaf87 | 8 years ago |
|
|
2fa62e12a1 | 8 years ago |
|
|
b92e03eff6 | 8 years ago |
|
|
406f6473b6 | 8 years ago |
|
|
5ea59ab7c4 | 8 years ago |
|
|
f8a54005bf | 8 years ago |
|
|
b58d09cf02 | 8 years ago |
|
|
2388af05e1 | 8 years ago |
|
|
c3f4f18115 | 8 years ago |
|
|
37ce825dc1 | 8 years ago |
|
|
10972a55df | 9 years ago |
|
|
be2ab1bdca | 9 years ago |
|
|
dc6a80a77d | 9 years ago |
|
|
d7b3841f93 | 9 years ago |
|
|
08ecc1a241 | 9 years ago |
|
|
fa7b0777f3 | 9 years ago |
|
|
68b8baef34 | 9 years ago |
|
|
275899fd29 | 9 years ago |
|
|
df548f1db9 | 9 years ago |
|
|
6da5e5e5b2 | 9 years ago |
|
|
ea16b28e65 | 9 years ago |
|
|
839c185f5e | 9 years ago |
|
|
c74174a3c4 | 9 years ago |
|
|
3df27ffbdf | 9 years ago |
|
|
f2bb7df1db | 9 years ago |
|
|
4135a490ff | 9 years ago |
|
|
3bff9d2aae | 9 years ago |
|
|
cb482d3651 | 9 years ago |
|
|
7730994a79 | 9 years ago |
|
|
930b6dd820 | 9 years ago |
|
|
4765db4d86 | 9 years ago |
|
|
27dea59284 | 9 years ago |
|
|
da8cc90ab4 | 9 years ago |
|
|
754e8213cf | 9 years ago |
|
|
69a9cd66d1 | 9 years ago |
|
|
6781a98fd6 | 9 years ago |
|
|
5922c3fcde | 9 years ago |
|
|
840bf9564d | 9 years ago |
|
|
27f9925fd1 | 9 years ago |
|
|
3b48d64ec3 | 9 years ago |
|
|
57022a410f | 9 years ago |
|
|
7b0cb1b729 | 9 years ago |
|
|
b07972c526 | 9 years ago |
|
|
35e9417e8f | 9 years ago |
|
|
ef172bcf81 | 9 years ago |
|
|
40cc80371b | 9 years ago |
|
|
29f0171291 | 9 years ago |
|
|
12a6978748 | 9 years ago |
|
|
e8bcc4ca9f | 9 years ago |
|
|
5f77d89db6 | 9 years ago |
|
|
09abdc1b9f | 9 years ago |
|
|
6e8ebd8253 | 9 years ago |
|
|
276a1dfa1b | 9 years ago |
|
|
d361ee33fc | 9 years ago |
|
|
96012c6956 | 9 years ago |
|
|
3df7ee9cb1 | 9 years ago |
|
|
89c5f02d76 | 9 years ago |
|
|
3e5afa025a | 9 years ago |
|
|
8835aceb35 | 9 years ago |
|
|
ce97268895 | 9 years ago |
|
|
85255cf195 | 9 years ago |
|
|
9a99a06cd4 | 9 years ago |
|
|
ad4b9b7b00 | 9 years ago |
|
|
b1618632f0 | 9 years ago |
|
|
e0251f55cd | 9 years ago |
|
|
97509f6d03 | 9 years ago |
|
|
585802510a | 9 years ago |
|
|
c2d7096500 | 9 years ago |
|
|
a1e84f4978 | 9 years ago |
|
|
357753dc48 | 9 years ago |
|
|
da992312f3 | 9 years ago |
|
|
076382caf3 | 9 years ago |
|
|
4b8345bb94 | 9 years ago |
|
|
48d9a0fd26 | 9 years ago |
|
|
1c27c01ac5 | 9 years ago |
|
|
33f2dc27d3 | 9 years ago |
|
|
cc7be90de4 | 9 years ago |
|
|
8828c4d5cb | 9 years ago |
|
|
bf7acf678a | 9 years ago |
|
|
a4fb878b08 | 9 years ago |
|
|
09004e0d1e | 9 years ago |
|
|
4ccb9bd0d4 | 9 years ago |
|
|
e68d9bd76e | 9 years ago |
|
|
e451e70fe0 | 9 years ago |
|
|
b3941f8a33 | 9 years ago |
|
|
3b5b572f36 | 9 years ago |
|
|
70910fd2aa | 9 years ago |
|
|
af5afd12f2 | 9 years ago |
|
|
fb3a259e41 | 9 years ago |
|
|
978c145180 | 9 years ago |
|
|
3c539f0ec8 | 10 years ago |
|
|
fdc9c38f1a | 10 years ago |
|
|
e21f87a5f6 | 10 years ago |
|
|
52ae23c598 | 10 years ago |
|
|
e6bebd4775 | 10 years ago |
|
|
83b342d4e4 | 10 years ago |
|
|
6df6794f7a | 10 years ago |
|
|
d586c125a6 | 10 years ago |
|
|
8464e3d594 | 10 years ago |
|
|
9a26274b11 | 10 years ago |
|
|
2ef2505507 | 10 years ago |
|
|
5bb96c1b74 | 10 years ago |
|
|
cf4bb059f9 | 10 years ago |
|
|
12ebb136ba | 10 years ago |
|
|
941d710247 | 10 years ago |
|
|
a429b71665 | 10 years ago |
|
|
7f632afe29 | 10 years ago |
|
|
c978b2c5e9 | 10 years ago |
|
|
144a557ddb | 10 years ago |
|
|
09cf683e1a | 10 years ago |
|
|
73646ed7ce | 10 years ago |
|
|
5fe51be814 | 10 years ago |
|
|
4336c5c7c4 | 10 years ago |
|
|
93f963bc6c | 10 years ago |
|
|
8f7f184837 | 10 years ago |
|
|
2bbf72d9ab | 10 years ago |
|
|
6b0e438cb5 | 10 years ago |
|
|
2e3e1ddb5a | 10 years ago |
|
|
61b3978a5d | 10 years ago |
|
|
ddaa4d13fe | 10 years ago |
|
|
c0821da875 | 10 years ago |
|
|
65924d1be8 | 10 years ago |
|
|
0031a47721 | 10 years ago |
|
|
17cc720dc1 | 10 years ago |
|
|
adfc3b2a50 | 10 years ago |
|
|
44c1ddd00a | 10 years ago |
|
|
e9e1f7e631 | 10 years ago |
|
|
4f63e079bc | 10 years ago |
|
|
f3b98c9f9c | 10 years ago |
|
|
fa740a797d | 10 years ago |
|
|
fb1bd28460 | 10 years ago |
|
|
c9f7cc1855 | 10 years ago |
|
|
3150395375 | 10 years ago |
|
|
e206e62a02 | 10 years ago |
|
|
fbe58341e4 | 10 years ago |
|
|
02a6fffcff | 10 years ago |
|
|
1229edd1ea | 10 years ago |
|
|
87e85fa0da | 10 years ago |
|
|
9cfc2ff6f8 | 10 years ago |
|
|
8200c07a7f | 10 years ago |
|
|
1d08de94fd | 10 years ago |
|
|
2b74a784df | 10 years ago |
|
|
2da268f2ad | 10 years ago |
|
|
fc1662e742 | 10 years ago |
|
|
b56790799a | 10 years ago |
|
|
88c9440359 | 10 years ago |
|
|
9170fc4b96 | 10 years ago |
|
|
43e2bf7453 | 10 years ago |
|
|
9b1dda2c45 | 10 years ago |
|
|
93d28a8e38 | 10 years ago |
|
|
deecee477d | 10 years ago |
|
|
f4dd0254aa | 10 years ago |
|
|
1df054d844 | 10 years ago |
|
|
6eaa85eee1 | 10 years ago |
|
|
72c9429d74 | 10 years ago |
|
|
8c6413bfe2 | 10 years ago |
|
|
7d941d873d | 10 years ago |
|
|
d5e7bc8800 | 10 years ago |
|
|
96ffb97a34 | 10 years ago |
|
|
025446fac1 | 10 years ago |
|
|
15dc2dc1e9 | 10 years ago |
|
|
c668d4c17a | 10 years ago |
|
|
8c6b94e213 | 10 years ago |
|
|
ef2c07e067 | 10 years ago |
|
|
158eb0f45e | 10 years ago |
|
|
8d8f4b22d4 | 10 years ago |
|
|
364c79d9ee | 10 years ago |
|
|
6c0c62cc13 | 10 years ago |
|
|
b279c85afc | 10 years ago |
|
|
d82b455b4e | 10 years ago |
|
|
ad9fe2a8ee | 10 years ago |
|
|
4f80239b4b | 10 years ago |
|
|
66a710359f | 10 years ago |
|
|
3eedfd6fbb | 10 years ago |
|
|
cf5143e876 | 10 years ago |
|
|
6fdbf9dd94 | 10 years ago |
|
|
7d4e569bd6 | 10 years ago |
|
|
3c1419ad3b | 10 years ago |
|
|
50189a450f | 10 years ago |
|
|
2d7ffc639e | 10 years ago |
|
|
16f986860e | 10 years ago |
|
|
c03d38a5c6 | 10 years ago |
|
|
e18782672d | 10 years ago |
|
|
3b7130c525 | 10 years ago |
|
|
e25d748aa4 | 10 years ago |
|
|
f3876463d3 | 10 years ago |
|
|
9e4e4943f3 | 11 years ago |
|
|
7bc684f2b8 | 11 years ago |
|
|
99225e1688 | 11 years ago |
|
|
12c5acd287 | 11 years ago |
|
|
2224ece1a5 | 11 years ago |
|
|
7b651310b4 | 11 years ago |
|
|
85220191c2 | 11 years ago |
|
|
471c314bed | 11 years ago |
|
|
9bda70293f | 11 years ago |
|
|
cfbce5297a | 11 years ago |
|
|
0dcf068b56 | 11 years ago |
|
|
ae0fdc8d10 | 11 years ago |
|
|
98c51dbff4 | 11 years ago |
|
|
a8ceaa5dfb | 11 years ago |
|
|
a914c01ea9 | 11 years ago |
|
|
479b454307 | 11 years ago |
|
|
d265619145 | 11 years ago |
|
|
ff36607354 | 11 years ago |
|
|
51d18b4c47 | 11 years ago |
|
|
77b0dd8233 | 11 years ago |
|
|
9cd5e959aa | 11 years ago |
|
|
6c24fe8e2a | 11 years ago |
|
|
bf7762ba0f | 11 years ago |
|
|
1f4ba9dda9 | 11 years ago |
|
|
c8765697e1 | 11 years ago |
|
|
fac3e5d055 | 11 years ago |
|
|
ee95ccca36 | 11 years ago |
|
|
fb5cac0455 | 11 years ago |
|
|
e088e9cf70 | 11 years ago |
|
|
d333eb96ea | 11 years ago |
|
|
e543517500 | 11 years ago |
|
|
3c41bfcb12 | 11 years ago |
|
|
20e294884a | 11 years ago |
|
|
2b230b85e1 | 11 years ago |
|
|
3591ca42f6 | 11 years ago |
|
|
f7a9ba851d | 11 years ago |
|
|
3d3673f163 | 11 years ago |
|
|
07ba0a0a4b | 11 years ago |
|
|
22d5f9b052 | 11 years ago |
|
|
a7329ef71d | 11 years ago |
|
|
5e8de220e4 | 11 years ago |
|
|
0cb267a081 | 11 years ago |
|
|
a1f8e9599e | 11 years ago |
|
|
c8a461a815 | 11 years ago |
|
|
cd760f33cb | 11 years ago |
|
|
d6a48df601 | 11 years ago |
|
|
fd4a7579f1 | 11 years ago |
|
|
49ac2574b8 | 11 years ago |
|
|
ef68842b80 | 11 years ago |
|
|
5997dec5d1 | 11 years ago |
|
|
a2e5fd671e | 11 years ago |
|
|
6f842724be | 11 years ago |
|
|
32333a440a | 11 years ago |
|
|
a1ff628a57 | 11 years ago |
|
|
bbfef4f6cf | 11 years ago |
|
|
9f51e49725 | 11 years ago |
|
|
f24e9a907f | 11 years ago |
|
|
cef90f0b20 | 11 years ago |
|
|
9b45f27792 | 11 years ago |
|
|
b20d44e36c | 11 years ago |
|
|
dd657f31ae | 11 years ago |
|
|
f81933fb59 | 11 years ago |
|
|
caeb0973d4 | 11 years ago |
|
|
bba94c0787 | 11 years ago |
|
|
0d6c28642c | 11 years ago |
|
|
685bec0647 | 11 years ago |
|
|
23aa1e79cb | 11 years ago |
|
|
8063ea1e67 | 11 years ago |
|
|
e927581336 | 11 years ago |
|
|
33708938da | 11 years ago |
|
|
855833c978 | 11 years ago |
|
|
36cb60fe30 | 11 years ago |
|
|
779c9a6c36 | 11 years ago |
|
|
98ad80de31 | 11 years ago |
|
|
303291fe09 | 11 years ago |
|
|
cbc0337110 | 11 years ago |
|
|
04354e3e90 | 11 years ago |
|
|
d7b6be4567 | 11 years ago |
|
|
2129490a92 | 11 years ago |
|
|
1f9c4adc37 | 11 years ago |
|
|
f138b90e04 | 11 years ago |
|
|
262661347b | 11 years ago |
|
|
05d8c51580 | 11 years ago |
|
|
9aebda7913 | 11 years ago |
|
|
0d92dd7e5b | 11 years ago |
|
|
714c02232a | 11 years ago |
|
|
1aa8b4fc1e | 11 years ago |
|
|
d03434cc43 | 11 years ago |
|
|
6369d37567 | 11 years ago |
|
|
446b5a0a81 | 11 years ago |
|
|
02760abbf0 | 11 years ago |
|
|
20bd54c56b | 11 years ago |
|
|
a58dba5c27 | 11 years ago |
|
|
f3c5815848 | 11 years ago |
|
|
cc6eae5555 | 11 years ago |
|
|
aea695bf8b | 11 years ago |
|
|
0528676c7a | 11 years ago |
|
|
4ab8f52b44 | 11 years ago |
|
|
40e1ed6e3b | 11 years ago |
|
|
b5e71ace47 | 11 years ago |
|
|
276d48a00c | 11 years ago |
|
|
568ad296a3 | 11 years ago |
|
|
ae701d9aff | 11 years ago |
|
|
6f4257bb2a | 11 years ago |
|
|
0c1293b573 | 11 years ago |
|
|
18720c8939 | 11 years ago |
|
|
ea2a949ae0 | 11 years ago |
|
|
3b5fd4fe12 | 11 years ago |
|
|
32d8b7093e | 11 years ago |
|
|
bd462a40f9 | 11 years ago |
|
|
a88171bff7 | 11 years ago |
|
|
9de479ddbc | 11 years ago |
|
|
6c6e27d83c | 11 years ago |
|
|
8adcdb3d2e | 11 years ago |
|
|
637237a1d5 | 11 years ago |
|
|
6911b0c581 | 11 years ago |
|
|
73ed896a85 | 11 years ago |
|
|
535a46db37 | 11 years ago |
|
|
b41cc1ff28 | 11 years ago |
|
|
2f075c71e2 | 11 years ago |
|
|
438a7dca0a | 11 years ago |
|
|
83cc6053eb | 11 years ago |
|
|
4ba4d55e6b | 11 years ago |
|
|
4d4837924c | 11 years ago |
|
|
b65fd71012 | 11 years ago |
|
|
9d245c0510 | 11 years ago |
|
|
7dcfdf9e08 | 11 years ago |
|
|
c8f162d0bb | 11 years ago |
|
|
8aaadb8fc0 | 11 years ago |
|
|
257334b4c2 | 11 years ago |
|
|
3d3160efdf | 11 years ago |
|
|
9afbbae8cf | 11 years ago |
|
|
c4699d06a1 | 11 years ago |
|
|
84399071f5 | 11 years ago |
|
|
9a40eb17a0 | 11 years ago |
|
|
3384a7614a | 11 years ago |
|
|
6bc728f8b8 | 11 years ago |
|
|
57de4fdf14 | 11 years ago |
|
|
ea1b442e13 | 11 years ago |
|
|
29f769fe19 | 11 years ago |
|
|
1cc471bd39 | 11 years ago |
|
|
5155b87ca9 | 11 years ago |
|
|
486183cbe6 | 11 years ago |
|
|
8c506d4d73 | 11 years ago |
|
|
04f160efba | 11 years ago |
|
|
8fcecdbde8 | 11 years ago |
|
|
4f2ecc710d | 11 years ago |
|
|
186c649984 | 11 years ago |
|
|
eec9c79467 | 11 years ago |
|
|
0abc5ff08b | 11 years ago |
|
|
551febbb26 | 11 years ago |
|
|
654821f101 | 11 years ago |
|
|
52540c1a9a | 11 years ago |
|
|
3849a3d4d9 | 11 years ago |
|
|
1e1ec2e92c | 11 years ago |
|
|
05089dc370 | 11 years ago |
|
|
1d2954c39c | 11 years ago |
|
|
2cd6961ed4 | 11 years ago |
|
|
7d3ff66560 | 11 years ago |
|
|
a313e4653d | 11 years ago |
|
|
8f2b473928 | 11 years ago |
|
|
4142551c13 | 11 years ago |
|
|
f8c38177e2 | 11 years ago |
|
|
0211bcec64 | 11 years ago |
|
|
e025afe8ea | 11 years ago |
|
|
7c8a8cdf64 | 11 years ago |
|
|
af57d6d9e7 | 11 years ago |
|
|
1d8243583c | 11 years ago |
|
|
1901b9c6e8 | 11 years ago |
|
|
6f786635f4 | 11 years ago |
|
|
b518ab5573 | 11 years ago |
|
|
89a2610ab1 | 11 years ago |
|
|
13c03d802d | 11 years ago |
|
|
4a86eb0525 | 11 years ago |
|
|
c18db8cc7f | 11 years ago |
|
|
a49340b57a | 11 years ago |
|
|
4ad7c65362 | 11 years ago |
|
|
33b5ac1a57 | 11 years ago |
|
|
5b513a005f | 11 years ago |
|
|
b4254db51c | 11 years ago |
|
|
31b785bcf7 | 11 years ago |
|
|
2207c16a15 | 11 years ago |
|
|
b7e5a7bd44 | 11 years ago |
|
|
818a3db9e4 | 11 years ago |
|
|
fb639870df | 11 years ago |
|
|
d32137ced0 | 11 years ago |
|
|
622d0a7e9d | 11 years ago |
|
|
3fe5d48c05 | 11 years ago |
|
|
dac3bab44f | 11 years ago |
|
|
b4fb58891d | 11 years ago |
|
|
4e76965155 | 11 years ago |
|
|
be3e86e055 | 11 years ago |
|
|
d47d8bf0bf | 11 years ago |
|
|
44f1a61c42 | 11 years ago |
|
|
cd13d2870b | 11 years ago |
|
|
ddaa948cf4 | 11 years ago |
|
|
e751a5403b | 11 years ago |
|
|
0e77cbd15d | 11 years ago |
|
|
1583a3edc6 | 11 years ago |
|
|
dbe14694c8 | 11 years ago |
|
|
eb42375215 | 11 years ago |
|
|
c472e23c7d | 11 years ago |
|
|
f4807b6b29 | 11 years ago |
|
|
37331b1ef2 | 11 years ago |
|
|
b01964db9b | 11 years ago |
|
|
171fef784e | 11 years ago |
|
|
f815223f27 | 11 years ago |
|
|
1c05281183 | 11 years ago |
|
|
1f4ff9c809 | 11 years ago |
|
|
8ae33e9c12 | 11 years ago |
|
|
7cd060a15f | 11 years ago |
|
|
cb29f10173 | 11 years ago |
|
|
c0bfb00be8 | 11 years ago |
|
|
c1314e496b | 11 years ago |
|
|
595de33e83 | 11 years ago |
|
|
5106c4bc44 | 11 years ago |
|
|
764b1a0b7a | 11 years ago |
|
|
0b1ddfa17b | 11 years ago |
|
|
5f177a2e30 | 11 years ago |
|
|
2d4431fe0c | 11 years ago |
|
|
9340975606 | 11 years ago |
|
|
322a5d3207 | 11 years ago |
|
|
99be819a0d | 11 years ago |
|
|
64e468b7d5 | 11 years ago |
|
|
d3161bd5d9 | 11 years ago |
|
|
cb5cbda062 | 11 years ago |
|
|
68f55f6a3e | 11 years ago |
|
|
a15d4df48e | 11 years ago |
|
|
fb994c6831 | 11 years ago |
|
|
b66cd2ca0f | 11 years ago |
|
|
14f71e35d8 | 11 years ago |
|
|
dfb1de3c91 | 11 years ago |
|
|
adfd5a3fe7 | 11 years ago |
|
|
4708427c0f | 11 years ago |
|
|
be33b5c3f0 | 11 years ago |
|
|
1a2adf08a7 | 11 years ago |
|
|
288402dc3a | 11 years ago |
|
|
9b46b2c6c1 | 11 years ago |
|
|
121d4d5022 | 11 years ago |
|
|
f3f461e94c | 11 years ago |
|
|
d7418c9c45 | 11 years ago |
|
|
e90ea2c3ef | 11 years ago |
|
|
b2c9dda8be | 11 years ago |
|
|
b95f974586 | 11 years ago |
|
|
b6cee9dc3d | 11 years ago |
|
|
6e40b641a2 | 11 years ago |
|
|
3de061b92b | 11 years ago |
|
|
5bef16d88d | 11 years ago |
|
|
dd90ff1c57 | 11 years ago |
|
|
4fffc97954 | 11 years ago |
|
|
4d8f908022 | 11 years ago |
|
|
7c5cf28c33 | 11 years ago |
|
|
301e707e6b | 11 years ago |
|
|
c6d89dab64 | 11 years ago |
|
|
8102f3467e | 11 years ago |
|
|
a14f487488 | 11 years ago |
|
|
3607286a3e | 11 years ago |
|
|
4f825399f6 | 11 years ago |
|
|
0a736dc270 | 11 years ago |
|
|
a0b86f7d25 | 11 years ago |
|
|
882d1d9425 | 11 years ago |
|
|
d8bbe9a501 | 11 years ago |
|
|
3ec2c29ef0 | 11 years ago |
|
|
ca8330d4f0 | 11 years ago |
|
|
dbbd13a8d5 | 11 years ago |
|
|
ed43097de8 | 11 years ago |
|
|
a179821f3d | 11 years ago |
|
|
eb70156b90 | 11 years ago |
|
|
b93759e2f9 | 11 years ago |
|
|
687e9d84a9 | 11 years ago |
|
|
e38cd3c7f1 | 11 years ago |
|
|
28923771dc | 11 years ago |
|
|
1629accdb8 | 11 years ago |
|
|
8f9be95a08 | 11 years ago |
|
|
0124096789 | 11 years ago |
|
|
2643125f66 | 11 years ago |
|
|
aa80edc171 | 11 years ago |
|
|
8474fce1bc | 11 years ago |
|
|
365593a389 | 11 years ago |
|
|
1bfe037de6 | 11 years ago |
|
|
cba6d2346e | 11 years ago |
|
|
b5c47c898e | 11 years ago |
|
|
fffec145b9 | 11 years ago |
|
|
539826310b | 11 years ago |
|
|
f3d62969ee | 11 years ago |
|
|
0b81faebee | 11 years ago |
|
|
16ff5db8f4 | 11 years ago |
|
|
c9a8c8d6df | 11 years ago |
|
|
651fa9c16a | 11 years ago |
|
|
96454afb20 | 11 years ago |
|
|
f5c675e8b8 | 11 years ago |
|
|
64e3310a36 | 11 years ago |
|
|
ef9301276c | 11 years ago |
|
|
6c4428ff73 | 11 years ago |
|
|
6952156891 | 11 years ago |
|
|
42e84760dc | 11 years ago |
|
|
21c8bfa537 | 11 years ago |
|
|
e965b1eef7 | 11 years ago |
|
|
dc5761164b | 11 years ago |
|
|
29aa1d393d | 11 years ago |
|
|
dee9c4706f | 11 years ago |
|
|
b843ddfd70 | 11 years ago |
|
|
33af8467b8 | 11 years ago |
|
|
223240bba0 | 11 years ago |
|
|
bace1708f9 | 11 years ago |
|
|
178bded97f | 11 years ago |
|
|
8f7d7d233b | 11 years ago |
|
|
e0eaf97eb4 | 11 years ago |
|
|
8db990daa3 | 11 years ago |
|
|
1ee1bd052a | 11 years ago |
|
|
f4a7378ff2 | 11 years ago |
|
|
97ae38c584 | 11 years ago |
|
|
a61e73d212 | 11 years ago |
|
|
6d8554da76 | 11 years ago |
|
|
24f1ef515f | 11 years ago |
|
|
56d4cf6a6a | 11 years ago |
|
|
26e80a8c5c | 11 years ago |
|
|
cfa4b7ebe5 | 11 years ago |
|
|
05b835dd73 | 11 years ago |
|
|
a3c4df4e00 | 11 years ago |
|
|
c64e26deea | 11 years ago |
|
|
3e71ee90c6 | 11 years ago |
|
|
db6ed71060 | 11 years ago |
|
|
f9ca8d5040 | 11 years ago |
|
|
0241870671 | 11 years ago |
|
|
86e852a722 | 11 years ago |
|
|
859482fff2 | 11 years ago |
|
|
ab556945f3 | 11 years ago |
|
|
8a1b6d806e | 11 years ago |
|
|
3bd9eee897 | 11 years ago |
|
|
d1a5a1856f | 11 years ago |
|
|
1c64aa4af4 | 11 years ago |
|
|
e90bc19420 | 11 years ago |
|
|
5a422a681d | 11 years ago |
|
|
09d605fa04 | 11 years ago |
|
|
6151b10bd8 | 11 years ago |
|
|
00e081f3fe | 11 years ago |
|
|
89fe48ae66 | 11 years ago |
|
|
7a5d174aa4 | 11 years ago |
|
|
648e5e2d67 | 11 years ago |
|
|
bc9c9ca2d9 | 11 years ago |
|
|
f1e9bc363e | 11 years ago |
|
|
71b0c22c9d | 11 years ago |
|
|
ec337b61af | 11 years ago |
|
|
2a2fa8da75 | 11 years ago |
|
|
a3b2edf65e | 11 years ago |
|
|
4f8c0e65e6 | 11 years ago |
|
|
488be6ef3e | 11 years ago |
|
|
749c723d57 | 11 years ago |
|
|
84a0bbf18e | 11 years ago |
|
|
0769160b34 | 11 years ago |
|
|
c2af79c996 | 11 years ago |
|
|
6b4a9a1962 | 11 years ago |
|
|
4833012ae3 | 11 years ago |
|
|
85eded970b | 11 years ago |
|
|
dd25e64134 | 11 years ago |
|
|
3ce0d0aded | 11 years ago |
|
|
feea508a8e | 11 years ago |
|
|
fb2cb5c41c | 11 years ago |
|
|
6eaa7e02b8 | 11 years ago |
|
|
f17ad2f1a5 | 11 years ago |
|
|
4e1b938f25 | 11 years ago |
|
|
e0d742b040 | 11 years ago |
|
|
f432dfa856 | 11 years ago |
|
|
7348d11871 | 11 years ago |
|
|
e2105c395e | 11 years ago |
|
|
055c398916 | 11 years ago |
|
|
e724d1a9e2 | 11 years ago |
|
|
a6b4e3dee0 | 11 years ago |
|
|
cba32c8eb4 | 11 years ago |
|
|
54868d149a | 11 years ago |
|
|
08403a44f8 | 11 years ago |
|
|
bbfcb4eea9 | 11 years ago |
|
|
aff7501596 | 11 years ago |
|
|
10f364c153 | 11 years ago |
|
|
c80280bd2d | 11 years ago |
|
|
c9b1298344 | 11 years ago |
|
|
c6e3b5a81b | 11 years ago |
|
|
3e43478e13 | 11 years ago |
|
|
829f80e1da | 11 years ago |
|
|
618502354f | 11 years ago |
|
|
e2c0beb663 | 11 years ago |
|
|
3dc8e88c75 | 11 years ago |
|
|
9cb78c2575 | 11 years ago |
|
|
7c69a427c2 | 11 years ago |
|
|
799aafbcd4 | 11 years ago |
|
|
e98b514a51 | 11 years ago |
|
|
db49291fa6 | 11 years ago |
|
|
2fbca2cc09 | 11 years ago |
|
|
afaf6aff9b | 11 years ago |
|
|
0fbaf41d09 | 11 years ago |
|
|
4b3d6716ff | 11 years ago |
|
|
f196d31a2f | 11 years ago |
|
|
995236c6a9 | 11 years ago |
|
|
a7f15f0b71 | 11 years ago |
|
|
a6acb50892 | 11 years ago |
|
|
5f92ce4599 | 11 years ago |
|
|
1a1d1b1c4b | 11 years ago |
|
|
3e39e1bd9f | 11 years ago |
|
|
e70bf61206 | 11 years ago |
|
|
1ae15f1a61 | 11 years ago |
|
|
747f6f9955 | 11 years ago |
|
|
e96e535f3d | 11 years ago |
|
|
dd6f3cc4b3 | 11 years ago |
|
|
8f0cf1d340 | 11 years ago |
|
|
cc85464eb5 | 11 years ago |
|
|
e4688ecf22 | 11 years ago |
|
|
2b365ec4c1 | 11 years ago |
|
|
15df6b8e4f | 11 years ago |
|
|
6812ed591a | 11 years ago |
|
|
cce2e85eeb | 11 years ago |
|
|
0397ea0eac | 11 years ago |
|
|
ab0b1936b4 | 11 years ago |
|
|
ad19bae5e1 | 11 years ago |
|
|
2f7be81668 | 11 years ago |
|
|
839c6300b8 | 11 years ago |
|
|
8b01ed93ed | 11 years ago |
|
|
2750dac88c | 11 years ago |
|
|
691c261118 | 11 years ago |
|
|
ee210ad15c | 11 years ago |
|
|
91ad0d65a8 | 11 years ago |
|
|
8af9d7f361 | 11 years ago |
|
|
8c9382d4db | 11 years ago |
|
|
9aaee014d4 | 11 years ago |
|
|
9317615bc7 | 11 years ago |
|
|
3646ecbeb2 | 11 years ago |
|
|
e9b3b5bcd2 | 11 years ago |
|
|
24bc4c9f47 | 11 years ago |
|
|
dced33ca44 | 11 years ago |
|
|
bc199316be | 11 years ago |
|
|
41f3579461 | 11 years ago |
|
|
05f174ab97 | 11 years ago |
|
|
ac201e2f8e | 11 years ago |
|
|
3b5826fe75 | 11 years ago |
|
|
24163694f4 | 11 years ago |
|
|
efb4b98986 | 11 years ago |
|
|
beb70b8343 | 11 years ago |
|
|
a26c893339 | 11 years ago |
|
|
73dc3ba2b0 | 11 years ago |
|
|
231afb565a | 11 years ago |
|
|
75ac4b979e | 11 years ago |
|
|
22bad6201e | 11 years ago |
|
|
822d78be1b | 11 years ago |
|
|
c5546e322f | 11 years ago |
|
|
fd3e24713f | 11 years ago |
|
|
d3223766c8 | 11 years ago |
|
|
7243aedf17 | 11 years ago |
|
|
b1acfb08e6 | 11 years ago |
|
|
7b5ea26f28 | 11 years ago |
|
|
df2ffce8aa | 11 years ago |
|
|
1b66ce8b40 | 11 years ago |
|
|
0f629c9df8 | 11 years ago |
|
|
a6dfe3f416 | 11 years ago |
|
|
1e6f29e64e | 11 years ago |
|
|
052f296181 | 11 years ago |
|
|
eecc860be7 | 11 years ago |
|
|
65cecfe263 | 11 years ago |
|
|
45cd3305d1 | 11 years ago |
|
|
cd52352995 | 11 years ago |
|
|
92838e16d3 | 11 years ago |
|
|
ae66f96570 | 11 years ago |
|
|
6250109a78 | 11 years ago |
|
|
f482164601 | 11 years ago |
|
|
c46d25874d | 11 years ago |
|
|
46883756e5 | 11 years ago |
|
|
f51bb42fa4 | 11 years ago |
|
|
de1f643510 | 11 years ago |
|
|
f570bc7f48 | 11 years ago |
|
|
6571a0700f | 11 years ago |
|
|
9f4e9d48da | 11 years ago |
|
|
40b191e9f4 | 11 years ago |
|
|
de2f0bb292 | 11 years ago |
|
|
1b71f8bba3 | 11 years ago |
|
|
08f87c72bb | 11 years ago |
|
|
54d264646a | 11 years ago |
|
|
6faa9e85c2 | 11 years ago |
|
|
afe6a29c36 | 11 years ago |
|
|
0579c1bcaa | 11 years ago |
|
|
d66b8aa329 | 11 years ago |
|
|
12ca303901 | 11 years ago |
|
|
0fd304947c | 11 years ago |
|
|
500213f479 | 11 years ago |
|
|
33c052e397 | 11 years ago |
|
|
4f7070cf5d | 11 years ago |
|
|
7f422ae479 | 11 years ago |
|
|
38a1cce634 | 11 years ago |
|
|
5ab3550697 | 11 years ago |
|
|
7310e1eaa0 | 11 years ago |
|
|
c5517fa6b4 | 11 years ago |
|
|
c1cfdc61da | 11 years ago |
|
|
13eb2edb59 | 11 years ago |
|
|
031f6a90ee | 11 years ago |
|
|
1ab6e08f71 | 11 years ago |
|
|
0369bf4b6a | 11 years ago |
|
|
5cac2aea84 | 11 years ago |
|
|
73945064ed | 11 years ago |
|
|
56bac7a565 | 11 years ago |
|
|
6123cc8e15 | 11 years ago |
|
|
6c06436452 | 11 years ago |
|
|
4090805223 | 11 years ago |
|
|
ff7c9e96ae | 11 years ago |
|
|
37a9f4d762 | 11 years ago |
|
|
81c710c360 | 11 years ago |
|
|
a9b91ee0b6 | 11 years ago |
|
|
29d2cdc015 | 11 years ago |
|
|
8e5850423c | 11 years ago |
|
|
94a47e7d4d | 11 years ago |
|
|
ae36081605 | 11 years ago |
|
|
19ddf588fb | 11 years ago |
|
|
ed67045360 | 11 years ago |
|
|
a5d051de3f | 11 years ago |
|
|
7ef116e85b | 11 years ago |
|
|
33ffb83f23 | 11 years ago |
|
|
daede90cc7 | 11 years ago |
|
|
72a3819c08 | 11 years ago |
|
|
32ad9420de | 11 years ago |
|
|
86cae37cb6 | 11 years ago |
|
|
d789ffa442 | 11 years ago |
|
|
1807c74580 | 11 years ago |
|
|
4c12408b1e | 11 years ago |
|
|
09123d6971 | 11 years ago |
|
|
d6d7f9347a | 11 years ago |
|
|
5bc14936d5 | 11 years ago |
|
|
e260b19702 | 11 years ago |
|
|
5cd1285ee5 | 11 years ago |
|
|
e54c09da8a | 11 years ago |
|
|
e6e3868080 | 11 years ago |
|
|
9f23b45651 | 11 years ago |
|
|
686403af38 | 11 years ago |
|
|
358ec2c644 | 11 years ago |
|
|
da0e62dff6 | 11 years ago |
|
|
25caa9241c | 11 years ago |
|
|
2216b7f32e | 11 years ago |
|
|
db83931fb7 | 11 years ago |
|
|
cd08ad9782 | 11 years ago |
|
|
9bb22b65ec | 11 years ago |
|
|
dd60a74e3f | 11 years ago |
|
|
987acfef65 | 11 years ago |
|
|
5ff7909497 | 11 years ago |
|
|
170f164288 | 11 years ago |
|
|
4599486290 | 11 years ago |
|
|
db772dea22 | 11 years ago |
|
|
894921e23f | 11 years ago |
|
|
bd0b1638db | 11 years ago |
|
|
9172fcd049 | 11 years ago |
|
|
3d40e0b2aa | 11 years ago |
|
|
5ec2e067df | 11 years ago |
|
|
ba47f39c47 | 11 years ago |
|
|
9c00fbfb3b | 11 years ago |
|
|
06398e8065 | 11 years ago |
|
|
a036152cc7 | 11 years ago |
|
|
3d61e80d1c | 11 years ago |
|
|
61fb46a87f | 11 years ago |
|
|
b626b71b90 | 11 years ago |
|
|
247f85c9e2 | 11 years ago |
|
|
0feefd6659 | 11 years ago |
|
|
33e6728468 | 11 years ago |
|
|
03af075a64 | 11 years ago |
|
|
ef30ab4c2d | 11 years ago |
|
|
abb13424b4 | 11 years ago |
|
|
d9c9627758 | 11 years ago |
|
|
8f0172467a | 11 years ago |
|
|
aebfb15aa2 | 11 years ago |
|
|
a39572448d | 11 years ago |
|
|
08247fb5dd | 11 years ago |
|
|
1a38523875 | 11 years ago |
|
|
0bc67a8819 | 11 years ago |
|
|
d150eb6d1c | 11 years ago |
|
|
ed1e23cfb1 | 11 years ago |
|
|
192053ae99 | 11 years ago |
|
|
4df265b15f | 11 years ago |
|
|
bc980a3522 | 11 years ago |
|
|
9313a7f16b | 11 years ago |
|
|
c56d3ca717 | 11 years ago |
|
|
f514bf0835 | 11 years ago |
|
|
5d08b448b0 | 11 years ago |
|
|
34e1df3218 | 11 years ago |
|
|
4072264fa8 | 11 years ago |
|
|
a04a788eea | 11 years ago |
|
|
ef67930454 | 11 years ago |
|
|
01df7aa50a | 11 years ago |
|
|
88feb450cc | 11 years ago |
|
|
12fcc2d4f3 | 11 years ago |
|
|
ce549b283a | 11 years ago |
|
|
607c977da2 | 11 years ago |
|
|
49f6504f58 | 11 years ago |
|
|
415857c55b | 11 years ago |
|
|
58c546ae08 | 11 years ago |
|
|
6ef4821b73 | 11 years ago |
|
|
d1f5a78ca2 | 11 years ago |
|
|
df27e666a7 | 11 years ago |
|
|
390733affe | 11 years ago |
|
|
04a2486ca9 | 11 years ago |
|
|
58793e4d7c | 11 years ago |
|
|
806d89e443 | 11 years ago |
|
|
193b469ffe | 11 years ago |
|
|
b5e7c9cd03 | 11 years ago |
|
|
ca8d24fb08 | 11 years ago |
|
|
754aa6cd8b | 11 years ago |
|
|
6123bff635 | 11 years ago |
|
|
b66683a581 | 11 years ago |
|
|
184aec1409 | 11 years ago |
|
|
a0de897608 | 11 years ago |
|
|
d50594e7eb | 11 years ago |
|
|
529258de44 | 11 years ago |
|
|
f4a853c611 | 11 years ago |
|
|
14950c0c5f | 11 years ago |
|
|
847f86f947 | 11 years ago |
|
|
c04c4ad4ab | 11 years ago |
|
|
42d69aba2d | 11 years ago |
|
|
706a51c211 | 11 years ago |
|
|
c752853031 | 11 years ago |
|
|
ed30222601 | 11 years ago |
|
|
2a108917b5 | 11 years ago |
|
|
ce9acac0ae | 11 years ago |
|
|
9515769fb5 | 11 years ago |
|
|
dccbbb3879 | 11 years ago |
|
|
c168d050f0 | 11 years ago |
|
|
6d5361cebc | 11 years ago |
|
|
97ca80d8bc | 11 years ago |
|
|
ec6ad5ab80 | 11 years ago |
|
|
e9accabf13 | 11 years ago |
|
|
0f7ce05de2 | 11 years ago |
|
|
ff6c553fb2 | 11 years ago |
|
|
b9a1cab269 | 11 years ago |
|
|
2730d5954b | 11 years ago |
|
|
eb22ee51b3 | 11 years ago |
|
|
2310d01835 | 11 years ago |
|
|
a2e45a024f | 11 years ago |
|
|
2c209ab8d3 | 11 years ago |
|
|
8436f11e5a | 11 years ago |
|
|
789bfe09f6 | 11 years ago |
|
|
0a0c011960 | 11 years ago |
|
|
aa1f793963 | 11 years ago |
|
|
d09bbb3e1e | 11 years ago |
|
|
fccb781950 | 11 years ago |
|
|
bd5492654f | 11 years ago |
|
|
c3178cd442 | 11 years ago |
|
|
8eb76e880c | 11 years ago |
|
|
29eabd44fd | 11 years ago |
|
|
872a478f91 | 11 years ago |
|
|
3d535c6c69 | 11 years ago |
|
|
bda4dba902 | 11 years ago |
|
|
ceb18d4629 | 11 years ago |
|
|
c0b1565131 | 11 years ago |
|
|
31f9683d9f | 11 years ago |
|
|
1be99cf58e | 11 years ago |
|
|
816dca2f33 | 11 years ago |
|
|
9981c25286 | 11 years ago |
|
|
be7668767f | 11 years ago |
|
|
35ed9cd853 | 11 years ago |
|
|
63aa4be9f7 | 11 years ago |
|
|
5d311f144b | 11 years ago |
|
|
056e68da66 | 11 years ago |
|
|
9fa4e2b106 | 11 years ago |
|
|
86441e399a | 11 years ago |
|
|
e7542cda41 | 11 years ago |
|
|
615ac8608c | 11 years ago |
|
|
b63c5fd9b2 | 11 years ago |
|
|
d2ed6778c5 | 11 years ago |
|
|
9f5a327ec8 | 11 years ago |
|
|
e8b8ca5861 | 11 years ago |
|
|
01f7cea94f | 11 years ago |
|
|
146a796240 | 11 years ago |
|
|
991c237404 | 11 years ago |
|
|
30a2bff2ba | 11 years ago |
|
|
7b90a9ab6a | 11 years ago |
|
|
c75ac0cf57 | 11 years ago |
|
|
3bf0624dc5 | 11 years ago |
|
|
7085beb66a | 11 years ago |
|
|
09bec60d43 | 11 years ago |
|
|
b1bc91f070 | 11 years ago |
|
|
0770930c6c | 11 years ago |
|
|
531a6cda3e | 11 years ago |
|
|
0174955287 | 11 years ago |
|
|
fb5d93d207 | 11 years ago |
|
|
b68ba6d728 | 11 years ago |
|
|
dec25f57be | 11 years ago |
|
|
5fe8c04539 | 11 years ago |
|
|
eab0827e9f | 11 years ago |
|
|
f0063372c5 | 11 years ago |
|
|
5777dc0b15 | 11 years ago |
|
|
baa8e86fd4 | 11 years ago |
|
|
b62fb94a00 | 11 years ago |
|
|
44533d77eb | 11 years ago |
|
|
e39b36beda | 11 years ago |
|
|
36233c7325 | 11 years ago |
|
|
0a8c37f46a | 11 years ago |
|
|
2b346a3f46 | 11 years ago |
|
|
10a684faa6 | 11 years ago |
|
|
ee361ae37f | 11 years ago |
|
|
a31351c6f9 | 11 years ago |
|
|
bf5b6c4517 | 11 years ago |
|
|
9a93c2375c | 11 years ago |
|
|
6375aaaccc | 11 years ago |
|
|
cf02253cdd | 11 years ago |
|
|
dbac4f742c | 11 years ago |
|
|
11a0b89574 | 11 years ago |
|
|
dc3de2a3ca | 11 years ago |
|
|
782d066fd9 | 11 years ago |
|
|
df915bbf6c | 11 years ago |
|
|
40bc8087e5 | 11 years ago |
|
|
50dca35543 | 11 years ago |
|
|
67d6782b73 | 11 years ago |
|
|
238e6c3536 | 11 years ago |
|
|
0832eaef6d | 11 years ago |
|
|
f2ca052aca | 11 years ago |
|
|
10b708aee9 | 11 years ago |
|
|
5d8bae3da2 | 11 years ago |
|
|
82642f1fad | 11 years ago |
|
|
fe478610bd | 11 years ago |
|
|
977f94a50a | 11 years ago |
|
|
d01ab961b8 | 11 years ago |
|
|
ce6305210c | 11 years ago |
|
|
5f3dc76b32 | 11 years ago |
|
|
5e19edaab7 | 11 years ago |
|
|
5ba8f58094 | 11 years ago |
|
|
7429a491d7 | 11 years ago |
|
|
2962bd19e2 | 11 years ago |
|
|
4aab150af3 | 11 years ago |
|
|
0e23caeec4 | 11 years ago |
|
|
3524c12924 | 11 years ago |
|
|
f0a58ad06f | 11 years ago |
|
|
bde5c82a3d | 11 years ago |
|
|
e2e4eb56fb | 11 years ago |
|
|
cc316dcda7 | 11 years ago |
|
|
3edd9eabc6 | 11 years ago |
|
|
6f8f0295a8 | 11 years ago |
|
|
40d8c4ecef | 11 years ago |
|
|
4502124975 | 11 years ago |
|
|
4988dd7927 | 11 years ago |
|
|
8875bd57b2 | 11 years ago |
|
|
4211613055 | 11 years ago |
|
|
6b3c290663 | 11 years ago |
|
|
970e1253da | 11 years ago |
|
|
5d90401f54 | 11 years ago |
|
|
65918c5c26 | 11 years ago |
|
|
473fce9bef | 11 years ago |
@ -0,0 +1,29 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Browser (please complete the following information):**
|
||||
- OS: [e.g. MacOS, Linux]
|
||||
- Browser [e.g. Firefox]
|
||||
- Version [e.g. 80.0.1]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@ -1 +1 @@
|
||||
dist/
|
||||
dist/build/
|
||||
|
||||
@ -0,0 +1,20 @@
|
||||
{
|
||||
"browser": true,
|
||||
"devel": true,
|
||||
"eqeqeq": true,
|
||||
"esversion": 8,
|
||||
"globals": {
|
||||
"browser": false,
|
||||
"self": false,
|
||||
"chrome": false,
|
||||
"log": false,
|
||||
"webext": false,
|
||||
"vAPI": false,
|
||||
"µMatrix": false
|
||||
},
|
||||
"laxbreak": true,
|
||||
"strict": "global",
|
||||
"undef": true,
|
||||
"unused": true,
|
||||
"validthis": true
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
sudo: false
|
||||
env:
|
||||
matrix:
|
||||
- BROWSER=chromium EXT=zip
|
||||
- BROWSER=firefox EXT=xpi
|
||||
script: "./tools/make-${BROWSER}.sh ${TRAVIS_TAG}"
|
||||
deploy:
|
||||
provider: releases
|
||||
prerelease: true
|
||||
api_key:
|
||||
secure: eQgPAHH6PKu2dLK+NafxwLl66t0cyW5x5NZFquOwsNMal5nsfof7lyXj2F0Q0vUpGeI21MOipBI8UGv5oXPoiXnr0fhEbEBz65C9vypK61WkDCQVGVeZVNGQwSXUm6gD2EzpPgTCIs52+7dKCDJ3stXzdimOiOTYs4WMNKKarFM=
|
||||
file: dist/build/uMatrix_${TRAVIS_TAG}.${BROWSER}.${EXT}
|
||||
skip_cleanup: true
|
||||
on:
|
||||
repo: gorhill/uMatrix
|
||||
tags: true
|
||||
all_branches: true
|
||||
@ -0,0 +1,4 @@
|
||||
### Submitting issues
|
||||
|
||||
Submit on <https://github.com/geekprojects/nuTensor/issues>.
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
7cfcd2a79bd510bd9944fb2601fcd701 assets/umatrix/hosts-files.json
|
||||
188ce926323d816ae9d7d5ebbb567862 assets/umatrix/blacklist.txt
|
||||
672d5a95be662327692ff16bde2b8452 assets/thirdparties/mirror1.malwaredomains.com/files/immortal_domains.txt
|
||||
7f0443f3dcc9abfd47cfbc95ce824ddb assets/thirdparties/mirror1.malwaredomains.com/files/README.md
|
||||
d6ceced54f3f997a5b1839ceaaa98cef assets/thirdparties/mirror1.malwaredomains.com/files/justdomains
|
||||
067470524601341099c78a847f3726aa assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat
|
||||
1da7664601ca18f3806ca0af3d9cf123 assets/thirdparties/someonewhocares.org/hosts/hosts
|
||||
70b2d63b4c632d5bc4c8ce910fc05d79 assets/thirdparties/winhelp2002.mvps.org/hosts.txt
|
||||
042419405031f0fcfac3735bf4f05e21 assets/thirdparties/www.malwaredomainlist.com/hostslist/README.md
|
||||
883ed5daa447f23a1132c8a099382054 assets/thirdparties/www.malwaredomainlist.com/hostslist/hosts.txt
|
||||
95687a05b77dea3be8bdb975fbb0f61f assets/thirdparties/hosts-file.net/ad-servers
|
||||
10dca881b4d883df0755cb06896650f2 assets/thirdparties/pgl.yoyo.org/as/serverlist
|
||||
5b8e13b618c68293430913029118781a assets/thirdparties/pgl.yoyo.org/as/README.md
|
||||
@ -1,3 +0,0 @@
|
||||
<http://www.malwaredomains.com/?page_id=1508>:
|
||||
|
||||
"This malware block lists provided here are for free for noncommercial use as part of the fight against malware."
|
||||
@ -1,4 +0,0 @@
|
||||
<http://pgl.yoyo.org/as/index.php>:
|
||||
|
||||
Site does encourage use of the list, and nowhere could I find terms and
|
||||
conditions to use the list. Assuming it can be used freely.
|
||||
@ -1,3 +0,0 @@
|
||||
<http://www.malwaredomainlist.com/>:
|
||||
|
||||
"Our list can be used for free by anyone. Feel free to use it."
|
||||
@ -1,61 +0,0 @@
|
||||
# Blacklist maintained by HTTP Switchboard
|
||||
# For those domain names which are not found in other blacklists
|
||||
|
||||
2mdn.net # "2mdn.net is a domain used by Doubleclick which is an advertising company..."
|
||||
aad73c550c.se # Related to adrotator.se which is itself blacklisted
|
||||
acxiom-online.com # Wikipedia: "Acxiom Corporation is a marketing technology and services company".
|
||||
adextent.com # "We are an advertising technology company - we build technologies that improve ads performance"
|
||||
adgear.com # "AdGear is an online advertising technologies company based in Montreal, Canada"
|
||||
adnxs.com # "Adnxs.com is run by AppNexus, a company that provides technology, data and analytics to help companies buy and sell online display advertising" (Ref.: http://www.theguardian.com/technology/2012/apr/23/adnxs-tracking-trackers-cookies-web-monitoring)
|
||||
adobetag.com # "Adobe Announces Adobe Tag Manager for the Online Marketing Suite"
|
||||
aimatch.com # "Ad Server, SAS® Intelligent Advertising for Publishers"
|
||||
analytics.edgesuite.net
|
||||
atedra.com # "Atedra est un réseau de publicité Internet francophone au Canada"
|
||||
axf8.net # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
betrad.com # "Evidon: Home | Online Marketing Intelligence, Web Analytics, Privacy" (which also publishes "Ghostery" add-on..)
|
||||
bizographics.com # "Business Audience Marketing"
|
||||
bkrtx.com
|
||||
|
||||
# "Imagine Having The Power To Turn Abandoning Visitors Into Customers"
|
||||
# "The BounceX software is tracking all the cursor movements of every visitor in real-time" (yikes!)
|
||||
bounceexchange.com
|
||||
|
||||
clicktale.com # "See absolutely everything your visitors do on your webpage ... See their every mouse move, click and keystroke"
|
||||
clicktale.net # Redirect to `clicktale.com`
|
||||
crosspixel.net # (cookies, localStorage) "leading provider of high performance audience data and information for the real-time advertising industry"
|
||||
crsspxl.com # Related to crosspixel.net
|
||||
datarating.com # see https://github.com/gorhill/httpswitchboard/issues/343
|
||||
displaymarketplace.com
|
||||
erovinmo.com # No info whatsoever from site itself can be found = naughty corner. Ironically spotted at "http://www.technologyreview.com/news/519336/bruce-schneier-nsa-spying-is-making-us-less-safe/" (also: http://www.mywot.com/en/scorecard/erovinmo.com)
|
||||
exelator.com # "domain used by eXelate Media which is an advertising company that is part of a network of sites, cookies, and other technologies used to track you" (Ref.: http://www.donottrackplus.com/trackers/exelator.com.php)
|
||||
everestjs.net # related to `everesttech.net`
|
||||
everesttech.net # "search engine marketing (SEM) solutions", pixel image on the page, looks like tracking to me. Spotted @ `http://www.homedepot.ca/` (search worked fine when blocking this hostname)
|
||||
eyereturn.com # "eyeReturn Marketing is the only end-to-end digital advertising platform in the market"
|
||||
gigya.com # "The tools you need to connect with consumers, harness rich data, and make marketing relevant"
|
||||
inmuiads.info #
|
||||
janrainbackplane.com # "Easily visualize, segment and update customer profiles to enable true personalized marketing"
|
||||
krxd.net # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
lijit.com # "We provide online advertising services, audience analytics"
|
||||
llnwd.net # http://en.wikipedia.org/wiki/Limelight_Networks
|
||||
lduhtrp.net
|
||||
mathtag.com # "domain used by MediaMath to place cookies, on behalf of its customers, on the computers of visitors to our selected customer's websites and who may view our customer's display advertisements"
|
||||
mxpnl.com #
|
||||
moatads.com # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
mookie1.com # "Specializing in online digital advertising, search marketing"
|
||||
msads.net # Sounds like ads, and no home web page...
|
||||
omtrdc.net # Redirect to Omniture
|
||||
outbrain.com # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
panoramtech.net # As seen in a screenshot at http://arstechnica.com/security/2014/01/malware-vendors-buy-chrome-extensions-to-send-adware-filled-updates/
|
||||
parsely.com # http://en.wikipedia.org/wiki/Parse.ly
|
||||
peer39.net # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
pub2srv.com # "This url is used by ad network Propeller Ads Media for ad serving"
|
||||
servebom.com # no home page, seen as 'tracking.servebom.com': good enough for this list
|
||||
|
||||
# These have "tracking" in domain name...
|
||||
tracking.tomsguide.com
|
||||
tracking.tomshardware.com
|
||||
tracking.tomshardware.co.uk
|
||||
|
||||
wunderloop.net # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
yceml.net
|
||||
|
||||
@ -0,0 +1,192 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import jwt
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from distutils.version import StrictVersion
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uMatrix.chromium.zip from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Upload uMatrix.chromium.zip to Chrome store
|
||||
# - Publish uMatrix.chromium.zip to Chrome store
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
version = sys.argv[1]
|
||||
else:
|
||||
version = input('Github release version: ')
|
||||
version.strip()
|
||||
if not re.search('^\d+\.\d+\.\d+(b|rc)\d+$', version):
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
|
||||
cs_extension_id = 'eckgcipdkhcfghnmincccnhpdmnbefki'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_zip_filename = 'uMatrix_'+ version + '.chromium.zip'
|
||||
raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uMatrix'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The build directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uMatrix.chromium.zip
|
||||
raw_zip_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == raw_zip_filename:
|
||||
raw_zip_url = asset['url']
|
||||
if len(raw_zip_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw zip package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_zip_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_zip_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_zip_filepath))
|
||||
|
||||
#
|
||||
# Upload to Chrome store
|
||||
#
|
||||
|
||||
# Auth tokens
|
||||
cs_id = input_secret('Chrome store id', 'cs_id')
|
||||
cs_secret = input_secret('Chrome store secret', 'cs_secret')
|
||||
cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh')
|
||||
|
||||
print('Uploading to Chrome store...')
|
||||
with open(raw_zip_filepath, 'rb') as f:
|
||||
print('Generating access token...')
|
||||
auth_url = 'https://accounts.google.com/o/oauth2/token'
|
||||
auth_payload = {
|
||||
'client_id': cs_id,
|
||||
'client_secret': cs_secret,
|
||||
'grant_type': 'refresh_token',
|
||||
'refresh_token': cs_refresh,
|
||||
}
|
||||
auth_response = requests.post(auth_url, data=auth_payload)
|
||||
if auth_response.status_code != 200:
|
||||
print('Error: Auth failed -- server error {0}'.format(auth_response.status_code))
|
||||
print(auth_response.text)
|
||||
exit(1)
|
||||
response_dict = auth_response.json()
|
||||
if 'access_token' not in response_dict:
|
||||
print('Error: Auth failed -- no access token')
|
||||
exit(1)
|
||||
# Prepare access token
|
||||
cs_auth = 'Bearer ' + response_dict['access_token']
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
}
|
||||
# Upload
|
||||
print('Uploading package...')
|
||||
upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id)
|
||||
upload_response = requests.put(upload_url, headers=headers, data=f)
|
||||
f.close()
|
||||
if upload_response.status_code != 200:
|
||||
print('Upload failed -- server error {0}'.format(upload_response.status_code))
|
||||
print(upload_response.text)
|
||||
exit(1)
|
||||
response_dict = upload_response.json();
|
||||
if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS':
|
||||
print('Upload failed -- server error {0}'.format(response_dict['uploadState']))
|
||||
exit(1)
|
||||
print('Upload succeeded.')
|
||||
# Publish
|
||||
print('Publishing package...')
|
||||
publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id)
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
'Content-Length': '0',
|
||||
}
|
||||
publish_response = requests.post(publish_url, headers=headers)
|
||||
if publish_response.status_code != 200:
|
||||
print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code))
|
||||
exit(1)
|
||||
response_dict = publish_response.json();
|
||||
if 'status' not in response_dict or response_dict['status'][0] != 'OK':
|
||||
print('Publishing failed -- server error {0}'.format(response_dict['status']))
|
||||
exit(1)
|
||||
print('Publishing succeeded.')
|
||||
|
||||
print('All done.')
|
||||
@ -0,0 +1,321 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import jwt
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from distutils.version import LooseVersion
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) nuTensor.firefox.xpi from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Modify raw package to make it self-hosted
|
||||
# - This is referred to as "unsigned" package
|
||||
# - Ask AMO to sign nuTensor.firefox.xpi
|
||||
# - Generate JWT to be used for communication with server
|
||||
# - Upload unsigned package to AMO
|
||||
# - Wait for a valid download URL for signed package
|
||||
# - Download signed package as nuTensor.firefox.signed.xpi
|
||||
# - This is referred to as "signed" package
|
||||
# - Upload nuTensor.firefox.signed.xpi to GitHub
|
||||
# - Remove nuTensor.firefox.xpi from GitHub
|
||||
# - Modify updates.json to point to new version
|
||||
# - Commit changes to repo
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
# Check that found project root is valid
|
||||
version_filepath = os.path.join(projdir, 'dist', 'version')
|
||||
if not os.path.isfile(version_filepath):
|
||||
print('Version file not found.')
|
||||
exit(1)
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
tag_version = sys.argv[1]
|
||||
else:
|
||||
tag_version = input('Github release version: ')
|
||||
tag_version.strip()
|
||||
match = re.search('^(\d+\.\d+\.\d+)(?:(b|rc)(\d+))?$', tag_version)
|
||||
if not match:
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
ext_version = match.group(1);
|
||||
if match.group(2):
|
||||
revision = int(match.group(3))
|
||||
if match.group(2) == 'rc':
|
||||
revision += 100;
|
||||
ext_version += '.' + str(revision)
|
||||
|
||||
extension_id = 'nuTensor@geekprojects.com'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_xpi_filename = 'nuTensor_' + tag_version + '.firefox.xpi'
|
||||
raw_xpi_filepath = os.path.join(tmpdir.name, raw_xpi_filename)
|
||||
unsigned_xpi_filepath = os.path.join(tmpdir.name, 'nuTensor.firefox.unsigned.xpi')
|
||||
signed_xpi_filename = 'nuTensor_' + tag_version + '.firefox.signed.xpi'
|
||||
signed_xpi_filepath = os.path.join(tmpdir.name, signed_xpi_filename)
|
||||
github_owner = 'geekprojects'
|
||||
github_repo = 'nuTensor'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The build directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, tag_version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for nuTensor.firefox.xpi
|
||||
raw_xpi_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == signed_xpi_filename:
|
||||
print('Error: Found existing signed self-hosted package.')
|
||||
exit(1)
|
||||
if asset['name'] == raw_xpi_filename:
|
||||
raw_xpi_url = asset['url']
|
||||
if len(raw_xpi_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw xpi package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_xpi_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_xpi_filepath))
|
||||
|
||||
#
|
||||
# Convert the package to a self-hosted one: add `update_url` to the manifest
|
||||
#
|
||||
|
||||
print('Converting raw xpi package into self-hosted xpi package...')
|
||||
with zipfile.ZipFile(raw_xpi_filepath, 'r') as zipin:
|
||||
with zipfile.ZipFile(unsigned_xpi_filepath, 'w') as zipout:
|
||||
for item in zipin.infolist():
|
||||
data = zipin.read(item.filename)
|
||||
if item.filename == 'manifest.json':
|
||||
manifest = json.loads(bytes.decode(data))
|
||||
manifest['browser_specific_settings']['gecko']['update_url'] = 'https://raw.githubusercontent.com/{0}/{1}/master/dist/firefox/updates.json'.format(github_owner, github_repo)
|
||||
data = json.dumps(manifest, indent=2, separators=(',', ': '), sort_keys=True).encode()
|
||||
zipout.writestr(item, data)
|
||||
|
||||
#
|
||||
# Ask AMO to sign the self-hosted package
|
||||
# - https://developer.mozilla.org/en-US/Add-ons/Distribution#Distributing_your_add-on
|
||||
# - https://pyjwt.readthedocs.io/en/latest/usage.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/auth.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/signing.html
|
||||
#
|
||||
|
||||
amo_api_key = ''
|
||||
amo_secret = ''
|
||||
|
||||
def get_jwt_auth():
|
||||
global amo_api_key
|
||||
if amo_api_key == '':
|
||||
amo_api_key = input_secret('AMO API key', 'amo_api_key')
|
||||
global amo_secret
|
||||
if amo_secret == '':
|
||||
amo_secret = input_secret('AMO API secret', 'amo_secret')
|
||||
amo_nonce = os.urandom(8).hex()
|
||||
jwt_payload = {
|
||||
'iss': amo_api_key,
|
||||
'jti': amo_nonce,
|
||||
'iat': datetime.datetime.utcnow(),
|
||||
'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=15),
|
||||
}
|
||||
return 'JWT ' + jwt.encode(jwt_payload, amo_secret).decode()
|
||||
|
||||
print('Ask AMO to sign self-hosted xpi package...')
|
||||
with open(unsigned_xpi_filepath, 'rb') as f:
|
||||
# https://blog.mozilla.org/addons/2019/11/11/security-improvements-in-amo-upload-tools/
|
||||
# "We recommend allowing up to 15 minutes."
|
||||
interval = 60 # check every 60 seconds
|
||||
countdown = 15 * 60 / interval # for at most 15 minutes
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
data = { 'channel': 'unlisted' }
|
||||
files = { 'upload': f, }
|
||||
signing_url = 'https://addons.mozilla.org/api/v3/addons/{0}/versions/{1}/'.format(extension_id, ext_version)
|
||||
print('Submitting package to be signed...')
|
||||
response = requests.put(signing_url, headers=headers, data=data, files=files)
|
||||
if response.status_code != 202:
|
||||
print('Error: Creating new version failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('Request for signing self-hosted xpi package succeeded.')
|
||||
signing_request_response = response.json();
|
||||
f.close()
|
||||
print('Waiting for AMO to process the request to sign the self-hosted xpi package...')
|
||||
# Wait for signed package to be ready
|
||||
signing_check_url = signing_request_response['url']
|
||||
while True:
|
||||
sys.stdout.write('.')
|
||||
sys.stdout.flush()
|
||||
time.sleep(interval)
|
||||
countdown -= 1
|
||||
if countdown <= 0:
|
||||
print('Error: AMO signing timed out')
|
||||
exit(1)
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
response = requests.get(signing_check_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: AMO signing failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
signing_check_response = response.json()
|
||||
if not signing_check_response['processed']:
|
||||
continue
|
||||
if not signing_check_response['valid']:
|
||||
print('Error: AMO validation failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
if not signing_check_response['files'] or len(signing_check_response['files']) == 0:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['signed']:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['download_url']:
|
||||
print('Error: AMO signing failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('\r')
|
||||
print('Self-hosted xpi package successfully signed.')
|
||||
download_url = signing_check_response['files'][0]['download_url']
|
||||
print('Downloading signed self-hosted xpi package from {0}...'.format(download_url))
|
||||
response = requests.get(download_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Download signed package failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
with open(signed_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
f.close()
|
||||
print('Signed self-hosted xpi package downloaded.')
|
||||
break
|
||||
|
||||
#
|
||||
# Upload signed package to GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#upload-a-release-asset
|
||||
print('Uploading signed self-hosted xpi package to GitHub...')
|
||||
with open(signed_xpi_filepath, 'rb') as f:
|
||||
url = release_info['upload_url'].replace('{?name,label}', '?name=' + signed_xpi_filename)
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Content-Type': 'application/zip',
|
||||
}
|
||||
response = requests.post(url, headers=headers, data=f.read())
|
||||
if response.status_code != 201:
|
||||
print('Error: Upload signed package failed -- server error: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Remove raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#delete-a-release-asset
|
||||
print('Remove raw xpi package from GitHub...')
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.delete(raw_xpi_url, headers=headers)
|
||||
if response.status_code != 204:
|
||||
print('Error: Deletion of raw package failed -- server error: {0}'.format(response.status_code))
|
||||
|
||||
#
|
||||
# Update updates.json to point to new package -- but only if just-signed
|
||||
# package is higher version than current one.
|
||||
#
|
||||
|
||||
print('Update GitHub to point to newly signed self-hosted xpi package...')
|
||||
updates_json_filepath = os.path.join(projdir, 'dist', 'firefox', 'updates.json')
|
||||
with open(updates_json_filepath) as f:
|
||||
updates_json = json.load(f)
|
||||
f.close()
|
||||
previous_version = updates_json['addons'][extension_id]['updates'][0]['version']
|
||||
if LooseVersion(ext_version) > LooseVersion(previous_version):
|
||||
with open(os.path.join(projdir, 'dist', 'firefox', 'updates.template.json')) as f:
|
||||
template_json = Template(f.read())
|
||||
f.close()
|
||||
updates_json = template_json.substitute(ext_version=ext_version, tag_version=tag_version)
|
||||
with open(updates_json_filepath, 'w') as f:
|
||||
f.write(updates_json)
|
||||
f.close()
|
||||
# Automatically git add/commit if needed.
|
||||
# - Stage the changed file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[1] == 'M':
|
||||
subprocess.run(['git', 'add', updates_json_filepath])
|
||||
# - Commit the staged file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[0] == 'M':
|
||||
subprocess.run(['git', 'commit', '-m', 'Make Firefox dev build auto-update', updates_json_filepath])
|
||||
subprocess.run(['git', 'push', 'origin', 'HEAD'])
|
||||
|
||||
print('All done.')
|
||||
@ -0,0 +1,14 @@
|
||||
{
|
||||
"addons": {
|
||||
"nuTensor@geekprojects.com": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.4.1.6",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "56" } },
|
||||
"update_info_url": "https://github.com/geekprojects/nuTensor/releases/tag/1.4.1b6",
|
||||
"update_link": "https://github.com/geekprojects/nuTensor/releases/download/1.4.1b6/nuTensor_1.4.1b6.firefox.signed.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
{
|
||||
"addons": {
|
||||
"nuTensor@geekprojects.com": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "$ext_version",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "56" } },
|
||||
"update_info_url": "https://github.com/geekprojects/nuTensor/releases/tag/$tag_version",
|
||||
"update_link": "https://github.com/geekprojects/nuTensor/releases/download/$tag_version/nuTensor_$tag_version.firefox.signed.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
1.5.0.0
|
||||
@ -0,0 +1,39 @@
|
||||
## Building nuTensor
|
||||
|
||||
### Requirements
|
||||
|
||||
Tools:
|
||||
* bash
|
||||
* python 3
|
||||
|
||||
You will need both this nuTensor and the nuAssets repositories. These should both be placed in the same directory:
|
||||
```
|
||||
git clone https://github.com/geekprojects/nuAssets.git
|
||||
git clone https://github.com/geekprojects/nuTensor.git
|
||||
cd nuTensor
|
||||
```
|
||||
|
||||
### Packaging
|
||||
You can now run the scripts that package everything up.
|
||||
These are bash scripts. They have only been tested on Linux and MacOS.
|
||||
|
||||
#### For Firefox
|
||||
```
|
||||
tools/make-firefox.sh all
|
||||
```
|
||||
|
||||
#### For Chrome/Chromium (Not yet tested)
|
||||
```
|
||||
tools/make-chromium.sh all
|
||||
```
|
||||
|
||||
#### For Opera (Not yet tested)
|
||||
```
|
||||
tools/make-opera.sh
|
||||
```
|
||||
|
||||
The installation package should now be found in dist/build/
|
||||
|
||||
### Installing
|
||||
|
||||
Follow the instructions in [README.md](README.md) to install it.
|
||||
@ -1,26 +0,0 @@
|
||||
## INSTALL
|
||||
|
||||
### Manual installation
|
||||
|
||||
- Download and unzip `uMatrix.chromium-{version}.zip` ([latest release desirable](https://github.com/gorhill/uMatrix/releases)).
|
||||
- Rename the unzipped directory to `uMatrix` (if it is different)
|
||||
- When you later update manually, replace the **content** of the `uMatrix` folder with the **content** of the latest zipped version.
|
||||
- This will ensure that all the extension settings will be preserved
|
||||
- As long as the extension loads **from same folder path from which it was originally installed**, all your settings will be preserved.
|
||||
- Go to chromium/chrome *Extensions*.
|
||||
- Click to check *Developer mode*.
|
||||
- Click *Load unpacked extension...*.
|
||||
- In the file selector dialog:
|
||||
- Select the directory `uMatrix` which was created above.
|
||||
- Click *Open*.
|
||||
|
||||
The extension will now be available in your chromium/chromium-based browser.
|
||||
|
||||
Remember that you have to update manually also. For some users, updating manually is actually an advantage because:
|
||||
- You can update when **you** want
|
||||
- If ever a new version sucks, you can easily just re-installed the previous one
|
||||
|
||||
### Vendor stores
|
||||
|
||||
- Opera store (coming)
|
||||
- Chrome store (coming)
|
||||
@ -1,8 +1,8 @@
|
||||
### This is µMatrix's manifesto
|
||||
### This is uMatrix's manifesto
|
||||
|
||||
1. The **user decides** what web content is acceptable or not in their browser.
|
||||
|
||||
That is all.
|
||||
|
||||
The purpose of _µMatrix_ is to give the user the means for informed
|
||||
The purpose of _uMatrix_ is to give the user the means for informed
|
||||
consent and informed dissent.
|
||||
|
||||
@ -0,0 +1,37 @@
|
||||
## INSTALL
|
||||
|
||||
#### Chromium
|
||||
|
||||
- Download and unzip `nuTensor.chromium.zip` ([latest release desirable](https://github.com/geekprojects/nuTensor/releases)).
|
||||
- Rename the unzipped directory to `nuTensor`
|
||||
- When you later update manually, replace the **content** of the `nuTensor` folder with the **content** of the latest zipped version.
|
||||
- This will ensure that all the extension settings will be preserved
|
||||
- As long as the extension loads **from same folder path from which it was originally installed**, all your settings will be preserved.
|
||||
- Go to chromium/chrome *Extensions*.
|
||||
- Click to check *Developer mode*.
|
||||
- Click *Load unpacked extension...*.
|
||||
- In the file selector dialog:
|
||||
- Select the directory `nuTensor` which was created above.
|
||||
- Click *Open*.
|
||||
|
||||
The extension will now be available in your chromium/chromium-based browser.
|
||||
|
||||
Remember that you have to update manually also. For some users, updating manually is actually an advantage because:
|
||||
- You can update when **you** want
|
||||
- If ever a new version sucks, you can easily just re-install the previous one
|
||||
|
||||
#### Firefox
|
||||
|
||||
Although nuTensor is a restartless addon, I found that **installing** a newer version over an older one often will glitch the installation. These steps always worked fine:
|
||||
|
||||
- Download `nuTensor.firefox.xpi` ([latest release desirable](https://github.com/geekprojects/nuTensor/releases)).
|
||||
- Uninstall current nuTensor if already installed
|
||||
- Quit Firefox completely
|
||||
- Launch Firefox
|
||||
- Drag and drop the previously downloaded `nuTensor.firefox.xpi` into Firefox
|
||||
|
||||
nuTensor settings are kept intact even after you uninstall the addon.
|
||||
|
||||
On Linux, the settings are saved in a SQlite file located at `~/.mozilla/firefox/[profile name]/extension-data/nuTensor.sqlite`.
|
||||
|
||||
On Windows, the settings are saved in a SQlite file located at `%APPDATA%\Mozilla\Firefox\Profiles\[profile name]\extension-data\nuTensor.sqlite`.
|
||||
@ -1,93 +0,0 @@
|
||||
µMatrix: A point-and-click matrix-based firewall, with many privacy-enhancing tools. For advanced users.
|
||||
|
||||
µMatrix put you in full control of where your browser is allowed to connect, what type of data it is allowed to download, and what it is allowed to execute. Nobody else decides for you: You choose. You are in full control of your privacy.
|
||||
|
||||
Out of the box, µMatrix works in relax block-all/allow-exceptionally mode, meaning web sites which require 3rd-party scripts are likely to be "broken". With two clicks, µMatrix can be set to work in allow-all/block-exceptionally mode, which generally will not break web sites. See https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views for more details on this topic.
|
||||
|
||||
Regarding the myth that "Chromium-based browsers can't reliably block javascript", see: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Summary: Yes, javascript can be blocked reliably in Chromium.
|
||||
|
||||
* See ALL the remote connections, failed or attempted, depending on whether they were blocked or allowed (you decide).
|
||||
|
||||
* A single-click to whitelist/blacklist one or multiple classes of requests according to the destination and type of data (a blocked request will NEVER leave your browser).
|
||||
|
||||
* Efficient blacklisting: cookies won't leave your browser, javascript won't execute, plugins won't play, tracking pixels won't download, etc.
|
||||
|
||||
* You do not have to solely rely on just one particular curated blacklist (arguably with many missing entries) outside which nothing else can be blocked: You are in full control.
|
||||
|
||||
* Ease of use: µMatrix lets you easily whitelist/blacklist net requests which originate from within a web page according to a point-and-click matrix:
|
||||
|
||||
- domain names (left column)
|
||||
* from very specific
|
||||
* to very generic
|
||||
|
||||
- type of requests (top row)
|
||||
* cookies
|
||||
* CSS-related resources (stylesheets and web fonts)
|
||||
* images
|
||||
* plugins
|
||||
* scripts
|
||||
* XHR (requests made by scripts)
|
||||
* frames
|
||||
* others
|
||||
|
||||
You can blacklist/whitelist a single cell, an entire row, a group of rows, an entire column, or the whole matrix with just one click.
|
||||
|
||||
µMatrix's filtering engine uses precedence logic to evaluate what is blocked/allowed according to which cells are blacklisted/whitelisted. For example, this allows you to whitelist a whole page with one click, without having to repeatedly whitelist whatever new data appear on the page.
|
||||
|
||||
All rules are scoped. For example, you can block `facebook.com` and `facebook.net` everywhere except when visiting a page on `www.facebook.com`. This way Facebook won't be able to build a profile of your browsing habits.
|
||||
|
||||
The goal of this extension is to make the allowing or blocking of web sites, wholly or partly, as straightforward as possible, so as to encourage users to care about their privacy.
|
||||
|
||||
The extension comes with 3rd-party hosts files totaling over 58,000 distinct hostnames (lists can be selectively disabled/enabled according to your choice).
|
||||
|
||||
Ultimately, you can choose however you browse the net:
|
||||
|
||||
* Blacklist all by default, and whitelist as needed (default mode).
|
||||
|
||||
* Whitelist all by default, and blacklist as needed.
|
||||
|
||||
Either way, you still benefit from the preset blacklists so that at least you get basic protection from trackers, malware sites, etc. Or you can disable all of these preset blacklists.
|
||||
|
||||
Your choice.
|
||||
|
||||
Randomly assembled documentation: https://github.com/gorhill/uMatrix/wiki
|
||||
|
||||
=====
|
||||
|
||||
FEEDBACK:
|
||||
|
||||
For any question/issue you might have, use the "Send Feedback" button on the right, in order for me to be able to answer readily. I can't answer directly to reviews, but I will be more than happy to answer you directly in the feedback section.
|
||||
|
||||
=====
|
||||
|
||||
BUGS, ISSUES, SUGEGSTIONS:
|
||||
|
||||
https://github.com/gorhill/uMatrix/issues
|
||||
|
||||
You are very welcomed to contribute your views on open issues and suggestions, various arguments for/against help me in deciding what is needed to improve the extension.
|
||||
|
||||
Ease of use is the primary goal. I've seen users give up on Firefox's NoScript because it gets too much in the way according to them, so rather than blame these users for poor security habits, I prefer to blame developers and this project is a tentative to address the issues which cause some users to give up on basic security.
|
||||
|
||||
This extension is also useful to understand what the web page in your browser is doing, often without your knowledge. You have full ability to see and decide with whom a web page communicates, and to restrict these communications to specific classes of objects within the web page.
|
||||
|
||||
The number which appear in the extension icon correspond to the total number of distinct requests attempted (successfully or not depending on whether these were allowed or blocked) by the web page.
|
||||
|
||||
Simply click on the appropriate entry in the matrix in order to white-, black- or graylist a component. Graylisting means the blocked or allowed status will be inherited from another cell with higher precedence in the matrix.
|
||||
|
||||
Red square = effectively blacklisted, i.e. requests are prevented from reaching their intended destination:
|
||||
* Dark red square: the domain name and/or type of request is specifically blacklisted.
|
||||
* Faded red square: the blacklist status is inherited because the entry is graylisted.
|
||||
|
||||
Green square = effectively whitelisted, i.e. requests are allowed to reach their intended destination:
|
||||
* Dark green square: the domain name and/or type of request is specifically whitelisted.
|
||||
* Faded green square: the whitelist status is inherited because the entry is graylisted.
|
||||
|
||||
The top-left cell in the matrix, the "all" cell, represents the default global setting, which allows you to choose whether allowing or blocking everything is the default behavior. Some prefer to allow everything while blocking exceptionally. My personal preference is of course the reverse, blocking everything and allowing exceptionally.
|
||||
|
||||
This extension is also useful if you wish to speed up your browsing, by globally blocking all requests for images as an example.
|
||||
|
||||
=====
|
||||
|
||||
SOURCE CODE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
|
||||
CHANGE LOG: https://github.com/gorhill/uMatrix/releases
|
||||
@ -1,93 +0,0 @@
|
||||
µMatrix: A point-and-click matrix-based firewall, with many privacy-enhancing tools. For advanced users.
|
||||
|
||||
µMatrix put you in full control of where your browser is allowed to connect, what type of data it is allowed to download, and what it is allowed to execute. Nobody else decides for you: You choose. You are in full control of your privacy.
|
||||
|
||||
Out of the box, µMatrix works in relax block-all/allow-exceptionally mode, meaning web sites which require 3rd-party scripts are likely to be "broken". With two clicks, µMatrix can be set to work in allow-all/block-exceptionally mode, which generally will not break web sites. See https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views for more details on this topic.
|
||||
|
||||
Regarding the myth that "Chromium-based browsers can't reliably block javascript", see: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Summary: Yes, javascript can be blocked reliably in Chromium.
|
||||
|
||||
* See ALL the remote connections, failed or attempted, depending on whether they were blocked or allowed (you decide).
|
||||
|
||||
* A single-click to whitelist/blacklist one or multiple classes of requests according to the destination and type of data (a blocked request will NEVER leave your browser).
|
||||
|
||||
* Efficient blacklisting: cookies won't leave your browser, javascript won't execute, plugins won't play, tracking pixels won't download, etc.
|
||||
|
||||
* You do not have to solely rely on just one particular curated blacklist (arguably with many missing entries) outside which nothing else can be blocked: You are in full control.
|
||||
|
||||
* Ease of use: µMatrix lets you easily whitelist/blacklist net requests which originate from within a web page according to a point-and-click matrix:
|
||||
|
||||
- domain names (left column)
|
||||
* from very specific
|
||||
* to very generic
|
||||
|
||||
- type of requests (top row)
|
||||
* cookies
|
||||
* CSS-related resources (stylesheets and web fonts)
|
||||
* images
|
||||
* plugins
|
||||
* scripts
|
||||
* XHR (requests made by scripts)
|
||||
* frames
|
||||
* others
|
||||
|
||||
You can blacklist/whitelist a single cell, an entire row, a group of rows, an entire column, or the whole matrix with just one click.
|
||||
|
||||
µMatrix's filtering engine uses precedence logic to evaluate what is blocked/allowed according to which cells are blacklisted/whitelisted. For example, this allows you to whitelist a whole page with one click, without having to repeatedly whitelist whatever new data appear on the page.
|
||||
|
||||
All rules are scoped. For example, you can block `facebook.com` and `facebook.net` everywhere except when visiting a page on `www.facebook.com`. This way Facebook won't be able to build a profile of your browsing habits.
|
||||
|
||||
The goal of this extension is to make the allowing or blocking of web sites, wholly or partly, as straightforward as possible, so as to encourage users to care about their privacy.
|
||||
|
||||
The extension comes with 3rd-party hosts files totaling over 58,000 distinct hostnames (lists can be selectively disabled/enabled according to your choice).
|
||||
|
||||
Ultimately, you can choose however you browse the net:
|
||||
|
||||
* Blacklist all by default, and whitelist as needed (default mode).
|
||||
|
||||
* Whitelist all by default, and blacklist as needed.
|
||||
|
||||
Either way, you still benefit from the preset blacklists so that at least you get basic protection from trackers, malware sites, etc. Or you can disable all of these preset blacklists.
|
||||
|
||||
Your choice.
|
||||
|
||||
Randomly assembled documentation: https://github.com/gorhill/uMatrix/wiki
|
||||
|
||||
=====
|
||||
|
||||
FEEDBACK:
|
||||
|
||||
For any question/issue you might have, use the "Send Feedback" button on the right, in order for me to be able to answer readily. I can't answer directly to reviews, but I will be more than happy to answer you directly in the feedback section.
|
||||
|
||||
=====
|
||||
|
||||
BUGS, ISSUES, SUGEGSTIONS:
|
||||
|
||||
https://github.com/gorhill/uMatrix/issues
|
||||
|
||||
You are very welcomed to contribute your views on open issues and suggestions, various arguments for/against help me in deciding what is needed to improve the extension.
|
||||
|
||||
Ease of use is the primary goal. I've seen users give up on Firefox's NoScript because it gets too much in the way according to them, so rather than blame these users for poor security habits, I prefer to blame developers and this project is a tentative to address the issues which cause some users to give up on basic security.
|
||||
|
||||
This extension is also useful to understand what the web page in your browser is doing, often without your knowledge. You have full ability to see and decide with whom a web page communicates, and to restrict these communications to specific classes of objects within the web page.
|
||||
|
||||
The number which appear in the extension icon correspond to the total number of distinct requests attempted (successfully or not depending on whether these were allowed or blocked) by the web page.
|
||||
|
||||
Simply click on the appropriate entry in the matrix in order to white-, black- or graylist a component. Graylisting means the blocked or allowed status will be inherited from another cell with higher precedence in the matrix.
|
||||
|
||||
Red square = effectively blacklisted, i.e. requests are prevented from reaching their intended destination:
|
||||
* Dark red square: the domain name and/or type of request is specifically blacklisted.
|
||||
* Faded red square: the blacklist status is inherited because the entry is graylisted.
|
||||
|
||||
Green square = effectively whitelisted, i.e. requests are allowed to reach their intended destination:
|
||||
* Dark green square: the domain name and/or type of request is specifically whitelisted.
|
||||
* Faded green square: the whitelist status is inherited because the entry is graylisted.
|
||||
|
||||
The top-left cell in the matrix, the "all" cell, represents the default global setting, which allows you to choose whether allowing or blocking everything is the default behavior. Some prefer to allow everything while blocking exceptionally. My personal preference is of course the reverse, blocking everything and allowing exceptionally.
|
||||
|
||||
This extension is also useful if you wish to speed up your browsing, by globally blocking all requests for images as an example.
|
||||
|
||||
=====
|
||||
|
||||
SOURCE CODE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
|
||||
CHANGE LOG: https://github.com/gorhill/uMatrix/releases
|
||||
@ -1,93 +1,93 @@
|
||||
µMatrix: A point-and-click matrix-based firewall, with many privacy-enhancing tools. For advanced users.
|
||||
µMatrix: Firewall tunjuk-dan-klik berbasis matriks, dengan banyak perkakas privasi yang ditingkatkan. Untuk pengguna tingkat lanjut.
|
||||
|
||||
µMatrix put you in full control of where your browser is allowed to connect, what type of data it is allowed to download, and what it is allowed to execute. Nobody else decides for you: You choose. You are in full control of your privacy.
|
||||
µMatrix memberi anda kontrol penuh ke mana peramban anda diizinkan terhubung, tipe data apa yang diizinkan untuk diunduh, dan apa yang diizinkan untuk dieksekusi. Tidak seorangpun memutuskan untuk anda: Anda yang memilih. Anda mengontrol penuh privasi anda sendiri.
|
||||
|
||||
Out of the box, µMatrix works in relax block-all/allow-exceptionally mode, meaning web sites which require 3rd-party scripts are likely to be "broken". With two clicks, µMatrix can be set to work in allow-all/block-exceptionally mode, which generally will not break web sites. See https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views for more details on this topic.
|
||||
Secara bawaan, µMatrix bekerja dalam mode blokir-semua/izinkan-sebagian yang agak ketat, artinya situs web yang membutuhkan skrip pihak ketiga besar kemungkinan menjadi "rusak". Dengan dua klik, µMatrix dapat diatur untuk bekerja dalam mode izinkan-semua/blokir-sebagian, yang pada umumnya tidak akan membuat rusak situs web. Lihat https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views untuk penjelasan lebih rinci perihal topik ini.
|
||||
|
||||
Regarding the myth that "Chromium-based browsers can't reliably block javascript", see: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Summary: Yes, javascript can be blocked reliably in Chromium.
|
||||
Mengenai mitos "Peramban barbasis Chromium tidak dapat dengan handal memblokir JavaScript", lihat: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Ringkasnya: Ya, JavaScript dapat diblokir dengan handal di Chromium.
|
||||
|
||||
* See ALL the remote connections, failed or attempted, depending on whether they were blocked or allowed (you decide).
|
||||
* Lihat SEMUA koneksi asing, yang gagal atau mencoba, tergantung dari apakah mereka diblokir atau diizinkan (anda putuskan).
|
||||
|
||||
* A single-click to whitelist/blacklist one or multiple classes of requests according to the destination and type of data (a blocked request will NEVER leave your browser).
|
||||
* Sekali klik untuk mendaftar-putih/hitamkan satu atau banyak kelas permintaan menurut destinasi dan jenis data (permintaan yang diblokir TIDAK AKAN PERNAH meninggalkan peramban anda).
|
||||
|
||||
* Efficient blacklisting: cookies won't leave your browser, javascript won't execute, plugins won't play, tracking pixels won't download, etc.
|
||||
* Pendaftar-hitaman yang efisien: kuki tidak akan meninggalkan peramban anda, JavaScript tidak akan dieksekusi, plugin tidak akan berjalan, piksel pelacakan tidak akan diunduh, dll.
|
||||
|
||||
* You do not have to solely rely on just one particular curated blacklist (arguably with many missing entries) outside which nothing else can be blocked: You are in full control.
|
||||
* Anda tidak harus bergantung hanya pada daftar-hitam tertentu saja (dengan alasan banyak entri yang hilang) selain tidak ada lagi yang dapat diblokir: Anda dalam kontrol penuh.
|
||||
|
||||
* Ease of use: µMatrix lets you easily whitelist/blacklist net requests which originate from within a web page according to a point-and-click matrix:
|
||||
* Mudah dalam penggunaan: µMatrix memungkinkan anda dengan mudah mendaftar-putih/hitamkan permintaan jaringan yang berasal dari halaman web menurut matriks tunjuk-dan-klik:
|
||||
|
||||
- domain names (left column)
|
||||
* from very specific
|
||||
* to very generic
|
||||
- nama ranah (kolom kiri)
|
||||
* dari sangat spesifik
|
||||
* ke sangat umum
|
||||
|
||||
- type of requests (top row)
|
||||
* cookies
|
||||
* CSS-related resources (stylesheets and web fonts)
|
||||
* images
|
||||
* plugins
|
||||
* scripts
|
||||
* XHR (requests made by scripts)
|
||||
* frames
|
||||
* others
|
||||
- jenis permintaan (baris atas)
|
||||
* kuki
|
||||
* sumber daya terkait CSS (stylesheet dan fon web)
|
||||
* gambar
|
||||
* plugin
|
||||
* skrip
|
||||
* XHR (permintaan yang dibuat oleh skrip)
|
||||
* frame
|
||||
* lainnya
|
||||
|
||||
You can blacklist/whitelist a single cell, an entire row, a group of rows, an entire column, or the whole matrix with just one click.
|
||||
Anda dapat mendaftar-hitam/putihkan satu sel, seluruh baris, satu grup dari baris, seluruh kolom, atau seluruh matriks hanya dengan satu klik.
|
||||
|
||||
µMatrix's filtering engine uses precedence logic to evaluate what is blocked/allowed according to which cells are blacklisted/whitelisted. For example, this allows you to whitelist a whole page with one click, without having to repeatedly whitelist whatever new data appear on the page.
|
||||
Mesin penyaringan µMatrix menggunakan logika tinggi untuk mengevaluasi apa yang diblokir/diizinkan sesuai dengan sel mana yang di daftar-hitam/putih. Sebagai contoh, hal ini memungkinkan anda mendaftar-putihkan seluruh halaman dengan satu klik, tanpa perlu berulang-ulang mendaftar-putihkan setiap data baru yang muncul di halaman.
|
||||
|
||||
All rules are scoped. For example, you can block `facebook.com` and `facebook.net` everywhere except when visiting a page on `www.facebook.com`. This way Facebook won't be able to build a profile of your browsing habits.
|
||||
Mencakup semua aturan. Sebagai contoh, anda dapat memblokir `facebook.com` dan `facebook.net` di manapun kecuali ketika mengunjungi sebuah halaman di `www.facebook.com`. Dengan cara ini Facebook tidak akan bisa membangun profil mengenai kebiasaan penjelajahan anda.
|
||||
|
||||
The goal of this extension is to make the allowing or blocking of web sites, wholly or partly, as straightforward as possible, so as to encourage users to care about their privacy.
|
||||
Tujuan dari ekstensi ini adalah untuk mengizinkan atau memblokir situs web, sepenuhnya atau sebagian, sesederhana mungkin, sehingga mendorong para pengguna untuk lebih peduli tentang privasi mereka.
|
||||
|
||||
The extension comes with 3rd-party hosts files totaling over 58,000 distinct hostnames (lists can be selectively disabled/enabled according to your choice).
|
||||
Ekstensi ini hadir bersama berkas hos pihak ketiga dengan total lebih dari 58,000 nama hos yang berbeda (daftar dapat secara selektif dinonaktif/aktifkan sesuai dengan pilihan anda).
|
||||
|
||||
Ultimately, you can choose however you browse the net:
|
||||
Pada akhirnya, Anda dapat memilih bagaimana anda ingin menjelajah internet:
|
||||
|
||||
* Blacklist all by default, and whitelist as needed (default mode).
|
||||
* Daftar-hitamkan semua secara baku, dan daftar-putihkan sesuai kebutuhan (mode bawaan).
|
||||
|
||||
* Whitelist all by default, and blacklist as needed.
|
||||
* Daftar-putihkan semua secara baku, dan daftar-hitamkan sesuai kebutuhan.
|
||||
|
||||
Either way, you still benefit from the preset blacklists so that at least you get basic protection from trackers, malware sites, etc. Or you can disable all of these preset blacklists.
|
||||
Dengan cara manapun, anda masih diuntungkan dari aturan bawaan daftar-hitam sehingga paling tidak anda tetap mendapatkan perlindungan mendasar dari pelacak, situs malware, dll. Atau anda dapat menonaktifkan semua aturan bawaan daftar-hitam ini.
|
||||
|
||||
Your choice.
|
||||
Terserah anda.
|
||||
|
||||
Randomly assembled documentation: https://github.com/gorhill/uMatrix/wiki
|
||||
Himpunan acak dokumentasi: https://github.com/gorhill/uMatrix/wiki
|
||||
|
||||
=====
|
||||
|
||||
FEEDBACK:
|
||||
UMPAN BALIK:
|
||||
|
||||
For any question/issue you might have, use the "Send Feedback" button on the right, in order for me to be able to answer readily. I can't answer directly to reviews, but I will be more than happy to answer you directly in the feedback section.
|
||||
Jika ada pertanyaan/masalah yang mungkin ingin anda sampaikan, gunakan tombol "Kirim Umpan Balik" di sebelah kanan, agar saya dapat menjawab dengan mudah. Saya tidak dapat menjawab secara langsung untuk ulasan, tapi saya akan lebih dari senang untuk menjawab anda secara langsung di bagian umpan balik.
|
||||
|
||||
=====
|
||||
|
||||
BUGS, ISSUES, SUGEGSTIONS:
|
||||
KUTU, MASALAH, SARAN:
|
||||
|
||||
https://github.com/gorhill/uMatrix/issues
|
||||
|
||||
You are very welcomed to contribute your views on open issues and suggestions, various arguments for/against help me in deciding what is needed to improve the extension.
|
||||
Anda sangat diharapkan untuk berkontribusi mengenai pandangan anda mengenai masalah yang ada dan saran/masukan, argumen apapun baik membangun/kontra membantu saya memutuskan apa yang diperlukan untuk memperbaiki ekstensi ini.
|
||||
|
||||
Ease of use is the primary goal. I've seen users give up on Firefox's NoScript because it gets too much in the way according to them, so rather than blame these users for poor security habits, I prefer to blame developers and this project is a tentative to address the issues which cause some users to give up on basic security.
|
||||
Mudah dalam penggunaan adalah tujuan utama. Saya melihat banyak pengguna menyerah menggunakan NoScript pada Firefox karena menurut mereka semakin banyak gangguan yang terjadi, jadi dari pada menyalahkan para pengguna atas kebiasaan keamanan yang buruk, saya memilih menyalahkan pengembang dan proyek ini adalah eksperimen untuk mengatasi masalah yang menyebabkan beberapa pengguna menyerah pada keamanan dasar.
|
||||
|
||||
This extension is also useful to understand what the web page in your browser is doing, often without your knowledge. You have full ability to see and decide with whom a web page communicates, and to restrict these communications to specific classes of objects within the web page.
|
||||
Ekstensi ini juga bermanfaat untuk memahami apa yang halaman web lakukan di dalam peramban anda, yang seringkali tanpa sepengetahuan anda. Anda memiliki kewenangan penuh untuk melihat dan memutuskan dengan siapa sebuah halaman web berkomunikasi, dan membatasi komunikasi tersebut hanya untuk kelas obyek spesifik di dalam halaman web.
|
||||
|
||||
The number which appear in the extension icon correspond to the total number of distinct requests attempted (successfully or not depending on whether these were allowed or blocked) by the web page.
|
||||
Angka yang muncul pada ikon ekstensi berhubungan dengan jumlah total percobaan permintaan yang berbeda (sukses atau tidak tergantung pada apakah permintaan tersebut diizinkan atau diblokir) oleh halaman web.
|
||||
|
||||
Simply click on the appropriate entry in the matrix in order to white-, black- or graylist a component. Graylisting means the blocked or allowed status will be inherited from another cell with higher precedence in the matrix.
|
||||
Cukup klik pada entri yang sesuai dalam matriks untuk memutihkan, menghitamkan, mengabu-abukan sebuah komponen. Mendaftar-abukan berarti status diblokir atau diizinkan akan diturunkan dari sel lainnya dengan urutan prioritas yang lebih tinggi dalam matriks.
|
||||
|
||||
Red square = effectively blacklisted, i.e. requests are prevented from reaching their intended destination:
|
||||
* Dark red square: the domain name and/or type of request is specifically blacklisted.
|
||||
* Faded red square: the blacklist status is inherited because the entry is graylisted.
|
||||
Persegi merah = didaftar-hitamkan secara efektif, contoh. permintaan dicegah untuk mencapai destinasi yang dinginkan:
|
||||
* Persegi merah gelap: nama ranah dan/atau jenis permintaan secara spesifik didaftar-hitamkan.
|
||||
* Persegi merah pudar: status daftar-hitam adalah turunan karena entri berada di daftar abu-abu.
|
||||
|
||||
Green square = effectively whitelisted, i.e. requests are allowed to reach their intended destination:
|
||||
* Dark green square: the domain name and/or type of request is specifically whitelisted.
|
||||
* Faded green square: the whitelist status is inherited because the entry is graylisted.
|
||||
Persegi hijau = didaftar-putihkan secara efektif, contoh. permintaan diizinkan untuk mencapai destinasi yang diinginkan:
|
||||
* Persegi hijau gelap: nama ranah dan/atau jenis permintaan secara spesifik didaftar-putihkan.
|
||||
* Persegi hijau pudar: status daftar-putih adalah turunan karena entri berada di daftar abu-abu.
|
||||
|
||||
The top-left cell in the matrix, the "all" cell, represents the default global setting, which allows you to choose whether allowing or blocking everything is the default behavior. Some prefer to allow everything while blocking exceptionally. My personal preference is of course the reverse, blocking everything and allowing exceptionally.
|
||||
Sel kiri atas dalam matriks, sel "semua", mewakili pengaturan baku secara global, yang memungkinkan anda memilih apakah mengizinkan atau memblokir semuanya sebagai perilaku/tindakan baku. Beberapa memilih mengizinkan semuanya sambil memblokir sebagian. Preferensi personal saya adalah tentu saja kebalikannya, memblokir semuanya dan mengizinkan sebagian.
|
||||
|
||||
This extension is also useful if you wish to speed up your browsing, by globally blocking all requests for images as an example.
|
||||
Ekstensi ini juga berguna jika anda ingin mempercepat penjelajahan anda, sebagai contoh dengan secara global memblokir semua permintaan untuk gambar.
|
||||
|
||||
=====
|
||||
|
||||
SOURCE CODE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
KODE SUMBER: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
|
||||
CHANGE LOG: https://github.com/gorhill/uMatrix/releases
|
||||
CATATAN PERUBAHAN: https://github.com/gorhill/uMatrix/releases
|
||||
|
||||
@ -1,93 +1,93 @@
|
||||
µMatrix: A point-and-click matrix-based firewall, with many privacy-enhancing tools. For advanced users.
|
||||
uMatrix: un firewall a matrice del tipo punta e clicca, con molte funzionalità a salvaguardia della privacy. Per utenti avanzati.
|
||||
|
||||
µMatrix put you in full control of where your browser is allowed to connect, what type of data it is allowed to download, and what it is allowed to execute. Nobody else decides for you: You choose. You are in full control of your privacy.
|
||||
uMatrix permette il pieno controllo delle connessioni del browser, del tipo di dati che può scaricare e di cosa può eseguire. Nessun'altro decide per te: Tu scegli. Solo tu hai il controllo completo della tua privacy.
|
||||
|
||||
Out of the box, µMatrix works in relax block-all/allow-exceptionally mode, meaning web sites which require 3rd-party scripts are likely to be "broken". With two clicks, µMatrix can be set to work in allow-all/block-exceptionally mode, which generally will not break web sites. See https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views for more details on this topic.
|
||||
In configurazione standard, uMatrix funziona in modalità blocca-tutto/permetti-eccezionalmente, vale a dire che i siti che richiedono script di terze parti, facilmente risulteranno incompleti o con errori. Con solo un paio di click, uMatrix può essere configurato in modalità permetti-tutto/blocca-eccezionalmente, che generalmente non causa problemi nel caricamento dei siti. Vedere https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views per ulteriori dettagli.
|
||||
|
||||
Regarding the myth that "Chromium-based browsers can't reliably block javascript", see: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Summary: Yes, javascript can be blocked reliably in Chromium.
|
||||
Riguardo il mito che i browser basati su Chromium non possano bloccare efficacemente javascript, vedere: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. In sostanza: Si, javascript può essere efficacemente bloccato in Chromium.
|
||||
|
||||
* See ALL the remote connections, failed or attempted, depending on whether they were blocked or allowed (you decide).
|
||||
*Vedi TUTTE le connessioni remote, se fallite o tentate, dipendendo se siano bloccate o permesse (tu decidi).
|
||||
|
||||
* A single-click to whitelist/blacklist one or multiple classes of requests according to the destination and type of data (a blocked request will NEVER leave your browser).
|
||||
* Un singolo click per permettere/bloccare una o più categorie di richieste, in funzione della destinazione e del tipo di dati (una richiesta bloccata non lascerà MAI il tuo browser).
|
||||
|
||||
* Efficient blacklisting: cookies won't leave your browser, javascript won't execute, plugins won't play, tracking pixels won't download, etc.
|
||||
* Controllo efficiente: i cookies non lasceranno il tuo browser, javascript non verrà eseguito, i plug-in non verranno attivati, pixel di tracking non saranno scaricati, ecc.
|
||||
|
||||
* You do not have to solely rely on just one particular curated blacklist (arguably with many missing entries) outside which nothing else can be blocked: You are in full control.
|
||||
* Tu non devi unicamente affidarti ad una singola lista nera (presumibilmente con molte voci mancanti) al di fuori della quale niente altro può essere bloccato: Tu hai il pieno controllo.
|
||||
|
||||
* Ease of use: µMatrix lets you easily whitelist/blacklist net requests which originate from within a web page according to a point-and-click matrix:
|
||||
* Semplicità d'uso: uMatrix consente di permettere/bloccare le richieste originate da una pagina web secondo uno schema a matrice, punta e clicca:
|
||||
|
||||
- domain names (left column)
|
||||
* from very specific
|
||||
* to very generic
|
||||
- nome del dominio (colonna di sinistra)
|
||||
* dal molto specifico
|
||||
* al molto generico
|
||||
|
||||
- type of requests (top row)
|
||||
- tipo di richiesta (riga in alto)
|
||||
* cookies
|
||||
* CSS-related resources (stylesheets and web fonts)
|
||||
* images
|
||||
* risorse tipo CSS (stili e caratteri)
|
||||
* immagini
|
||||
* plugins
|
||||
* scripts
|
||||
* XHR (requests made by scripts)
|
||||
* frames
|
||||
* others
|
||||
* XHR (richieste fatte dagli script)
|
||||
* riquadri
|
||||
* altro
|
||||
|
||||
You can blacklist/whitelist a single cell, an entire row, a group of rows, an entire column, or the whole matrix with just one click.
|
||||
Tu puoi permettere/bloccare una singola cella, una intera riga, un gruppo di righe, una intera colonna o l'intera matrice, con solo un click.
|
||||
|
||||
µMatrix's filtering engine uses precedence logic to evaluate what is blocked/allowed according to which cells are blacklisted/whitelisted. For example, this allows you to whitelist a whole page with one click, without having to repeatedly whitelist whatever new data appear on the page.
|
||||
Il sistema di filtri di uMatrix utilizza una logica di priorità per valutare cosa viene bloccato/permesso, secondo le celle che sono in black o white list. Per esempio, questo permette di mettere in white list una pagina intera con un click, senza alcun bisogno di consentire qualunque nuovo elemento che appare sulla pagina.
|
||||
|
||||
All rules are scoped. For example, you can block `facebook.com` and `facebook.net` everywhere except when visiting a page on `www.facebook.com`. This way Facebook won't be able to build a profile of your browsing habits.
|
||||
Tutte le regole hanno un loro specifico campo di applicazione. Per esempio, si può bloccare 'facebook.com' e 'facebook.net' ovunque eccetto quando si visita una pagina su 'www.facebook.com'. in questo modo Facebook non è in grado di costruire un profilo delle abitudini di navigazione.
|
||||
|
||||
The goal of this extension is to make the allowing or blocking of web sites, wholly or partly, as straightforward as possible, so as to encourage users to care about their privacy.
|
||||
Lo scopo di questa estensione è rendere il più immediato possibile il blocco o meno, parziale o totale di siti web, incoraggiando gli utenti a tutelare la propria privacy.
|
||||
|
||||
The extension comes with 3rd-party hosts files totaling over 58,000 distinct hostnames (lists can be selectively disabled/enabled according to your choice).
|
||||
L'estensione contiene host file di terze parti, per un totale di oltre 58.000 distinti hostname (le liste possono essere disabilitate/abilitate secondo le proprie preferenze).
|
||||
|
||||
Ultimately, you can choose however you browse the net:
|
||||
In conclusione, ognuno può decidere come navigare su Internet:
|
||||
|
||||
* Blacklist all by default, and whitelist as needed (default mode).
|
||||
*Mettere tutto in blacklist e consentire elementi secondo necessità (modalità di default).
|
||||
|
||||
* Whitelist all by default, and blacklist as needed.
|
||||
*Consentire tutto di default e bloccare elementi secondo necessità.
|
||||
|
||||
Either way, you still benefit from the preset blacklists so that at least you get basic protection from trackers, malware sites, etc. Or you can disable all of these preset blacklists.
|
||||
In entrambe le modalità, rimane il beneficio della protezione delle blacklist standard, che forniscono una difesa di base nei confronti di tracker, siti di malware, ecc. Oppure si possono disabilitare tutte queste blacklist standard.
|
||||
|
||||
Your choice.
|
||||
La scelta è tua.
|
||||
|
||||
Randomly assembled documentation: https://github.com/gorhill/uMatrix/wiki
|
||||
Documentazione disponibile: https://github.com/gorhill/uMatrix/wiki
|
||||
|
||||
=====
|
||||
|
||||
FEEDBACK:
|
||||
Feedback:
|
||||
|
||||
For any question/issue you might have, use the "Send Feedback" button on the right, in order for me to be able to answer readily. I can't answer directly to reviews, but I will be more than happy to answer you directly in the feedback section.
|
||||
Per qualunque dubbio o domanda, usare il pulsante sulla destra "Invia Feedback". Risponderò prontamente. Non posso rispondere direttamente ai pareri, ma sarò lieto di rispondere direttamente nella sezione dei feedback.
|
||||
|
||||
=====
|
||||
|
||||
BUGS, ISSUES, SUGEGSTIONS:
|
||||
Bachi, problemi, consigli:
|
||||
|
||||
https://github.com/gorhill/uMatrix/issues
|
||||
|
||||
You are very welcomed to contribute your views on open issues and suggestions, various arguments for/against help me in deciding what is needed to improve the extension.
|
||||
Chiunque può contribuire al lavoro, con suggerimenti, segnalazione di problemi, argomentazioni pro/contro, per aiutarmi a decidere quali migliorie fare nell'estensione.
|
||||
|
||||
Ease of use is the primary goal. I've seen users give up on Firefox's NoScript because it gets too much in the way according to them, so rather than blame these users for poor security habits, I prefer to blame developers and this project is a tentative to address the issues which cause some users to give up on basic security.
|
||||
La facilità di utilizzo è il primo obiettivo. Ho visto utilizzatori rinunciare ad usare NoScript per Firefox perché complesso, quindi invece di accusare questi utilizzatori di avere abitudini non sicure, preferisco accusare gli sviluppatori e questo progetto vuole essere un tentativo di risolvere quei problemi che hanno determinato la rinuncia ad impiegare una sicurezza di base.
|
||||
|
||||
This extension is also useful to understand what the web page in your browser is doing, often without your knowledge. You have full ability to see and decide with whom a web page communicates, and to restrict these communications to specific classes of objects within the web page.
|
||||
Questa estensione è anche utile per capire cosa una pagina web fa effettivamente nel browser, spesso senza la vostra conoscenza. Voi avete la piena abilità di vedere e decidere con chi la pagina web comunica e restringere queste comunicazioni a specifiche classi di oggetti all'interno della pagina.
|
||||
|
||||
The number which appear in the extension icon correspond to the total number of distinct requests attempted (successfully or not depending on whether these were allowed or blocked) by the web page.
|
||||
Il numero che appare nella nell'icona dell'estensione corrisponde al numero complessivo di distinte richieste tentate (con successo o meno, dipendendo se queste siano permesse o bloccate) dalla pagina web.
|
||||
|
||||
Simply click on the appropriate entry in the matrix in order to white-, black- or graylist a component. Graylisting means the blocked or allowed status will be inherited from another cell with higher precedence in the matrix.
|
||||
Semplicente fare click nella appropriata cella della matrice per permettere mettere un elemento in white-, black- o grey list. La lista grigia (Graylisting) significa che lo stato di bloccato o permesso viene ereditato da un'altra cella con più alta priorità nella matrice.
|
||||
|
||||
Red square = effectively blacklisted, i.e. requests are prevented from reaching their intended destination:
|
||||
* Dark red square: the domain name and/or type of request is specifically blacklisted.
|
||||
* Faded red square: the blacklist status is inherited because the entry is graylisted.
|
||||
Cella rossa = effettivamente bloccata, cioè alle richieste viene impedito di raggiungere la loro destinazione.
|
||||
* Cella rosso scuro: il dominio o il tipo di richiesta è specificamente bloccata.
|
||||
* Cella rossa opaca: lo stato di blocco (blacklist) è ereditato perchè l'elemento è in grey list.
|
||||
|
||||
Green square = effectively whitelisted, i.e. requests are allowed to reach their intended destination:
|
||||
* Dark green square: the domain name and/or type of request is specifically whitelisted.
|
||||
* Faded green square: the whitelist status is inherited because the entry is graylisted.
|
||||
Cella verde = effettivamente permesso, cioè alle richieste è permesso raggiungere la loro destinazione:
|
||||
* Cella verde scuro: il dominio e/o il tipo di richiesta è specificamente permessa (whitelist).
|
||||
* Cella vedre opaca: lo stato di permesso è ereditato perchè l'elemento è in grey list.
|
||||
|
||||
The top-left cell in the matrix, the "all" cell, represents the default global setting, which allows you to choose whether allowing or blocking everything is the default behavior. Some prefer to allow everything while blocking exceptionally. My personal preference is of course the reverse, blocking everything and allowing exceptionally.
|
||||
La cella in alto a sinistra nella matrice, la cella "tutto", rappresenta il setting globale di default, che permette di scegliere se permettere o bloccare tutto. Alcuni preferiscono permettere tutto e bloccare in casi specifici. La mia preferenza personale è naturalmente il contrario, bloccare tutto e permettere in casi specifici.
|
||||
|
||||
This extension is also useful if you wish to speed up your browsing, by globally blocking all requests for images as an example.
|
||||
Questa estensione è inoltre utile se volete accelerare la vostra navigazione, bloccando tutte le richieste delle immagini, per esempio.
|
||||
|
||||
=====
|
||||
|
||||
SOURCE CODE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
CODICE SORGENTE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
|
||||
CHANGE LOG: https://github.com/gorhill/uMatrix/releases
|
||||
|
||||
@ -1,93 +1,93 @@
|
||||
µMatrix: A point-and-click matrix-based firewall, with many privacy-enhancing tools. For advanced users.
|
||||
Uma firewall point & click baseada numa matriz, com funcionalidade para reforçar a privacidade de cada um. Para utilizadores avançados.
|
||||
|
||||
µMatrix put you in full control of where your browser is allowed to connect, what type of data it is allowed to download, and what it is allowed to execute. Nobody else decides for you: You choose. You are in full control of your privacy.
|
||||
uMatrix coloca-o no controlo de onde o seu browser se pode conectar, que tipo de dados podem ser transferidos, e o que pode ser executado. Ninguém decide por si: Você escolhe. Você tem controlo total sob a sua privacidade.
|
||||
|
||||
Out of the box, µMatrix works in relax block-all/allow-exceptionally mode, meaning web sites which require 3rd-party scripts are likely to be "broken". With two clicks, µMatrix can be set to work in allow-all/block-exceptionally mode, which generally will not break web sites. See https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views for more details on this topic.
|
||||
Fora da caixa, uMatrix funciona numa configuração relaxada "bloqueia-tudo/permite-excepcionalmente", o que quer dizer que web sites que necessitem scripts de terceiros poderão não estar funcionais. Com dois clicks, o uMatrix pode ser configurado para funcionar em modo "permite-tudo/bloqueia-excepcionalmente", o que geralmente não cria problemas em nenhuma página web. Ver https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views para mais detalhes sobre este tópico.
|
||||
|
||||
Regarding the myth that "Chromium-based browsers can't reliably block javascript", see: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Summary: Yes, javascript can be blocked reliably in Chromium.
|
||||
Sobre do mito que "browser baseados em Chromium não conseguem bloquear JavaScript fielmente", ver: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Sumário: Sim, JavaScript pode ser bloqueado com seguração no Chromium.
|
||||
|
||||
* See ALL the remote connections, failed or attempted, depending on whether they were blocked or allowed (you decide).
|
||||
* Ver TODAS as conexões remotas, falhadas ou tentadas, dependendo se foram bloqueadas ou permitidas (você decide).
|
||||
|
||||
* A single-click to whitelist/blacklist one or multiple classes of requests according to the destination and type of data (a blocked request will NEVER leave your browser).
|
||||
* Um único-clique para meter múltiplas classes de pedidos na lista branca/negra, de acordo com o destino e tipo dos dados (um pedido bloqueado NUNCA vai sair do seu browser).
|
||||
|
||||
* Efficient blacklisting: cookies won't leave your browser, javascript won't execute, plugins won't play, tracking pixels won't download, etc.
|
||||
* Lista negra eficiente: cookies não iram sair do seu browser, JavaScript não será executado, plugins não irão correr, pixels de monitorização não serão transferidos, etc.
|
||||
|
||||
* You do not have to solely rely on just one particular curated blacklist (arguably with many missing entries) outside which nothing else can be blocked: You are in full control.
|
||||
* Você não tem de depender unicamente numa lista negra em particular (possivelmente a faltar entradas) fora do qual mais nada pode ser bloqueado: Você está em controlo total.
|
||||
|
||||
* Ease of use: µMatrix lets you easily whitelist/blacklist net requests which originate from within a web page according to a point-and-click matrix:
|
||||
* Facilidade de utilização: uMatrix deixa-o adicionar pedidos net que originam de uma página web a uma lista negra/branca, recorrendo a uma matriz point & click:
|
||||
|
||||
- domain names (left column)
|
||||
* from very specific
|
||||
* to very generic
|
||||
- nomes de domínio (coluna esquerda)
|
||||
* de muito específico
|
||||
* a muito genérico
|
||||
|
||||
- type of requests (top row)
|
||||
- tipo de pedidos (linha de topo)
|
||||
* cookies
|
||||
* CSS-related resources (stylesheets and web fonts)
|
||||
* images
|
||||
* plugins
|
||||
* Recursos relacionados com CSS (stylesheets e web fonts)
|
||||
* imagens
|
||||
* plug-ins
|
||||
* scripts
|
||||
* XHR (requests made by scripts)
|
||||
* XHR (pedidos efectuados pelos scripts)
|
||||
* frames
|
||||
* others
|
||||
* outros
|
||||
|
||||
You can blacklist/whitelist a single cell, an entire row, a group of rows, an entire column, or the whole matrix with just one click.
|
||||
Pode adicionar uma única célula à lista negra/branca, um grupo de linhas, uma coluna inteira, ou toda a matriz, com apenas um clique.
|
||||
|
||||
µMatrix's filtering engine uses precedence logic to evaluate what is blocked/allowed according to which cells are blacklisted/whitelisted. For example, this allows you to whitelist a whole page with one click, without having to repeatedly whitelist whatever new data appear on the page.
|
||||
O mecanismo de filtragem do uMatrix usa lógica de precedência para avaliar o que é permitido/está bloqueado, de acordo com as células que estão na lista negra/branca. Por exemplo, isto permite que adicione uma página inteira à lista branca com um só clique, sem ter que adicionar elementos à mesma, à medida que vão aparecendo.
|
||||
|
||||
All rules are scoped. For example, you can block `facebook.com` and `facebook.net` everywhere except when visiting a page on `www.facebook.com`. This way Facebook won't be able to build a profile of your browsing habits.
|
||||
Todas as regras têm escopos. Por exemplo, pode bloquear 'facebook.com' e 'facebook.net' em todo o lado, excepto quando visita a página em 'www.facebook.com'. Desta maneira, o Facebook não será capaz de criar um perfil com os seus hábitos de navegação pessoais.
|
||||
|
||||
The goal of this extension is to make the allowing or blocking of web sites, wholly or partly, as straightforward as possible, so as to encourage users to care about their privacy.
|
||||
O objectivo desta extensão é tornar o acto de permitir ou proibir web sites, total ou parcialmente, o mais directo possível, para encorajar os utilizadores a se preocuparem com a sua privacidade.
|
||||
|
||||
The extension comes with 3rd-party hosts files totaling over 58,000 distinct hostnames (lists can be selectively disabled/enabled according to your choice).
|
||||
Esta extensão vem com ficheiros hosts de terceiros, totalizando mais de 58,000 hostnames (as listas podem ser activadas e desactivadas selectivamente, de acordo com a sua escolha).
|
||||
|
||||
Ultimately, you can choose however you browse the net:
|
||||
Fundamentalmente, pode escolher como navegar na internet:
|
||||
|
||||
* Blacklist all by default, and whitelist as needed (default mode).
|
||||
* Adicionar tudo à lista negra, e ir adicionando o que precisa à branca (modo normal).
|
||||
|
||||
* Whitelist all by default, and blacklist as needed.
|
||||
* Adicionar tudo à lista branca, e ir adicionando o que não precisa à negra.
|
||||
|
||||
Either way, you still benefit from the preset blacklists so that at least you get basic protection from trackers, malware sites, etc. Or you can disable all of these preset blacklists.
|
||||
De qualquer modo, vai sempre beneficiar das listas negras presentes, para que tenha sempre protecção básica contra trackers, sites de malware, etc. Ou pode desactivar todas as listas negras.
|
||||
|
||||
Your choice.
|
||||
A escolha é sua.
|
||||
|
||||
Randomly assembled documentation: https://github.com/gorhill/uMatrix/wiki
|
||||
Documentação aleatória: https://github.com/gorhill/uMatrix/wiki
|
||||
|
||||
=====
|
||||
|
||||
FEEDBACK:
|
||||
|
||||
For any question/issue you might have, use the "Send Feedback" button on the right, in order for me to be able to answer readily. I can't answer directly to reviews, but I will be more than happy to answer you directly in the feedback section.
|
||||
Qualquer questão ou problema que possa ter, use o botão "Send Feedback" à direita, para que possa responder rapidamente. Não posso responder directamente a comentários, mas não poderia estar mais contente por lhe responder directamente na secção de feedback.
|
||||
|
||||
=====
|
||||
|
||||
BUGS, ISSUES, SUGEGSTIONS:
|
||||
ERROS, PROBLEMAS, SUGESTÕES:
|
||||
|
||||
https://github.com/gorhill/uMatrix/issues
|
||||
|
||||
You are very welcomed to contribute your views on open issues and suggestions, various arguments for/against help me in deciding what is needed to improve the extension.
|
||||
É muito bem vindo a contribuir com a sua opinião em questões em aberto, e a dar sugestões, argumentos para me ajudar a decidir o que é preciso para melhorar a extensão.
|
||||
|
||||
Ease of use is the primary goal. I've seen users give up on Firefox's NoScript because it gets too much in the way according to them, so rather than blame these users for poor security habits, I prefer to blame developers and this project is a tentative to address the issues which cause some users to give up on basic security.
|
||||
Facilidade de uso é o objectivo principal. Já vi utilizadores desistir de usar o NoScript do Firefox porque requer configuração excessiva, portanto, em vez de os culpar por hábitos de segurança pobres, prefiro culpar os developers, e este projecto é uma tentativa a adereçar problemas que causam alguns a desistir de segurança básica.
|
||||
|
||||
This extension is also useful to understand what the web page in your browser is doing, often without your knowledge. You have full ability to see and decide with whom a web page communicates, and to restrict these communications to specific classes of objects within the web page.
|
||||
Esta extensão é também útil para entender o que a página web no seu browser está a fazer, por vezes sem o seu conhecimento. Tem o poder de ver e decidir com quem é que a página web comunica, e restringir essas comunicações a uma classe específica de objectos na mesma página.
|
||||
|
||||
The number which appear in the extension icon correspond to the total number of distinct requests attempted (successfully or not depending on whether these were allowed or blocked) by the web page.
|
||||
O número que aparece no ícone da extensão corresponde ao número total de pedidos distintos tentados (com sucesso ou não, dependendo das lista branca/negra) pela página web.
|
||||
|
||||
Simply click on the appropriate entry in the matrix in order to white-, black- or graylist a component. Graylisting means the blocked or allowed status will be inherited from another cell with higher precedence in the matrix.
|
||||
Simplesmente clique na célula apropriada na matriz para adicionar um componente à lista branca, negra, ou cinzenta. A lista cinzenta representa os objectos cujo estatuto (permitido ou bloqueado) é herdado de uma célula que precede a presente, na matriz.
|
||||
|
||||
Red square = effectively blacklisted, i.e. requests are prevented from reaching their intended destination:
|
||||
* Dark red square: the domain name and/or type of request is specifically blacklisted.
|
||||
* Faded red square: the blacklist status is inherited because the entry is graylisted.
|
||||
Quadrado vermelho = completamente na lista negra, i.e. pedidos são impedidos de chegar ao seu destino:
|
||||
* Quadrado vermelho escuro: o nome do domínio e/ou tipo de pedido está especificamente na lista negra.
|
||||
* Quadrado vermelho esbranquiçado: o estatuto de lista negra foi herdado, porque a entrada está na lista cinzenta.
|
||||
|
||||
Green square = effectively whitelisted, i.e. requests are allowed to reach their intended destination:
|
||||
* Dark green square: the domain name and/or type of request is specifically whitelisted.
|
||||
* Faded green square: the whitelist status is inherited because the entry is graylisted.
|
||||
Quadrado verde = completamente na lista branca, i.e. pedidos são permitidos e chegam ao seu destino:
|
||||
* Quadrado verde escuro: o nome do domínio e/ou tipo de pedido está especificamente na lista branca.
|
||||
* Quadrado verde esbranquiçado: o estatuto de lista branca foi herdado, porque a entrada está na lista cinzenta.
|
||||
|
||||
The top-left cell in the matrix, the "all" cell, represents the default global setting, which allows you to choose whether allowing or blocking everything is the default behavior. Some prefer to allow everything while blocking exceptionally. My personal preference is of course the reverse, blocking everything and allowing exceptionally.
|
||||
A célula de topo à esquerda na matriz, a célula "all", representa a definição global, que permite escolher se quer permitir ou bloquear tudo, como o comportamento normal. Alguns preferem permitir tudo e bloquear excepcionalmente. A minha preferência pessoal é o oposto -- bloquear tudo e permitir excepcionalmente.
|
||||
|
||||
This extension is also useful if you wish to speed up your browsing, by globally blocking all requests for images as an example.
|
||||
Esta extensão é também útil caso queira acelerar a velocidade do carregamento das páginas, bloqueando todos os pedidos para imagens, por exemplo.
|
||||
|
||||
=====
|
||||
|
||||
SOURCE CODE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
CÓDIGO FONTE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
|
||||
CHANGE LOG: https://github.com/gorhill/uMatrix/releases
|
||||
REGISTO DE ALTERAÇÕES: https://github.com/gorhill/uMatrix/releases
|
||||
|
||||
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 193 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 162 KiB |
|
After Width: | Height: | Size: 170 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 64 KiB |
@ -1,88 +0,0 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "__MSG_extName__",
|
||||
"short_name": "µMatrix",
|
||||
"version": "0.8.0.0",
|
||||
"description": "__MSG_extShortDesc__",
|
||||
"icons": {
|
||||
"16": "icon_16.png",
|
||||
"128": "icon_128.png"
|
||||
},
|
||||
"browser_action": {
|
||||
"default_icon": {
|
||||
"19": "img/browsericons/icon19.png"
|
||||
},
|
||||
"default_title": "__MSG_extName__",
|
||||
"default_popup": "popup.html"
|
||||
},
|
||||
"author": "Raymond Hill",
|
||||
"background": {
|
||||
"page": "background.html"
|
||||
},
|
||||
"commands": {
|
||||
"revert-all": {
|
||||
"description": "__MSG_commandRevertAll__",
|
||||
"suggested_key": {
|
||||
"default": "Alt+Q",
|
||||
"mac": "Command+Shift+Q"
|
||||
}
|
||||
},
|
||||
"whitelist-all": {
|
||||
"description": "__MSG_commandWhitelistAll__",
|
||||
"suggested_key": {
|
||||
"default": "Alt+A",
|
||||
"mac": "Command+Shift+A"
|
||||
}
|
||||
},
|
||||
"whitelist-page-domain": {
|
||||
"description": "__MSG_commandWhitelistPageDomain__",
|
||||
"suggested_key": {
|
||||
"default": "Alt+W",
|
||||
"mac": "Command+Shift+W"
|
||||
}
|
||||
},
|
||||
"open-dashboard": {
|
||||
"description": "__MSG_commandOpenDashboard__",
|
||||
"suggested_key": {
|
||||
"default": "Alt+S",
|
||||
"mac": "Command+Shift+S"
|
||||
}
|
||||
}
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["js/contentscript-start.js"],
|
||||
"run_at": "document_start",
|
||||
"all_frames": true
|
||||
},
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["js/contentscript-end.js"],
|
||||
"run_at": "document_end",
|
||||
"all_frames": true
|
||||
}
|
||||
],
|
||||
"default_locale": "en",
|
||||
"homepage_url": "https://github.com/gorhill/uMatrix/wiki",
|
||||
"minimum_chrome_version": "22.0",
|
||||
"options_page": "dashboard.html",
|
||||
"permissions": [
|
||||
"browsingData",
|
||||
"contentSettings",
|
||||
"cookies",
|
||||
"downloads",
|
||||
"storage",
|
||||
"tabs",
|
||||
"unlimitedStorage",
|
||||
"webNavigation",
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"http://*/*",
|
||||
"https://*/*"
|
||||
],
|
||||
"web_accessible_resources": [
|
||||
"css/fonts/Roboto_Condensed/RobotoCondensed-Regular.ttf",
|
||||
"css/noop.css"
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 817 B After Width: | Height: | Size: 817 B |
|
Before Width: | Height: | Size: 830 B After Width: | Height: | Size: 830 B |
|
Before Width: | Height: | Size: 840 B After Width: | Height: | Size: 840 B |
|
Before Width: | Height: | Size: 814 B After Width: | Height: | Size: 814 B |
|
Before Width: | Height: | Size: 829 B After Width: | Height: | Size: 829 B |
|
Before Width: | Height: | Size: 825 B After Width: | Height: | Size: 825 B |
|
Before Width: | Height: | Size: 808 B After Width: | Height: | Size: 808 B |
|
Before Width: | Height: | Size: 822 B After Width: | Height: | Size: 822 B |
|
Before Width: | Height: | Size: 808 B After Width: | Height: | Size: 808 B |
|
Before Width: | Height: | Size: 792 B After Width: | Height: | Size: 792 B |
|
Before Width: | Height: | Size: 761 B After Width: | Height: | Size: 761 B |
|
Before Width: | Height: | Size: 750 B After Width: | Height: | Size: 750 B |
|
Before Width: | Height: | Size: 836 B After Width: | Height: | Size: 836 B |
|
Before Width: | Height: | Size: 836 B After Width: | Height: | Size: 836 B |
|
Before Width: | Height: | Size: 827 B After Width: | Height: | Size: 827 B |
|
Before Width: | Height: | Size: 837 B After Width: | Height: | Size: 837 B |
|
Before Width: | Height: | Size: 833 B After Width: | Height: | Size: 833 B |
|
Before Width: | Height: | Size: 823 B After Width: | Height: | Size: 823 B |
|
Before Width: | Height: | Size: 818 B After Width: | Height: | Size: 818 B |
|
Before Width: | Height: | Size: 830 B After Width: | Height: | Size: 830 B |
|
Before Width: | Height: | Size: 777 B After Width: | Height: | Size: 777 B |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
@ -0,0 +1,55 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "nuTensor",
|
||||
"short_name": "nuTensor",
|
||||
"version": "1.3.3.8",
|
||||
"description": "__MSG_extShortDesc__",
|
||||
"icons": {
|
||||
"16": "img/icon_16.png",
|
||||
"128": "img/icon_128.png"
|
||||
},
|
||||
"browser_action": {
|
||||
"default_icon": {
|
||||
"19": "img/browsericons/icon19-19.png"
|
||||
},
|
||||
"default_title": "nuTensor",
|
||||
"default_popup": "popup.html"
|
||||
},
|
||||
"author": "Raymond Hill",
|
||||
"background": {
|
||||
"page": "background.html"
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["/js/vapi.js", "/js/vapi-client.js", "/js/contentscript-start.js"],
|
||||
"run_at": "document_start",
|
||||
"all_frames": true
|
||||
},
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["/js/contentscript.js"],
|
||||
"run_at": "document_end",
|
||||
"all_frames": true
|
||||
}
|
||||
],
|
||||
"default_locale": "en",
|
||||
"homepage_url": "https://github.com/geekprojects/nuTensor",
|
||||
"minimum_chrome_version": "45.0",
|
||||
"options_ui": {
|
||||
"page": "dashboard.html",
|
||||
"open_in_tab": true
|
||||
},
|
||||
"permissions": [
|
||||
"browsingData",
|
||||
"cookies",
|
||||
"privacy",
|
||||
"storage",
|
||||
"tabs",
|
||||
"unlimitedStorage",
|
||||
"webNavigation",
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"<all_urls>"
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,308 @@
|
||||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2019-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
// For non-background page
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Direct messaging connection ability
|
||||
|
||||
(( ) => {
|
||||
// >>>>>>>> start of private namespace
|
||||
|
||||
if (
|
||||
typeof vAPI !== 'object' ||
|
||||
vAPI.messaging instanceof Object === false ||
|
||||
vAPI.MessagingConnection instanceof Function
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const listeners = new Set();
|
||||
const connections = new Map();
|
||||
|
||||
vAPI.MessagingConnection = class {
|
||||
constructor(handler, details) {
|
||||
this.messaging = vAPI.messaging;
|
||||
this.handler = handler;
|
||||
this.id = details.id;
|
||||
this.to = details.to;
|
||||
this.toToken = details.toToken;
|
||||
this.from = details.from;
|
||||
this.fromToken = details.fromToken;
|
||||
this.checkTimer = undefined;
|
||||
// On Firefox it appears ports are not automatically disconnected
|
||||
// when navigating to another page.
|
||||
const ctor = vAPI.MessagingConnection;
|
||||
if ( ctor.pagehide !== undefined ) { return; }
|
||||
ctor.pagehide = ( ) => {
|
||||
for ( const connection of connections.values() ) {
|
||||
connection.disconnect();
|
||||
connection.handler(
|
||||
connection.toDetails('connectionBroken')
|
||||
);
|
||||
}
|
||||
};
|
||||
window.addEventListener('pagehide', ctor.pagehide);
|
||||
}
|
||||
toDetails(what, payload) {
|
||||
return {
|
||||
what: what,
|
||||
id: this.id,
|
||||
from: this.from,
|
||||
fromToken: this.fromToken,
|
||||
to: this.to,
|
||||
toToken: this.toToken,
|
||||
payload: payload
|
||||
};
|
||||
}
|
||||
disconnect() {
|
||||
if ( this.checkTimer !== undefined ) {
|
||||
clearTimeout(this.checkTimer);
|
||||
this.checkTimer = undefined;
|
||||
}
|
||||
connections.delete(this.id);
|
||||
const port = this.messaging.getPort();
|
||||
if ( port === null ) { return; }
|
||||
port.postMessage({
|
||||
channel: 'vapi',
|
||||
msg: this.toDetails('connectionBroken'),
|
||||
});
|
||||
}
|
||||
checkAsync() {
|
||||
if ( this.checkTimer !== undefined ) {
|
||||
clearTimeout(this.checkTimer);
|
||||
}
|
||||
this.checkTimer = vAPI.setTimeout(
|
||||
( ) => { this.check(); },
|
||||
499
|
||||
);
|
||||
}
|
||||
check() {
|
||||
this.checkTimer = undefined;
|
||||
if ( connections.has(this.id) === false ) { return; }
|
||||
const port = this.messaging.getPort();
|
||||
if ( port === null ) { return; }
|
||||
port.postMessage({
|
||||
channel: 'vapi',
|
||||
msg: this.toDetails('connectionCheck'),
|
||||
});
|
||||
this.checkAsync();
|
||||
}
|
||||
receive(details) {
|
||||
switch ( details.what ) {
|
||||
case 'connectionAccepted':
|
||||
this.toToken = details.toToken;
|
||||
this.handler(details);
|
||||
this.checkAsync();
|
||||
break;
|
||||
case 'connectionBroken':
|
||||
connections.delete(this.id);
|
||||
this.handler(details);
|
||||
break;
|
||||
case 'connectionMessage':
|
||||
this.handler(details);
|
||||
this.checkAsync();
|
||||
break;
|
||||
case 'connectionCheck':
|
||||
const port = this.messaging.getPort();
|
||||
if ( port === null ) { return; }
|
||||
if ( connections.has(this.id) ) {
|
||||
this.checkAsync();
|
||||
} else {
|
||||
details.what = 'connectionBroken';
|
||||
port.postMessage({ channel: 'vapi', msg: details });
|
||||
}
|
||||
break;
|
||||
case 'connectionRefused':
|
||||
connections.delete(this.id);
|
||||
this.handler(details);
|
||||
break;
|
||||
}
|
||||
}
|
||||
send(payload) {
|
||||
const port = this.messaging.getPort();
|
||||
if ( port === null ) { return; }
|
||||
port.postMessage({
|
||||
channel: 'vapi',
|
||||
msg: this.toDetails('connectionMessage', payload),
|
||||
});
|
||||
}
|
||||
|
||||
static addListener(listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
static async connectTo(from, to, handler) {
|
||||
const port = vAPI.messaging.getPort();
|
||||
if ( port === null ) { return; }
|
||||
const connection = new vAPI.MessagingConnection(handler, {
|
||||
id: `${from}-${to}-${vAPI.sessionId}`,
|
||||
to: to,
|
||||
from: from,
|
||||
fromToken: port.name
|
||||
});
|
||||
connections.set(connection.id, connection);
|
||||
port.postMessage({
|
||||
channel: 'vapi',
|
||||
msg: {
|
||||
what: 'connectionRequested',
|
||||
id: connection.id,
|
||||
from: from,
|
||||
fromToken: port.name,
|
||||
to: to,
|
||||
}
|
||||
});
|
||||
return connection.id;
|
||||
}
|
||||
static disconnectFrom(connectionId) {
|
||||
const connection = connections.get(connectionId);
|
||||
if ( connection === undefined ) { return; }
|
||||
connection.disconnect();
|
||||
}
|
||||
static sendTo(connectionId, payload) {
|
||||
const connection = connections.get(connectionId);
|
||||
if ( connection === undefined ) { return; }
|
||||
connection.send(payload);
|
||||
}
|
||||
static canDestroyPort() {
|
||||
return listeners.length === 0 && connections.size === 0;
|
||||
}
|
||||
static mustDestroyPort() {
|
||||
if ( connections.size === 0 ) { return; }
|
||||
for ( const connection of connections.values() ) {
|
||||
connection.receive({ what: 'connectionBroken' });
|
||||
}
|
||||
connections.clear();
|
||||
}
|
||||
static canProcessMessage(details) {
|
||||
if ( details.channel !== 'vapi' ) { return; }
|
||||
switch ( details.msg.what ) {
|
||||
case 'connectionAccepted':
|
||||
case 'connectionBroken':
|
||||
case 'connectionCheck':
|
||||
case 'connectionMessage':
|
||||
case 'connectionRefused': {
|
||||
const connection = connections.get(details.msg.id);
|
||||
if ( connection === undefined ) { break; }
|
||||
connection.receive(details.msg);
|
||||
return true;
|
||||
}
|
||||
case 'connectionRequested':
|
||||
if ( listeners.length === 0 ) { return; }
|
||||
const port = vAPI.messaging.getPort();
|
||||
if ( port === null ) { break; }
|
||||
let listener, result;
|
||||
for ( listener of listeners ) {
|
||||
result = listener(details.msg);
|
||||
if ( result !== undefined ) { break; }
|
||||
}
|
||||
if ( result === undefined ) { break; }
|
||||
if ( result === true ) {
|
||||
details.msg.what = 'connectionAccepted';
|
||||
details.msg.toToken = port.name;
|
||||
const connection = new vAPI.MessagingConnection(
|
||||
listener,
|
||||
details.msg
|
||||
);
|
||||
connections.set(connection.id, connection);
|
||||
} else {
|
||||
details.msg.what = 'connectionRefused';
|
||||
}
|
||||
port.postMessage(details);
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
vAPI.messaging.extensions.push(vAPI.MessagingConnection);
|
||||
|
||||
// <<<<<<<< end of private namespace
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Broadcast listening ability
|
||||
|
||||
(( ) => {
|
||||
// >>>>>>>> start of private namespace
|
||||
|
||||
if (
|
||||
typeof vAPI !== 'object' ||
|
||||
vAPI.messaging instanceof Object === false ||
|
||||
vAPI.broadcastListener instanceof Object
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const listeners = new Set();
|
||||
|
||||
vAPI.broadcastListener = {
|
||||
add: function(listener) {
|
||||
listeners.add(listener);
|
||||
vAPI.messaging.getPort();
|
||||
},
|
||||
remove: function(listener) {
|
||||
listeners.delete(listener);
|
||||
},
|
||||
canDestroyPort() {
|
||||
return listeners.size === 0;
|
||||
},
|
||||
mustDestroyPort() {
|
||||
listeners.clear();
|
||||
},
|
||||
canProcessMessage(details) {
|
||||
if ( details.broadcast === false ) { return; }
|
||||
for ( const listener of listeners ) {
|
||||
listener(details.msg);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
vAPI.messaging.extensions.push(vAPI.broadcastListener);
|
||||
|
||||
// <<<<<<<< end of private namespace
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
DO NOT:
|
||||
- Remove the following code
|
||||
- Add code beyond the following code
|
||||
Reason:
|
||||
- https://github.com/gorhill/uBlock/pull/3721
|
||||
- uBO never uses the return value from injected content scripts
|
||||
|
||||
**/
|
||||
|
||||
void 0;
|
||||
@ -0,0 +1,268 @@
|
||||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2014-2015 The uBlock Origin authors
|
||||
Copyright (C) 2014-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
// For non-background page
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/456
|
||||
// Skip if already injected.
|
||||
|
||||
// >>>>>>>> start of HUGE-IF-BLOCK
|
||||
if (
|
||||
typeof vAPI === 'object' &&
|
||||
vAPI.randomToken instanceof Function === false
|
||||
) {
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.randomToken = function() {
|
||||
const now = Date.now();
|
||||
return String.fromCharCode(now % 26 + 97) +
|
||||
Math.floor((1 + Math.random()) * now).toString(36);
|
||||
};
|
||||
|
||||
vAPI.sessionId = vAPI.randomToken();
|
||||
vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.shutdown = {
|
||||
jobs: [],
|
||||
add: function(job) {
|
||||
this.jobs.push(job);
|
||||
},
|
||||
exec: function() {
|
||||
// Shutdown asynchronously, to ensure shutdown jobs are called from
|
||||
// the top context.
|
||||
self.requestIdleCallback(( ) => {
|
||||
const jobs = this.jobs.slice();
|
||||
this.jobs.length = 0;
|
||||
while ( jobs.length !== 0 ) {
|
||||
(jobs.pop())();
|
||||
}
|
||||
});
|
||||
},
|
||||
remove: function(job) {
|
||||
let pos;
|
||||
while ( (pos = this.jobs.indexOf(job)) !== -1 ) {
|
||||
this.jobs.splice(pos, 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.messaging = {
|
||||
port: null,
|
||||
portTimer: null,
|
||||
portTimerDelay: 10000,
|
||||
extended: undefined,
|
||||
extensions: [],
|
||||
msgIdGenerator: 1,
|
||||
pending: new Map(),
|
||||
shuttingDown: false,
|
||||
|
||||
shutdown: function() {
|
||||
this.shuttingDown = true;
|
||||
this.destroyPort();
|
||||
},
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/403
|
||||
// Spurious disconnection can happen, so do not consider such events
|
||||
// as world-ending, i.e. stay around. Except for embedded frames.
|
||||
|
||||
disconnectListener: function() {
|
||||
this.port = null;
|
||||
if ( window !== window.top ) {
|
||||
vAPI.shutdown.exec();
|
||||
}
|
||||
},
|
||||
disconnectListenerBound: null,
|
||||
|
||||
messageListener: function(details) {
|
||||
if ( details instanceof Object === false ) { return; }
|
||||
|
||||
// Response to specific message previously sent
|
||||
if ( details.msgId !== undefined ) {
|
||||
const resolver = this.pending.get(details.msgId);
|
||||
if ( resolver !== undefined ) {
|
||||
this.pending.delete(details.msgId);
|
||||
resolver(details.msg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Unhandled messages
|
||||
this.extensions.every(ext => ext.canProcessMessage(details) !== true);
|
||||
},
|
||||
messageListenerBound: null,
|
||||
|
||||
canDestroyPort: function() {
|
||||
return this.pending.size === 0 &&
|
||||
(
|
||||
this.extensions.length === 0 ||
|
||||
this.extensions.every(e => e.canDestroyPort())
|
||||
);
|
||||
},
|
||||
|
||||
mustDestroyPort: function() {
|
||||
if ( this.extensions.length === 0 ) { return; }
|
||||
this.extensions.forEach(e => e.mustDestroyPort());
|
||||
this.extensions.length = 0;
|
||||
},
|
||||
|
||||
portPoller: function() {
|
||||
this.portTimer = null;
|
||||
if ( this.port !== null && this.canDestroyPort() ) {
|
||||
return this.destroyPort();
|
||||
}
|
||||
this.portTimer = vAPI.setTimeout(this.portPollerBound, this.portTimerDelay);
|
||||
this.portTimerDelay = Math.min(this.portTimerDelay * 2, 60 * 60 * 1000);
|
||||
},
|
||||
portPollerBound: null,
|
||||
|
||||
destroyPort: function() {
|
||||
if ( this.portTimer !== null ) {
|
||||
clearTimeout(this.portTimer);
|
||||
this.portTimer = null;
|
||||
}
|
||||
const port = this.port;
|
||||
if ( port !== null ) {
|
||||
port.disconnect();
|
||||
port.onMessage.removeListener(this.messageListenerBound);
|
||||
port.onDisconnect.removeListener(this.disconnectListenerBound);
|
||||
this.port = null;
|
||||
}
|
||||
this.mustDestroyPort();
|
||||
// service pending callbacks
|
||||
if ( this.pending.size !== 0 ) {
|
||||
const pending = this.pending;
|
||||
this.pending = new Map();
|
||||
for ( const resolver of pending.values() ) {
|
||||
resolver();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
createPort: function() {
|
||||
if ( this.shuttingDown ) { return null; }
|
||||
if ( this.messageListenerBound === null ) {
|
||||
this.messageListenerBound = this.messageListener.bind(this);
|
||||
this.disconnectListenerBound = this.disconnectListener.bind(this);
|
||||
this.portPollerBound = this.portPoller.bind(this);
|
||||
}
|
||||
try {
|
||||
this.port = browser.runtime.connect({name: vAPI.sessionId}) || null;
|
||||
} catch (ex) {
|
||||
this.port = null;
|
||||
}
|
||||
// Not having a valid port at this point means the main process is
|
||||
// not available: no point keeping the content scripts alive.
|
||||
if ( this.port === null ) {
|
||||
vAPI.shutdown.exec();
|
||||
return null;
|
||||
}
|
||||
this.port.onMessage.addListener(this.messageListenerBound);
|
||||
this.port.onDisconnect.addListener(this.disconnectListenerBound);
|
||||
this.portTimerDelay = 10000;
|
||||
if ( this.portTimer === null ) {
|
||||
this.portTimer = vAPI.setTimeout(
|
||||
this.portPollerBound,
|
||||
this.portTimerDelay
|
||||
);
|
||||
}
|
||||
return this.port;
|
||||
},
|
||||
|
||||
getPort: function() {
|
||||
return this.port !== null ? this.port : this.createPort();
|
||||
},
|
||||
|
||||
send: function(channel, msg) {
|
||||
// Too large a gap between the last request and the last response means
|
||||
// the main process is no longer reachable: memory leaks and bad
|
||||
// performance become a risk -- especially for long-lived, dynamic
|
||||
// pages. Guard against this.
|
||||
if ( this.pending.size > 50 ) {
|
||||
vAPI.shutdown.exec();
|
||||
}
|
||||
const port = this.getPort();
|
||||
if ( port === null ) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
const msgId = this.msgIdGenerator++;
|
||||
const promise = new Promise(resolve => {
|
||||
this.pending.set(msgId, resolve);
|
||||
});
|
||||
port.postMessage({ channel, msgId, msg });
|
||||
return promise;
|
||||
},
|
||||
|
||||
// Dynamically extend capabilities.
|
||||
extend: function() {
|
||||
if ( this.extended === undefined ) {
|
||||
this.extended = vAPI.messaging.send('vapi', {
|
||||
what: 'extendClient'
|
||||
}).then(( ) => {
|
||||
return self.vAPI instanceof Object &&
|
||||
this.extensions.length !== 0;
|
||||
}).catch(( ) => {
|
||||
});
|
||||
}
|
||||
return this.extended;
|
||||
},
|
||||
};
|
||||
|
||||
vAPI.shutdown.add(( ) => {
|
||||
vAPI.messaging.shutdown();
|
||||
window.vAPI = undefined;
|
||||
});
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
}
|
||||
// <<<<<<<< end of HUGE-IF-BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
DO NOT:
|
||||
- Remove the following code
|
||||
- Add code beyond the following code
|
||||
Reason:
|
||||
- https://github.com/gorhill/uBlock/pull/3721
|
||||
- uBO never uses the return value from injected content scripts
|
||||
|
||||
**/
|
||||
|
||||
void 0;
|
||||
@ -0,0 +1,279 @@
|
||||
/*******************************************************************************
|
||||
|
||||
uMatrix - a browser extension to black/white list requests.
|
||||
Copyright (C) 2014-present The uMatrix/uBlock Origin authors
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uMatrix
|
||||
*/
|
||||
|
||||
// For background page or non-background pages
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.T0 = Date.now();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.webextFlavor = {
|
||||
major: 0,
|
||||
soup: new Set()
|
||||
};
|
||||
|
||||
(( ) => {
|
||||
const ua = navigator.userAgent;
|
||||
const flavor = vAPI.webextFlavor;
|
||||
const soup = flavor.soup;
|
||||
const dispatch = function() {
|
||||
window.dispatchEvent(new CustomEvent('webextFlavor'));
|
||||
};
|
||||
|
||||
// This is always true.
|
||||
soup.add('ublock').add('webext');
|
||||
|
||||
// Whether this is a dev build.
|
||||
if ( /^\d+\.\d+\.\d+\D/.test(browser.runtime.getManifest().version) ) {
|
||||
soup.add('devbuild');
|
||||
}
|
||||
|
||||
if ( /\bMobile\b/.test(ua) ) {
|
||||
soup.add('mobile');
|
||||
}
|
||||
|
||||
// Asynchronous
|
||||
if (
|
||||
browser instanceof Object &&
|
||||
typeof browser.runtime.getBrowserInfo === 'function'
|
||||
) {
|
||||
browser.runtime.getBrowserInfo().then(info => {
|
||||
flavor.major = parseInt(info.version, 10) || 60;
|
||||
soup.add(info.vendor.toLowerCase())
|
||||
.add(info.name.toLowerCase());
|
||||
if ( soup.has('firefox') && flavor.major < 57 ) {
|
||||
soup.delete('html_filtering');
|
||||
}
|
||||
dispatch();
|
||||
});
|
||||
if ( browser.runtime.getURL('').startsWith('moz-extension://') ) {
|
||||
soup.add('mozilla')
|
||||
.add('firefox')
|
||||
.add('user_stylesheet')
|
||||
.add('html_filtering');
|
||||
flavor.major = 60;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Synchronous -- order of tests is important
|
||||
let match;
|
||||
if ( (match = /\bEdge\/(\d+)/.exec(ua)) !== null ) {
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('microsoft').add('edge');
|
||||
} else if ( (match = /\bOPR\/(\d+)/.exec(ua)) !== null ) {
|
||||
const reEx = /\bChrom(?:e|ium)\/([\d.]+)/;
|
||||
if ( reEx.test(ua) ) { match = reEx.exec(ua); }
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('opera').add('chromium');
|
||||
} else if ( (match = /\bChromium\/(\d+)/.exec(ua)) !== null ) {
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('chromium');
|
||||
} else if ( (match = /\bChrome\/(\d+)/.exec(ua)) !== null ) {
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('google').add('chromium');
|
||||
} else if ( (match = /\bSafari\/(\d+)/.exec(ua)) !== null ) {
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('apple').add('safari');
|
||||
}
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/3588
|
||||
if ( soup.has('chromium') && flavor.major >= 66 ) {
|
||||
soup.add('user_stylesheet');
|
||||
}
|
||||
|
||||
// Don't starve potential listeners
|
||||
vAPI.setTimeout(dispatch, 97);
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
{
|
||||
const punycode = self.punycode;
|
||||
const reCommonHostnameFromURL = /^https?:\/\/([0-9a-z_][0-9a-z._-]*[0-9a-z])\//;
|
||||
const reAuthorityFromURI = /^(?:[^:\/?#]+:)?(\/\/[^\/?#]+)/;
|
||||
const reHostFromNakedAuthority = /^[0-9a-z._-]+[0-9a-z]$/i;
|
||||
const reHostFromAuthority = /^(?:[^@]*@)?([^:]+)(?::\d*)?$/;
|
||||
const reIPv6FromAuthority = /^(?:[^@]*@)?(\[[0-9a-f:]+\])(?::\d*)?$/i;
|
||||
const reMustNormalizeHostname = /[^0-9a-z._-]/;
|
||||
|
||||
vAPI.hostnameFromURI = function(uri) {
|
||||
let matches = reCommonHostnameFromURL.exec(uri);
|
||||
if ( matches !== null ) { return matches[1]; }
|
||||
matches = reAuthorityFromURI.exec(uri);
|
||||
if ( matches === null ) { return ''; }
|
||||
const authority = matches[1].slice(2);
|
||||
if ( reHostFromNakedAuthority.test(authority) ) {
|
||||
return authority.toLowerCase();
|
||||
}
|
||||
matches = reHostFromAuthority.exec(authority);
|
||||
if ( matches === null ) {
|
||||
matches = reIPv6FromAuthority.exec(authority);
|
||||
if ( matches === null ) { return ''; }
|
||||
}
|
||||
let hostname = matches[1];
|
||||
while ( hostname.endsWith('.') ) {
|
||||
hostname = hostname.slice(0, -1);
|
||||
}
|
||||
if ( reMustNormalizeHostname.test(hostname) ) {
|
||||
hostname = punycode.toASCII(hostname.toLowerCase());
|
||||
}
|
||||
return hostname;
|
||||
};
|
||||
|
||||
const reHostnameFromNetworkURL =
|
||||
/^(?:http|ws|ftp)s?:\/\/([0-9a-z_][0-9a-z._-]*[0-9a-z])\//;
|
||||
|
||||
vAPI.hostnameFromNetworkURL = function(url) {
|
||||
const matches = reHostnameFromNetworkURL.exec(url);
|
||||
return matches !== null ? matches[1] : '';
|
||||
};
|
||||
|
||||
const psl = self.publicSuffixList;
|
||||
const reIPAddressNaive = /^\d+\.\d+\.\d+\.\d+$|^\[[\da-zA-Z:]+\]$/;
|
||||
|
||||
vAPI.domainFromHostname = function(hostname) {
|
||||
return reIPAddressNaive.test(hostname)
|
||||
? hostname
|
||||
: psl.getDomain(hostname);
|
||||
};
|
||||
|
||||
vAPI.domainFromURI = function(uri) {
|
||||
return uri !== ''
|
||||
? vAPI.domainFromHostname(vAPI.hostnameFromURI(uri))
|
||||
: '';
|
||||
};
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.download = function(details) {
|
||||
if ( !details.url ) { return; }
|
||||
const a = document.createElement('a');
|
||||
a.href = details.url;
|
||||
a.setAttribute('download', details.filename || '');
|
||||
a.setAttribute('type', 'text/plain');
|
||||
a.dispatchEvent(new MouseEvent('click'));
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.getURL = browser.runtime.getURL;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.i18n = browser.i18n.getMessage;
|
||||
|
||||
// http://www.w3.org/International/questions/qa-scripts#directions
|
||||
document.body.setAttribute(
|
||||
'dir',
|
||||
['ar', 'he', 'fa', 'ps', 'ur'].indexOf(vAPI.i18n('@@ui_locale')) !== -1
|
||||
? 'rtl'
|
||||
: 'ltr'
|
||||
);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/3057
|
||||
// - webNavigation.onCreatedNavigationTarget become broken on Firefox when we
|
||||
// try to make the popup panel close itself using the original
|
||||
// `window.open('', '_self').close()`.
|
||||
|
||||
vAPI.closePopup = function() {
|
||||
if ( vAPI.webextFlavor.soup.has('firefox') ) {
|
||||
window.close();
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: try to figure why this was used instead of a plain window.close().
|
||||
// https://github.com/gorhill/uBlock/commit/b301ac031e0c2e9a99cb6f8953319d44e22f33d2#diff-bc664f26b9c453e0d43a9379e8135c6a
|
||||
window.open('', '_self').close();
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// A localStorage-like object which should be accessible from the
|
||||
// background page or auxiliary pages.
|
||||
// This storage is optional, but it is nice to have, for a more polished user
|
||||
// experience.
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/2824
|
||||
// Use a dummy localStorage if for some reasons it's not available.
|
||||
|
||||
// https://github.com/gorhill/uMatrix/issues/840
|
||||
// Always use a wrapper to seamlessly handle exceptions
|
||||
|
||||
vAPI.localStorage = {
|
||||
clear: function() {
|
||||
try {
|
||||
window.localStorage.clear();
|
||||
} catch(ex) {
|
||||
}
|
||||
},
|
||||
getItem: function(key) {
|
||||
try {
|
||||
return window.localStorage.getItem(key);
|
||||
} catch(ex) {
|
||||
}
|
||||
return null;
|
||||
},
|
||||
removeItem: function(key) {
|
||||
try {
|
||||
window.localStorage.removeItem(key);
|
||||
} catch(ex) {
|
||||
}
|
||||
},
|
||||
setItem: function(key, value) {
|
||||
try {
|
||||
window.localStorage.setItem(key, value);
|
||||
} catch(ex) {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
DO NOT:
|
||||
- Remove the following code
|
||||
- Add code beyond the following code
|
||||
Reason:
|
||||
- https://github.com/gorhill/uBlock/pull/3721
|
||||
- uBO never uses the return value from injected content scripts
|
||||
|
||||
**/
|
||||
|
||||
void 0;
|
||||
@ -0,0 +1,178 @@
|
||||
/*******************************************************************************
|
||||
|
||||
uMatrix - a browser extension to block requests.
|
||||
Copyright (C) 2017-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uMatrix
|
||||
*/
|
||||
|
||||
// For background page
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
(( ) => {
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/407
|
||||
if ( vAPI.webextFlavor.soup.has('chromium') === false ) { return; }
|
||||
|
||||
const extToTypeMap = new Map([
|
||||
['eot','font'],['otf','font'],['svg','font'],['ttf','font'],['woff','font'],['woff2','font'],
|
||||
['mp3','media'],['mp4','media'],['webm','media'],
|
||||
['gif','image'],['ico','image'],['jpeg','image'],['jpg','image'],['png','image'],['webp','image']
|
||||
]);
|
||||
|
||||
const headerValue = (headers, name) => {
|
||||
let i = headers.length;
|
||||
while ( i-- ) {
|
||||
if ( headers[i].name.toLowerCase() === name ) {
|
||||
return headers[i].value.trim();
|
||||
}
|
||||
}
|
||||
return '';
|
||||
};
|
||||
|
||||
const parsedURL = new URL('https://www.example.org/');
|
||||
|
||||
// Extend base class to normalize as per platform.
|
||||
|
||||
vAPI.Net = class extends vAPI.Net {
|
||||
constructor() {
|
||||
super();
|
||||
this.suspendedTabIds = new Set();
|
||||
}
|
||||
normalizeDetails(details) {
|
||||
// Chromium 63+ supports the `initiator` property, which contains
|
||||
// the URL of the origin from which the network request was made.
|
||||
if (
|
||||
typeof details.initiator === 'string' &&
|
||||
details.initiator !== 'null'
|
||||
) {
|
||||
details.documentUrl = details.initiator;
|
||||
}
|
||||
|
||||
let type = details.type;
|
||||
|
||||
if ( type === 'imageset' ) {
|
||||
details.type = 'image';
|
||||
return;
|
||||
}
|
||||
|
||||
// The rest of the function code is to normalize type
|
||||
if ( type !== 'other' ) { return; }
|
||||
|
||||
// Try to map known "extension" part of URL to request type.
|
||||
parsedURL.href = details.url;
|
||||
const path = parsedURL.pathname,
|
||||
pos = path.indexOf('.', path.length - 6);
|
||||
if ( pos !== -1 && (type = extToTypeMap.get(path.slice(pos + 1))) ) {
|
||||
details.type = type;
|
||||
return;
|
||||
}
|
||||
|
||||
// Try to extract type from response headers if present.
|
||||
if ( details.responseHeaders ) {
|
||||
type = headerValue(details.responseHeaders, 'content-type');
|
||||
if ( type.startsWith('font/') ) {
|
||||
details.type = 'font';
|
||||
return;
|
||||
}
|
||||
if ( type.startsWith('image/') ) {
|
||||
details.type = 'image';
|
||||
return;
|
||||
}
|
||||
if ( type.startsWith('audio/') || type.startsWith('video/') ) {
|
||||
details.type = 'media';
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
// https://www.reddit.com/r/uBlockOrigin/comments/9vcrk3/
|
||||
// Some types can be mapped from 'other', thus include 'other' if and
|
||||
// only if the caller is interested in at least one of those types.
|
||||
denormalizeTypes(types) {
|
||||
if ( types.length === 0 ) {
|
||||
return Array.from(this.validTypes);
|
||||
}
|
||||
const out = new Set();
|
||||
for ( const type of types ) {
|
||||
if ( this.validTypes.has(type) ) {
|
||||
out.add(type);
|
||||
}
|
||||
}
|
||||
if ( out.has('other') === false ) {
|
||||
for ( const type of extToTypeMap.values() ) {
|
||||
if ( out.has(type) ) {
|
||||
out.add('other');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return Array.from(out);
|
||||
}
|
||||
suspendOneRequest(details) {
|
||||
this.suspendedTabIds.add(details.tabId);
|
||||
return { cancel: true };
|
||||
}
|
||||
unsuspendAllRequests() {
|
||||
for ( const tabId of this.suspendedTabIds ) {
|
||||
vAPI.tabs.reload(tabId);
|
||||
}
|
||||
this.suspendedTabIds.clear();
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/548
|
||||
// Use `X-DNS-Prefetch-Control` to workaround Chromium's disregard of the
|
||||
// setting "Predict network actions to improve page load performance".
|
||||
|
||||
vAPI.prefetching = (( ) => {
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/407
|
||||
if ( vAPI.webextFlavor.soup.has('chromium') === false ) { return; }
|
||||
|
||||
let listening = false;
|
||||
|
||||
const onHeadersReceived = function(details) {
|
||||
details.responseHeaders.push({
|
||||
name: 'X-DNS-Prefetch-Control',
|
||||
value: 'off'
|
||||
});
|
||||
return { responseHeaders: details.responseHeaders };
|
||||
};
|
||||
|
||||
return state => {
|
||||
const wr = chrome.webRequest;
|
||||
if ( state && listening ) {
|
||||
wr.onHeadersReceived.removeListener(onHeadersReceived);
|
||||
listening = false;
|
||||
} else if ( !state && !listening ) {
|
||||
wr.onHeadersReceived.addListener(
|
||||
onHeadersReceived,
|
||||
{
|
||||
urls: [ 'http://*/*', 'https://*/*' ],
|
||||
types: [ 'main_frame', 'sub_frame' ]
|
||||
},
|
||||
[ 'blocking', 'responseHeaders' ]
|
||||
);
|
||||
listening = true;
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
@ -0,0 +1,86 @@
|
||||
/*******************************************************************************
|
||||
|
||||
uMatrix - a browser extension to block requests.
|
||||
Copyright (C) 2017-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/* global HTMLDocument, XMLDocument */
|
||||
|
||||
// For background page, auxiliary pages, and content scripts.
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
if ( self.browser instanceof Object ) {
|
||||
self.chrome = self.browser;
|
||||
} else {
|
||||
self.browser = self.chrome;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1408996#c9
|
||||
var vAPI = self.vAPI; // jshint ignore:line
|
||||
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/464
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/1528
|
||||
// A XMLDocument can be a valid HTML document.
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/1124
|
||||
// Looks like `contentType` is on track to be standardized:
|
||||
// https://dom.spec.whatwg.org/#concept-document-content-type
|
||||
|
||||
// https://forums.lanik.us/viewtopic.php?f=64&t=31522
|
||||
// Skip text/plain documents.
|
||||
|
||||
if (
|
||||
(
|
||||
document instanceof HTMLDocument ||
|
||||
document instanceof XMLDocument &&
|
||||
document.createElement('div') instanceof HTMLDivElement
|
||||
) &&
|
||||
(
|
||||
/^image\/|^text\/plain/.test(document.contentType || '') === false
|
||||
) &&
|
||||
(
|
||||
self.vAPI instanceof Object === false || vAPI.nuTensor !== true
|
||||
)
|
||||
) {
|
||||
vAPI = self.vAPI = { nuTensor: true };
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
DO NOT:
|
||||
- Remove the following code
|
||||
- Add code beyond the following code
|
||||
Reason:
|
||||
- https://github.com/gorhill/uBlock/pull/3721
|
||||
- uMatrix never uses the return value from injected content scripts
|
||||
|
||||
**/
|
||||
|
||||
void 0;
|
||||