mirror of
https://github.com/confirmedcode/Lockdown-iOS.git
synced 2025-12-21 12:14:02 +01:00
KB-3510 Fix bugs, new UI elements for Firewall, VPN and Configuration
This commit is contained in:
6
Assets.xcassets/Firewall/Contents.json
Normal file
6
Assets.xcassets/Firewall/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
15
Assets.xcassets/Firewall/Subscription Plans/advanced.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/Firewall/Subscription Plans/advanced.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "advanced.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
157
Assets.xcassets/Firewall/Subscription Plans/advanced.imageset/advanced.pdf
vendored
Normal file
157
Assets.xcassets/Firewall/Subscription Plans/advanced.imageset/advanced.pdf
vendored
Normal file
@@ -0,0 +1,157 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
90.250000 0.000000 m
|
||||
101.895164 14.500000 l
|
||||
90.250000 29.000000 l
|
||||
0.000000 29.000000 l
|
||||
0.000000 14.500000 l
|
||||
0.000000 0.000000 l
|
||||
90.250000 0.000000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
90.250000 0.000000 m
|
||||
101.895164 14.500000 l
|
||||
90.250000 29.000000 l
|
||||
0.000000 29.000000 l
|
||||
0.000000 14.500000 l
|
||||
0.000000 0.000000 l
|
||||
90.250000 0.000000 l
|
||||
h
|
||||
W*
|
||||
n
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.000000 0.678431 0.905882 scn
|
||||
101.895164 14.500000 m
|
||||
102.674850 13.873825 l
|
||||
103.177734 14.500000 l
|
||||
102.674850 15.126175 l
|
||||
101.895164 14.500000 l
|
||||
h
|
||||
90.250000 0.000000 m
|
||||
90.250000 -1.000000 l
|
||||
90.729462 -1.000000 l
|
||||
91.029686 -0.626175 l
|
||||
90.250000 0.000000 l
|
||||
h
|
||||
90.250000 29.000000 m
|
||||
91.029686 29.626175 l
|
||||
90.729462 30.000000 l
|
||||
90.250000 30.000000 l
|
||||
90.250000 29.000000 l
|
||||
h
|
||||
0.000000 0.000000 m
|
||||
-1.000000 0.000000 l
|
||||
-1.000000 -1.000000 l
|
||||
0.000000 -1.000000 l
|
||||
0.000000 0.000000 l
|
||||
h
|
||||
0.000000 29.000000 m
|
||||
0.000000 30.000000 l
|
||||
-1.000000 30.000000 l
|
||||
-1.000000 29.000000 l
|
||||
0.000000 29.000000 l
|
||||
h
|
||||
101.115479 15.126175 m
|
||||
89.470314 0.626175 l
|
||||
91.029686 -0.626175 l
|
||||
102.674850 13.873825 l
|
||||
101.115479 15.126175 l
|
||||
h
|
||||
89.470314 28.373825 m
|
||||
101.115479 13.873825 l
|
||||
102.674850 15.126175 l
|
||||
91.029686 29.626175 l
|
||||
89.470314 28.373825 l
|
||||
h
|
||||
90.250000 1.000000 m
|
||||
0.000000 1.000000 l
|
||||
0.000000 -1.000000 l
|
||||
90.250000 -1.000000 l
|
||||
90.250000 1.000000 l
|
||||
h
|
||||
0.000000 28.000000 m
|
||||
90.250000 28.000000 l
|
||||
90.250000 30.000000 l
|
||||
0.000000 30.000000 l
|
||||
0.000000 28.000000 l
|
||||
h
|
||||
1.000000 0.000000 m
|
||||
1.000000 14.500000 l
|
||||
-1.000000 14.500000 l
|
||||
-1.000000 0.000000 l
|
||||
1.000000 0.000000 l
|
||||
h
|
||||
1.000000 14.500000 m
|
||||
1.000000 29.000000 l
|
||||
-1.000000 29.000000 l
|
||||
-1.000000 14.500000 l
|
||||
1.000000 14.500000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1746
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 101.895142 29.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000001836 00000 n
|
||||
0000001859 00000 n
|
||||
0000002033 00000 n
|
||||
0000002107 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2166
|
||||
%%EOF
|
||||
15
Assets.xcassets/Firewall/Subscription Plans/anonymous.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/Firewall/Subscription Plans/anonymous.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "anonymous.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
157
Assets.xcassets/Firewall/Subscription Plans/anonymous.imageset/anonymous.pdf
vendored
Normal file
157
Assets.xcassets/Firewall/Subscription Plans/anonymous.imageset/anonymous.pdf
vendored
Normal file
@@ -0,0 +1,157 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
90.250000 0.000000 m
|
||||
101.895164 14.500000 l
|
||||
90.250000 29.000000 l
|
||||
0.000000 29.000000 l
|
||||
0.000000 14.500000 l
|
||||
0.000000 0.000000 l
|
||||
90.250000 0.000000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
90.250000 0.000000 m
|
||||
101.895164 14.500000 l
|
||||
90.250000 29.000000 l
|
||||
0.000000 29.000000 l
|
||||
0.000000 14.500000 l
|
||||
0.000000 0.000000 l
|
||||
90.250000 0.000000 l
|
||||
h
|
||||
W*
|
||||
n
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.803922 0.811765 0.815686 scn
|
||||
101.895164 14.500000 m
|
||||
102.674850 13.873825 l
|
||||
103.177734 14.500000 l
|
||||
102.674850 15.126175 l
|
||||
101.895164 14.500000 l
|
||||
h
|
||||
90.250000 0.000000 m
|
||||
90.250000 -1.000000 l
|
||||
90.729462 -1.000000 l
|
||||
91.029686 -0.626175 l
|
||||
90.250000 0.000000 l
|
||||
h
|
||||
90.250000 29.000000 m
|
||||
91.029686 29.626175 l
|
||||
90.729462 30.000000 l
|
||||
90.250000 30.000000 l
|
||||
90.250000 29.000000 l
|
||||
h
|
||||
0.000000 0.000000 m
|
||||
-1.000000 0.000000 l
|
||||
-1.000000 -1.000000 l
|
||||
0.000000 -1.000000 l
|
||||
0.000000 0.000000 l
|
||||
h
|
||||
0.000000 29.000000 m
|
||||
0.000000 30.000000 l
|
||||
-1.000000 30.000000 l
|
||||
-1.000000 29.000000 l
|
||||
0.000000 29.000000 l
|
||||
h
|
||||
101.115479 15.126175 m
|
||||
89.470314 0.626175 l
|
||||
91.029686 -0.626175 l
|
||||
102.674850 13.873825 l
|
||||
101.115479 15.126175 l
|
||||
h
|
||||
89.470314 28.373825 m
|
||||
101.115479 13.873825 l
|
||||
102.674850 15.126175 l
|
||||
91.029686 29.626175 l
|
||||
89.470314 28.373825 l
|
||||
h
|
||||
90.250000 1.000000 m
|
||||
0.000000 1.000000 l
|
||||
0.000000 -1.000000 l
|
||||
90.250000 -1.000000 l
|
||||
90.250000 1.000000 l
|
||||
h
|
||||
0.000000 28.000000 m
|
||||
90.250000 28.000000 l
|
||||
90.250000 30.000000 l
|
||||
0.000000 30.000000 l
|
||||
0.000000 28.000000 l
|
||||
h
|
||||
1.000000 0.000000 m
|
||||
1.000000 14.500000 l
|
||||
-1.000000 14.500000 l
|
||||
-1.000000 0.000000 l
|
||||
1.000000 0.000000 l
|
||||
h
|
||||
1.000000 14.500000 m
|
||||
1.000000 29.000000 l
|
||||
-1.000000 29.000000 l
|
||||
-1.000000 14.500000 l
|
||||
1.000000 14.500000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1746
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 101.895142 29.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000001836 00000 n
|
||||
0000001859 00000 n
|
||||
0000002033 00000 n
|
||||
0000002107 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2166
|
||||
%%EOF
|
||||
15
Assets.xcassets/Firewall/Subscription Plans/basic.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/Firewall/Subscription Plans/basic.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "basic.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
145
Assets.xcassets/Firewall/Subscription Plans/basic.imageset/basic.pdf
vendored
Normal file
145
Assets.xcassets/Firewall/Subscription Plans/basic.imageset/basic.pdf
vendored
Normal file
@@ -0,0 +1,145 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
90.250000 0.000000 m
|
||||
101.895164 14.500000 l
|
||||
90.250000 29.000000 l
|
||||
14.500001 29.000000 l
|
||||
6.491872 29.000000 0.000000 22.508129 0.000000 14.500000 c
|
||||
0.000000 6.491871 6.491870 0.000000 14.499998 0.000000 c
|
||||
90.250000 0.000000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
90.250000 0.000000 m
|
||||
101.895164 14.500000 l
|
||||
90.250000 29.000000 l
|
||||
14.500001 29.000000 l
|
||||
6.491872 29.000000 0.000000 22.508129 0.000000 14.500000 c
|
||||
0.000000 6.491871 6.491870 0.000000 14.499998 0.000000 c
|
||||
90.250000 0.000000 l
|
||||
h
|
||||
W*
|
||||
n
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.000000 0.678431 0.905882 scn
|
||||
101.895164 14.500000 m
|
||||
102.674850 13.873825 l
|
||||
103.177734 14.500000 l
|
||||
102.674850 15.126175 l
|
||||
101.895164 14.500000 l
|
||||
h
|
||||
90.250000 0.000000 m
|
||||
90.250000 -1.000000 l
|
||||
90.729462 -1.000000 l
|
||||
91.029686 -0.626175 l
|
||||
90.250000 0.000000 l
|
||||
h
|
||||
90.250000 29.000000 m
|
||||
91.029686 29.626175 l
|
||||
90.729462 30.000000 l
|
||||
90.250000 30.000000 l
|
||||
90.250000 29.000000 l
|
||||
h
|
||||
101.115479 15.126175 m
|
||||
89.470314 0.626175 l
|
||||
91.029686 -0.626175 l
|
||||
102.674850 13.873825 l
|
||||
101.115479 15.126175 l
|
||||
h
|
||||
89.470314 28.373825 m
|
||||
101.115479 13.873825 l
|
||||
102.674850 15.126175 l
|
||||
91.029686 29.626175 l
|
||||
89.470314 28.373825 l
|
||||
h
|
||||
90.250000 1.000000 m
|
||||
14.499998 1.000000 l
|
||||
14.499998 -1.000000 l
|
||||
90.250000 -1.000000 l
|
||||
90.250000 1.000000 l
|
||||
h
|
||||
14.500001 28.000000 m
|
||||
90.250000 28.000000 l
|
||||
90.250000 30.000000 l
|
||||
14.500001 30.000000 l
|
||||
14.500001 28.000000 l
|
||||
h
|
||||
14.500001 30.000000 m
|
||||
5.939588 30.000000 -1.000000 23.060413 -1.000000 14.500000 c
|
||||
1.000000 14.500000 l
|
||||
1.000000 21.955845 7.044157 28.000000 14.500001 28.000000 c
|
||||
14.500001 30.000000 l
|
||||
h
|
||||
14.499998 1.000000 m
|
||||
7.044155 1.000000 1.000000 7.044155 1.000000 14.500000 c
|
||||
-1.000000 14.500000 l
|
||||
-1.000000 5.939587 5.939585 -1.000000 14.499998 -1.000000 c
|
||||
14.499998 1.000000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1844
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 101.895142 29.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000001934 00000 n
|
||||
0000001957 00000 n
|
||||
0000002131 00000 n
|
||||
0000002205 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2264
|
||||
%%EOF
|
||||
15
Assets.xcassets/Firewall/Subscription Plans/universal.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/Firewall/Subscription Plans/universal.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "universal.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
139
Assets.xcassets/Firewall/Subscription Plans/universal.imageset/universal.pdf
vendored
Normal file
139
Assets.xcassets/Firewall/Subscription Plans/universal.imageset/universal.pdf
vendored
Normal file
@@ -0,0 +1,139 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
0.000000 0.000000 m
|
||||
75.750000 0.000000 l
|
||||
83.758133 0.000000 90.250000 6.491871 90.250000 14.500000 c
|
||||
90.250000 22.508129 83.758133 29.000000 75.750008 29.000000 c
|
||||
0.000000 29.000000 l
|
||||
0.000000 14.500000 l
|
||||
0.000000 0.000000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
0.000000 0.000000 m
|
||||
75.750000 0.000000 l
|
||||
83.758133 0.000000 90.250000 6.491871 90.250000 14.500000 c
|
||||
90.250000 22.508129 83.758133 29.000000 75.750008 29.000000 c
|
||||
0.000000 29.000000 l
|
||||
0.000000 14.500000 l
|
||||
0.000000 0.000000 l
|
||||
h
|
||||
W*
|
||||
n
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.803922 0.811765 0.815686 scn
|
||||
0.000000 0.000000 m
|
||||
-1.000000 0.000000 l
|
||||
-1.000000 -1.000000 l
|
||||
0.000000 -1.000000 l
|
||||
0.000000 0.000000 l
|
||||
h
|
||||
0.000000 29.000000 m
|
||||
0.000000 30.000000 l
|
||||
-1.000000 30.000000 l
|
||||
-1.000000 29.000000 l
|
||||
0.000000 29.000000 l
|
||||
h
|
||||
75.750000 1.000000 m
|
||||
0.000000 1.000000 l
|
||||
0.000000 -1.000000 l
|
||||
75.750000 -1.000000 l
|
||||
75.750000 1.000000 l
|
||||
h
|
||||
0.000000 28.000000 m
|
||||
75.750008 28.000000 l
|
||||
75.750008 30.000000 l
|
||||
0.000000 30.000000 l
|
||||
0.000000 28.000000 l
|
||||
h
|
||||
1.000000 0.000000 m
|
||||
1.000000 14.500000 l
|
||||
-1.000000 14.500000 l
|
||||
-1.000000 0.000000 l
|
||||
1.000000 0.000000 l
|
||||
h
|
||||
1.000000 14.500000 m
|
||||
1.000000 29.000000 l
|
||||
-1.000000 29.000000 l
|
||||
-1.000000 14.500000 l
|
||||
1.000000 14.500000 l
|
||||
h
|
||||
89.250000 14.500000 m
|
||||
89.250000 7.044155 83.205849 1.000000 75.750000 1.000000 c
|
||||
75.750000 -1.000000 l
|
||||
84.310417 -1.000000 91.250000 5.939587 91.250000 14.500000 c
|
||||
89.250000 14.500000 l
|
||||
h
|
||||
91.250000 14.500000 m
|
||||
91.250000 23.060413 84.310417 30.000000 75.750008 30.000000 c
|
||||
75.750008 28.000000 l
|
||||
83.205849 28.000000 89.250000 21.955845 89.250000 14.500000 c
|
||||
91.250000 14.500000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1711
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 90.250000 29.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000001801 00000 n
|
||||
0000001824 00000 n
|
||||
0000001997 00000 n
|
||||
0000002071 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2130
|
||||
%%EOF
|
||||
15
Assets.xcassets/Firewall/icn_clickbait_trackers.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/Firewall/icn_clickbait_trackers.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_clickbait_trackers.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
118
Assets.xcassets/Firewall/icn_clickbait_trackers.imageset/icn_clickbait_trackers.pdf
vendored
Normal file
118
Assets.xcassets/Firewall/icn_clickbait_trackers.imageset/icn_clickbait_trackers.pdf
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.647059 0.282353 0.850980 scn
|
||||
9.700000 4.500000 m
|
||||
8.099999 4.583333 6.750000 5.200000 5.650000 6.349999 c
|
||||
4.550000 7.499999 4.000000 8.883333 4.000000 10.500000 c
|
||||
4.000000 12.166667 4.583333 13.583333 5.750000 14.750000 c
|
||||
6.916667 15.916667 8.333333 16.500000 10.000000 16.500000 c
|
||||
11.616667 16.500000 13.000001 15.950000 14.150001 14.850000 c
|
||||
15.300000 13.750000 15.916667 12.391666 16.000000 10.775000 c
|
||||
14.425000 11.275000 l
|
||||
14.241667 12.341666 13.741667 13.229166 12.925000 13.937500 c
|
||||
12.108334 14.645834 11.133333 15.000000 10.000000 15.000000 c
|
||||
8.750000 15.000000 7.687500 14.562500 6.812500 13.687500 c
|
||||
5.937500 12.812500 5.500000 11.750000 5.500000 10.500000 c
|
||||
5.500000 9.383333 5.854167 8.412499 6.562500 7.587500 c
|
||||
7.270833 6.762500 8.158334 6.258333 9.225000 6.075000 c
|
||||
9.700000 4.500000 l
|
||||
h
|
||||
10.900001 0.549999 m
|
||||
10.750001 0.533333 10.599999 0.520832 10.450000 0.512499 c
|
||||
10.300000 0.504166 10.150000 0.500000 10.000000 0.500000 c
|
||||
8.616667 0.500000 7.316667 0.762501 6.100000 1.287500 c
|
||||
4.883333 1.812500 3.825000 2.525000 2.925000 3.424999 c
|
||||
2.025000 4.324999 1.312500 5.383333 0.787500 6.599999 c
|
||||
0.262500 7.816666 0.000000 9.116667 0.000000 10.500000 c
|
||||
0.000000 11.883333 0.262500 13.183333 0.787500 14.400000 c
|
||||
1.312500 15.616667 2.025000 16.674999 2.925000 17.575001 c
|
||||
3.825000 18.475000 4.883333 19.187500 6.100000 19.712500 c
|
||||
7.316667 20.237499 8.616667 20.500000 10.000000 20.500000 c
|
||||
11.383333 20.500000 12.683334 20.237499 13.900001 19.712500 c
|
||||
15.116667 19.187500 16.175001 18.475000 17.075001 17.575001 c
|
||||
17.975000 16.674999 18.687500 15.616667 19.212500 14.400000 c
|
||||
19.737499 13.183333 20.000000 11.883333 20.000000 10.500000 c
|
||||
20.000000 10.350000 19.995834 10.200000 19.987501 10.050000 c
|
||||
19.979168 9.900001 19.966667 9.749999 19.950001 9.599999 c
|
||||
18.500000 10.050000 l
|
||||
18.500000 10.500000 l
|
||||
18.500000 12.866667 17.674999 14.875000 16.025000 16.525000 c
|
||||
14.375000 18.174999 12.366667 19.000000 10.000000 19.000000 c
|
||||
7.633333 19.000000 5.625000 18.174999 3.975000 16.525000 c
|
||||
2.325000 14.875000 1.500000 12.866667 1.500000 10.500000 c
|
||||
1.500000 8.133333 2.325000 6.125000 3.975000 4.475000 c
|
||||
5.625000 2.825001 7.633333 2.000000 10.000000 2.000000 c
|
||||
10.450000 2.000000 l
|
||||
10.900001 0.549999 l
|
||||
h
|
||||
18.525000 0.000000 m
|
||||
14.250000 4.275000 l
|
||||
13.000000 0.500000 l
|
||||
10.000000 10.500000 l
|
||||
20.000000 7.500000 l
|
||||
16.225000 6.250000 l
|
||||
20.500000 1.975000 l
|
||||
18.525000 0.000000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
2483
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 20.500000 20.500000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000002573 00000 n
|
||||
0000002596 00000 n
|
||||
0000002769 00000 n
|
||||
0000002843 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2902
|
||||
%%EOF
|
||||
15
Assets.xcassets/Firewall/icn_data_trackers.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/Firewall/icn_data_trackers.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_data_trackers.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
127
Assets.xcassets/Firewall/icn_data_trackers.imageset/icn_data_trackers.pdf
vendored
Normal file
127
Assets.xcassets/Firewall/icn_data_trackers.imageset/icn_data_trackers.pdf
vendored
Normal file
@@ -0,0 +1,127 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
1.000000 0.203922 0.164706 scn
|
||||
9.000000 0.000000 m
|
||||
6.483334 0.000000 4.354167 0.387499 2.612500 1.162500 c
|
||||
0.870833 1.937500 0.000000 2.883333 0.000000 4.000000 c
|
||||
0.000000 14.000000 l
|
||||
0.000000 15.100000 0.879167 16.041666 2.637500 16.825001 c
|
||||
4.395833 17.608334 6.516667 18.000000 9.000000 18.000000 c
|
||||
11.483334 18.000000 13.604167 17.608334 15.362500 16.825001 c
|
||||
17.120834 16.041666 18.000000 15.100000 18.000000 14.000000 c
|
||||
18.000000 4.000000 l
|
||||
18.000000 2.883333 17.129168 1.937500 15.387500 1.162500 c
|
||||
13.645834 0.387499 11.516666 0.000000 9.000000 0.000000 c
|
||||
h
|
||||
9.000000 12.200000 m
|
||||
10.433333 12.200000 11.904167 12.420834 13.412500 12.862499 c
|
||||
14.920834 13.304167 15.891666 13.799999 16.325001 14.350000 c
|
||||
15.875000 14.883333 14.895834 15.375000 13.387500 15.825000 c
|
||||
11.879167 16.275000 10.416667 16.500000 9.000000 16.500000 c
|
||||
7.533333 16.500000 6.058333 16.283333 4.575000 15.850000 c
|
||||
3.091667 15.416666 2.116667 14.916666 1.650000 14.350000 c
|
||||
2.116667 13.766666 3.083333 13.262500 4.550000 12.837500 c
|
||||
6.016667 12.412500 7.500000 12.200000 9.000000 12.200000 c
|
||||
h
|
||||
8.975000 6.849999 m
|
||||
9.675000 6.849999 10.375000 6.887500 11.075000 6.962500 c
|
||||
11.775001 7.037499 12.445833 7.150000 13.087501 7.300000 c
|
||||
13.729167 7.450000 14.341667 7.633333 14.925000 7.849999 c
|
||||
15.508333 8.066667 16.033333 8.308333 16.500000 8.575000 c
|
||||
16.500000 12.450000 l
|
||||
16.016666 12.183333 15.483334 11.941667 14.900001 11.725000 c
|
||||
14.316667 11.508333 13.700000 11.325000 13.050000 11.174999 c
|
||||
12.400001 11.025000 11.733334 10.908333 11.050000 10.825000 c
|
||||
10.366667 10.741667 9.675000 10.700000 8.975000 10.700000 c
|
||||
8.275001 10.700000 7.575000 10.741667 6.875000 10.825000 c
|
||||
6.175000 10.908333 5.504167 11.025000 4.862500 11.174999 c
|
||||
4.220833 11.325000 3.612500 11.508333 3.037500 11.725000 c
|
||||
2.462500 11.941667 1.950000 12.183333 1.500000 12.450000 c
|
||||
1.500000 8.575000 l
|
||||
1.950000 8.308333 2.458333 8.066667 3.025000 7.849999 c
|
||||
3.591667 7.633333 4.195833 7.450000 4.837500 7.300000 c
|
||||
5.479167 7.150000 6.150000 7.037499 6.850000 6.962500 c
|
||||
7.550000 6.887500 8.258333 6.849999 8.975000 6.849999 c
|
||||
h
|
||||
9.000000 1.500000 m
|
||||
9.800000 1.500000 10.625000 1.570833 11.475000 1.712500 c
|
||||
12.325000 1.854166 13.104167 2.041666 13.812500 2.275000 c
|
||||
14.520834 2.508333 15.120833 2.766666 15.612500 3.050000 c
|
||||
16.104166 3.333333 16.400000 3.625000 16.500000 3.925000 c
|
||||
16.500000 7.050000 l
|
||||
16.033333 6.783333 15.508333 6.545834 14.925000 6.337500 c
|
||||
14.341667 6.129167 13.729167 5.950000 13.087501 5.800000 c
|
||||
12.445833 5.650000 11.779167 5.537499 11.087501 5.462500 c
|
||||
10.395834 5.387500 9.691667 5.349999 8.975000 5.349999 c
|
||||
8.258333 5.349999 7.550000 5.387500 6.850000 5.462500 c
|
||||
6.150000 5.537499 5.479167 5.650000 4.837500 5.800000 c
|
||||
4.195833 5.950000 3.591667 6.129167 3.025000 6.337500 c
|
||||
2.458333 6.545834 1.950000 6.783333 1.500000 7.050000 c
|
||||
1.500000 3.900000 l
|
||||
1.583333 3.616667 1.866667 3.329166 2.350000 3.037499 c
|
||||
2.833333 2.745833 3.433333 2.487500 4.150000 2.262500 c
|
||||
4.866667 2.037499 5.650000 1.854166 6.500000 1.712500 c
|
||||
7.350000 1.570833 8.183333 1.500000 9.000000 1.500000 c
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
3151
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 18.000000 18.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000003241 00000 n
|
||||
0000003264 00000 n
|
||||
0000003437 00000 n
|
||||
0000003511 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
3570
|
||||
%%EOF
|
||||
15
Assets.xcassets/Firewall/icn_email_trackers.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/Firewall/icn_email_trackers.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_email_trackers.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
325
Assets.xcassets/Firewall/icn_email_trackers.imageset/icn_email_trackers.pdf
vendored
Normal file
325
Assets.xcassets/Firewall/icn_email_trackers.imageset/icn_email_trackers.pdf
vendored
Normal file
@@ -0,0 +1,325 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.305882 0.298039 0.815686 scn
|
||||
1.350000 -0.000006 m
|
||||
0.990000 -0.000006 0.675000 0.134995 0.405000 0.404995 c
|
||||
0.135000 0.674994 0.000000 0.989994 0.000000 1.349995 c
|
||||
0.000000 13.049994 l
|
||||
0.000000 13.409994 0.135000 13.724994 0.405000 13.994994 c
|
||||
0.675000 14.264994 0.990000 14.399994 1.350000 14.399994 c
|
||||
16.650002 14.399994 l
|
||||
17.010000 14.399994 17.325001 14.264994 17.595001 13.994994 c
|
||||
17.865000 13.724994 18.000000 13.409994 18.000000 13.049994 c
|
||||
18.000000 1.349995 l
|
||||
18.000000 0.989994 17.865000 0.674994 17.595001 0.404995 c
|
||||
17.325001 0.134995 17.010000 -0.000006 16.650002 -0.000006 c
|
||||
1.350000 -0.000006 l
|
||||
h
|
||||
9.000000 6.794994 m
|
||||
1.350000 11.812494 l
|
||||
1.350000 1.349995 l
|
||||
16.650002 1.349995 l
|
||||
16.650002 11.812494 l
|
||||
9.000000 6.794994 l
|
||||
h
|
||||
9.000000 8.144995 m
|
||||
16.560001 13.049994 l
|
||||
1.462500 13.049994 l
|
||||
9.000000 8.144995 l
|
||||
h
|
||||
1.350000 11.812494 m
|
||||
1.350000 13.049994 l
|
||||
1.350000 1.349995 l
|
||||
1.350000 11.812494 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
1.350000 -0.000006 m
|
||||
0.990000 -0.000006 0.675000 0.134995 0.405000 0.404995 c
|
||||
0.135000 0.674994 0.000000 0.989994 0.000000 1.349995 c
|
||||
0.000000 13.049994 l
|
||||
0.000000 13.409994 0.135000 13.724994 0.405000 13.994994 c
|
||||
0.675000 14.264994 0.990000 14.399994 1.350000 14.399994 c
|
||||
16.650002 14.399994 l
|
||||
17.010000 14.399994 17.325001 14.264994 17.595001 13.994994 c
|
||||
17.865000 13.724994 18.000000 13.409994 18.000000 13.049994 c
|
||||
18.000000 1.349995 l
|
||||
18.000000 0.989994 17.865000 0.674994 17.595001 0.404995 c
|
||||
17.325001 0.134995 17.010000 -0.000006 16.650002 -0.000006 c
|
||||
1.350000 -0.000006 l
|
||||
h
|
||||
9.000000 6.794994 m
|
||||
1.350000 11.812494 l
|
||||
1.350000 1.349995 l
|
||||
16.650002 1.349995 l
|
||||
16.650002 11.812494 l
|
||||
9.000000 6.794994 l
|
||||
h
|
||||
9.000000 8.144995 m
|
||||
16.560001 13.049994 l
|
||||
1.462500 13.049994 l
|
||||
9.000000 8.144995 l
|
||||
h
|
||||
1.350000 11.812494 m
|
||||
1.350000 13.049994 l
|
||||
1.350000 1.349995 l
|
||||
1.350000 11.812494 l
|
||||
h
|
||||
W*
|
||||
n
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.305882 0.298039 0.815686 scn
|
||||
0.450000 11.812494 m
|
||||
0.450000 1.349995 l
|
||||
2.250000 1.349995 l
|
||||
2.250000 11.812494 l
|
||||
0.450000 11.812494 l
|
||||
h
|
||||
9.000000 6.794994 m
|
||||
8.012806 5.289854 l
|
||||
9.000000 4.642370 l
|
||||
9.987195 5.289854 l
|
||||
9.000000 6.794994 l
|
||||
h
|
||||
1.350000 11.812494 m
|
||||
-0.450000 11.812494 l
|
||||
-0.450000 10.840459 l
|
||||
0.362805 10.307354 l
|
||||
1.350000 11.812494 l
|
||||
h
|
||||
1.350000 1.349995 m
|
||||
-0.450000 1.349995 l
|
||||
-0.450000 -0.450006 l
|
||||
1.350000 -0.450006 l
|
||||
1.350000 1.349995 l
|
||||
h
|
||||
16.650002 1.349995 m
|
||||
16.650002 -0.450006 l
|
||||
18.450001 -0.450006 l
|
||||
18.450001 1.349995 l
|
||||
16.650002 1.349995 l
|
||||
h
|
||||
16.650002 11.812494 m
|
||||
18.450001 11.812494 l
|
||||
18.450001 15.145705 l
|
||||
15.662806 13.317634 l
|
||||
16.650002 11.812494 l
|
||||
h
|
||||
9.000000 8.144995 m
|
||||
8.018230 6.636310 l
|
||||
8.998539 5.998378 l
|
||||
9.979715 6.634975 l
|
||||
9.000000 8.144995 l
|
||||
h
|
||||
16.560001 13.049994 m
|
||||
17.539715 11.539974 l
|
||||
22.641397 14.849994 l
|
||||
16.560001 14.849994 l
|
||||
16.560001 13.049994 l
|
||||
h
|
||||
1.462500 13.049994 m
|
||||
1.462500 14.849994 l
|
||||
-4.603716 14.849994 l
|
||||
0.480730 11.541310 l
|
||||
1.462500 13.049994 l
|
||||
h
|
||||
1.350000 1.799994 m
|
||||
1.401242 1.799994 1.475013 1.789044 1.552805 1.755706 c
|
||||
1.628516 1.723258 1.669326 1.686253 1.677792 1.677787 c
|
||||
-0.867792 -0.867798 l
|
||||
-0.282952 -1.452638 0.481404 -1.800005 1.350000 -1.800005 c
|
||||
1.350000 1.799994 l
|
||||
h
|
||||
1.677792 1.677787 m
|
||||
1.686258 1.669321 1.723263 1.628510 1.755711 1.552799 c
|
||||
1.789050 1.475008 1.800000 1.401237 1.800000 1.349995 c
|
||||
-1.800000 1.349995 l
|
||||
-1.800000 0.481399 -1.452632 -0.282958 -0.867792 -0.867798 c
|
||||
1.677792 1.677787 l
|
||||
h
|
||||
1.800000 1.349995 m
|
||||
1.800000 13.049994 l
|
||||
-1.800000 13.049994 l
|
||||
-1.800000 1.349995 l
|
||||
1.800000 1.349995 l
|
||||
h
|
||||
1.800000 13.049994 m
|
||||
1.800000 12.998752 1.789050 12.924980 1.755711 12.847189 c
|
||||
1.723263 12.771478 1.686258 12.730667 1.677792 12.722201 c
|
||||
-0.867792 15.267786 l
|
||||
-1.452632 14.682946 -1.800000 13.918591 -1.800000 13.049994 c
|
||||
1.800000 13.049994 l
|
||||
h
|
||||
1.677792 12.722201 m
|
||||
1.669326 12.713736 1.628516 12.676730 1.552805 12.644283 c
|
||||
1.475013 12.610944 1.401242 12.599994 1.350000 12.599994 c
|
||||
1.350000 16.199993 l
|
||||
0.481404 16.199993 -0.282952 15.852626 -0.867792 15.267786 c
|
||||
1.677792 12.722201 l
|
||||
h
|
||||
1.350000 12.599994 m
|
||||
16.650002 12.599994 l
|
||||
16.650002 16.199993 l
|
||||
1.350000 16.199993 l
|
||||
1.350000 12.599994 l
|
||||
h
|
||||
16.650002 12.599994 m
|
||||
16.598759 12.599994 16.524988 12.610944 16.447197 12.644283 c
|
||||
16.371485 12.676730 16.330675 12.713736 16.322208 12.722201 c
|
||||
18.867792 15.267786 l
|
||||
18.282953 15.852626 17.518597 16.199993 16.650002 16.199993 c
|
||||
16.650002 12.599994 l
|
||||
h
|
||||
16.322208 12.722201 m
|
||||
16.313744 12.730667 16.276737 12.771478 16.244289 12.847189 c
|
||||
16.210951 12.924980 16.200001 12.998752 16.200001 13.049994 c
|
||||
19.800001 13.049994 l
|
||||
19.800001 13.918591 19.452633 14.682946 18.867792 15.267786 c
|
||||
16.322208 12.722201 l
|
||||
h
|
||||
16.200001 13.049994 m
|
||||
16.200001 1.349995 l
|
||||
19.800001 1.349995 l
|
||||
19.800001 13.049994 l
|
||||
16.200001 13.049994 l
|
||||
h
|
||||
16.200001 1.349995 m
|
||||
16.200001 1.401237 16.210951 1.475008 16.244289 1.552799 c
|
||||
16.276737 1.628510 16.313744 1.669321 16.322208 1.677787 c
|
||||
18.867792 -0.867798 l
|
||||
19.452633 -0.282958 19.800001 0.481399 19.800001 1.349995 c
|
||||
16.200001 1.349995 l
|
||||
h
|
||||
16.322208 1.677787 m
|
||||
16.330675 1.686253 16.371485 1.723258 16.447197 1.755706 c
|
||||
16.524988 1.789044 16.598759 1.799994 16.650002 1.799994 c
|
||||
16.650002 -1.800005 l
|
||||
17.518597 -1.800005 18.282953 -1.452638 18.867792 -0.867798 c
|
||||
16.322208 1.677787 l
|
||||
h
|
||||
16.650002 1.799994 m
|
||||
1.350000 1.799994 l
|
||||
1.350000 -1.800005 l
|
||||
16.650002 -1.800005 l
|
||||
16.650002 1.799994 l
|
||||
h
|
||||
9.987195 8.300135 m
|
||||
2.337195 13.317634 l
|
||||
0.362805 10.307354 l
|
||||
8.012806 5.289854 l
|
||||
9.987195 8.300135 l
|
||||
h
|
||||
1.350000 -0.450006 m
|
||||
16.650002 -0.450006 l
|
||||
16.650002 3.149995 l
|
||||
1.350000 3.149995 l
|
||||
1.350000 -0.450006 l
|
||||
h
|
||||
18.450001 1.349995 m
|
||||
18.450001 11.812494 l
|
||||
14.850000 11.812494 l
|
||||
14.850000 1.349995 l
|
||||
18.450001 1.349995 l
|
||||
h
|
||||
15.662806 13.317634 m
|
||||
8.012806 8.300135 l
|
||||
9.987195 5.289854 l
|
||||
17.637196 10.307354 l
|
||||
15.662806 13.317634 l
|
||||
h
|
||||
9.979715 6.634975 m
|
||||
17.539715 11.539974 l
|
||||
15.580286 14.560014 l
|
||||
8.020286 9.655014 l
|
||||
9.979715 6.634975 l
|
||||
h
|
||||
16.560001 14.849994 m
|
||||
1.462500 14.849994 l
|
||||
1.462500 11.249994 l
|
||||
16.560001 11.249994 l
|
||||
16.560001 14.849994 l
|
||||
h
|
||||
0.480730 11.541310 m
|
||||
8.018230 6.636310 l
|
||||
9.981771 9.653678 l
|
||||
2.444270 14.558678 l
|
||||
0.480730 11.541310 l
|
||||
h
|
||||
3.150000 11.812494 m
|
||||
3.150000 13.049994 l
|
||||
-0.450000 13.049994 l
|
||||
-0.450000 11.812494 l
|
||||
3.150000 11.812494 l
|
||||
h
|
||||
-0.450000 13.049994 m
|
||||
-0.450000 1.349995 l
|
||||
3.150000 1.349995 l
|
||||
3.150000 13.049994 l
|
||||
-0.450000 13.049994 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
6312
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 18.000000 14.399994 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000006402 00000 n
|
||||
0000006425 00000 n
|
||||
0000006598 00000 n
|
||||
0000006672 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
6731
|
||||
%%EOF
|
||||
15
Assets.xcassets/Firewall/icn_facebook_trackers.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/Firewall/icn_facebook_trackers.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_facebook_trackers.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
468
Assets.xcassets/Firewall/icn_facebook_trackers.imageset/icn_facebook_trackers.pdf
vendored
Normal file
468
Assets.xcassets/Firewall/icn_facebook_trackers.imageset/icn_facebook_trackers.pdf
vendored
Normal file
@@ -0,0 +1,468 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
15.925000 0.000000 m
|
||||
4.825000 0.000000 l
|
||||
4.825000 12.799999 l
|
||||
11.775001 20.000000 l
|
||||
12.750000 19.225000 l
|
||||
12.850000 19.141666 12.925000 19.025000 12.975000 18.875000 c
|
||||
13.025001 18.725000 13.050000 18.541666 13.050000 18.325001 c
|
||||
13.050000 18.075001 l
|
||||
11.925000 12.799999 l
|
||||
19.400000 12.799999 l
|
||||
19.800001 12.799999 20.150000 12.650000 20.450001 12.350000 c
|
||||
20.750000 12.049999 20.900000 11.700000 20.900000 11.300000 c
|
||||
20.900000 9.254025 l
|
||||
20.900000 9.134675 20.912500 9.012500 20.937500 8.887500 c
|
||||
20.962500 8.762500 20.950001 8.641666 20.900000 8.525000 c
|
||||
17.750000 1.275000 l
|
||||
17.602034 0.920834 17.355410 0.619791 17.010126 0.371874 c
|
||||
16.664860 0.123959 16.303150 0.000000 15.925000 0.000000 c
|
||||
h
|
||||
6.325000 1.500000 m
|
||||
16.250000 1.500000 l
|
||||
19.400000 8.974999 l
|
||||
19.400000 11.300000 l
|
||||
10.075000 11.300000 l
|
||||
11.400001 17.525000 l
|
||||
6.325000 12.174999 l
|
||||
6.325000 1.500000 l
|
||||
h
|
||||
4.825000 12.799999 m
|
||||
4.825000 11.300000 l
|
||||
1.500000 11.300000 l
|
||||
1.500000 1.500000 l
|
||||
4.825000 1.500000 l
|
||||
4.825000 0.000000 l
|
||||
0.000000 0.000000 l
|
||||
0.000000 12.799999 l
|
||||
4.825000 12.799999 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
15.925000 0.000000 m
|
||||
4.825000 0.000000 l
|
||||
4.825000 12.799999 l
|
||||
11.775001 20.000000 l
|
||||
12.750000 19.225000 l
|
||||
12.850000 19.141666 12.925000 19.025000 12.975000 18.875000 c
|
||||
13.025001 18.725000 13.050000 18.541666 13.050000 18.325001 c
|
||||
13.050000 18.075001 l
|
||||
11.925000 12.799999 l
|
||||
19.400000 12.799999 l
|
||||
19.800001 12.799999 20.150000 12.650000 20.450001 12.350000 c
|
||||
20.750000 12.049999 20.900000 11.700000 20.900000 11.300000 c
|
||||
20.900000 9.254025 l
|
||||
20.900000 9.134675 20.912500 9.012500 20.937500 8.887500 c
|
||||
20.962500 8.762500 20.950001 8.641666 20.900000 8.525000 c
|
||||
17.750000 1.275000 l
|
||||
17.602034 0.920834 17.355410 0.619791 17.010126 0.371874 c
|
||||
16.664860 0.123959 16.303150 0.000000 15.925000 0.000000 c
|
||||
h
|
||||
6.325000 1.500000 m
|
||||
16.250000 1.500000 l
|
||||
19.400000 8.974999 l
|
||||
19.400000 11.300000 l
|
||||
10.075000 11.300000 l
|
||||
11.400001 17.525000 l
|
||||
6.325000 12.174999 l
|
||||
6.325000 1.500000 l
|
||||
h
|
||||
4.825000 12.799999 m
|
||||
4.825000 11.300000 l
|
||||
1.500000 11.300000 l
|
||||
1.500000 1.500000 l
|
||||
4.825000 1.500000 l
|
||||
4.825000 0.000000 l
|
||||
0.000000 0.000000 l
|
||||
0.000000 12.799999 l
|
||||
4.825000 12.799999 l
|
||||
h
|
||||
W*
|
||||
n
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.000000 0.435294 1.000000 scn
|
||||
11.775001 20.000000 m
|
||||
12.895040 21.409082 l
|
||||
11.615291 22.426319 l
|
||||
10.479922 21.250109 l
|
||||
11.775001 20.000000 l
|
||||
h
|
||||
12.750000 19.225000 m
|
||||
13.902332 20.607798 l
|
||||
13.886338 20.621126 l
|
||||
13.870040 20.634081 l
|
||||
12.750000 19.225000 l
|
||||
h
|
||||
13.050000 18.075001 m
|
||||
14.810410 17.699556 l
|
||||
14.850000 17.885191 l
|
||||
14.850000 18.075001 l
|
||||
13.050000 18.075001 l
|
||||
h
|
||||
11.925000 12.799999 m
|
||||
10.164591 13.175443 l
|
||||
9.700633 11.000000 l
|
||||
11.925000 11.000000 l
|
||||
11.925000 12.799999 l
|
||||
h
|
||||
20.900000 8.525000 m
|
||||
22.550928 7.807700 l
|
||||
22.554461 7.815945 l
|
||||
20.900000 8.525000 l
|
||||
h
|
||||
17.750000 1.275000 m
|
||||
16.099092 1.992290 l
|
||||
16.094027 1.980627 l
|
||||
16.089125 1.968895 l
|
||||
17.750000 1.275000 l
|
||||
h
|
||||
17.010126 0.371874 m
|
||||
15.960296 1.834015 l
|
||||
15.960262 1.833992 l
|
||||
17.010126 0.371874 l
|
||||
h
|
||||
6.325000 1.500000 m
|
||||
4.525000 1.500000 l
|
||||
4.525000 -0.300001 l
|
||||
6.325000 -0.300001 l
|
||||
6.325000 1.500000 l
|
||||
h
|
||||
16.250000 1.500000 m
|
||||
16.250000 -0.300001 l
|
||||
17.444767 -0.300001 l
|
||||
17.908735 0.801001 l
|
||||
16.250000 1.500000 l
|
||||
h
|
||||
19.400000 8.974999 m
|
||||
21.058735 8.276001 l
|
||||
21.200001 8.611226 l
|
||||
21.200001 8.974999 l
|
||||
19.400000 8.974999 l
|
||||
h
|
||||
19.400000 11.300000 m
|
||||
21.200001 11.300000 l
|
||||
21.200001 13.100000 l
|
||||
19.400000 13.100000 l
|
||||
19.400000 11.300000 l
|
||||
h
|
||||
10.075000 11.300000 m
|
||||
8.314440 11.674738 l
|
||||
7.851544 9.500000 l
|
||||
10.075000 9.500000 l
|
||||
10.075000 11.300000 l
|
||||
h
|
||||
11.400001 17.525000 m
|
||||
13.160561 17.150263 l
|
||||
14.490488 23.398417 l
|
||||
10.094088 18.763786 l
|
||||
11.400001 17.525000 l
|
||||
h
|
||||
6.325000 12.174999 m
|
||||
5.019087 13.413786 l
|
||||
4.525000 12.892925 l
|
||||
4.525000 12.174999 l
|
||||
6.325000 12.174999 l
|
||||
h
|
||||
4.825000 11.300000 m
|
||||
4.825000 9.500000 l
|
||||
6.625000 9.500000 l
|
||||
6.625000 11.300000 l
|
||||
4.825000 11.300000 l
|
||||
h
|
||||
1.500000 11.300000 m
|
||||
1.500000 13.100000 l
|
||||
-0.300000 13.100000 l
|
||||
-0.300000 11.300000 l
|
||||
1.500000 11.300000 l
|
||||
h
|
||||
1.500000 1.500000 m
|
||||
-0.300000 1.500000 l
|
||||
-0.300000 -0.300001 l
|
||||
1.500000 -0.300001 l
|
||||
1.500000 1.500000 l
|
||||
h
|
||||
4.825000 1.500000 m
|
||||
6.625000 1.500000 l
|
||||
6.625000 3.299999 l
|
||||
4.825000 3.299999 l
|
||||
4.825000 1.500000 l
|
||||
h
|
||||
0.000000 0.000000 m
|
||||
-1.800000 0.000000 l
|
||||
-1.800000 -1.800001 l
|
||||
0.000000 -1.800001 l
|
||||
0.000000 0.000000 l
|
||||
h
|
||||
0.000000 12.799999 m
|
||||
0.000000 14.600000 l
|
||||
-1.800000 14.600000 l
|
||||
-1.800000 12.799999 l
|
||||
0.000000 12.799999 l
|
||||
h
|
||||
15.925000 1.799999 m
|
||||
4.825000 1.799999 l
|
||||
4.825000 -1.800001 l
|
||||
15.925000 -1.800001 l
|
||||
15.925000 1.799999 l
|
||||
h
|
||||
6.625000 0.000000 m
|
||||
6.625000 12.799999 l
|
||||
3.025000 12.799999 l
|
||||
3.025000 0.000000 l
|
||||
6.625000 0.000000 l
|
||||
h
|
||||
6.120078 11.549891 m
|
||||
13.070078 18.749891 l
|
||||
10.479922 21.250109 l
|
||||
3.529922 14.050110 l
|
||||
6.120078 11.549891 l
|
||||
h
|
||||
10.654961 18.590918 m
|
||||
11.629961 17.815918 l
|
||||
13.870040 20.634081 l
|
||||
12.895040 21.409082 l
|
||||
10.654961 18.590918 l
|
||||
h
|
||||
11.597669 17.842201 m
|
||||
11.390246 18.015053 11.300418 18.206646 11.267370 18.305790 c
|
||||
14.682631 19.444210 l
|
||||
14.549582 19.843353 14.309754 20.268280 13.902332 20.607798 c
|
||||
11.597669 17.842201 l
|
||||
h
|
||||
11.267370 18.305790 m
|
||||
11.259361 18.329817 11.254526 18.348635 11.251715 18.361128 c
|
||||
11.248905 18.373619 11.247894 18.380779 11.247756 18.381796 c
|
||||
11.247615 18.382830 11.248207 18.378748 11.248818 18.368969 c
|
||||
11.249428 18.359213 11.250000 18.344694 11.250000 18.325001 c
|
||||
14.850000 18.325001 l
|
||||
14.850000 18.668697 14.811775 19.056776 14.682631 19.444210 c
|
||||
11.267370 18.305790 l
|
||||
h
|
||||
11.250000 18.325001 m
|
||||
11.250000 18.075001 l
|
||||
14.850000 18.075001 l
|
||||
14.850000 18.325001 l
|
||||
11.250000 18.325001 l
|
||||
h
|
||||
11.289591 18.450443 m
|
||||
10.164591 13.175443 l
|
||||
13.685410 12.424557 l
|
||||
14.810410 17.699556 l
|
||||
11.289591 18.450443 l
|
||||
h
|
||||
11.925000 11.000000 m
|
||||
19.400000 11.000000 l
|
||||
19.400000 14.600000 l
|
||||
11.925000 14.600000 l
|
||||
11.925000 11.000000 l
|
||||
h
|
||||
19.400000 11.000000 m
|
||||
19.368757 11.000000 19.313738 11.007199 19.253445 11.033039 c
|
||||
19.195234 11.057986 19.170673 11.083742 19.177208 11.077208 c
|
||||
21.722792 13.622792 l
|
||||
21.107952 14.237632 20.308596 14.600000 19.400000 14.600000 c
|
||||
19.400000 11.000000 l
|
||||
h
|
||||
19.177208 11.077208 m
|
||||
19.183743 11.070674 19.157988 11.095234 19.133039 11.153445 c
|
||||
19.107201 11.213737 19.100000 11.268758 19.100000 11.300000 c
|
||||
22.700001 11.300000 l
|
||||
22.700001 12.208596 22.337633 13.007952 21.722792 13.622792 c
|
||||
19.177208 11.077208 l
|
||||
h
|
||||
19.100000 11.300000 m
|
||||
19.100000 9.254025 l
|
||||
22.700001 9.254025 l
|
||||
22.700001 11.300000 l
|
||||
19.100000 11.300000 l
|
||||
h
|
||||
19.100000 9.254025 m
|
||||
19.100000 9.008410 19.125776 8.767887 19.172455 8.534491 c
|
||||
22.702545 9.240509 l
|
||||
22.699224 9.257113 22.700001 9.260941 22.700001 9.254025 c
|
||||
19.100000 9.254025 l
|
||||
h
|
||||
19.172455 8.534491 m
|
||||
19.126373 8.764904 19.151443 9.014497 19.245539 9.234055 c
|
||||
22.554461 7.815945 l
|
||||
22.748558 8.268836 22.798628 8.760096 22.702545 9.240509 c
|
||||
19.172455 8.534491 l
|
||||
h
|
||||
19.249094 9.242290 m
|
||||
16.099092 1.992290 l
|
||||
19.400908 0.557709 l
|
||||
22.550907 7.807709 l
|
||||
19.249094 9.242290 l
|
||||
h
|
||||
16.089125 1.968895 m
|
||||
16.083267 1.954876 16.064671 1.908958 15.960296 1.834015 c
|
||||
18.059958 -1.090265 l
|
||||
18.646147 -0.669376 19.120800 -0.113211 19.410877 0.581104 c
|
||||
16.089125 1.968895 l
|
||||
h
|
||||
15.960262 1.833992 m
|
||||
15.914719 1.801289 15.893434 1.794754 15.896347 1.795752 c
|
||||
15.897339 1.796091 15.901518 1.797396 15.908098 1.798498 c
|
||||
15.914706 1.799604 15.920696 1.799999 15.925000 1.799999 c
|
||||
15.925000 -1.800001 l
|
||||
16.725832 -1.800001 17.448351 -1.529427 18.059990 -1.090242 c
|
||||
15.960262 1.833992 l
|
||||
h
|
||||
6.325000 -0.300001 m
|
||||
16.250000 -0.300001 l
|
||||
16.250000 3.299999 l
|
||||
6.325000 3.299999 l
|
||||
6.325000 -0.300001 l
|
||||
h
|
||||
17.908735 0.801001 m
|
||||
21.058735 8.276001 l
|
||||
17.741266 9.673999 l
|
||||
14.591266 2.198997 l
|
||||
17.908735 0.801001 l
|
||||
h
|
||||
21.200001 8.974999 m
|
||||
21.200001 11.300000 l
|
||||
17.600000 11.300000 l
|
||||
17.600000 8.974999 l
|
||||
21.200001 8.974999 l
|
||||
h
|
||||
19.400000 13.100000 m
|
||||
10.075000 13.100000 l
|
||||
10.075000 9.500000 l
|
||||
19.400000 9.500000 l
|
||||
19.400000 13.100000 l
|
||||
h
|
||||
11.835560 10.925262 m
|
||||
13.160561 17.150263 l
|
||||
9.639441 17.899738 l
|
||||
8.314440 11.674738 l
|
||||
11.835560 10.925262 l
|
||||
h
|
||||
10.094088 18.763786 m
|
||||
5.019087 13.413786 l
|
||||
7.630913 10.936213 l
|
||||
12.705913 16.286213 l
|
||||
10.094088 18.763786 l
|
||||
h
|
||||
4.525000 12.174999 m
|
||||
4.525000 1.500000 l
|
||||
8.125000 1.500000 l
|
||||
8.125000 12.174999 l
|
||||
4.525000 12.174999 l
|
||||
h
|
||||
3.025000 12.799999 m
|
||||
3.025000 11.300000 l
|
||||
6.625000 11.300000 l
|
||||
6.625000 12.799999 l
|
||||
3.025000 12.799999 l
|
||||
h
|
||||
4.825000 13.100000 m
|
||||
1.500000 13.100000 l
|
||||
1.500000 9.500000 l
|
||||
4.825000 9.500000 l
|
||||
4.825000 13.100000 l
|
||||
h
|
||||
-0.300000 11.300000 m
|
||||
-0.300000 1.500000 l
|
||||
3.300000 1.500000 l
|
||||
3.300000 11.300000 l
|
||||
-0.300000 11.300000 l
|
||||
h
|
||||
1.500000 -0.300001 m
|
||||
4.825000 -0.300001 l
|
||||
4.825000 3.299999 l
|
||||
1.500000 3.299999 l
|
||||
1.500000 -0.300001 l
|
||||
h
|
||||
3.025000 1.500000 m
|
||||
3.025000 0.000000 l
|
||||
6.625000 0.000000 l
|
||||
6.625000 1.500000 l
|
||||
3.025000 1.500000 l
|
||||
h
|
||||
4.825000 1.799999 m
|
||||
0.000000 1.799999 l
|
||||
0.000000 -1.800001 l
|
||||
4.825000 -1.800001 l
|
||||
4.825000 1.799999 l
|
||||
h
|
||||
1.800000 0.000000 m
|
||||
1.800000 12.799999 l
|
||||
-1.800000 12.799999 l
|
||||
-1.800000 0.000000 l
|
||||
1.800000 0.000000 l
|
||||
h
|
||||
0.000000 11.000000 m
|
||||
4.825000 11.000000 l
|
||||
4.825000 14.600000 l
|
||||
0.000000 14.600000 l
|
||||
0.000000 11.000000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
8991
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 20.950012 20.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000009081 00000 n
|
||||
0000009104 00000 n
|
||||
0000009277 00000 n
|
||||
0000009351 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
9410
|
||||
%%EOF
|
||||
15
Assets.xcassets/Firewall/icn_game_marketing.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/Firewall/icn_game_marketing.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_game_marketing.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
137
Assets.xcassets/Firewall/icn_game_marketing.imageset/icn_game_marketing.pdf
vendored
Normal file
137
Assets.xcassets/Firewall/icn_game_marketing.imageset/icn_game_marketing.pdf
vendored
Normal file
@@ -0,0 +1,137 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
1.000000 0.333333 0.000000 scn
|
||||
2.050773 -0.000008 m
|
||||
1.369951 -0.000008 0.836939 0.228426 0.451737 0.685294 c
|
||||
0.066535 1.142161 -0.072317 1.773713 0.035181 2.579950 c
|
||||
1.325160 11.582926 l
|
||||
1.468491 12.532494 1.911921 13.347689 2.655451 14.028511 c
|
||||
3.398980 14.709332 4.245529 15.049744 5.195096 15.049744 c
|
||||
16.831779 15.049744 l
|
||||
17.781347 15.049744 18.627895 14.709332 19.371426 14.028511 c
|
||||
20.114954 13.347689 20.558384 12.532494 20.701715 11.582926 c
|
||||
21.964819 2.579950 l
|
||||
22.072317 1.773713 21.933466 1.142161 21.548264 0.685294 c
|
||||
21.163061 0.228426 20.630051 -0.000008 19.949228 -0.000008 c
|
||||
19.537151 -0.000008 19.187782 0.067179 18.901119 0.201551 c
|
||||
18.614458 0.335925 18.372587 0.501651 18.175507 0.698731 c
|
||||
15.380553 3.493685 l
|
||||
6.619448 3.493685 l
|
||||
3.824494 0.698731 l
|
||||
3.627414 0.501651 3.385543 0.335925 3.098881 0.201551 c
|
||||
2.812219 0.067179 2.462850 -0.000008 2.050773 -0.000008 c
|
||||
h
|
||||
2.534515 1.719964 m
|
||||
5.920710 5.106158 l
|
||||
16.079292 5.106158 l
|
||||
19.465487 1.719964 l
|
||||
19.555067 1.630383 19.716314 1.549759 19.949228 1.478093 c
|
||||
20.110476 1.478093 20.231411 1.558717 20.312035 1.719964 c
|
||||
20.392658 1.881211 20.415054 2.042459 20.379221 2.203706 c
|
||||
19.089243 11.314180 l
|
||||
18.999660 11.941254 18.735394 12.451870 18.296442 12.846030 c
|
||||
17.857491 13.240191 17.369270 13.437270 16.831779 13.437270 c
|
||||
5.168222 13.437270 l
|
||||
4.630731 13.437270 4.142509 13.240191 3.703558 12.846030 c
|
||||
3.264607 12.451870 3.000341 11.941254 2.910759 11.314180 c
|
||||
1.620780 2.203706 l
|
||||
1.584947 2.042459 1.607343 1.881211 1.687966 1.719964 c
|
||||
1.768590 1.558717 1.889526 1.478093 2.050773 1.478093 c
|
||||
2.176188 1.478093 2.337435 1.558717 2.534515 1.719964 c
|
||||
h
|
||||
16.912403 6.449886 m
|
||||
17.199064 6.449886 17.449894 6.557384 17.664890 6.772381 c
|
||||
17.879887 6.987377 17.987385 7.238206 17.987385 7.524868 c
|
||||
17.987385 7.811530 17.879887 8.062359 17.664890 8.277355 c
|
||||
17.449894 8.492352 17.199064 8.599850 16.912403 8.599850 c
|
||||
16.625740 8.599850 16.374912 8.492352 16.159916 8.277355 c
|
||||
15.944919 8.062359 15.837420 7.811530 15.837420 7.524868 c
|
||||
15.837420 7.238206 15.944919 6.987377 16.159916 6.772381 c
|
||||
16.374912 6.557384 16.625740 6.449886 16.912403 6.449886 c
|
||||
h
|
||||
14.628065 9.943579 m
|
||||
14.914727 9.943579 15.165557 10.051077 15.380553 10.266073 c
|
||||
15.595550 10.481070 15.703048 10.731898 15.703048 11.018560 c
|
||||
15.703048 11.305223 15.595550 11.556051 15.380553 11.771048 c
|
||||
15.165557 11.986044 14.914727 12.093542 14.628065 12.093542 c
|
||||
14.341404 12.093542 14.090574 11.986044 13.875578 11.771048 c
|
||||
13.660582 11.556051 13.553083 11.305223 13.553083 11.018560 c
|
||||
13.553083 10.731898 13.660582 10.481070 13.875578 10.266073 c
|
||||
14.090574 10.051077 14.341404 9.943579 14.628065 9.943579 c
|
||||
h
|
||||
6.162580 6.584259 m
|
||||
7.506308 6.584259 l
|
||||
7.506308 8.599850 l
|
||||
9.521899 8.599850 l
|
||||
9.521899 9.943579 l
|
||||
7.506308 9.943579 l
|
||||
7.506308 11.959169 l
|
||||
6.162580 11.959169 l
|
||||
6.162580 9.943579 l
|
||||
4.146989 9.943579 l
|
||||
4.146989 8.599850 l
|
||||
6.162580 8.599850 l
|
||||
6.162580 6.584259 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
2991
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 22.000000 15.049744 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000003081 00000 n
|
||||
0000003104 00000 n
|
||||
0000003277 00000 n
|
||||
0000003351 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
3410
|
||||
%%EOF
|
||||
15
Assets.xcassets/Firewall/icn_lock.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/Firewall/icn_lock.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_lock.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
111
Assets.xcassets/Firewall/icn_lock.imageset/icn_lock.pdf
vendored
Normal file
111
Assets.xcassets/Firewall/icn_lock.imageset/icn_lock.pdf
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.592157 0.611765 0.619608 scn
|
||||
1.975000 0.000000 m
|
||||
1.425000 0.000000 0.958333 0.195835 0.575000 0.587502 c
|
||||
0.191667 0.979168 -0.000000 1.441668 0.000000 1.975000 c
|
||||
0.000000 12.575001 l
|
||||
0.000000 13.125001 0.191667 13.595834 0.575000 13.987501 c
|
||||
0.958333 14.379168 1.425000 14.575001 1.975000 14.575001 c
|
||||
3.450000 14.575001 l
|
||||
3.450000 16.650000 l
|
||||
3.450000 18.033333 3.925000 19.204166 4.875000 20.162500 c
|
||||
5.825000 21.120834 6.983335 21.600000 8.350001 21.600000 c
|
||||
9.716668 21.600000 10.875002 21.120834 11.825002 20.162500 c
|
||||
12.775002 19.204166 13.250002 18.033333 13.250002 16.650000 c
|
||||
13.250002 14.575001 l
|
||||
14.725002 14.575001 l
|
||||
15.275002 14.575001 15.745836 14.379168 16.137503 13.987501 c
|
||||
16.529169 13.595834 16.725002 13.125001 16.725002 12.575001 c
|
||||
16.725002 1.975000 l
|
||||
16.725002 1.441668 16.529169 0.979168 16.137503 0.587502 c
|
||||
15.745836 0.195835 15.275002 0.000000 14.725002 0.000000 c
|
||||
1.975000 0.000000 l
|
||||
h
|
||||
1.975000 1.975000 m
|
||||
14.725002 1.975000 l
|
||||
14.725002 12.575001 l
|
||||
1.975000 12.575001 l
|
||||
1.975000 1.975000 l
|
||||
h
|
||||
8.350001 5.350000 m
|
||||
8.883335 5.350000 9.337501 5.533335 9.712501 5.900002 c
|
||||
10.087501 6.266668 10.275001 6.708334 10.275001 7.225000 c
|
||||
10.275001 7.725000 10.087501 8.179167 9.712501 8.587501 c
|
||||
9.337501 8.995834 8.883335 9.200001 8.350001 9.200001 c
|
||||
7.816668 9.200001 7.362501 8.995834 6.987501 8.587501 c
|
||||
6.612501 8.179167 6.425001 7.725000 6.425001 7.225000 c
|
||||
6.425001 6.708334 6.612501 6.266668 6.987501 5.900002 c
|
||||
7.362501 5.533335 7.816668 5.350000 8.350001 5.350000 c
|
||||
h
|
||||
5.425000 14.575001 m
|
||||
11.275001 14.575001 l
|
||||
11.275001 16.650000 l
|
||||
11.275001 17.483334 10.991667 18.187500 10.425000 18.762501 c
|
||||
9.858334 19.337500 9.166668 19.625000 8.350001 19.625000 c
|
||||
7.533335 19.625000 6.841668 19.337500 6.275001 18.762501 c
|
||||
5.708334 18.187500 5.425000 17.483334 5.425000 16.650000 c
|
||||
5.425000 14.575001 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1917
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 16.725006 21.600000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000002007 00000 n
|
||||
0000002030 00000 n
|
||||
0000002203 00000 n
|
||||
0000002277 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2336
|
||||
%%EOF
|
||||
15
Assets.xcassets/Firewall/icn_marketing_trackers.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/Firewall/icn_marketing_trackers.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_marketing.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
114
Assets.xcassets/Firewall/icn_marketing_trackers.imageset/icn_marketing.pdf
vendored
Normal file
114
Assets.xcassets/Firewall/icn_marketing_trackers.imageset/icn_marketing.pdf
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.313726 0.756863 0.976471 scn
|
||||
19.500000 8.700014 m
|
||||
19.500000 10.500013 l
|
||||
24.000000 10.500013 l
|
||||
24.000000 8.700014 l
|
||||
19.500000 8.700014 l
|
||||
h
|
||||
21.000000 0.000015 m
|
||||
17.369999 2.700014 l
|
||||
18.449999 4.140015 l
|
||||
22.080000 1.440014 l
|
||||
21.000000 0.000015 l
|
||||
h
|
||||
18.539999 15.090014 m
|
||||
17.459999 16.530012 l
|
||||
21.000000 19.200012 l
|
||||
22.080000 17.760012 l
|
||||
18.539999 15.090014 l
|
||||
h
|
||||
3.900000 1.200014 m
|
||||
3.900000 6.000014 l
|
||||
1.800000 6.000014 l
|
||||
1.305000 6.000014 0.881250 6.176264 0.528750 6.528764 c
|
||||
0.176250 6.881264 0.000000 7.305014 0.000000 7.800014 c
|
||||
0.000000 11.400013 l
|
||||
0.000000 11.895014 0.176250 12.318764 0.528750 12.671263 c
|
||||
0.881250 13.023764 1.305000 13.200013 1.800000 13.200013 c
|
||||
7.200000 13.200013 l
|
||||
13.200000 16.800013 l
|
||||
13.200000 2.400015 l
|
||||
7.200000 6.000014 l
|
||||
5.700000 6.000014 l
|
||||
5.700000 1.200014 l
|
||||
3.900000 1.200014 l
|
||||
h
|
||||
14.400000 5.580014 m
|
||||
14.400000 13.620013 l
|
||||
14.940000 13.140013 15.375000 12.555014 15.705000 11.865013 c
|
||||
16.035000 11.175014 16.199999 10.420013 16.199999 9.600014 c
|
||||
16.199999 8.780014 16.035000 8.025014 15.705000 7.335014 c
|
||||
15.375000 6.645014 14.940000 6.060014 14.400000 5.580014 c
|
||||
h
|
||||
1.800000 11.400013 m
|
||||
1.800000 7.800014 l
|
||||
7.680000 7.800014 l
|
||||
11.400000 5.580014 l
|
||||
11.400000 13.620013 l
|
||||
7.680000 11.400013 l
|
||||
1.800000 11.400013 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1344
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 24.000000 19.200012 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000001434 00000 n
|
||||
0000001457 00000 n
|
||||
0000001630 00000 n
|
||||
0000001704 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
1763
|
||||
%%EOF
|
||||
6
Assets.xcassets/VPN/Contents.json
Normal file
6
Assets.xcassets/VPN/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
15
Assets.xcassets/VPN/icn_activity.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/VPN/icn_activity.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_activity.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
110
Assets.xcassets/VPN/icn_activity.imageset/icn_activity.pdf
vendored
Normal file
110
Assets.xcassets/VPN/icn_activity.imageset/icn_activity.pdf
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
1.000000 0.156863 0.294118 scn
|
||||
2.450000 10.449999 m
|
||||
0.000000 12.250000 l
|
||||
9.400001 27.250000 l
|
||||
15.378551 20.250000 l
|
||||
23.350000 33.150002 l
|
||||
28.800001 25.049999 l
|
||||
28.266666 24.983334 27.750000 24.875000 27.250000 24.725000 c
|
||||
26.750000 24.574999 26.250000 24.400000 25.750000 24.199999 c
|
||||
23.500000 27.650000 l
|
||||
15.872149 15.199999 l
|
||||
9.800000 22.250000 l
|
||||
2.450000 10.449999 l
|
||||
h
|
||||
41.850002 0.000000 m
|
||||
35.150002 6.700001 l
|
||||
34.450001 6.200001 33.691666 5.816666 32.875000 5.549999 c
|
||||
32.058334 5.283333 31.216667 5.149998 30.350000 5.149998 c
|
||||
27.988901 5.149998 25.981951 5.976967 24.329151 7.630898 c
|
||||
22.676384 9.284798 21.850000 11.293133 21.850000 13.655899 c
|
||||
21.850000 16.018631 22.676966 18.025000 24.330900 19.674999 c
|
||||
25.984800 21.324999 27.993134 22.150000 30.355900 22.150000 c
|
||||
32.718632 22.150000 34.725002 21.323616 36.375000 19.670849 c
|
||||
38.025002 18.018049 38.850002 16.011099 38.850002 13.650000 c
|
||||
38.850002 12.783333 38.708332 11.941666 38.424999 11.125000 c
|
||||
38.141666 10.308332 37.766666 9.525867 37.299999 8.777599 c
|
||||
44.000000 2.149998 l
|
||||
41.850002 0.000000 l
|
||||
h
|
||||
30.342951 8.149998 m
|
||||
31.880983 8.149998 33.183334 8.680984 34.250000 9.742950 c
|
||||
35.316666 10.804916 35.850002 12.104918 35.850002 13.642950 c
|
||||
35.850002 15.180983 35.319016 16.483334 34.257050 17.549999 c
|
||||
33.195084 18.616667 31.895082 19.150000 30.357050 19.150000 c
|
||||
28.819017 19.150000 27.516666 18.619017 26.450001 17.557049 c
|
||||
25.383333 16.495083 24.850000 15.195082 24.850000 13.657049 c
|
||||
24.850000 12.119017 25.380983 10.816666 26.442951 9.750000 c
|
||||
27.504917 8.683334 28.804918 8.149998 30.342951 8.149998 c
|
||||
h
|
||||
34.049999 24.549999 m
|
||||
33.549999 24.750000 33.033333 24.883333 32.500000 24.949999 c
|
||||
31.966667 25.016666 31.416668 25.083334 30.850000 25.150000 c
|
||||
41.549999 42.000000 l
|
||||
44.000000 40.200001 l
|
||||
34.049999 24.549999 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1886
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 44.000000 42.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000001976 00000 n
|
||||
0000001999 00000 n
|
||||
0000002172 00000 n
|
||||
0000002246 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2305
|
||||
%%EOF
|
||||
15
Assets.xcassets/VPN/icn_configure_blocking.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/VPN/icn_configure_blocking.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_configure_blocking.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
127
Assets.xcassets/VPN/icn_configure_blocking.imageset/icn_configure_blocking.pdf
vendored
Normal file
127
Assets.xcassets/VPN/icn_configure_blocking.imageset/icn_configure_blocking.pdf
vendored
Normal file
@@ -0,0 +1,127 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.305882 0.298039 0.815686 scn
|
||||
3.000000 0.000000 m
|
||||
2.175000 0.000000 1.468750 0.293751 0.881250 0.881248 c
|
||||
0.293750 1.468750 0.000000 2.174999 0.000000 3.000000 c
|
||||
0.000000 41.000000 l
|
||||
0.000000 41.825001 0.293750 42.531250 0.881250 43.118752 c
|
||||
1.468750 43.706249 2.175000 44.000000 3.000000 44.000000 c
|
||||
25.000000 44.000000 l
|
||||
25.825001 44.000000 26.531250 43.706249 27.118750 43.118752 c
|
||||
27.706251 42.531250 28.000000 41.825001 28.000000 41.000000 c
|
||||
28.000000 33.700001 l
|
||||
25.000000 33.700001 l
|
||||
25.000000 36.500000 l
|
||||
3.000000 36.500000 l
|
||||
3.000000 7.500000 l
|
||||
25.000000 7.500000 l
|
||||
25.000000 10.299999 l
|
||||
28.000000 10.299999 l
|
||||
28.000000 3.000000 l
|
||||
28.000000 2.174999 27.706251 1.468750 27.118750 0.881248 c
|
||||
26.531250 0.293751 25.825001 0.000000 25.000000 0.000000 c
|
||||
3.000000 0.000000 l
|
||||
h
|
||||
3.000000 3.000000 m
|
||||
25.000000 3.000000 l
|
||||
25.000000 4.500000 l
|
||||
3.000000 4.500000 l
|
||||
3.000000 3.000000 l
|
||||
h
|
||||
26.000000 14.000000 m
|
||||
23.800001 14.000000 21.916668 14.783333 20.350000 16.350000 c
|
||||
18.783333 17.916666 18.000000 19.799999 18.000000 22.000000 c
|
||||
18.000000 24.199999 18.783333 26.083334 20.350000 27.650000 c
|
||||
21.916668 29.216667 23.800001 30.000000 26.000000 30.000000 c
|
||||
28.200001 30.000000 30.083334 29.216667 31.650000 27.650000 c
|
||||
33.216667 26.083334 34.000000 24.199999 34.000000 22.000000 c
|
||||
34.000000 19.799999 33.216667 17.916666 31.650000 16.350000 c
|
||||
30.083334 14.783333 28.200001 14.000000 26.000000 14.000000 c
|
||||
h
|
||||
26.000000 16.500000 m
|
||||
26.525700 16.500000 27.040466 16.566666 27.544300 16.699999 c
|
||||
28.048100 16.833332 28.500000 17.049999 28.900000 17.350000 c
|
||||
21.350000 24.900000 l
|
||||
21.083334 24.466667 20.875000 24.009050 20.725000 23.527151 c
|
||||
20.575001 23.045252 20.500000 22.552866 20.500000 22.049999 c
|
||||
20.500000 20.516666 21.031668 19.208332 22.095001 18.125000 c
|
||||
23.158335 17.041666 24.460001 16.500000 26.000000 16.500000 c
|
||||
h
|
||||
30.700001 19.100000 m
|
||||
30.966667 19.533333 31.166668 19.996433 31.300001 20.489300 c
|
||||
31.433334 20.982134 31.500000 21.485699 31.500000 22.000000 c
|
||||
31.500000 23.539999 30.968332 24.841667 29.904999 25.905001 c
|
||||
28.841665 26.968334 27.540001 27.500000 26.000000 27.500000 c
|
||||
25.474300 27.500000 24.959534 27.433332 24.455702 27.299999 c
|
||||
23.951900 27.166666 23.500000 26.966667 23.100000 26.699999 c
|
||||
30.700001 19.100000 l
|
||||
h
|
||||
3.000000 39.500000 m
|
||||
25.000000 39.500000 l
|
||||
25.000000 41.000000 l
|
||||
3.000000 41.000000 l
|
||||
3.000000 39.500000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
2444
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 34.000000 44.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000002534 00000 n
|
||||
0000002557 00000 n
|
||||
0000002730 00000 n
|
||||
0000002804 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2863
|
||||
%%EOF
|
||||
15
Assets.xcassets/VPN/icn_globe.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/VPN/icn_globe.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_globe.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
118
Assets.xcassets/VPN/icn_globe.imageset/icn_globe.pdf
vendored
Normal file
118
Assets.xcassets/VPN/icn_globe.imageset/icn_globe.pdf
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.180392 0.752941 0.309804 scn
|
||||
20.000000 0.000000 m
|
||||
17.233334 0.000000 14.633333 0.524998 12.200000 1.575001 c
|
||||
9.766666 2.625000 7.650000 4.049999 5.850000 5.849998 c
|
||||
4.050000 7.649998 2.625000 9.766666 1.575000 12.199999 c
|
||||
0.525000 14.633333 0.000000 17.233334 0.000000 20.000000 c
|
||||
0.000000 22.766666 0.525000 25.366667 1.575000 27.799999 c
|
||||
2.625000 30.233334 4.050000 32.349998 5.850000 34.150002 c
|
||||
7.650000 35.950001 9.766666 37.375000 12.200000 38.424999 c
|
||||
14.633333 39.474998 17.233334 40.000000 20.000000 40.000000 c
|
||||
22.766666 40.000000 25.366667 39.474998 27.800001 38.424999 c
|
||||
30.233334 37.375000 32.350002 35.950001 34.150002 34.150002 c
|
||||
35.950001 32.349998 37.375000 30.233334 38.424999 27.799999 c
|
||||
39.475002 25.366667 40.000000 22.766666 40.000000 20.000000 c
|
||||
40.000000 17.233334 39.475002 14.633333 38.424999 12.199999 c
|
||||
37.375000 9.766666 35.950001 7.649998 34.150002 5.849998 c
|
||||
32.350002 4.049999 30.233334 2.625000 27.800001 1.575001 c
|
||||
25.366667 0.524998 22.766666 0.000000 20.000000 0.000000 c
|
||||
h
|
||||
17.850000 3.049999 m
|
||||
17.850000 7.149998 l
|
||||
16.683334 7.149998 15.700000 7.583332 14.900001 8.449999 c
|
||||
14.100000 9.316666 13.700000 10.333332 13.700000 11.500000 c
|
||||
13.700000 13.699999 l
|
||||
3.450000 23.949999 l
|
||||
3.283333 23.283333 3.166667 22.625000 3.100000 21.975000 c
|
||||
3.033333 21.324999 3.000000 20.666666 3.000000 20.000000 c
|
||||
3.000000 15.666666 4.408333 11.883333 7.225000 8.650000 c
|
||||
10.041667 5.416668 13.583333 3.549999 17.850000 3.049999 c
|
||||
h
|
||||
32.549999 8.449999 m
|
||||
33.283333 9.250000 33.924999 10.100000 34.475002 11.000000 c
|
||||
35.025002 11.900000 35.491669 12.841667 35.875000 13.824999 c
|
||||
36.258335 14.808332 36.541668 15.816666 36.725002 16.850000 c
|
||||
36.908333 17.883333 37.000000 18.933332 37.000000 20.000000 c
|
||||
37.000000 23.533333 36.033333 26.741667 34.100002 29.625000 c
|
||||
32.166668 32.508331 29.583334 34.616669 26.350000 35.950001 c
|
||||
26.350000 35.049999 l
|
||||
26.350000 33.883331 25.950001 32.866669 25.150000 32.000000 c
|
||||
24.350000 31.133333 23.366667 30.700001 22.200001 30.700001 c
|
||||
17.850000 30.700001 l
|
||||
17.850000 26.349998 l
|
||||
17.850000 25.783333 17.625000 25.316666 17.175001 24.950001 c
|
||||
16.725000 24.583332 16.216667 24.400000 15.650001 24.400000 c
|
||||
11.500000 24.400000 l
|
||||
11.500000 20.000000 l
|
||||
24.400000 20.000000 l
|
||||
24.966667 20.000000 25.433334 19.783333 25.800001 19.350000 c
|
||||
26.166668 18.916666 26.350000 18.416666 26.350000 17.850000 c
|
||||
26.350000 11.500000 l
|
||||
28.500000 11.500000 l
|
||||
29.466667 11.500000 30.316668 11.216667 31.050001 10.650000 c
|
||||
31.783335 10.083332 32.283333 9.350000 32.549999 8.449999 c
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
2612
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 40.000000 40.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000002702 00000 n
|
||||
0000002725 00000 n
|
||||
0000002898 00000 n
|
||||
0000002972 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
3031
|
||||
%%EOF
|
||||
15
Assets.xcassets/VPN/icn_import.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/VPN/icn_import.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_import.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
90
Assets.xcassets/VPN/icn_import.imageset/icn_import.pdf
vendored
Normal file
90
Assets.xcassets/VPN/icn_import.imageset/icn_import.pdf
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
1.000000 0.670588 0.000000 scn
|
||||
3.000000 0.000000 m
|
||||
2.200000 0.000000 1.500000 0.299999 0.900000 0.900000 c
|
||||
0.300000 1.500000 0.000000 2.199999 0.000000 3.000000 c
|
||||
0.000000 10.150000 l
|
||||
3.000000 10.150000 l
|
||||
3.000000 3.000000 l
|
||||
29.000000 3.000000 l
|
||||
29.000000 10.150000 l
|
||||
32.000000 10.150000 l
|
||||
32.000000 3.000000 l
|
||||
32.000000 2.199999 31.700001 1.500000 31.100000 0.900000 c
|
||||
30.500000 0.299999 29.800001 0.000000 29.000000 0.000000 c
|
||||
3.000000 0.000000 l
|
||||
h
|
||||
14.500000 7.650000 m
|
||||
14.500000 26.200001 l
|
||||
8.500000 20.200001 l
|
||||
6.350000 22.349998 l
|
||||
16.000000 32.000000 l
|
||||
25.650000 22.349998 l
|
||||
23.500000 20.200001 l
|
||||
17.500000 26.200001 l
|
||||
17.500000 7.650000 l
|
||||
14.500000 7.650000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
762
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 32.000000 32.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000000852 00000 n
|
||||
0000000874 00000 n
|
||||
0000001047 00000 n
|
||||
0000001121 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
1180
|
||||
%%EOF
|
||||
15
Assets.xcassets/VPN/icn_personalized_blocking.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/VPN/icn_personalized_blocking.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_personalized_blocking.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
113
Assets.xcassets/VPN/icn_personalized_blocking.imageset/icn_personalized_blocking.pdf
vendored
Normal file
113
Assets.xcassets/VPN/icn_personalized_blocking.imageset/icn_personalized_blocking.pdf
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.313726 0.756863 0.976471 scn
|
||||
15.350000 0.000000 m
|
||||
15.350000 11.250000 l
|
||||
18.350000 11.250000 l
|
||||
18.350000 7.100000 l
|
||||
36.000000 7.100000 l
|
||||
36.000000 4.100000 l
|
||||
18.350000 4.100000 l
|
||||
18.350000 0.000000 l
|
||||
15.350000 0.000000 l
|
||||
h
|
||||
0.000000 4.100000 m
|
||||
0.000000 7.100000 l
|
||||
12.350000 7.100000 l
|
||||
12.350000 4.100000 l
|
||||
0.000000 4.100000 l
|
||||
h
|
||||
9.350000 12.400000 m
|
||||
9.350000 16.500000 l
|
||||
0.000000 16.500000 l
|
||||
0.000000 19.500000 l
|
||||
9.350000 19.500000 l
|
||||
9.350000 23.700001 l
|
||||
12.350000 23.700001 l
|
||||
12.350000 12.400000 l
|
||||
9.350000 12.400000 l
|
||||
h
|
||||
15.350000 16.500000 m
|
||||
15.350000 19.500000 l
|
||||
36.000000 19.500000 l
|
||||
36.000000 16.500000 l
|
||||
15.350000 16.500000 l
|
||||
h
|
||||
23.650000 24.750000 m
|
||||
23.650000 36.000000 l
|
||||
26.650000 36.000000 l
|
||||
26.650000 31.900000 l
|
||||
36.000000 31.900000 l
|
||||
36.000000 28.900000 l
|
||||
26.650000 28.900000 l
|
||||
26.650000 24.750000 l
|
||||
23.650000 24.750000 l
|
||||
h
|
||||
0.000000 28.900000 m
|
||||
0.000000 31.900000 l
|
||||
20.650000 31.900000 l
|
||||
20.650000 28.900000 l
|
||||
0.000000 28.900000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1036
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 36.000000 36.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000001126 00000 n
|
||||
0000001149 00000 n
|
||||
0000001322 00000 n
|
||||
0000001396 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
1455
|
||||
%%EOF
|
||||
15
Assets.xcassets/VPN/icn_whitelist.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/VPN/icn_whitelist.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_whitelists.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
118
Assets.xcassets/VPN/icn_whitelist.imageset/icn_whitelists.pdf
vendored
Normal file
118
Assets.xcassets/VPN/icn_whitelist.imageset/icn_whitelists.pdf
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
1.000000 0.541176 0.000000 scn
|
||||
3.000000 0.000000 m
|
||||
2.175000 0.000000 1.468750 0.293751 0.881250 0.881248 c
|
||||
0.293750 1.468750 0.000000 2.174999 0.000000 3.000000 c
|
||||
0.000000 33.000000 l
|
||||
0.000000 33.825001 0.293750 34.531250 0.881250 35.118752 c
|
||||
1.468750 35.706249 2.175000 36.000000 3.000000 36.000000 c
|
||||
13.250000 36.000000 l
|
||||
13.416667 37.166668 13.950000 38.125000 14.850000 38.875000 c
|
||||
15.750000 39.625000 16.800001 40.000000 18.000000 40.000000 c
|
||||
19.200001 40.000000 20.250000 39.625000 21.150000 38.875000 c
|
||||
22.050001 38.125000 22.583334 37.166668 22.750000 36.000000 c
|
||||
33.000000 36.000000 l
|
||||
33.825001 36.000000 34.531250 35.706249 35.118752 35.118752 c
|
||||
35.706249 34.531250 36.000000 33.825001 36.000000 33.000000 c
|
||||
36.000000 3.000000 l
|
||||
36.000000 2.174999 35.706249 1.468750 35.118752 0.881248 c
|
||||
34.531250 0.293751 33.825001 0.000000 33.000000 0.000000 c
|
||||
3.000000 0.000000 l
|
||||
h
|
||||
3.000000 3.000000 m
|
||||
33.000000 3.000000 l
|
||||
33.000000 33.000000 l
|
||||
3.000000 33.000000 l
|
||||
3.000000 3.000000 l
|
||||
h
|
||||
8.000000 8.000000 m
|
||||
21.650000 8.000000 l
|
||||
21.650000 11.000000 l
|
||||
8.000000 11.000000 l
|
||||
8.000000 8.000000 l
|
||||
h
|
||||
8.000000 16.500000 m
|
||||
28.000000 16.500000 l
|
||||
28.000000 19.500000 l
|
||||
8.000000 19.500000 l
|
||||
8.000000 16.500000 l
|
||||
h
|
||||
8.000000 25.000000 m
|
||||
28.000000 25.000000 l
|
||||
28.000000 28.000000 l
|
||||
8.000000 28.000000 l
|
||||
8.000000 25.000000 l
|
||||
h
|
||||
18.000000 33.849998 m
|
||||
18.466667 33.849998 18.875000 34.025002 19.225000 34.375000 c
|
||||
19.575001 34.724998 19.750000 35.133331 19.750000 35.599998 c
|
||||
19.750000 36.066666 19.575001 36.474998 19.225000 36.825001 c
|
||||
18.875000 37.174999 18.466667 37.349998 18.000000 37.349998 c
|
||||
17.533333 37.349998 17.125000 37.174999 16.775000 36.825001 c
|
||||
16.425001 36.474998 16.250000 36.066666 16.250000 35.599998 c
|
||||
16.250000 35.133331 16.425001 34.724998 16.775000 34.375000 c
|
||||
17.125000 34.025002 17.533333 33.849998 18.000000 33.849998 c
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1923
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 36.000000 40.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000002013 00000 n
|
||||
0000002036 00000 n
|
||||
0000002209 00000 n
|
||||
0000002283 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2342
|
||||
%%EOF
|
||||
15
Assets.xcassets/icn_firewall.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/icn_firewall.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_firewall.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
123
Assets.xcassets/icn_firewall.imageset/icn_firewall.pdf
vendored
Normal file
123
Assets.xcassets/icn_firewall.imageset/icn_firewall.pdf
vendored
Normal file
@@ -0,0 +1,123 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 -0.038940 cm
|
||||
0.000000 0.678431 0.905882 scn
|
||||
9.368752 21.862000 m
|
||||
9.194237 21.920187 9.005553 21.920187 8.831038 21.861998 c
|
||||
0.583308 19.111998 l
|
||||
0.236485 18.996359 0.002457 18.671904 0.002168 18.306311 c
|
||||
0.001081 16.243475 l
|
||||
0.000538 14.868362 -0.000004 12.805750 0.000000 10.055637 c
|
||||
0.000004 6.883197 2.356120 4.369862 4.453098 2.738857 c
|
||||
5.528415 1.902489 6.598883 1.248783 7.398052 0.804794 c
|
||||
7.798634 0.582245 8.133549 0.411011 8.370125 0.294598 c
|
||||
8.488472 0.236362 8.582383 0.191763 8.647791 0.161238 c
|
||||
8.680501 0.145973 8.706099 0.134222 8.724077 0.126038 c
|
||||
8.745275 0.116442 l
|
||||
8.751473 0.113661 l
|
||||
8.753452 0.112778 l
|
||||
8.753727 0.112656 8.754677 0.112232 9.099898 0.888971 c
|
||||
8.754677 0.112232 l
|
||||
8.974457 0.014551 9.225331 0.014549 9.445113 0.112228 c
|
||||
9.099898 0.888971 l
|
||||
9.445113 0.112228 9.444839 0.112106 9.445113 0.112228 c
|
||||
9.448316 0.113657 l
|
||||
9.454515 0.116438 l
|
||||
9.475712 0.126034 l
|
||||
9.493691 0.134218 9.519290 0.145969 9.552000 0.161234 c
|
||||
9.617410 0.191759 9.711323 0.236359 9.829673 0.294594 c
|
||||
10.066255 0.411007 10.401177 0.582241 10.801768 0.804789 c
|
||||
11.600957 1.248777 12.671450 1.902485 13.746792 2.738852 c
|
||||
15.843817 4.369852 18.199993 6.883188 18.199993 10.055638 c
|
||||
18.199993 12.805750 18.199451 14.868362 18.198910 16.243473 c
|
||||
18.197826 18.305799 l
|
||||
18.197538 18.671396 17.963507 18.996363 17.616680 19.112000 c
|
||||
9.368752 21.862000 l
|
||||
h
|
||||
1.701082 16.242804 m
|
||||
1.701782 17.692917 l
|
||||
9.099901 20.159637 l
|
||||
16.498211 17.692913 l
|
||||
16.498909 16.242804 l
|
||||
16.499146 15.644088 16.499382 14.915001 16.499573 14.055543 c
|
||||
8.824856 16.660160 l
|
||||
8.824856 15.094015 l
|
||||
16.499844 12.489305 l
|
||||
16.499937 11.748799 16.499992 10.937577 16.499992 10.055638 c
|
||||
16.499992 9.977984 16.498024 9.900617 16.494143 9.823545 c
|
||||
8.824856 12.426319 l
|
||||
8.824856 10.860174 l
|
||||
16.191282 8.360183 l
|
||||
15.883361 7.509837 15.364548 6.707459 14.723963 5.966928 c
|
||||
8.824856 8.102413 l
|
||||
8.824856 6.523023 l
|
||||
13.572360 4.804420 l
|
||||
13.291318 4.553133 12.999986 4.311666 12.703099 4.080757 c
|
||||
11.715919 3.312958 10.723887 2.706247 9.976183 2.290861 c
|
||||
9.615200 2.090317 9.313493 1.935654 9.099903 1.830183 c
|
||||
8.886319 1.935654 8.584622 2.090315 8.223654 2.290857 c
|
||||
7.475968 2.706244 6.483963 3.312952 5.496806 4.080751 c
|
||||
3.468838 5.658081 1.700004 7.728080 1.700001 10.055639 c
|
||||
1.699997 12.805528 1.700539 14.867916 1.701082 16.242804 c
|
||||
h
|
||||
f*
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
2375
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 18.199997 21.866699 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000002465 00000 n
|
||||
0000002488 00000 n
|
||||
0000002661 00000 n
|
||||
0000002735 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2794
|
||||
%%EOF
|
||||
15
Assets.xcassets/icn_vpn.imageset/Contents.json
vendored
Normal file
15
Assets.xcassets/icn_vpn.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "icn_vpn.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"preserves-vector-representation" : true
|
||||
}
|
||||
}
|
||||
138
Assets.xcassets/icn_vpn.imageset/icn_vpn.pdf
vendored
Normal file
138
Assets.xcassets/icn_vpn.imageset/icn_vpn.pdf
vendored
Normal file
@@ -0,0 +1,138 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.149963 cm
|
||||
0.600000 0.600000 0.600000 scn
|
||||
11.849976 3.579506 m
|
||||
11.546523 3.087814 11.212810 2.613092 10.849998 2.158247 c
|
||||
9.058451 4.404251 7.976406 7.134955 7.744002 10.000012 c
|
||||
13.955997 10.000012 l
|
||||
13.945384 9.869171 13.932999 9.738609 13.918855 9.608362 c
|
||||
14.005692 9.704117 14.098930 9.795992 14.198324 9.883459 c
|
||||
14.901587 10.502329 15.855413 10.850006 16.849976 10.850006 c
|
||||
17.780272 10.850006 18.674925 10.545810 19.362213 10.000012 c
|
||||
19.961042 10.000012 l
|
||||
19.944735 9.822983 19.923386 9.647412 19.897137 9.473449 c
|
||||
20.351223 8.916369 20.599976 8.244474 20.599976 7.550006 c
|
||||
20.599976 6.450006 l
|
||||
20.770750 6.450006 l
|
||||
21.368084 7.794821 21.700001 9.283655 21.700001 10.850012 c
|
||||
21.700001 16.842300 16.842289 21.700012 10.850000 21.700012 c
|
||||
4.857711 21.700012 0.000000 16.842300 0.000000 10.850012 c
|
||||
0.000000 4.857723 4.857711 0.000011 10.850000 0.000011 c
|
||||
11.345162 0.000011 11.832578 0.033180 12.310145 0.097420 c
|
||||
12.277525 0.120823 12.246119 0.145763 12.216092 0.172188 c
|
||||
11.981672 0.378477 11.849976 0.658268 11.849976 0.950006 c
|
||||
11.849976 3.579506 l
|
||||
h
|
||||
8.918088 19.795685 m
|
||||
5.061772 18.966837 2.108130 15.707682 1.738958 11.700012 c
|
||||
6.039007 11.700012 l
|
||||
6.250525 14.616378 7.249507 17.413153 8.918088 19.795685 c
|
||||
h
|
||||
12.781912 19.795685 m
|
||||
14.450494 17.413153 15.449475 14.616378 15.660994 11.700012 c
|
||||
19.961042 11.700012 l
|
||||
19.591869 15.707682 16.638227 18.966839 12.781912 19.795685 c
|
||||
h
|
||||
13.955997 11.700012 m
|
||||
13.723594 14.565069 12.641545 17.295773 10.849998 19.541779 c
|
||||
9.058451 17.295773 7.976406 14.565069 7.744002 11.700012 c
|
||||
13.955997 11.700012 l
|
||||
h
|
||||
6.039007 10.000012 m
|
||||
1.738958 10.000012 l
|
||||
2.108130 5.992342 5.061772 2.733187 8.918088 1.904341 c
|
||||
7.249507 4.286873 6.250525 7.083647 6.039007 10.000012 c
|
||||
h
|
||||
f*
|
||||
n
|
||||
Q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 11.849976 cm
|
||||
0.600000 0.600000 0.600000 scn
|
||||
16.849976 -1.850006 m
|
||||
17.645624 -1.850006 18.408688 -2.166077 18.971296 -2.728685 c
|
||||
19.533905 -3.291294 19.849976 -4.054357 19.849976 -4.850006 c
|
||||
19.849976 -5.850006 l
|
||||
20.849976 -5.850006 l
|
||||
20.849976 -10.850006 l
|
||||
20.849976 -11.115223 20.744619 -11.369577 20.557083 -11.557114 c
|
||||
20.369547 -11.744650 20.115192 -11.850006 19.849976 -11.850006 c
|
||||
13.849976 -11.850006 l
|
||||
13.584759 -11.850006 13.330405 -11.744650 13.142869 -11.557114 c
|
||||
12.955333 -11.369577 12.849976 -11.115223 12.849976 -10.850006 c
|
||||
12.849976 -5.850006 l
|
||||
13.849976 -5.850006 l
|
||||
13.849976 -4.850006 l
|
||||
13.849976 -4.054357 14.166046 -3.291294 14.728655 -2.728685 c
|
||||
15.291264 -2.166077 16.054327 -1.850006 16.849976 -1.850006 c
|
||||
h
|
||||
16.849976 -3.850006 m
|
||||
16.336975 -3.850006 15.849976 -4.300006 15.849976 -4.850006 c
|
||||
15.849976 -5.850006 l
|
||||
17.849976 -5.850006 l
|
||||
17.849976 -4.850006 l
|
||||
17.849976 -4.584789 17.744619 -4.330436 17.557083 -4.142900 c
|
||||
17.369547 -3.955363 17.115192 -3.850006 16.849976 -3.850006 c
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
2865
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 21.700012 21.849976 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000002955 00000 n
|
||||
0000002978 00000 n
|
||||
0000003151 00000 n
|
||||
0000003225 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
3284
|
||||
%%EOF
|
||||
@@ -461,6 +461,15 @@ func addBlockedList(listName: String) {
|
||||
defaults.set(encodedData, forKey: kUserBlockedLists)
|
||||
}
|
||||
|
||||
func changeBlockedListName(from listName: String, to newListName: String) {
|
||||
var data = getBlockedLists()
|
||||
data.userBlockListsDefaults[newListName] = data.userBlockListsDefaults[listName]
|
||||
data.userBlockListsDefaults[newListName]?.name = newListName
|
||||
data.userBlockListsDefaults[listName] = nil
|
||||
let encodedData = try? JSONEncoder().encode(data)
|
||||
defaults.set(encodedData, forKey: kUserBlockedLists)
|
||||
}
|
||||
|
||||
func deleteBlockedList(listName: String) {
|
||||
var data = getBlockedLists()
|
||||
data.userBlockListsDefaults[listName] = nil
|
||||
|
||||
@@ -202,6 +202,10 @@
|
||||
3DF2455423A2F8A400E46613 /* EmailSignUpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DF2455323A2F8A400E46613 /* EmailSignUpViewController.swift */; };
|
||||
3DF2455623A306DB00E46613 /* Loader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DF2455523A306DB00E46613 /* Loader.swift */; };
|
||||
3DF5D75F2633B1E100F77D79 /* amazon_trackers.txt in Resources */ = {isa = PBXBuildFile; fileRef = 3DF5D75E2633B1E100F77D79 /* amazon_trackers.txt */; };
|
||||
4015B4F729EFD9AC004102E0 /* AccessLevelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4015B4F629EFD9AC004102E0 /* AccessLevelView.swift */; };
|
||||
4015B4FD29F00DD8004102E0 /* LDVpnViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4015B4FC29F00DD8004102E0 /* LDVpnViewController.swift */; };
|
||||
4015B4FF29F14C95004102E0 /* LDCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4015B4FE29F14C95004102E0 /* LDCardView.swift */; };
|
||||
4015B50329F16E1A004102E0 /* LDConfigurationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4015B50229F16E1A004102E0 /* LDConfigurationViewController.swift */; };
|
||||
402D24B829D59B4400A5AB60 /* EmptyListsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D24B729D59B4400A5AB60 /* EmptyListsView.swift */; };
|
||||
402D24CB29D87B5A00A5AB60 /* ListsSubmenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D24CA29D87B5A00A5AB60 /* ListsSubmenuView.swift */; };
|
||||
402D24D429D87F4500A5AB60 /* CustomBlockedTableHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D24D329D87F4500A5AB60 /* CustomBlockedTableHeader.swift */; };
|
||||
@@ -218,7 +222,13 @@
|
||||
402D252F29E6357700A5AB60 /* ListDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D252E29E6357700A5AB60 /* ListDetailViewController.swift */; };
|
||||
402D253129E635CB00A5AB60 /* DomainsBlockedTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D253029E635CB00A5AB60 /* DomainsBlockedTableViewCell.swift */; };
|
||||
402D253329E6588000A5AB60 /* ListDescriptionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D253229E6588000A5AB60 /* ListDescriptionViewController.swift */; };
|
||||
402D253B29E8F9A400A5AB60 /* JSONSerialization+Extentions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D253A29E8F9A400A5AB60 /* JSONSerialization+Extentions.swift */; };
|
||||
402D253B29E8F9A400A5AB60 /* JSONSerialization+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D253A29E8F9A400A5AB60 /* JSONSerialization+Extensions.swift */; };
|
||||
402D254829EE112E00A5AB60 /* LDFirewallViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D254729EE112E00A5AB60 /* LDFirewallViewController.swift */; };
|
||||
402D254A29EE1C6E00A5AB60 /* DescriptionLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D254929EE1C6E00A5AB60 /* DescriptionLabel.swift */; };
|
||||
402D254C29EE32F300A5AB60 /* FirewallSegmentedControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D254B29EE32F300A5AB60 /* FirewallSegmentedControl.swift */; };
|
||||
402D254E29EE598D00A5AB60 /* TrackersGroupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D254D29EE598D00A5AB60 /* TrackersGroupView.swift */; };
|
||||
402D255029EE78D600A5AB60 /* OverallStatiscticView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D254F29EE78D600A5AB60 /* OverallStatiscticView.swift */; };
|
||||
40FC414329F74C7900BD7396 /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40FC414229F74C7900BD7396 /* String+Extensions.swift */; };
|
||||
4A86219093026DE70A097E79 /* Pods-LockdownTests-metadata.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8DA68459884385F76BF86234 /* Pods-LockdownTests-metadata.plist */; };
|
||||
54F0B1A0273200B0002F3630 /* FirewallController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DCA4F4022F252720017740D /* FirewallController.swift */; };
|
||||
5647ACFEBBAB001FAE27CAF9 /* Pods-LockdownTunnel-settings-metadata.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6F089C7008AB8F59DE3EA7BD /* Pods-LockdownTunnel-settings-metadata.plist */; };
|
||||
@@ -616,6 +626,10 @@
|
||||
3DF2455323A2F8A400E46613 /* EmailSignUpViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmailSignUpViewController.swift; sourceTree = "<group>"; };
|
||||
3DF2455523A306DB00E46613 /* Loader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Loader.swift; sourceTree = "<group>"; };
|
||||
3DF5D75E2633B1E100F77D79 /* amazon_trackers.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = amazon_trackers.txt; sourceTree = "<group>"; };
|
||||
4015B4F629EFD9AC004102E0 /* AccessLevelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessLevelView.swift; sourceTree = "<group>"; };
|
||||
4015B4FC29F00DD8004102E0 /* LDVpnViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LDVpnViewController.swift; sourceTree = "<group>"; };
|
||||
4015B4FE29F14C95004102E0 /* LDCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LDCardView.swift; sourceTree = "<group>"; };
|
||||
4015B50229F16E1A004102E0 /* LDConfigurationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LDConfigurationViewController.swift; sourceTree = "<group>"; };
|
||||
402D24B729D59B4400A5AB60 /* EmptyListsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyListsView.swift; sourceTree = "<group>"; };
|
||||
402D24CA29D87B5A00A5AB60 /* ListsSubmenuView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListsSubmenuView.swift; sourceTree = "<group>"; };
|
||||
402D24D329D87F4500A5AB60 /* CustomBlockedTableHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomBlockedTableHeader.swift; sourceTree = "<group>"; };
|
||||
@@ -632,7 +646,13 @@
|
||||
402D252E29E6357700A5AB60 /* ListDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListDetailViewController.swift; sourceTree = "<group>"; };
|
||||
402D253029E635CB00A5AB60 /* DomainsBlockedTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainsBlockedTableViewCell.swift; sourceTree = "<group>"; };
|
||||
402D253229E6588000A5AB60 /* ListDescriptionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListDescriptionViewController.swift; sourceTree = "<group>"; };
|
||||
402D253A29E8F9A400A5AB60 /* JSONSerialization+Extentions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "JSONSerialization+Extentions.swift"; sourceTree = "<group>"; };
|
||||
402D253A29E8F9A400A5AB60 /* JSONSerialization+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "JSONSerialization+Extensions.swift"; sourceTree = "<group>"; };
|
||||
402D254729EE112E00A5AB60 /* LDFirewallViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LDFirewallViewController.swift; sourceTree = "<group>"; };
|
||||
402D254929EE1C6E00A5AB60 /* DescriptionLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DescriptionLabel.swift; sourceTree = "<group>"; };
|
||||
402D254B29EE32F300A5AB60 /* FirewallSegmentedControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirewallSegmentedControl.swift; sourceTree = "<group>"; };
|
||||
402D254D29EE598D00A5AB60 /* TrackersGroupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackersGroupView.swift; sourceTree = "<group>"; };
|
||||
402D254F29EE78D600A5AB60 /* OverallStatiscticView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverallStatiscticView.swift; sourceTree = "<group>"; };
|
||||
40FC414229F74C7900BD7396 /* String+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Extensions.swift"; sourceTree = "<group>"; };
|
||||
4CA426CE326B009F3E4493D1 /* Pods_Lockdown.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Lockdown.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
50F9BE503587CE4933CB7983 /* Pods-Lockdown-settings-metadata.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "Pods-Lockdown-settings-metadata.plist"; path = "Settings.bundle/Pods-Lockdown-settings-metadata.plist"; sourceTree = "<group>"; };
|
||||
50FB8ADA1D444FD9486F2D44 /* Pods-Lockdown Firewall Widget-settings-metadata.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "Pods-Lockdown Firewall Widget-settings-metadata.plist"; path = "LockdowniOS/Settings.bundle/Pods-Lockdown Firewall Widget-settings-metadata.plist"; sourceTree = "<group>"; };
|
||||
@@ -1092,9 +1112,61 @@
|
||||
name = Main;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4015B4F829F00D74004102E0 /* VPN */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4015B4FB29F00D8C004102E0 /* Models */,
|
||||
4015B4FA29F00D87004102E0 /* Views */,
|
||||
4015B4F929F00D7E004102E0 /* Controllers */,
|
||||
);
|
||||
name = VPN;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4015B4F929F00D7E004102E0 /* Controllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4015B4FC29F00DD8004102E0 /* LDVpnViewController.swift */,
|
||||
);
|
||||
name = Controllers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4015B4FA29F00D87004102E0 /* Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4015B4FE29F14C95004102E0 /* LDCardView.swift */,
|
||||
);
|
||||
name = Views;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4015B4FB29F00D8C004102E0 /* Models */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
name = Models;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4015B50029F16DD9004102E0 /* Configuration */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4015B50129F16DEB004102E0 /* Controllers */,
|
||||
);
|
||||
name = Configuration;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4015B50129F16DEB004102E0 /* Controllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4015B50229F16E1A004102E0 /* LDConfigurationViewController.swift */,
|
||||
);
|
||||
name = Controllers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
402D24CE29D87EF300A5AB60 /* Scenes */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4015B50029F16DD9004102E0 /* Configuration */,
|
||||
4015B4F829F00D74004102E0 /* VPN */,
|
||||
402D253E29EE10A100A5AB60 /* Firewall */,
|
||||
402D252429E5840500A5AB60 /* Import Block List */,
|
||||
402D251129E5142A00A5AB60 /* Edit Domains */,
|
||||
402D24CF29D87EF900A5AB60 /* Configure Blocking */,
|
||||
@@ -1168,6 +1240,7 @@
|
||||
402D251A29E519B500A5AB60 /* CustomTableView.swift */,
|
||||
402D251829E517E100A5AB60 /* ConfiguredNavigationView.swift */,
|
||||
402D252229E5473E00A5AB60 /* EditDomainsCell.swift */,
|
||||
4015B4F629EFD9AC004102E0 /* AccessLevelView.swift */,
|
||||
);
|
||||
name = Views;
|
||||
sourceTree = "<group>";
|
||||
@@ -1188,6 +1261,42 @@
|
||||
name = Controllers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
402D253E29EE10A100A5AB60 /* Firewall */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
402D254629EE10BB00A5AB60 /* Models */,
|
||||
402D254529EE10B500A5AB60 /* Views */,
|
||||
402D254429EE10AD00A5AB60 /* Controllers */,
|
||||
);
|
||||
name = Firewall;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
402D254429EE10AD00A5AB60 /* Controllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
402D254729EE112E00A5AB60 /* LDFirewallViewController.swift */,
|
||||
);
|
||||
name = Controllers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
402D254529EE10B500A5AB60 /* Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
402D254929EE1C6E00A5AB60 /* DescriptionLabel.swift */,
|
||||
402D254B29EE32F300A5AB60 /* FirewallSegmentedControl.swift */,
|
||||
402D254D29EE598D00A5AB60 /* TrackersGroupView.swift */,
|
||||
402D254F29EE78D600A5AB60 /* OverallStatiscticView.swift */,
|
||||
);
|
||||
name = Views;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
402D254629EE10BB00A5AB60 /* Models */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
name = Models;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
7C0D11102473EDFD00A26E04 /* Services */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -1219,7 +1328,8 @@
|
||||
children = (
|
||||
7C1AE07F248028F40000A7D3 /* UIKit+Extensions.swift */,
|
||||
7C422EA425279724007F9C22 /* Align.swift */,
|
||||
402D253A29E8F9A400A5AB60 /* JSONSerialization+Extentions.swift */,
|
||||
402D253A29E8F9A400A5AB60 /* JSONSerialization+Extensions.swift */,
|
||||
40FC414229F74C7900BD7396 /* String+Extensions.swift */,
|
||||
);
|
||||
name = Extensions;
|
||||
sourceTree = "<group>";
|
||||
@@ -2258,11 +2368,14 @@
|
||||
402D251B29E519B500A5AB60 /* CustomTableView.swift in Sources */,
|
||||
7C3E8D21247D8057004B81D6 /* PushNotifications.swift in Sources */,
|
||||
3DBD57A222FBB0D900DE189F /* WebViewViewController.swift in Sources */,
|
||||
402D255029EE78D600A5AB60 /* OverallStatiscticView.swift in Sources */,
|
||||
A118F64320B33FED009A64E7 /* FadeTransition.swift in Sources */,
|
||||
7CE91C592521D54F009D8269 /* UserDefaults.swift in Sources */,
|
||||
3D47CDC822F3C3F3003BD7F7 /* NVActivityIndicatorAnimationCircleStrokeSpin.swift in Sources */,
|
||||
3DF2455623A306DB00E46613 /* Loader.swift in Sources */,
|
||||
A118F64720B33FED009A64E7 /* SpinerLayer.swift in Sources */,
|
||||
4015B4FF29F14C95004102E0 /* LDCardView.swift in Sources */,
|
||||
402D254E29EE598D00A5AB60 /* TrackersGroupView.swift in Sources */,
|
||||
3D47CDC522F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallRotateChase.swift in Sources */,
|
||||
A1EBEACD2097AE6E002B9087 /* M13CheckboxFadeController.swift in Sources */,
|
||||
3D47CDCF22F3C3F3003BD7F7 /* NVActivityIndicatorAnimationPacman.swift in Sources */,
|
||||
@@ -2280,6 +2393,7 @@
|
||||
3D0711B822FE79BE00391C6E /* WhyTrustViewController.swift in Sources */,
|
||||
A118F64520B33FED009A64E7 /* TimerEx.swift in Sources */,
|
||||
7C422EAF252797A6007F9C22 /* AccountVC.swift in Sources */,
|
||||
4015B50329F16E1A004102E0 /* LDConfigurationViewController.swift in Sources */,
|
||||
3D47CDD222F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallSpinFadeLoader.swift in Sources */,
|
||||
3D9FC67723E503DF004122D3 /* EmailSignInViewController.swift in Sources */,
|
||||
3DCA4F3322F22CB40017740D /* HomeViewController.swift in Sources */,
|
||||
@@ -2304,12 +2418,14 @@
|
||||
A1EBEAD42097AE6E002B9087 /* M13CheckboxPathGenerator.swift in Sources */,
|
||||
A1EBEACB2097AE6E002B9087 /* M13CheckboxDisclosurePathGenerator.swift in Sources */,
|
||||
3D47CDC622F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallPulse.swift in Sources */,
|
||||
402D254829EE112E00A5AB60 /* LDFirewallViewController.swift in Sources */,
|
||||
3D47CDCB22F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallGridBeat.swift in Sources */,
|
||||
3D47CDCA22F3C3F3003BD7F7 /* NVActivityIndicatorAnimationTriangleSkewSpin.swift in Sources */,
|
||||
7C422EB72527A2D1007F9C22 /* MainTabBarViewController.swift in Sources */,
|
||||
3D47CDC722F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBlank.swift in Sources */,
|
||||
A1E7481A1F9108B6004B8021 /* SpeedTest.swift in Sources */,
|
||||
3D970DAF22EC15D800F9CC93 /* BlockLogViewController.swift in Sources */,
|
||||
402D254A29EE1C6E00A5AB60 /* DescriptionLabel.swift in Sources */,
|
||||
402D24D429D87F4500A5AB60 /* CustomBlockedTableHeader.swift in Sources */,
|
||||
A1EBEADB2097AE6E002B9087 /* M13CheckboxAnimationGenerator.swift in Sources */,
|
||||
7CC8EFED254036050005054C /* FirewallRepair.swift in Sources */,
|
||||
@@ -2327,6 +2443,7 @@
|
||||
3DBD57B022FC14CD00DE189F /* Shared.swift in Sources */,
|
||||
A154A07E215C78180010FFCC /* BlockListCell.swift in Sources */,
|
||||
3D47CDCE22F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallScaleRippleMultiple.swift in Sources */,
|
||||
40FC414329F74C7900BD7396 /* String+Extensions.swift in Sources */,
|
||||
3D47CDCC22F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallScaleMultiple.swift in Sources */,
|
||||
A1EBEADC2097AE6E002B9087 /* DefaultValues.swift in Sources */,
|
||||
A1EBEAD02097AE6E002B9087 /* M13CheckboxController.swift in Sources */,
|
||||
@@ -2373,14 +2490,17 @@
|
||||
3D47CDD322F3C3F3003BD7F7 /* NVActivityIndicatorAnimationLineScaleParty.swift in Sources */,
|
||||
A1141A151F46230500F54698 /* AppDelegate.swift in Sources */,
|
||||
3DBD57AE22FBE04300DE189F /* WhitelistAddCell.swift in Sources */,
|
||||
4015B4F729EFD9AC004102E0 /* AccessLevelView.swift in Sources */,
|
||||
3D47CDB922F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallTrianglePath.swift in Sources */,
|
||||
402D24CB29D87B5A00A5AB60 /* ListsSubmenuView.swift in Sources */,
|
||||
4015B4FD29F00DD8004102E0 /* LDVpnViewController.swift in Sources */,
|
||||
A1EBEACE2097AE6E002B9087 /* M13CheckboxExpandController.swift in Sources */,
|
||||
3D5F5A0C23109ABB004C3860 /* WhatIsVpnViewController.swift in Sources */,
|
||||
A174CCAE22B15B1000F1B840 /* BlockListViewController.swift in Sources */,
|
||||
3DAF73522768572300D97BB0 /* FirewallUtilities.swift in Sources */,
|
||||
402D253B29E8F9A400A5AB60 /* JSONSerialization+Extentions.swift in Sources */,
|
||||
402D253B29E8F9A400A5AB60 /* JSONSerialization+Extensions.swift in Sources */,
|
||||
3D47CDD022F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallPulseSync.swift in Sources */,
|
||||
402D254C29EE32F300A5AB60 /* FirewallSegmentedControl.swift in Sources */,
|
||||
402D252729E5843300A5AB60 /* ImportBlockListViewController.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
||||
137
LockdowniOS/AccessLevelView.swift
Normal file
137
LockdowniOS/AccessLevelView.swift
Normal file
@@ -0,0 +1,137 @@
|
||||
//
|
||||
// AccessLevelView.swift
|
||||
// Lockdown
|
||||
//
|
||||
// Created by Aliaksandr Dvoineu on 19.04.23.
|
||||
// Copyright © 2023 Confirmed Inc. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
final class AccessLevelView: UIView {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
private lazy var containerView: UIView = {
|
||||
let view = UIView()
|
||||
return view
|
||||
}()
|
||||
|
||||
lazy var accessLevelIv: UIImageView = {
|
||||
let image = UIImageView()
|
||||
image.contentMode = .scaleAspectFit
|
||||
image.layer.masksToBounds = true
|
||||
return image
|
||||
}()
|
||||
|
||||
lazy var accessLevelName: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .label
|
||||
label.font = fontBold11
|
||||
label.textAlignment = .center
|
||||
return label
|
||||
}()
|
||||
|
||||
// MARK: - Initializer
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
configureUI()
|
||||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
// MARK: - Functions
|
||||
|
||||
private func configureUI() {
|
||||
addSubview(containerView)
|
||||
containerView.anchors.edges.pin()
|
||||
|
||||
containerView.addSubview(accessLevelIv)
|
||||
accessLevelIv.anchors.centerX.align()
|
||||
accessLevelIv.anchors.centerY.align()
|
||||
|
||||
containerView.addSubview(accessLevelName)
|
||||
accessLevelName.anchors.centerX.align()
|
||||
accessLevelName.anchors.centerY.align()
|
||||
}
|
||||
}
|
||||
|
||||
final class AccessLevelslView: UIView {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
private lazy var containerView: UIView = {
|
||||
let view = UIView()
|
||||
return view
|
||||
}()
|
||||
|
||||
private let basicView: AccessLevelView = {
|
||||
let view = AccessLevelView()
|
||||
view.accessLevelIv.image = UIImage(named: "basic")
|
||||
view.accessLevelName.text = "Basic"
|
||||
return view
|
||||
}()
|
||||
|
||||
private let advancedView: AccessLevelView = {
|
||||
let view = AccessLevelView()
|
||||
view.accessLevelIv.image = UIImage(named: "advanced")
|
||||
view.accessLevelName.text = "Advanced"
|
||||
return view
|
||||
}()
|
||||
|
||||
let anonymousView: AccessLevelView = {
|
||||
let view = AccessLevelView()
|
||||
view.accessLevelIv.image = UIImage(named: "anonymous")
|
||||
view.accessLevelName.text = "Anonymous"
|
||||
return view
|
||||
}()
|
||||
|
||||
private let universalView: AccessLevelView = {
|
||||
let view = AccessLevelView()
|
||||
view.accessLevelIv.image = UIImage(named: "universal")
|
||||
view.accessLevelName.text = "Universal"
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var stackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.addArrangedSubview(basicView)
|
||||
stackView.addArrangedSubview(advancedView)
|
||||
stackView.addArrangedSubview(anonymousView)
|
||||
stackView.addArrangedSubview(universalView)
|
||||
stackView.axis = .horizontal
|
||||
stackView.distribution = .fillEqually
|
||||
stackView.alignment = .center
|
||||
stackView.spacing = 0
|
||||
return stackView
|
||||
}()
|
||||
|
||||
// MARK: - Initializer
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
configureUI()
|
||||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
// MARK: - Functions
|
||||
|
||||
private func configureUI() {
|
||||
|
||||
addSubview(stackView)
|
||||
stackView.anchors.edges.pin()
|
||||
|
||||
stackView.insertSubview(advancedView, belowSubview: basicView)
|
||||
stackView.insertSubview(anonymousView, belowSubview: advancedView)
|
||||
stackView.insertSubview(universalView, belowSubview: anonymousView)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,11 +162,13 @@ final class BlockListViewController: BaseViewController {
|
||||
paragraphLabel.anchors.top.spacing(0, to: customNavigationView.anchors.bottom)
|
||||
paragraphLabel.anchors.leading.readableContentPin(inset: 3)
|
||||
paragraphLabel.anchors.trailing.readableContentPin(inset: 3)
|
||||
paragraphLabel.anchors.height.equal(60)
|
||||
|
||||
view.addSubview(segmented)
|
||||
segmented.anchors.top.spacing(12, to: paragraphLabel.anchors.bottom)
|
||||
segmented.anchors.leading.readableContentPin()
|
||||
segmented.anchors.trailing.readableContentPin()
|
||||
segmented.anchors.height.equal(40)
|
||||
}
|
||||
|
||||
private func configureCuratedBlockedDomainsTableView() {
|
||||
@@ -174,6 +176,7 @@ final class BlockListViewController: BaseViewController {
|
||||
tableView.anchors.top.spacing(8, to: segmented.anchors.bottom)
|
||||
tableView.anchors.leading.pin()
|
||||
tableView.anchors.trailing.pin()
|
||||
tableView.anchors.bottom.pin()
|
||||
})
|
||||
|
||||
reloadCuratedBlockDomains()
|
||||
@@ -185,7 +188,7 @@ final class BlockListViewController: BaseViewController {
|
||||
view.addSubview(listsLabel)
|
||||
listsLabel.anchors.top.spacing(24, to: segmented.anchors.bottom)
|
||||
listsLabel.anchors.leading.marginsPin()
|
||||
|
||||
|
||||
view.addSubview(addNewListButton)
|
||||
addNewListButton.anchors.centerY.equal(listsLabel.anchors.centerY)
|
||||
addNewListButton.anchors.trailing.marginsPin()
|
||||
@@ -376,7 +379,6 @@ extension BlockListViewController {
|
||||
self.didMakeChange = true
|
||||
let vc = ListSettingsViewController()
|
||||
vc.listName = list.name
|
||||
vc.blockedList = list
|
||||
vc.blockListVC = self
|
||||
navigationController?.pushViewController(vc, animated: true)
|
||||
}.onSwipeToDelete { [unowned self] in
|
||||
|
||||
72
LockdowniOS/DescriptionLabel.swift
Normal file
72
LockdowniOS/DescriptionLabel.swift
Normal file
@@ -0,0 +1,72 @@
|
||||
//
|
||||
// FirewallDescriptionLabel.swift
|
||||
// Lockdown
|
||||
//
|
||||
// Created by Aliaksandr Dvoineu on 18.04.23.
|
||||
// Copyright © 2023 Confirmed Inc. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
struct DescriptionLabelViewModel {
|
||||
let text: String
|
||||
}
|
||||
|
||||
final class DescriptionLabel: UIView {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
private lazy var lockImage: UIImageView = {
|
||||
let image = UIImageView()
|
||||
image.image = UIImage(named: "icn_lock")
|
||||
image.contentMode = .scaleAspectFit
|
||||
image.layer.masksToBounds = true
|
||||
return image
|
||||
}()
|
||||
|
||||
private lazy var descriptionLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .label
|
||||
label.font = fontMedium15
|
||||
label.textAlignment = .left
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var stackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.addArrangedSubview(lockImage)
|
||||
stackView.addArrangedSubview(descriptionLabel)
|
||||
stackView.axis = .horizontal
|
||||
stackView.distribution = .fillProportionally
|
||||
stackView.alignment = .center
|
||||
stackView.spacing = 12
|
||||
return stackView
|
||||
}()
|
||||
|
||||
// MARK: - Initializer
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
configureUI()
|
||||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
// MARK: - Functions
|
||||
|
||||
private func configureUI() {
|
||||
|
||||
addSubview(stackView)
|
||||
stackView.anchors.top.pin()
|
||||
stackView.anchors.bottom.pin()
|
||||
stackView.anchors.leading.pin()
|
||||
stackView.anchors.trailing.pin()
|
||||
}
|
||||
|
||||
func configure(with model: DescriptionLabelViewModel) {
|
||||
descriptionLabel.text = model.text
|
||||
}
|
||||
}
|
||||
90
LockdowniOS/LDCardView.swift
Normal file
90
LockdowniOS/LDCardView.swift
Normal file
@@ -0,0 +1,90 @@
|
||||
//
|
||||
// LDCardView.swift
|
||||
// Lockdown
|
||||
//
|
||||
// Created by Aliaksandr Dvoineu on 19.04.23.
|
||||
// Copyright © 2023 Confirmed Inc. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
final class LDCardView: UIView {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
var isSelected: Bool = false
|
||||
|
||||
private lazy var backgroundView: UIView = {
|
||||
let view = UIView()
|
||||
view.isUserInteractionEnabled = true
|
||||
view.layer.cornerRadius = 8
|
||||
view.layer.borderWidth = 2
|
||||
view.layer.borderColor = isSelected ? UIColor.gray.cgColor : UIColor.tunnelsBlue.cgColor
|
||||
return view
|
||||
}()
|
||||
|
||||
lazy var iconImageView: UIImageView = {
|
||||
let image = UIImageView()
|
||||
image.contentMode = .scaleAspectFit
|
||||
image.image = isSelected ? UIImage(named: "kksdlf") : UIImage(named: "dfgerte")
|
||||
image.layer.masksToBounds = true
|
||||
return image
|
||||
}()
|
||||
|
||||
lazy var title: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .label
|
||||
label.font = fontBold15
|
||||
label.numberOfLines = 0
|
||||
label.textAlignment = .center
|
||||
return label
|
||||
}()
|
||||
|
||||
lazy var subTitle: UILabel = {
|
||||
let label = UILabel()
|
||||
label.text = ""
|
||||
label.textColor = .label
|
||||
label.font = fontBold15
|
||||
label.textColor = .lightGray
|
||||
label.textAlignment = .center
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var stackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.addArrangedSubview(iconImageView)
|
||||
stackView.addArrangedSubview(title)
|
||||
stackView.addArrangedSubview(subTitle)
|
||||
stackView.axis = .vertical
|
||||
stackView.distribution = .fillProportionally
|
||||
stackView.alignment = .center
|
||||
stackView.spacing = 8
|
||||
return stackView
|
||||
}()
|
||||
|
||||
// MARK: - Initializer
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
configureUI()
|
||||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
// MARK: - Functions
|
||||
|
||||
private func configureUI() {
|
||||
|
||||
addSubview(backgroundView)
|
||||
backgroundView.anchors.edges.pin()
|
||||
|
||||
backgroundView.addSubview(stackView)
|
||||
stackView.anchors.centerX.align()
|
||||
stackView.anchors.leading.marginsPin()
|
||||
stackView.anchors.trailing.marginsPin()
|
||||
stackView.anchors.centerY.align()
|
||||
}
|
||||
}
|
||||
155
LockdowniOS/LDConfigurationViewController.swift
Normal file
155
LockdowniOS/LDConfigurationViewController.swift
Normal file
@@ -0,0 +1,155 @@
|
||||
//
|
||||
// LDConfigurationViewController.swift
|
||||
// Lockdown
|
||||
//
|
||||
// Created by Aliaksandr Dvoineu on 20.04.23.
|
||||
// Copyright © 2023 Confirmed Inc. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
final class LDConfigurationViewController: UIViewController {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
private lazy var activityCard: LDCardView = {
|
||||
let view = LDCardView()
|
||||
view.title.text = "Activity"
|
||||
view.iconImageView.image = UIImage(named: "icn_activity")
|
||||
view.isUserInteractionEnabled = true
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var configureBlockingCard: LDCardView = {
|
||||
let view = LDCardView()
|
||||
view.title.text = "Configure blocking"
|
||||
view.title.numberOfLines = 0
|
||||
view.iconImageView.image = UIImage(named: "icn_configure_blocking")
|
||||
view.isUserInteractionEnabled = true
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var personalizedBlockingCard: LDCardView = {
|
||||
let view = LDCardView()
|
||||
view.title.text = "Personalized blocking"
|
||||
view.title.numberOfLines = 0
|
||||
view.iconImageView.image = UIImage(named: "icn_personalized_blocking")
|
||||
view.isUserInteractionEnabled = true
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var importListsCard: LDCardView = {
|
||||
let view = LDCardView()
|
||||
view.title.text = "Import custom block lists"
|
||||
view.title.numberOfLines = 0
|
||||
view.iconImageView.image = UIImage(named: "icn_import")
|
||||
view.isUserInteractionEnabled = true
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var hStack1: UIStackView = {
|
||||
let stack = UIStackView()
|
||||
stack.addArrangedSubview(activityCard)
|
||||
stack.addArrangedSubview(configureBlockingCard)
|
||||
stack.alignment = .center
|
||||
stack.axis = .horizontal
|
||||
stack.distribution = .equalCentering
|
||||
stack.spacing = 16
|
||||
return stack
|
||||
}()
|
||||
|
||||
private lazy var hStack2: UIStackView = {
|
||||
let stack = UIStackView()
|
||||
stack.addArrangedSubview(personalizedBlockingCard)
|
||||
stack.addArrangedSubview(importListsCard)
|
||||
stack.alignment = .center
|
||||
stack.axis = .horizontal
|
||||
stack.distribution = .equalCentering
|
||||
stack.spacing = 16
|
||||
return stack
|
||||
}()
|
||||
|
||||
private lazy var vStack: UIStackView = {
|
||||
let stack = UIStackView()
|
||||
stack.addArrangedSubview(hStack1)
|
||||
stack.addArrangedSubview(hStack2)
|
||||
stack.alignment = .center
|
||||
stack.axis = .vertical
|
||||
stack.distribution = .equalCentering
|
||||
stack.spacing = 16
|
||||
return stack
|
||||
}()
|
||||
|
||||
private lazy var viewAccountSettingsButton: UIButton = {
|
||||
let button = UIButton(type: .system)
|
||||
button.setTitle("View account settings", for: .normal)
|
||||
button.setTitleColor(.tunnelsBlue, for: .normal)
|
||||
button.titleLabel?.font = fontBold15
|
||||
button.addTarget(self, action: #selector(viewAccountSettings), for: .touchUpInside)
|
||||
return button
|
||||
}()
|
||||
|
||||
private lazy var viewAuditReportButton: UIButton = {
|
||||
let button = UIButton(type: .system)
|
||||
button.setTitle("View audit report (Feb 2023)", for: .normal)
|
||||
button.setTitleColor(.tunnelsBlue, for: .normal)
|
||||
button.titleLabel?.font = fontBold15
|
||||
button.addTarget(self, action: #selector(viewAccountSettings), for: .touchUpInside)
|
||||
return button
|
||||
}()
|
||||
|
||||
lazy var vStackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.addArrangedSubview(viewAccountSettingsButton)
|
||||
stackView.addArrangedSubview(viewAuditReportButton)
|
||||
stackView.axis = .vertical
|
||||
stackView.alignment = .center
|
||||
stackView.distribution = .fillEqually
|
||||
stackView.spacing = 8
|
||||
return stackView
|
||||
}()
|
||||
|
||||
// MARK: - LifeCycle
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
view.backgroundColor = .systemBackground
|
||||
|
||||
view.addSubview(vStack)
|
||||
vStack.anchors.centerY.align()
|
||||
vStack.anchors.centerX.align()
|
||||
|
||||
activityCard.anchors.width.equal(view.bounds.width / 2 - 20)
|
||||
activityCard.anchors.height.equal(view.bounds.width / 2 - 20)
|
||||
|
||||
configureBlockingCard.anchors.width.equal(view.bounds.width / 2 - 20)
|
||||
configureBlockingCard.anchors.height.equal(view.bounds.width / 2 - 20)
|
||||
|
||||
personalizedBlockingCard.anchors.width.equal(view.bounds.width / 2 - 20)
|
||||
personalizedBlockingCard.anchors.height.equal(view.bounds.width / 2 - 20)
|
||||
|
||||
importListsCard.anchors.width.equal(view.bounds.width / 2 - 20)
|
||||
importListsCard.anchors.height.equal(view.bounds.width / 2 - 20)
|
||||
|
||||
view.addSubview(vStackView)
|
||||
vStackView.anchors.top.spacing(30, to: vStack.anchors.bottom)
|
||||
vStackView.anchors.leading.marginsPin()
|
||||
vStackView.anchors.trailing.marginsPin()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private functions
|
||||
|
||||
private extension LDConfigurationViewController {
|
||||
|
||||
@objc func viewAccountSettings() {
|
||||
|
||||
}
|
||||
|
||||
@objc func viewAuditReport() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
249
LockdowniOS/LDFirewallViewController.swift
Normal file
249
LockdowniOS/LDFirewallViewController.swift
Normal file
@@ -0,0 +1,249 @@
|
||||
//
|
||||
// LDFirewallViewController.swift
|
||||
// Lockdown
|
||||
//
|
||||
// Created by Aliaksandr Dvoineu on 17.04.23.
|
||||
// Copyright © 2023 Confirmed Inc. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
final class LDFirewallViewController: UIViewController {
|
||||
|
||||
lazy var accessLevelslView: AccessLevelslView = {
|
||||
let view = AccessLevelslView()
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var scrollView: UIScrollView = {
|
||||
let view = UIScrollView()
|
||||
view.isScrollEnabled = true
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var contentView: UIView = {
|
||||
let view = UIView()
|
||||
view.anchors.height.equal(1000)
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var firewallTitle: UILabel = {
|
||||
let label = UILabel()
|
||||
label.text = NSLocalizedString("Get complete protection", comment: "")
|
||||
label.font = fontBold24
|
||||
label.numberOfLines = 0
|
||||
label.textColor = .label
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var firewallDescriptionLabel1: DescriptionLabel = {
|
||||
let label = DescriptionLabel()
|
||||
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Block as many trackers as you want", comment: "")))
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var firewallDescriptionLabel2: DescriptionLabel = {
|
||||
let label = DescriptionLabel()
|
||||
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Import and export your own block lists", comment: "")))
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var firewallDescriptionLabel3: DescriptionLabel = {
|
||||
let label = DescriptionLabel()
|
||||
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Access to new curated lists of trackers", comment: "")))
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var stackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.addArrangedSubview(firewallTitle)
|
||||
stackView.addArrangedSubview(firewallDescriptionLabel1)
|
||||
stackView.addArrangedSubview(firewallDescriptionLabel2)
|
||||
stackView.addArrangedSubview(firewallDescriptionLabel3)
|
||||
stackView.axis = .vertical
|
||||
stackView.distribution = .fillProportionally
|
||||
stackView.spacing = 10
|
||||
return stackView
|
||||
}()
|
||||
|
||||
private lazy var cpTitle: UILabel = {
|
||||
let label = UILabel()
|
||||
label.text = NSLocalizedString("Only blocked with complete protection", comment: "")
|
||||
label.textColor = .label
|
||||
label.font = fontBold15
|
||||
label.textAlignment = .center
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var cpTrackersGroupView1: TrackersGroupView = {
|
||||
let view = TrackersGroupView()
|
||||
view.placeNumber.text = "#1"
|
||||
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_game_marketing")!, title: "Game Marketing", number: 4678))
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var cpTrackersGroupView2: TrackersGroupView = {
|
||||
let view = TrackersGroupView()
|
||||
view.placeNumber.text = "#2"
|
||||
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_marketing_trackers")!, title: "Marketing Trackers", number: 3432))
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var cpTrackersGroupView3: TrackersGroupView = {
|
||||
let view = TrackersGroupView()
|
||||
view.placeNumber.text = "#3"
|
||||
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_email_trackers")!, title: "Email Trackers", number: 2756))
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var cpStackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.addArrangedSubview(cpTitle)
|
||||
stackView.addArrangedSubview(cpTrackersGroupView1)
|
||||
stackView.addArrangedSubview(cpTrackersGroupView2)
|
||||
stackView.addArrangedSubview(cpTrackersGroupView3)
|
||||
stackView.layer.cornerRadius = 8
|
||||
stackView.layer.borderWidth = 2
|
||||
stackView.layer.borderColor = UIColor.black.cgColor
|
||||
stackView.axis = .vertical
|
||||
stackView.distribution = .fillEqually
|
||||
stackView.spacing = 0
|
||||
stackView.backgroundColor = .secondarySystemBackground
|
||||
return stackView
|
||||
}()
|
||||
|
||||
private lazy var upgradeButton: UIButton = {
|
||||
let button = UIButton(type: .system)
|
||||
button.tintColor = .white
|
||||
button.setTitle(NSLocalizedString("Upgrade", comment: ""), for: .normal)
|
||||
button.titleLabel?.font = fontBold18
|
||||
button.backgroundColor = .tunnelsBlue
|
||||
button.layer.cornerRadius = 28
|
||||
button.anchors.height.equal(56)
|
||||
button.addTarget(self, action: #selector(upgrade), for: .touchUpInside)
|
||||
return button
|
||||
}()
|
||||
|
||||
private lazy var maTitle: UILabel = {
|
||||
let label = UILabel()
|
||||
label.text = NSLocalizedString("Most active this week", comment: "")
|
||||
label.textColor = .label
|
||||
label.font = fontBold15
|
||||
label.textAlignment = .center
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var maTrackersGroupView1: TrackersGroupView = {
|
||||
let view = TrackersGroupView()
|
||||
view.placeNumber.text = "#1"
|
||||
view.number.textColor = .label
|
||||
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_facebook_trackers")!, title: "Facebook Trackers", number: 764))
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var maTrackersGroupView2: TrackersGroupView = {
|
||||
let view = TrackersGroupView()
|
||||
view.placeNumber.text = "#2"
|
||||
view.number.textColor = .label
|
||||
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_data_trackers")!, title: "Data Trackers", number: 330))
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var maTrackersGroupView3: TrackersGroupView = {
|
||||
let view = TrackersGroupView()
|
||||
view.placeNumber.text = "#3"
|
||||
view.number.textColor = .label
|
||||
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_clickbait_trackers")!, title: "Clickbait", number: 106))
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var maStackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.addArrangedSubview(maTitle)
|
||||
stackView.addArrangedSubview(maTrackersGroupView1)
|
||||
stackView.addArrangedSubview(maTrackersGroupView2)
|
||||
stackView.addArrangedSubview(maTrackersGroupView3)
|
||||
stackView.layer.cornerRadius = 8
|
||||
stackView.layer.borderWidth = 1
|
||||
stackView.layer.borderColor = UIColor.lightGray.cgColor
|
||||
stackView.axis = .vertical
|
||||
stackView.distribution = .fillEqually
|
||||
stackView.spacing = 0
|
||||
return stackView
|
||||
}()
|
||||
|
||||
lazy var statisitcsView: OverallStatiscticView = {
|
||||
let view = OverallStatiscticView()
|
||||
return view
|
||||
}()
|
||||
|
||||
private let segmented: FirewallSegmentedControl = {
|
||||
let symbolConfig = UIImage.SymbolConfiguration(pointSize: 18, weight: .regular, scale: .large)
|
||||
let image = UIImage()
|
||||
let text = "Swipe to Activate Firewall"
|
||||
let items = [image, text]
|
||||
let control = FirewallSegmentedControl(items: items)
|
||||
return control
|
||||
}()
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
view.backgroundColor = .systemBackground
|
||||
|
||||
view.addSubview(accessLevelslView)
|
||||
accessLevelslView.anchors.top.safeAreaPin(inset: 18)
|
||||
accessLevelslView.anchors.leading.marginsPin()
|
||||
accessLevelslView.anchors.trailing.marginsPin()
|
||||
|
||||
view.addSubview(scrollView)
|
||||
scrollView.anchors.top.spacing(18, to: accessLevelslView.anchors.bottom)
|
||||
scrollView.anchors.leading.pin()
|
||||
scrollView.anchors.trailing.pin()
|
||||
scrollView.anchors.bottom.pin()
|
||||
|
||||
scrollView.addSubview(contentView)
|
||||
contentView.anchors.top.pin()
|
||||
contentView.anchors.centerX.align()
|
||||
contentView.anchors.width.equal(scrollView.anchors.width)
|
||||
contentView.anchors.bottom.pin()
|
||||
|
||||
contentView.addSubview(stackView)
|
||||
stackView.anchors.top.marginsPin()
|
||||
stackView.anchors.leading.marginsPin()
|
||||
stackView.anchors.trailing.marginsPin()
|
||||
|
||||
contentView.addSubview(cpStackView)
|
||||
cpStackView.anchors.top.spacing(18, to: stackView.anchors.bottom)
|
||||
cpStackView.anchors.leading.marginsPin()
|
||||
cpStackView.anchors.trailing.marginsPin()
|
||||
|
||||
contentView.addSubview(upgradeButton)
|
||||
upgradeButton.anchors.top.spacing(18, to: cpStackView.anchors.bottom)
|
||||
upgradeButton.anchors.leading.marginsPin()
|
||||
upgradeButton.anchors.trailing.marginsPin()
|
||||
|
||||
contentView.addSubview(maStackView)
|
||||
maStackView.anchors.top.spacing(18, to: upgradeButton.anchors.bottom)
|
||||
maStackView.anchors.leading.marginsPin()
|
||||
maStackView.anchors.trailing.marginsPin()
|
||||
|
||||
contentView.addSubview(statisitcsView)
|
||||
statisitcsView.anchors.top.spacing(18, to: maStackView.anchors.bottom)
|
||||
statisitcsView.anchors.leading.marginsPin()
|
||||
statisitcsView.anchors.trailing.marginsPin()
|
||||
|
||||
view.addSubview(segmented)
|
||||
segmented.anchors.bottom.safeAreaPin()
|
||||
segmented.anchors.leading.marginsPin()
|
||||
segmented.anchors.trailing.marginsPin()
|
||||
segmented.anchors.height.equal(56)
|
||||
}
|
||||
}
|
||||
|
||||
private extension LDFirewallViewController {
|
||||
|
||||
@objc func upgrade() {
|
||||
|
||||
}
|
||||
}
|
||||
193
LockdowniOS/LDVpnViewController.swift
Normal file
193
LockdowniOS/LDVpnViewController.swift
Normal file
@@ -0,0 +1,193 @@
|
||||
//
|
||||
// LDVpnViewController.swift
|
||||
// Lockdown
|
||||
//
|
||||
// Created by Aliaksandr Dvoineu on 19.04.23.
|
||||
// Copyright © 2023 Confirmed Inc. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
final class LDVpnViewController: UIViewController {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
lazy var accessLevelslView: AccessLevelslView = {
|
||||
let view = AccessLevelslView()
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var scrollView: UIScrollView = {
|
||||
let view = UIScrollView()
|
||||
view.isScrollEnabled = true
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var contentView: UIView = {
|
||||
let view = UIView()
|
||||
view.anchors.height.equal(640)
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var firewallTitle: UILabel = {
|
||||
let label = UILabel()
|
||||
label.text = NSLocalizedString("Get complete protection", comment: "")
|
||||
label.font = fontBold24
|
||||
label.numberOfLines = 0
|
||||
label.textColor = .label
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var firewallDescriptionLabel1: DescriptionLabel = {
|
||||
let label = DescriptionLabel()
|
||||
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Block as many trackers as you want", comment: "")))
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var firewallDescriptionLabel2: DescriptionLabel = {
|
||||
let label = DescriptionLabel()
|
||||
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Import and export your own block lists", comment: "")))
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var firewallDescriptionLabel3: DescriptionLabel = {
|
||||
let label = DescriptionLabel()
|
||||
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Access to new curated lists of trackers", comment: "")))
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var firewallDescriptionLabel4: DescriptionLabel = {
|
||||
let label = DescriptionLabel()
|
||||
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("The only fully open source VPN", comment: "")))
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var firewallDescriptionLabel5: DescriptionLabel = {
|
||||
let label = DescriptionLabel()
|
||||
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Hide your identity around the world", comment: "")))
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var stackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.addArrangedSubview(firewallTitle)
|
||||
stackView.addArrangedSubview(firewallDescriptionLabel1)
|
||||
stackView.addArrangedSubview(firewallDescriptionLabel2)
|
||||
stackView.addArrangedSubview(firewallDescriptionLabel3)
|
||||
stackView.addArrangedSubview(firewallDescriptionLabel4)
|
||||
stackView.addArrangedSubview(firewallDescriptionLabel5)
|
||||
stackView.axis = .vertical
|
||||
stackView.distribution = .fillProportionally
|
||||
stackView.spacing = 10
|
||||
return stackView
|
||||
}()
|
||||
|
||||
private lazy var upgradeButton: UIButton = {
|
||||
let button = UIButton(type: .system)
|
||||
button.tintColor = .white
|
||||
button.setTitle(NSLocalizedString("Upgrade", comment: ""), for: .normal)
|
||||
button.titleLabel?.font = fontBold18
|
||||
button.backgroundColor = .tunnelsBlue
|
||||
button.layer.cornerRadius = 28
|
||||
button.anchors.height.equal(56)
|
||||
button.addTarget(self, action: #selector(upgrade), for: .touchUpInside)
|
||||
return button
|
||||
}()
|
||||
|
||||
private lazy var whitelistCard: LDCardView = {
|
||||
let view = LDCardView()
|
||||
view.title.text = "Whitelist"
|
||||
view.iconImageView.image = UIImage(named: "icn_whitelist")
|
||||
view.isUserInteractionEnabled = true
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var regionCard: LDCardView = {
|
||||
let view = LDCardView()
|
||||
view.title.text = "Region"
|
||||
view.iconImageView.image = UIImage(named: "icn_globe")
|
||||
view.subTitle.text = "USA West"
|
||||
view.isUserInteractionEnabled = true
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var hStack: UIStackView = {
|
||||
let stack = UIStackView()
|
||||
stack.addArrangedSubview(whitelistCard)
|
||||
stack.addArrangedSubview(regionCard)
|
||||
stack.alignment = .center
|
||||
stack.distribution = .equalCentering
|
||||
stack.spacing = 16
|
||||
return stack
|
||||
}()
|
||||
|
||||
private let segmented: FirewallSegmentedControl = {
|
||||
let symbolConfig = UIImage.SymbolConfiguration(pointSize: 18, weight: .regular, scale: .large)
|
||||
let image = UIImage()
|
||||
let text = "Swipe to Activate Firewall"
|
||||
let items = [image, text]
|
||||
let control = FirewallSegmentedControl(items: items)
|
||||
return control
|
||||
}()
|
||||
|
||||
// MARK: - LifeCycle
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
view.backgroundColor = .systemBackground
|
||||
|
||||
view.addSubview(accessLevelslView)
|
||||
accessLevelslView.anchors.top.safeAreaPin(inset: 18)
|
||||
accessLevelslView.anchors.leading.marginsPin()
|
||||
accessLevelslView.anchors.trailing.marginsPin()
|
||||
|
||||
view.addSubview(scrollView)
|
||||
scrollView.anchors.top.spacing(18, to: accessLevelslView.anchors.bottom)
|
||||
scrollView.anchors.leading.pin()
|
||||
scrollView.anchors.trailing.pin()
|
||||
scrollView.anchors.bottom.pin()
|
||||
|
||||
scrollView.addSubview(contentView)
|
||||
contentView.anchors.top.pin()
|
||||
contentView.anchors.centerX.align()
|
||||
contentView.anchors.width.equal(scrollView.anchors.width)
|
||||
contentView.anchors.bottom.pin()
|
||||
|
||||
contentView.addSubview(stackView)
|
||||
stackView.anchors.top.marginsPin()
|
||||
stackView.anchors.leading.marginsPin()
|
||||
stackView.anchors.trailing.marginsPin()
|
||||
|
||||
contentView.addSubview(upgradeButton)
|
||||
upgradeButton.anchors.top.spacing(18, to: stackView.anchors.bottom)
|
||||
upgradeButton.anchors.leading.marginsPin()
|
||||
upgradeButton.anchors.trailing.marginsPin()
|
||||
|
||||
contentView.addSubview(hStack)
|
||||
hStack.anchors.top.spacing(18, to: upgradeButton.anchors.bottom)
|
||||
hStack.anchors.centerX.align()
|
||||
|
||||
whitelistCard.anchors.width.equal(view.bounds.width / 2 - 20)
|
||||
whitelistCard.anchors.height.equal(view.bounds.width / 2 - 20)
|
||||
|
||||
regionCard.anchors.width.equal(view.bounds.width / 2 - 20)
|
||||
regionCard.anchors.height.equal(view.bounds.width / 2 - 20)
|
||||
|
||||
view.addSubview(segmented)
|
||||
segmented.anchors.bottom.safeAreaPin()
|
||||
segmented.anchors.leading.marginsPin()
|
||||
segmented.anchors.trailing.marginsPin()
|
||||
segmented.anchors.height.equal(56)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private functions
|
||||
|
||||
private extension LDVpnViewController {
|
||||
|
||||
@objc func upgrade() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,10 +8,16 @@
|
||||
|
||||
import UIKit
|
||||
|
||||
protocol ListDescriptionViewControllerDelegate {
|
||||
func changeListDescription(description: String)
|
||||
}
|
||||
|
||||
final class ListDescriptionViewController: UIViewController {
|
||||
|
||||
var listName = ""
|
||||
|
||||
var delegate: ListDescriptionViewControllerDelegate?
|
||||
|
||||
var domains = getBlockedLists().userBlockListsDefaults
|
||||
|
||||
// MARK: - Properties
|
||||
@@ -23,7 +29,6 @@ final class ListDescriptionViewController: UIViewController {
|
||||
view.leftNavButton.addTarget(self, action: #selector(returnBack), for: .touchUpInside)
|
||||
view.rightNavButton.setTitle("DONE", for: .normal)
|
||||
view.rightNavButton.addTarget(self, action: #selector(doneButtonClicked), for: .touchUpInside)
|
||||
view.rightNavButton.tintColor = .gray
|
||||
return view
|
||||
}()
|
||||
|
||||
@@ -36,9 +41,19 @@ final class ListDescriptionViewController: UIViewController {
|
||||
view.backgroundColor = .systemBackground
|
||||
view.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: .zero))
|
||||
view.leftViewMode = .always
|
||||
view.addTarget(self, action: #selector(handleTextChange), for: .editingChanged)
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var validationPrompt: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .red
|
||||
label.font = fontRegular14
|
||||
label.textAlignment = .left
|
||||
label.numberOfLines = 0
|
||||
return label
|
||||
}()
|
||||
|
||||
// MARK: - Lifecycle
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
@@ -46,6 +61,7 @@ final class ListDescriptionViewController: UIViewController {
|
||||
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
|
||||
tap.cancelsTouchesInView = false
|
||||
view.addGestureRecognizer(tap)
|
||||
|
||||
configureUI()
|
||||
}
|
||||
|
||||
@@ -61,6 +77,11 @@ final class ListDescriptionViewController: UIViewController {
|
||||
descriptionTextField.anchors.leading.marginsPin()
|
||||
descriptionTextField.anchors.trailing.marginsPin()
|
||||
descriptionTextField.anchors.height.equal(40)
|
||||
|
||||
view.addSubview(validationPrompt)
|
||||
validationPrompt.anchors.top.spacing(8, to: descriptionTextField.anchors.bottom)
|
||||
validationPrompt.anchors.leading.marginsPin()
|
||||
validationPrompt.anchors.trailing.marginsPin()
|
||||
}
|
||||
|
||||
override func viewDidLayoutSubviews() {
|
||||
@@ -72,9 +93,15 @@ final class ListDescriptionViewController: UIViewController {
|
||||
// MARK: - Functions
|
||||
private extension ListDescriptionViewController {
|
||||
|
||||
func isValidListName(_ text: String) -> Bool {
|
||||
let regEx = "^[a-zA-Z0-9]{1,20}$"
|
||||
return text.range(of: "\(regEx)", options: .regularExpression) != nil
|
||||
@objc func handleTextChange() {
|
||||
guard let text = descriptionTextField.text else { return }
|
||||
if text.isValid(.listDescription) {
|
||||
navigationView.rightNavButton.isEnabled = true
|
||||
validationPrompt.text = ""
|
||||
} else {
|
||||
navigationView.rightNavButton.isEnabled = false
|
||||
validationPrompt.text = "Invalid Description. Please use only letters and digits. The maximum number of symbols is 500."
|
||||
}
|
||||
}
|
||||
|
||||
@objc func returnBack() {
|
||||
@@ -82,6 +109,10 @@ private extension ListDescriptionViewController {
|
||||
}
|
||||
|
||||
@objc func doneButtonClicked() {
|
||||
|
||||
guard let newDescription = descriptionTextField.text else { return }
|
||||
delegate?.changeListDescription(description: newDescription)
|
||||
|
||||
let domains = getBlockedLists().userBlockListsDefaults
|
||||
var userList = domains[listName]
|
||||
|
||||
@@ -99,23 +130,3 @@ private extension ListDescriptionViewController {
|
||||
view.endEditing(true)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - TextField delegate methods
|
||||
extension ListDescriptionViewController: UITextFieldDelegate {
|
||||
|
||||
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
|
||||
if textField == descriptionTextField {
|
||||
|
||||
if let text = descriptionTextField.text {
|
||||
if self.isValidListName(text) == true {
|
||||
navigationView.rightNavButton.isEnabled = true
|
||||
navigationView.rightNavButton.setTitleColor(.tunnelsBlue, for: .normal)
|
||||
} else {
|
||||
navigationView.rightNavButton.isEnabled = false
|
||||
navigationView.rightNavButton.setTitleColor(.gray, for: .normal)
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,14 @@
|
||||
|
||||
import UIKit
|
||||
|
||||
protocol ListDetailViewControllerDelegate {
|
||||
func changeListName(name: String)
|
||||
}
|
||||
|
||||
final class ListDetailViewController: UIViewController {
|
||||
|
||||
var delegate: ListDetailViewControllerDelegate?
|
||||
|
||||
var listName = ""
|
||||
|
||||
// MARK: - Properties
|
||||
@@ -21,11 +27,10 @@ final class ListDetailViewController: UIViewController {
|
||||
view.leftNavButton.addTarget(self, action: #selector(returnBack), for: .touchUpInside)
|
||||
view.rightNavButton.setTitle("DONE", for: .normal)
|
||||
view.rightNavButton.addTarget(self, action: #selector(doneButtonClicked), for: .touchUpInside)
|
||||
view.rightNavButton.tintColor = .gray
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var listNameTextField: UITextField = {
|
||||
lazy var listNameTextField: UITextField = {
|
||||
let view = UITextField()
|
||||
view.text = listName
|
||||
view.font = fontMedium17
|
||||
@@ -33,9 +38,19 @@ final class ListDetailViewController: UIViewController {
|
||||
view.backgroundColor = .systemBackground
|
||||
view.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: .zero))
|
||||
view.leftViewMode = .always
|
||||
view.addTarget(self, action: #selector(handleTextChange), for: .editingChanged)
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var validationPrompt: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .red
|
||||
label.font = fontRegular14
|
||||
label.textAlignment = .left
|
||||
label.numberOfLines = 0
|
||||
return label
|
||||
}()
|
||||
|
||||
// MARK: - Lifecycle
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
@@ -58,6 +73,11 @@ final class ListDetailViewController: UIViewController {
|
||||
listNameTextField.anchors.leading.marginsPin()
|
||||
listNameTextField.anchors.trailing.marginsPin()
|
||||
listNameTextField.anchors.height.equal(40)
|
||||
|
||||
view.addSubview(validationPrompt)
|
||||
validationPrompt.anchors.top.spacing(8, to: listNameTextField.anchors.bottom)
|
||||
validationPrompt.anchors.leading.marginsPin()
|
||||
validationPrompt.anchors.trailing.marginsPin()
|
||||
}
|
||||
|
||||
override func viewDidLayoutSubviews() {
|
||||
@@ -67,11 +87,17 @@ final class ListDetailViewController: UIViewController {
|
||||
}
|
||||
|
||||
// MARK: - Functions
|
||||
private extension ListDetailViewController {
|
||||
extension ListDetailViewController {
|
||||
|
||||
func isValidListName(_ text: String) -> Bool {
|
||||
let regEx = "^[a-zA-Z0-9]{1,20}$"
|
||||
return text.range(of: "\(regEx)", options: .regularExpression) != nil
|
||||
@objc func handleTextChange() {
|
||||
guard let text = listNameTextField.text else { return }
|
||||
if text.isValid(.listName) {
|
||||
navigationView.rightNavButton.isEnabled = true
|
||||
validationPrompt.text = ""
|
||||
} else {
|
||||
navigationView.rightNavButton.isEnabled = false
|
||||
validationPrompt.text = "Invalid name. Please use only letters and digits. The maximum number of symbols is 20."
|
||||
}
|
||||
}
|
||||
|
||||
@objc func returnBack() {
|
||||
@@ -79,31 +105,14 @@ private extension ListDetailViewController {
|
||||
}
|
||||
|
||||
@objc func doneButtonClicked() {
|
||||
|
||||
guard let newListName = listNameTextField.text else { return }
|
||||
delegate?.changeListName(name: newListName)
|
||||
changeBlockedListName(from: listName, to: newListName)
|
||||
navigationController?.popViewController(animated: true)
|
||||
// TODO: - add new list name to defaults if changed
|
||||
}
|
||||
|
||||
@objc func dismissKeyboard() {
|
||||
view.endEditing(true)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - TextField delegate methods
|
||||
extension ListDetailViewController: UITextFieldDelegate {
|
||||
|
||||
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
|
||||
if textField == listNameTextField {
|
||||
|
||||
if let text = listNameTextField.text {
|
||||
if self.isValidListName(text) == true {
|
||||
navigationView.rightNavButton.isEnabled = true
|
||||
navigationView.rightNavButton.setTitleColor(.tunnelsBlue, for: .normal)
|
||||
} else {
|
||||
navigationView.rightNavButton.isEnabled = false
|
||||
navigationView.rightNavButton.setTitleColor(.gray, for: .normal)
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,9 @@ import CocoaLumberjackSwift
|
||||
final class ListSettingsViewController: UIViewController {
|
||||
|
||||
// MARK: - Properties
|
||||
private var blockedList: UserBlockListsGroup?
|
||||
|
||||
var listName = ""
|
||||
var descriptionText = ""
|
||||
|
||||
var blockedList: UserBlockListsGroup?
|
||||
|
||||
weak var blockListVC: BlockListViewController?
|
||||
|
||||
@@ -24,7 +22,7 @@ final class ListSettingsViewController: UIViewController {
|
||||
|
||||
lazy var navigationView: ConfiguredNavigationView = {
|
||||
let view = ConfiguredNavigationView()
|
||||
view.titleLabel.text = listName
|
||||
view.titleLabel.text = "List Settings"
|
||||
view.leftNavButton.setTitle(NSLocalizedString("BACK", comment: ""), for: .normal)
|
||||
view.leftNavButton.setImage(UIImage(systemName: "chevron.left"), for: .normal)
|
||||
view.leftNavButton.addTarget(self, action: #selector(backButtonClicked), for: .touchUpInside)
|
||||
@@ -66,6 +64,12 @@ final class ListSettingsViewController: UIViewController {
|
||||
configureTableView()
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
let userBlockedLists = getBlockedLists().userBlockListsDefaults
|
||||
blockedList = userBlockedLists[listName]
|
||||
}
|
||||
|
||||
// MARK: - Configure UI
|
||||
func configureUI() {
|
||||
view.addSubview(navigationView)
|
||||
@@ -152,8 +156,7 @@ extension ListSettingsViewController: UITableViewDataSource {
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
let userBlockedLists = getBlockedLists().userBlockListsDefaults
|
||||
let numberOfDomains = userBlockedLists[listName]?.domains.count
|
||||
let numberOfDomains = blockedList?.domains.count
|
||||
|
||||
switch section {
|
||||
case 0, 1: return 1
|
||||
@@ -167,29 +170,25 @@ extension ListSettingsViewController: UITableViewDataSource {
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
let userBlockedLists = getBlockedLists().userBlockListsDefaults
|
||||
let domains = userBlockedLists[listName]?.domains
|
||||
|
||||
switch indexPath.section {
|
||||
case 0:
|
||||
guard let cell = tableView.dequeueReusableCell(withIdentifier: ListBlockedTableViewCell.identifier, for: indexPath) as? ListBlockedTableViewCell else {
|
||||
return UITableViewCell()
|
||||
}
|
||||
cell.label.text = userBlockedLists[listName]?.name
|
||||
cell.label.text = listName
|
||||
return cell
|
||||
case 1:
|
||||
guard let cell = tableView.dequeueReusableCell(withIdentifier: ListBlockedTableViewCell.identifier, for: indexPath) as? ListBlockedTableViewCell else {
|
||||
return UITableViewCell()
|
||||
}
|
||||
|
||||
cell.label.text = userBlockedLists[listName]?.description ?? "Description"
|
||||
|
||||
cell.label.text = blockedList?.description ?? "Description"
|
||||
return cell
|
||||
case 2:
|
||||
guard let cell = tableView.dequeueReusableCell(withIdentifier: DomainsBlockedTableViewCell.identifier, for: indexPath) as? DomainsBlockedTableViewCell else {
|
||||
return UITableViewCell()
|
||||
}
|
||||
cell.label.text = domains?[indexPath.row].name
|
||||
cell.label.text = blockedList?.domains[indexPath.row].name
|
||||
return cell
|
||||
default:
|
||||
return UITableViewCell()
|
||||
@@ -201,10 +200,13 @@ extension ListSettingsViewController: UITableViewDataSource {
|
||||
switch indexPath.section {
|
||||
case 0:
|
||||
let vc = ListDetailViewController()
|
||||
vc.delegate = self
|
||||
vc.listName = listName
|
||||
navigationController?.pushViewController(vc, animated: true)
|
||||
|
||||
case 1:
|
||||
let vc = ListDescriptionViewController()
|
||||
vc.delegate = self
|
||||
vc.listName = listName
|
||||
navigationController?.pushViewController(vc, animated: true)
|
||||
default:
|
||||
@@ -227,13 +229,10 @@ extension ListSettingsViewController {
|
||||
func saveNewDomain(userEnteredDomainName: String) {
|
||||
didMakeChange = true
|
||||
DDLogInfo("Adding custom domain - \(userEnteredDomainName)")
|
||||
|
||||
addDomainToBlockedList(domain: userEnteredDomainName, for: listName)
|
||||
blockedList = getBlockedLists().userBlockListsDefaults[listName]
|
||||
|
||||
let domains = getBlockedLists().userBlockListsDefaults
|
||||
let userList = domains[listName]
|
||||
|
||||
if let list = userList {
|
||||
addDomainToBlockedList(domain: userEnteredDomainName, for: list.name.lowercased())
|
||||
}
|
||||
tableView.reloadData()
|
||||
}
|
||||
|
||||
@@ -244,13 +243,25 @@ extension ListSettingsViewController {
|
||||
if let txtField = alertController.textFields?.first, let text = txtField.text {
|
||||
|
||||
self.saveNewDomain(userEnteredDomainName: text)
|
||||
self.tableView.reloadData()
|
||||
}
|
||||
}
|
||||
|
||||
saveAction.isEnabled = false
|
||||
|
||||
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (_) in }
|
||||
alertController.addTextField { (textField) in
|
||||
textField.keyboardType = .URL
|
||||
textField.placeholder = "domain-to-block URL"
|
||||
}
|
||||
|
||||
NotificationCenter.default.addObserver(
|
||||
forName: UITextField.textDidChangeNotification,
|
||||
object: alertController.textFields?.first,
|
||||
queue: .main) { (notification) -> Void in
|
||||
guard let textFieldText = alertController.textFields?.first?.text else { return }
|
||||
saveAction.isEnabled = textFieldText.isValid(.domainName)
|
||||
}
|
||||
|
||||
alertController.addAction(saveAction)
|
||||
alertController.addAction(cancelAction)
|
||||
self.present(alertController, animated: true, completion: nil)
|
||||
@@ -308,8 +319,7 @@ extension ListSettingsViewController {
|
||||
}
|
||||
|
||||
@objc func exportList(_ sender: UIButton) {
|
||||
let domains = getBlockedLists().userBlockListsDefaults
|
||||
var domainsList = domains[listName]?.domains
|
||||
let domainsList = blockedList?.domains
|
||||
|
||||
guard let url = domainsList?.first?.exportToURL() else { return }
|
||||
|
||||
@@ -321,3 +331,18 @@ extension ListSettingsViewController {
|
||||
present(activity, animated: true, completion: nil)
|
||||
}
|
||||
}
|
||||
|
||||
extension ListSettingsViewController: ListDetailViewControllerDelegate {
|
||||
|
||||
func changeListName(name: String) {
|
||||
listName = name
|
||||
tableView.reloadData()
|
||||
}
|
||||
}
|
||||
|
||||
extension ListSettingsViewController: ListDescriptionViewControllerDelegate {
|
||||
|
||||
func changeListDescription(description: String) {
|
||||
tableView.reloadData()
|
||||
}
|
||||
}
|
||||
|
||||
152
LockdowniOS/OverallStatiscticView.swift
Normal file
152
LockdowniOS/OverallStatiscticView.swift
Normal file
@@ -0,0 +1,152 @@
|
||||
//
|
||||
// OverallStatiscticView.swift
|
||||
// Lockdown
|
||||
//
|
||||
// Created by Aliaksandr Dvoineu on 18.04.23.
|
||||
// Copyright © 2023 Confirmed Inc. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
struct OverallStatiscticViewModel {
|
||||
let enabled: Int
|
||||
let disabled: Int
|
||||
let requests: Int
|
||||
let blocked: Int
|
||||
}
|
||||
|
||||
final class BoxLabelView: UIView {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
lazy var boxView: UIView = {
|
||||
let view = UIView()
|
||||
view.layer.cornerRadius = 4
|
||||
view.layer.borderColor = UIColor.lightGray.cgColor
|
||||
view.layer.borderWidth = 1
|
||||
view.anchors.height.equal(65)
|
||||
return view
|
||||
}()
|
||||
|
||||
lazy var numberLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .label
|
||||
label.font = fontBold24
|
||||
label.textAlignment = .center
|
||||
return label
|
||||
}()
|
||||
|
||||
lazy var boxTitle: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .label
|
||||
label.font = fontRegular14
|
||||
label.textAlignment = .center
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var stackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.addArrangedSubview(boxView)
|
||||
stackView.addArrangedSubview(boxTitle)
|
||||
stackView.axis = .vertical
|
||||
stackView.distribution = .fillProportionally
|
||||
stackView.spacing = 8
|
||||
return stackView
|
||||
}()
|
||||
|
||||
// MARK: - Initializer
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
configureUI()
|
||||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
// MARK: - Functions
|
||||
|
||||
private func configureUI() {
|
||||
addSubview(stackView)
|
||||
stackView.anchors.edges.pin()
|
||||
|
||||
boxView.addSubview(numberLabel)
|
||||
numberLabel.anchors.centerX.align()
|
||||
numberLabel.anchors.centerY.align()
|
||||
}
|
||||
}
|
||||
|
||||
final class OverallStatiscticView: UIView {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
private let enabledBoxView: BoxLabelView = {
|
||||
let box = BoxLabelView()
|
||||
box.numberLabel.text = "15"
|
||||
box.boxTitle.text = "Enabled"
|
||||
return box
|
||||
}()
|
||||
|
||||
private let disabledBoxView: BoxLabelView = {
|
||||
let box = BoxLabelView()
|
||||
box.numberLabel.text = "1"
|
||||
box.boxTitle.text = "Disabled"
|
||||
return box
|
||||
}()
|
||||
|
||||
private let requestsBoxView: BoxLabelView = {
|
||||
let box = BoxLabelView()
|
||||
box.numberLabel.text = "2.3M"
|
||||
box.boxTitle.text = "Requests"
|
||||
return box
|
||||
}()
|
||||
|
||||
private let blockedBoxView: BoxLabelView = {
|
||||
let box = BoxLabelView()
|
||||
box.numberLabel.text = "2.4K"
|
||||
box.boxTitle.text = "Blocked"
|
||||
return box
|
||||
}()
|
||||
|
||||
private lazy var stackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.addArrangedSubview(enabledBoxView)
|
||||
stackView.addArrangedSubview(disabledBoxView)
|
||||
stackView.addArrangedSubview(requestsBoxView)
|
||||
stackView.addArrangedSubview(blockedBoxView)
|
||||
stackView.axis = .horizontal
|
||||
stackView.distribution = .fillEqually
|
||||
stackView.alignment = .center
|
||||
stackView.spacing = 8
|
||||
return stackView
|
||||
}()
|
||||
|
||||
// MARK: - Initializer
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
configureUI()
|
||||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
// MARK: - Functions
|
||||
|
||||
private func configureUI() {
|
||||
|
||||
addSubview(stackView)
|
||||
stackView.anchors.top.marginsPin()
|
||||
stackView.anchors.bottom.marginsPin()
|
||||
stackView.anchors.leading.pin()
|
||||
stackView.anchors.trailing.pin()
|
||||
}
|
||||
|
||||
func configure(with model: OverallStatiscticViewModel) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@ final class StaticTableView: UITableView {
|
||||
invalidateIntrinsicContentSize()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override var intrinsicContentSize: CGSize {
|
||||
layoutIfNeeded()
|
||||
return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height)
|
||||
|
||||
40
LockdowniOS/String+Extensions.swift
Normal file
40
LockdowniOS/String+Extensions.swift
Normal file
@@ -0,0 +1,40 @@
|
||||
//
|
||||
// String+Extentions.swift
|
||||
// Lockdown
|
||||
//
|
||||
// Created by Aliaksandr Dvoineu on 25.04.23.
|
||||
// Copyright © 2023 Confirmed Inc. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension String {
|
||||
|
||||
enum ValidityType {
|
||||
case listName
|
||||
case domainName
|
||||
case listDescription
|
||||
}
|
||||
|
||||
enum Regex: String {
|
||||
case listName = "^[a-zA-Z0-9\\s]{1,20}$"
|
||||
case domainName = "^([a-zA-Z0-9]+(\\.[a-zA-Z0-9]+)+.*)$"
|
||||
case listDescription = "^[a-zA-Z0-9\\s]{1,500}$"
|
||||
}
|
||||
|
||||
func isValid(_ validityType: ValidityType) -> Bool {
|
||||
let format = "SELF MATCHES %@"
|
||||
var regex = ""
|
||||
|
||||
switch validityType {
|
||||
case .listName:
|
||||
regex = Regex.listName.rawValue
|
||||
case .domainName:
|
||||
regex = Regex.domainName.rawValue
|
||||
case .listDescription:
|
||||
regex = Regex.listDescription.rawValue
|
||||
}
|
||||
|
||||
return NSPredicate(format: format, regex).evaluate(with: self)
|
||||
}
|
||||
}
|
||||
117
LockdowniOS/TrackersGroupView.swift
Normal file
117
LockdowniOS/TrackersGroupView.swift
Normal file
@@ -0,0 +1,117 @@
|
||||
//
|
||||
// TrackersGroupView.swift
|
||||
// Lockdown
|
||||
//
|
||||
// Created by Aliaksandr Dvoineu on 18.04.23.
|
||||
// Copyright © 2023 Confirmed Inc. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
struct TrackersGroupViewModel {
|
||||
let image: UIImage
|
||||
let title: String
|
||||
let number: Int
|
||||
}
|
||||
|
||||
final class TrackersGroupView: UIView {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
private lazy var separator: UIView = {
|
||||
let view = UIView()
|
||||
view.backgroundColor = .lightGray
|
||||
view.anchors.height.equal(1)
|
||||
return view
|
||||
}()
|
||||
|
||||
lazy var placeNumber: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .label
|
||||
label.font = fontMedium15
|
||||
label.textAlignment = .left
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var trackersImage: UIImageView = {
|
||||
let image = UIImageView()
|
||||
image.contentMode = .center
|
||||
image.layer.masksToBounds = true
|
||||
return image
|
||||
}()
|
||||
|
||||
private lazy var titleLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .label
|
||||
label.font = fontMedium15
|
||||
label.text = "Game Marketing"
|
||||
label.textAlignment = .left
|
||||
return label
|
||||
}()
|
||||
|
||||
lazy var number: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .label
|
||||
label.font = fontBold18
|
||||
label.textColor = .red
|
||||
label.textAlignment = .right
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var lockImage: UIImageView = {
|
||||
let image = UIImageView()
|
||||
image.contentMode = .right
|
||||
image.layer.masksToBounds = true
|
||||
image.image = UIImage(named: "icn_lock")
|
||||
return image
|
||||
}()
|
||||
|
||||
private lazy var stackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.addArrangedSubview(placeNumber)
|
||||
stackView.addArrangedSubview(trackersImage)
|
||||
stackView.addArrangedSubview(titleLabel)
|
||||
// stackView.addArrangedSubview(number)
|
||||
stackView.addArrangedSubview(lockImage)
|
||||
stackView.axis = .horizontal
|
||||
stackView.distribution = .fillProportionally
|
||||
stackView.alignment = .leading
|
||||
stackView.spacing = 8
|
||||
stackView.anchors.height.equal(40)
|
||||
return stackView
|
||||
}()
|
||||
|
||||
// MARK: - Initializer
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
configureUI()
|
||||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
// MARK: - Functions
|
||||
|
||||
private func configureUI() {
|
||||
|
||||
addSubview(separator)
|
||||
separator.anchors.leading.pin()
|
||||
separator.anchors.trailing.pin()
|
||||
separator.anchors.top.pin()
|
||||
|
||||
addSubview(stackView)
|
||||
stackView.anchors.top.spacing(12, to: separator.anchors.bottom)
|
||||
stackView.anchors.bottom.pin()
|
||||
stackView.anchors.leading.marginsPin()
|
||||
stackView.anchors.trailing.marginsPin()
|
||||
}
|
||||
|
||||
func configure(with model: TrackersGroupViewModel) {
|
||||
trackersImage.image = model.image
|
||||
titleLabel.text = model.title
|
||||
number.text = String(model.number)
|
||||
}
|
||||
}
|
||||
@@ -292,3 +292,5 @@ let fontBold11 = UIFont(name: "Montserrat-Bold", size: 11)!
|
||||
let fontBold13 = UIFont(name: "Montserrat-Bold", size: 13)!
|
||||
let fontBold15 = UIFont(name: "Montserrat-Bold", size: 15)!
|
||||
let fontBold18 = UIFont(name: "Montserrat-Bold", size: 18)!
|
||||
let fontBold24 = UIFont(name: "Montserrat-Bold", size: 24)!
|
||||
let fontBold28 = UIFont(name: "Montserrat-Bold", size: 28)!
|
||||
|
||||
Reference in New Issue
Block a user