Added Fame Digital. Added actor release scraping to DDF Network. Improved q and Gamma scraper.

This commit is contained in:
ThePendulum 2020-02-06 23:15:28 +01:00
parent db14eaa5f9
commit 6e1de52a40
42 changed files with 752 additions and 168 deletions

View File

@ -11,10 +11,18 @@ module.exports = {
},
// include: [],
// exclude: [],
exclude: [
['famedigital', [
'lowartfilms',
]],
],
profiles: [
'evilangel',
[
// Gamma; Evil angel and Wicked have their own assets
'evilangel',
'famedigital',
],
[
// Gamma; Evil Angel + Devil's Film and Wicked have their own assets
'xempire',
'blowpass',
],
@ -30,9 +38,9 @@ module.exports = {
'men',
'transangels',
],
'wicked',
'brazzers',
'milehighmedia',
'wicked',
'21sextury',
'julesjordan',
'naughtyamerica',
@ -47,6 +55,7 @@ module.exports = {
'freeonesLegacy',
],
fetchAfter: [1, 'week'],
nullDateLimit: 10,
media: {
path: './media',
thumbnailSize: 320, // width for 16:9 will be exactly 576px

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 906 115" style="enable-background:new 0 0 906 115;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{fill:url(#SVGID_2_);}
.st2{fill:url(#SVGID_3_);}
.st3{fill:url(#SVGID_4_);}
.st4{fill:url(#SVGID_5_);}
</style>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="426.8527" y1="3.7939" x2="426.8527" y2="112.7417">
<stop offset="0" style="stop-color:#D53287"/>
<stop offset="1" style="stop-color:#EF569F"/>
</linearGradient>
<polygon class="st0" points="456.9,88.9 456.9,112.9 396.8,112.9 396.8,2.7 423.8,2.7 423.8,88.9 "/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="631.7629" y1="3.7939" x2="631.7629" y2="112.7417">
<stop offset="0" style="stop-color:#D53287"/>
<stop offset="1" style="stop-color:#EF569F"/>
</linearGradient>
<polygon class="st1" points="579.6,2.4 609.3,2.4 631.5,80.2 654.2,2.4 683.9,2.4 646.4,113.2 617.2,113.2 "/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="726.6643" y1="3.7939" x2="726.6643" y2="112.7417">
<stop offset="0" style="stop-color:#D53287"/>
<stop offset="1" style="stop-color:#EF569F"/>
</linearGradient>
<polygon class="st2" points="695.8,2.4 695.8,113.2 757.5,113.2 757.5,88.4 723,88.4 723,69 756.7,69 756.7,44.3 722.3,44.3
722.3,27.4 757.5,27.4 757.5,2.4 "/>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="817.6428" y1="3.7939" x2="817.6428" y2="112.7417">
<stop offset="0" style="stop-color:#D53287"/>
<stop offset="1" style="stop-color:#EF569F"/>
</linearGradient>
<path class="st3" d="M830.2,75.3c0,0,27.5-5,27.5-32.9c0-27.9-20.9-40.1-34.4-40.1c-13.5,0-48.4,0-48.4,0v110.8h26.9V77.3
l26.2,35.9h32.4L830.2,75.3z M816.3,57.8c-5,0-14.9,0-14.9,0V27.1H816c0,0,15.2,0.5,15.2,14.4C831.2,55.3,821.3,57.8,816.3,57.8z"
/>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="529.9314" y1="3.7939" x2="529.9314" y2="112.7417">
<stop offset="0" style="stop-color:#D53287"/>
<stop offset="1" style="stop-color:#EF569F"/>
</linearGradient>
<path class="st4" d="M569.2,40.8C542.7,17.6,505.1,1,505.1,1c3.3,28-9.6,37.2-26.9,52.8c-17.3,15.6-13.3,33.9-11.6,38.2
c1.7,4.3,9,20.9,32.6,20.9s30.6-16,30.6-16c0,4,22.7,27.9,50.2,12.6C605.8,95.2,595.5,63.7,569.2,40.8z M558.2,92.3
c-15.1,10.3-27.6-5.8-27.6-8.5c0,0-3.8,10.7-16.8,10.7c-13,0-17-11.2-17.9-14.1s-3.1-15.2,6.4-25.7c9.5-10.5,16.6-16.7,14.8-35.5
c0,0,20.7,11.2,35.3,26.8C566.7,61.5,572.4,82.7,558.2,92.3z"/>
</g>
<g>
<path d="M78.4,83.1c0,3.9-0.6,7.6-1.7,11.1c-1.1,3.5-2.7,6.5-4.7,9.1c-2,2.6-4.3,4.6-6.9,6.1c-2.6,1.5-5.5,2.2-8.5,2.2H13.9V3.8
h38.3c2.8,0,5.5,0.7,8,2.1c2.5,1.4,4.7,3.3,6.6,5.7c1.9,2.4,3.4,5.3,4.5,8.6c1.1,3.3,1.7,6.8,1.7,10.6c0,1.9-0.2,4-0.6,6.3
c-0.4,2.3-1.1,4.6-2.1,6.8c-1,2.3-2.2,4.4-3.8,6.4c-1.5,2-3.4,3.7-5.6,5.1c3.1,1,5.7,2.5,8,4.5c2.2,2,4.1,4.3,5.5,6.9
c1.4,2.6,2.4,5.3,3.1,8.1C78.1,77.7,78.4,80.5,78.4,83.1z M69.6,31.1c0-3.2-0.5-6.3-1.4-9.1c-0.9-2.8-2.2-5.3-3.8-7.5
s-3.5-3.8-5.7-5.1c-2.2-1.2-4.5-1.8-6.9-1.8H16.9v47.3h34.9c2.5,0,4.8-0.6,6.9-1.9c2.1-1.3,4-3,5.6-5.1s2.9-4.7,3.8-7.6
C69.1,37.4,69.6,34.3,69.6,31.1z M75.1,83c0-3.4-0.5-6.6-1.5-9.6c-1-3-2.3-5.6-4.1-7.9c-1.8-2.2-3.9-4-6.3-5.3
c-2.4-1.3-5.1-2-7.9-2H16.9v49.6h39.5c2.5,0,5-0.7,7.2-2c2.3-1.3,4.3-3.1,6-5.4c1.7-2.3,3-4.9,4-7.9S75.1,86.4,75.1,83z"/>
<path d="M160,3.8v63.7c0,6.4-0.9,12.3-2.7,17.9c-1.8,5.6-4.2,10.4-7.3,14.6c-3.1,4.2-6.7,7.5-10.8,9.9c-4.1,2.4-8.6,3.6-13.4,3.6
c-4.8,0-9.3-1.2-13.5-3.6c-4.2-2.4-7.8-5.7-10.9-9.8c-3.1-4.1-5.6-9-7.3-14.5C92.2,80,91.4,74,91.4,67.7V3.8h3v64.4
c0,5.7,0.8,11.1,2.5,16.2c1.6,5,3.9,9.4,6.8,13.2c2.9,3.8,6.2,6.8,10,9c3.8,2.2,7.8,3.3,12.2,3.3c4.3,0,8.3-1.1,12.1-3.2
c3.8-2.2,7.1-5.1,9.9-8.9c2.8-3.8,5.1-8.2,6.7-13.2c1.6-5,2.5-10.4,2.5-16V3.8H160z"/>
<path d="M241.2,86.7c0,5-1.1,9.2-3.2,12.7c-2.1,3.4-4.9,6.2-8.1,8.3c-3.3,2.1-6.9,3.6-10.8,4.6c-3.9,0.9-7.7,1.4-11.2,1.4
c-2.7,0-5.5-0.2-8.3-0.7c-2.9-0.5-5.8-1.2-8.6-2.2c-2.9-1-5.7-2.4-8.6-4c-2.8-1.6-5.6-3.6-8.2-6.1l2.5-3.2c2.3,2.1,4.7,3.9,7.4,5.5
c2.7,1.6,5.4,2.9,8.1,3.9c2.7,1,5.5,1.8,8.1,2.3c2.7,0.5,5.2,0.7,7.4,0.7c2.4,0,4.9-0.2,7.5-0.6c2.6-0.4,5.2-1.1,7.6-2
c2.5-0.9,4.8-2.2,6.9-3.8c2.1-1.6,3.9-3.5,5.4-5.9c0.8-1.3,1.5-2.8,2-4.7c0.5-1.9,0.8-3.9,0.8-5.9c0-3.5-0.6-6.5-1.8-9
c-1.2-2.5-2.7-4.6-4.4-6.4c-1.7-1.8-3.5-3.2-5.5-4.3c-2-1.1-3.7-2-5.2-2.6c-1.1-0.5-2.2-1-3.3-1.3c-1-0.4-2-0.7-3-1.1l-17.4-6.1
c-3.3-1.2-6.4-2.5-9.3-4.1c-2.8-1.6-5.3-3.4-7.4-5.6c-2.1-2.2-3.7-4.7-4.8-7.6c-1.1-2.9-1.7-6.4-1.7-10.3c0-4.9,1-9.1,3.1-12.5
c2.1-3.4,4.7-6.1,7.9-8.2c3.2-2.1,6.8-3.6,10.6-4.5c3.9-0.9,7.7-1.4,11.3-1.4c5.4,0,10.8,0.9,16.3,2.8c5.4,1.9,10.7,5.4,15.8,10.6
l-2.2,3c-2.2-2.2-4.6-4.2-7.1-5.8c-2.5-1.6-5.1-2.9-7.7-3.9c-2.6-1-5.2-1.7-7.7-2.2c-2.5-0.5-4.9-0.7-7-0.7c-1.9,0-4.2,0.2-6.7,0.5
c-2.5,0.4-5,1-7.5,1.9c-2.5,0.9-4.9,2.2-7.2,3.8c-2.3,1.6-4.2,3.7-5.7,6.2c-0.8,1.3-1.5,2.9-2,4.8c-0.5,2-0.8,4-0.8,5.9
c0,3.5,0.6,6.5,1.9,9c1.3,2.5,2.9,4.7,4.8,6.5c1.9,1.8,3.9,3.3,6.1,4.4c2.2,1.1,4.2,2,6,2.8c1.2,0.4,2.4,0.9,3.5,1.2
c1.1,0.4,2.2,0.7,3.1,1.1l14.5,5.1c3.3,1.2,6.3,2.5,9.2,4.1c2.9,1.6,5.4,3.5,7.5,5.7c2.1,2.2,3.8,4.8,5.1,7.8
C240.6,79.4,241.2,82.8,241.2,86.7z"/>
<path d="M315.7,7.6h-32.2v104h-3V7.6h-32.2V3.8h67.4V7.6z"/>
<path d="M387.9,3.8l-33.6,60.9v46.9h-3V64.7L317.7,3.8h3.7l31.4,57l31.2-57H387.9z"/>
</g>
<g>
<path d="M869.1,6.4c-0.5,0-1-0.2-1.4-0.6c-0.4-0.4-0.6-0.8-0.6-1.4c0-0.6,0.2-1,0.6-1.4c0.4-0.4,0.9-0.6,1.4-0.6
c0.6,0,1,0.2,1.4,0.6c0.4,0.4,0.6,0.8,0.6,1.4c0,0.5-0.2,1-0.6,1.4C870.1,6.3,869.6,6.4,869.1,6.4z"/>
<path d="M871.1,34.3c-0.7-0.6-1.3-1.3-1.8-2c-0.5-0.8-1-1.6-1.3-2.4c-0.4-0.8-0.6-1.7-0.8-2.6c-0.2-0.9-0.3-1.8-0.3-2.6
c0-2,0.4-3.8,1.1-5.5c0.7-1.7,1.7-3.2,2.9-4.4c1.2-1.3,2.7-2.2,4.4-2.9c1.7-0.7,3.4-1.1,5.3-1.1c1.9,0,3.7,0.4,5.3,1.1
c1.7,0.7,3.1,1.7,4.4,2.9c1.2,1.2,2.2,2.7,2.9,4.4c0.7,1.7,1.1,3.5,1.1,5.5c0,1.8-0.4,3.6-1.1,5.2c-0.7,1.6-1.8,3.1-3.1,4.5
l-0.8-0.9c1.2-1.2,2.2-2.5,2.9-4c0.7-1.5,1.1-3.1,1.1-4.8c0-1.8-0.3-3.5-1-5c-0.7-1.6-1.6-2.9-2.8-4c-1.2-1.1-2.5-2-4-2.7
c-1.5-0.6-3.1-1-4.8-1c-1.7,0-3.3,0.3-4.8,1c-1.5,0.6-2.9,1.5-4,2.7c-1.2,1.1-2.1,2.5-2.8,4c-0.7,1.5-1,3.2-1,5
c0,0.8,0.1,1.6,0.3,2.4s0.5,1.7,0.8,2.4c0.4,0.8,0.8,1.5,1.3,2.2c0.5,0.7,1.1,1.3,1.7,1.7L871.1,34.3z"/>
<path d="M880.5,65c-1.9,0-3.7-0.4-5.3-1.1c-1.7-0.7-3.1-1.7-4.4-2.9c-1.2-1.2-2.2-2.7-2.9-4.3c-0.7-1.7-1.1-3.4-1.1-5.3
c0-1.9,0.4-3.7,1.1-5.3c0.7-1.7,1.7-3.1,2.9-4.4c1.2-1.2,2.7-2.2,4.4-2.9c1.7-0.7,3.4-1.1,5.3-1.1c1.9,0,3.7,0.4,5.3,1.1
s3.1,1.7,4.4,2.9c1.2,1.2,2.2,2.7,2.9,4.4c0.7,1.7,1.1,3.4,1.1,5.3c0,1.9-0.4,3.7-1.1,5.3c-0.7,1.7-1.7,3.1-2.9,4.3
c-1.2,1.2-2.7,2.2-4.4,2.9C884.2,64.7,882.4,65,880.5,65z M880.5,63.8c1.7,0,3.3-0.3,4.8-1c1.5-0.7,2.9-1.6,4-2.7
c1.2-1.1,2.1-2.4,2.8-4c0.7-1.5,1-3.1,1-4.8c0-1.7-0.3-3.3-1-4.8c-0.7-1.5-1.6-2.8-2.8-4c-1.2-1.1-2.5-2-4-2.7
c-1.5-0.7-3.1-1-4.8-1c-1.7,0-3.3,0.3-4.8,1c-1.5,0.7-2.9,1.6-4,2.7c-1.2,1.1-2.1,2.4-2.8,4c-0.7,1.5-1,3.1-1,4.9
c0,1.7,0.3,3.3,1,4.8c0.7,1.5,1.6,2.8,2.8,4c1.2,1.1,2.5,2,4,2.7C877.2,63.4,878.8,63.8,880.5,63.8z"/>
<path d="M882.5,113.1h-15.1v-1.2h14.9c1.6,0,3-0.3,4.3-0.8c1.3-0.5,2.5-1.2,3.4-2.1c1-0.9,1.7-1.9,2.3-3.1s0.8-2.4,0.8-3.7
c0-1.3-0.3-2.6-0.8-3.7s-1.3-2.2-2.2-3.1c-0.9-0.9-2.1-1.6-3.4-2.1c-1.3-0.5-2.7-0.8-4.2-0.8h-15.1v-1.2h14.9c1.6,0,3-0.3,4.3-0.8
c1.3-0.5,2.5-1.2,3.4-2.1c1-0.9,1.7-2,2.3-3.1c0.5-1.2,0.8-2.4,0.8-3.8c0-1.3-0.3-2.6-0.8-3.8c-0.5-1.2-1.3-2.2-2.2-3.1
c-0.9-0.9-2-1.6-3.3-2.1c-1.3-0.5-2.7-0.8-4.2-0.8l-15.2,0v-1.2h26.1v1.2h-5.9c1.2,0.5,2.2,1.1,3,1.8c0.8,0.7,1.5,1.5,2,2.4
c0.5,0.9,0.9,1.8,1.2,2.7c0.2,1,0.4,1.9,0.4,2.9c0,1-0.1,2-0.4,3c-0.3,1-0.8,2-1.4,2.9c-0.6,0.9-1.4,1.8-2.4,2.5
c-1,0.8-2.2,1.4-3.6,2c2.7,1,4.6,2.3,5.9,4.1c1.3,1.8,1.9,3.9,1.9,6.3c0,1.5-0.3,2.9-0.9,4.2c-0.6,1.3-1.4,2.5-2.4,3.5
c-1,1-2.3,1.8-3.7,2.4C885.8,112.8,884.2,113.1,882.5,113.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 315 42" style="enable-background:new 0 0 315 42;" xml:space="preserve">
<style type="text/css">
.st0{fill:#E3087E;}
.st1{enable-background:new ;}
.st2{fill:#1D9CD7;}
.st3{fill:#706F6E;}
.st4{fill:#FFFFFF;}
</style>
<g>
<g>
<polygon class="st0" points="178.8,41.6 44.4,41.6 44.4,0.5 178.8,0.5 159.5,18.1 "/>
</g>
<g>
<g class="st1">
<path class="st2" d="M178.8,0.5h11.2v15.4H213V0.5h11.2v41.1H213V23.7h-23.1v17.8h-11.2V0.5z"/>
<path class="st2" d="M227,0.5h25.6c14.1,0,20.2,8.2,20.2,20.5c0,12.4-6.3,20.5-19.2,20.5H227V0.5z M238.2,33.7h12.4
c7.4,0,10.7-4.4,10.7-13.1c0-7.6-3.2-12.3-11.7-12.3h-11.4V33.7z"/>
</g>
</g>
<g class="st1">
<path class="st3" d="M170,13.7l0.7,0.8l-6,5l-0.7-0.8L170,13.7z M172.3,11.8l0.7,0.8l-1.3,1.1l-0.7-0.8L172.3,11.8z"/>
<path class="st3" d="M173.9,22.6c1.2-1,1-2.1,0.1-3.1c-1.4-1.7-2.9-1.7-4.2-0.6l-3.2,2.7l-0.7-0.8l6-5l0.7,0.8l-1.2,1l0,0
c0.8-0.3,2.3,0,3.4,1.3c1.6,2,1.1,3.4-0.3,4.6l-3.7,3.1l-0.7-0.8L173.9,22.6z"/>
</g>
<g class="st1">
<path class="st4" d="M50.2,4.9h29.5v6.3H59.1v7.2h19.2v6.3H59.1v13.2h-9V4.9z"/>
<path class="st4" d="M88.5,15.5l-6.1-2l1.6-4.5l5.8,2.3l-0.3-6.3h5.1l-0.3,6.3l5.8-2.3l1.6,4.5l-6.1,2l4.3,4.9l-3.7,2.9l-4.1-5.1
L88,23.2l-3.7-2.9L88.5,15.5z"/>
<path class="st4" d="M111,15.5l-6.1-2l1.6-4.5l5.8,2.3L112,4.9h5.1l-0.3,6.3l5.8-2.3l1.6,4.5l-6.1,2l4.3,4.9l-3.7,2.9l-4.1-5.1
l-4.1,5.1l-3.7-2.9L111,15.5z"/>
<path class="st4" d="M153.7,4.9h12.1l-15.2,13.3l16.3,19.7h-12.1l-11.2-14.3l-5.2,4.5v9.8h-9v-33h9v14.2L153.7,4.9z"/>
</g>
<g>
<path class="st4" d="M101,36.9c-2.9,0-6.1-0.4-9.5-1.4l1.7-5.8c7.7,2.2,14.8,0.8,18.1-1.4c1.2-0.8,1.5-1.5,1.5-1.6l6,0.7
c-0.2,2.2-1.7,4.3-4.2,5.9C111.8,35.3,107,36.9,101,36.9z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 620 109"><defs><style>.cls-1{fill:#eb2227;}</style></defs><title>devilsfilm-logo</title><path class="cls-1" d="M20.9,6.6H1v96.2H20.5c30.4,0,54.4-15.8,54.4-48.6S50.4,6.6,20.9,6.6ZM17.2,91.9H13V17.6h4.2c24.5,0,45.7,9.1,45.7,37.1S41.7,91.9,17.2,91.9Z"/><rect class="cls-1" x="242.2" y="6.6" width="12" height="96.22"/><polygon class="cls-1" points="274.2 6.6 262.2 6.6 262.2 102.8 303.4 102.8 303.4 91.9 274.2 91.9 274.2 6.6"/><path class="cls-1" d="M342.9,45.9L336,43.2c-6-2.3-13.4-6.3-13.4-13.8s8.4-13.7,16.1-13.7,11.9,3.1,15.4,9.1l9.6-5.7A27.4,27.4,0,0,0,338.9,4.6c-14.5,0-28.3,9.3-28.3,24.9,0,13.4,10,19.7,20.9,24.4l6.6,2.8c8.3,3.4,16.6,7.9,16.6,18.2S347.3,93.6,337,93.6,318.2,86,318.4,75.4l-12.1,2.6c2,15.4,14.2,26.9,29.7,26.9,17.2,0,30.8-12.5,30.8-30S356.5,51.3,342.9,45.9Z"/><polygon class="cls-1" points="397.6 102.8 409.6 102.8 409.6 55.6 443 55.6 443 44.6 409.6 44.6 409.6 17.6 444.2 17.6 444.2 6.6 397.6 6.6 397.6 102.8"/><rect class="cls-1" x="451.5" y="6.6" width="12" height="96.22"/><polygon class="cls-1" points="483 6.6 471 6.6 471 102.8 512.2 102.8 512.2 91.9 483 91.9 483 6.6"/><polygon class="cls-1" points="565.2 78.3 532.1 2.5 512.5 102.8 524.8 102.8 536.1 39.3 536.3 39.3 565.2 104.9 594 39.3 594.2 39.3 605.5 102.8 617.9 102.8 598.2 2.5 565.2 78.3"/><path class="cls-1" d="M198.8,77.8l-9.9-24.6A88.3,88.3,0,0,0,177.3,56l21.5,51.9L240.5,6.6H227.4Z"/><path class="cls-1" d="M188.6,52.6l-18.5-46H156.9l17.2,41.7A130.8,130.8,0,0,0,188.6,52.6Z"/><path class="cls-1" d="M307.5,6.8H291.2s2,13.2-3.8,32.3C287.4,39.1,300.5,25.1,307.5,6.8Z"/><path class="cls-1" d="M143,90.1a37.8,37.8,0,0,1-16.4,3.8c-20.2,0-35.8-16-37.6-35.4h65.6a19.9,19.9,0,0,1-3,5.3,81.7,81.7,0,0,1,30-10.8,105.9,105.9,0,0,1-29.5-10.4,17.3,17.3,0,0,1,2.6,5.1H89.5c3.2-18,18.3-32.1,37.4-32.1a39.6,39.6,0,0,1,16,3.4,13.2,13.2,0,0,1-6,3.3s15.5,0.8,28.9,10A281.4,281.4,0,0,1,147.2.8a29.7,29.7,0,0,1,.2,7.8,48,48,0,0,0-19.4-4c-28.3,0-51.2,22.2-51.2,50.7s22.7,49.6,50.2,49.6a52.7,52.7,0,0,0,20.4-4.3,29.7,29.7,0,0,1-.2,7.6,281.4,281.4,0,0,1,18.6-31.5c-13.4,9.2-28.9,10-28.9,10A13.1,13.1,0,0,1,143,90.1Z"/><path class="cls-1" d="M611.5,20a7.5,7.5,0,1,0-7.5-7.5A7.5,7.5,0,0,0,611.5,20Zm0-13.5a6,6,0,0,1,4.4,10l-1.4-2.2a6.2,6.2,0,0,0-1-1.2l-0.7-.5a3.1,3.1,0,0,0,1.9-.8,2.3,2.3,0,0,0,.6-1.6,2.6,2.6,0,0,0-.4-1.4,2,2,0,0,0-1-.9,5.3,5.3,0,0,0-1.8-.2h-4v9h1.2v-4h2.1l0.5,0.2,0.6,0.6,0.9,1.2,1.2,1.9h1.2A6,6,0,1,1,611.5,6.5Zm0.3,5.2h-2.6v-3h2.9a2.2,2.2,0,0,1,1.5.4,1.3,1.3,0,0,1,.5,1.1,1.5,1.5,0,0,1-.2.8,1.4,1.4,0,0,1-.7.5Z"/></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1824 484" style="enable-background:new 0 0 1824 484;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="M1440.3,315.9c-1.5-2-2.8-4.1-4.2-6.2c-14.1-20.7-25.1-43.5-42.2-62.5c1.7-0.9,3.3-1.7,4.9-2.6
c22-11.6,33.2-29.5,32.3-54.6c-0.6-16.1-8.4-27.8-23.3-32.6c-7.2-2.3-14.9-4.1-22.5-4.3c-29.1-0.7-58.3-0.7-87.4-0.9
c-0.5,0-0.9,0.3-1.5,0.5c0,4.9,0,9.8,0,15.1c1.8,0,3.3,0,4.7,0c14.4,0.1,16.7,2.4,16.8,17c0.1,24.3,0,48.7,0,73
c0,1.3-0.2,2.6-0.3,4.5c-7.6-2.5-14.8-5.1-22-7.2c-3.4-1-4.7-2.4-4.5-6.2c0.8-14.7-0.6-29.4-5.2-43.4c-3.3-10.2-7.6-20.1-11.6-30.7
c5.5-4.8,11.6-10,17.5-15.2c-1-3.5-2.4-3.2-5-1.5c-5.6,3.7-11.6,6.9-17.5,10.3c-17.2-25.7-39.4-43.8-67.4-54.9
c-1.1-0.4-2.1-2.8-2.1-4.2c0.8-13.1,1.7-26.3,2.7-39.4c1.3-18.1,2.7-36.2,3.9-54.3c0.1-1.2-1.3-2.5-2-3.7c-0.7,1.1-1.8,2.2-2.2,3.4
c-0.9,2.8-1.2,5.8-2.1,8.7c-4.7,14.4-9.5,28.7-14.3,43.1c-4.3,12.9-8.6,25.8-12.9,38.8c-1.2-0.1-2-0.1-2.8-0.2
c-28.6-3.7-55.7,0.9-81.4,13.9c-7,3.5-7.3,3.4-11-3.9c-0.4-0.7-0.6-1.8-1.2-2.2c-1.2-0.7-2.6-1.1-3.9-1.6c-0.2,0.5-0.5,0.9-0.7,1.4
c0.9,1.9,1.9,3.8,2.8,5.7c1,2.1,2,4.2,3,6.2c-0.3,0.4-0.4,0.7-0.7,0.9c-26.7,17.6-45.7,41.4-56.6,71.6c-0.4,1.1-2.6,2.4-3.9,2.3
c-7-0.2-14-1-20.9-1.2c-3.4-0.1-4.1-1.7-4.1-4.7c0.1-10.2-0.1-20.3,0.1-30.5c0.1-3.5,0.7-6.9,1.2-10.4c0.6-4.3,3.2-6.9,7.5-7.5
c5.1-0.6,10.2-0.9,15.4-1.4c0-5.2,0-10.3,0-15.6c-23.8,0-47.6,0-71.3,0c0,5.5,0,10.6,0,15.6c5.4,0.5,10.5,0.8,15.6,1.4
c4.1,0.5,7.1,2.9,7.3,7c1,14.5,1.6,29.1,2.3,44.8c-14.3-1.9-27.1-3.7-40-5.2c-1.1-0.1-2.3,1.5-4.4,2.9c14.4,4.8,27.2,9.2,40,13.3
c2.9,0.9,3.8,2.3,3.8,5.3c-0.1,17.8-0.1,35.7-0.1,53.5c0,0.9-0.2,1.8-0.4,3.4c-2-2.4-3.5-4.2-4.9-6
c-35.6-44.2-71.3-88.5-106.9-132.8c-2.1-2.6-4.2-3.7-7.5-3.7c-11.8,0.2-23.7,0.1-35.5,0.1c-1.8,0-3.5,0.2-5.3,0.2
c0,5.6,0,10.7,0,16.4c10.6-2,16.6,4.2,22.5,11.2c3.6,4.3,5.2,8.7,5.2,14.5c-0.3,44.2-0.1,88.3-0.2,132.5c0,4.1-0.4,8.3-1,12.4
c-1,6.5-3.2,8.5-9.8,9.3c-4.1,0.5-8.2,0.6-12.3,0.9c0,5.5,0,10.6,0,15.8c23.9,0,47.4,0,71.1,0c0-5.4,0-10.5,0-15.9
c-1.5-0.1-2.8-0.3-4.1-0.3c-17.7-0.3-19.9-2.5-19.9-20c0-36.2,0-72.3,0-108.5c0-1.5,0.2-3.1,0.3-5.7c43.9,55.1,87,109.2,130,163.2
c0.4-0.2,0.8-0.3,1.2-0.5c0-45.2,0-90.5,0-136.6c8,2.7,15.2,5.1,22.5,7.5c-4.3,36.4,3.7,69.4,24.5,99.6c-2.9,1.6-5.5,3.1-8,4.5
c0.6,4.9,3.4,3.3,5.5,1.8c3.7-2.6,6-1.9,9,1.7c12.4,15.4,27.6,27.6,45.5,36c9.4,4.4,19.3,7.8,29.4,11.8c-0.3,3.6-0.5,7.7-0.9,11.8
c-2.3,25-4.7,49.9-7,74.9c-0.1,0.9,0.6,1.9,1,2.8c1-0.5,2.3-0.7,3-1.5s0.8-2.1,1.2-3.3c8.6-25.9,17.3-51.7,25.8-77.7
c1.1-3.3,2.4-4.3,6.1-4.6c12.9-1,25.9-2.1,38.5-4.6c16.1-3.2,30.6-10.9,44.3-20.2c4.5,5.2,8.9,10.2,13.4,15.4c1.2-1.3,2-2.2,2.7-2.9
c-2-3-3.9-5.5-5.5-8.2c-1.6-2.8-2.9-5.9-4.4-8.9c24.1-19.4,40.2-43.7,48.6-73.3c10.5,0.8,20.7,1.6,30.4,2.3
c0,12.2,0.2,23.8-0.1,35.4c-0.1,5.1-3.3,7.8-8.3,8.2c-4.1,0.3-8.2,0.6-12.3,0.9c0,5.1,0,9.9,0,14.8c24.8,0,49.3,0,73.9,0
c0-5.1,0-9.9,0-14.8c-3.7-0.3-7.2-0.5-10.7-0.7c-5.1-0.4-8.8-2.7-8.9-8.2c-0.3-10.9-0.1-21.8-0.1-33.1c10,0.7,19.9,1.6,29.9,2.1
c3.2,0.1,5,1.2,6.6,3.9c9.3,15.9,19,31.7,28.3,47.7c1.5,2.6,3.2,3.6,6.3,3.6c8.8-0.2,17.7-0.1,26.5-0.1c3.6,0,7.2,0,10.9,0
c0-3.1,0-5.5,0-7.8c0-2.4,0-4.9,0-7.2C1447.7,325.5,1447,325.1,1440.3,315.9z M1265.8,173.7c1.3-0.9,2.7-1.7,4.7-1.9
c-28.3,25.4-56.7,50.8-85.1,76.3c-0.6-0.7-1-1-1.3-1.4c-7.8-13.3-7.8-13.3,4.9-21.7C1214.6,207.9,1240.2,190.8,1265.8,173.7z
M1271,247.5c-19.9-6.3-39.1-12.4-59.3-18.8c15.7-13.6,30.3-26.3,45.4-39.3C1268.6,207.2,1271.4,226.6,1271,247.5z M1250.8,177.7
c-19.6,9.8-38.7,19.4-59.2,29.6c2-25.4,3.9-49.2,5.8-74C1219.3,143.7,1237.5,157.1,1250.8,177.7z M1199.2,38.5
c0.3,0.1,0.7,0.2,1,0.3c-1.2,19.4-2.5,38.8-3.7,58.2c-2.2,33.2-4.4,66.4-6.6,99.6c0,0.7,0,1.3-0.1,2c-0.4,10.3-3.5,14.8-13.4,16.9
c-3.4,0.7-7.4-1.8-11.6-3C1176.4,154.1,1187.8,96.3,1199.2,38.5z M1167,126.3c-7.7,22.7-15.2,45-23,68c-16.2-18.6-31.9-36.5-48-54.9
C1118.3,126.5,1141.6,122.1,1167,126.3z M1088.1,143.9c10.7,21.7,21.2,42.9,31.7,64.1c-0.4,0.6-0.8,1.1-1.2,1.7c-25.8-2-51.6-4-78-6
C1049.5,177.5,1065.8,158.8,1088.1,143.9z M962.3,204.3c-4.7-1.5-9.3-3.1-14-4.6c0.1-0.3,0.1-0.5,0.2-0.8
c13.6,2.5,27.1,4.9,40.7,7.4c45.9,8.5,91.9,17.3,137.9,25.4c6.1,1.1,6.9,5.2,9.4,9.5c-5.6,4.3-11.1,8.7-16.8,12.6
c-1.2,0.8-3.8,0.3-5.5-0.3C1063.5,237.3,1012.9,220.8,962.3,204.3z M1034.2,231.6c27.2,9,53.8,17.9,81.4,27
c-20.6,18.1-40.6,35.8-61.1,53.8C1038,287.8,1033.2,260.9,1034.2,231.6z M1047.9,320.8c-0.2-0.3-0.3-0.6-0.5-0.8
c31.6-21.7,63.3-43.5,95.3-65.4c4,4.3,7.8,8.5,12.1,13.2C1118.9,285.5,1083.4,303.2,1047.9,320.8z M1060.3,318.2
c22-11,43.9-22.1,66.7-33.5c-1.7,25-3.3,49.3-5,73.5C1101.4,356.3,1072.2,337.3,1060.3,318.2z M1134.1,400.8
c-5.1,15.1-10.1,30.2-16.3,45.1c1.2-6.7,2.4-13.4,3.7-20c9.5-49.5,19-99,28.7-148.5c0.5-2.8,2.7-5.3,4.7-9c6.1,7,11,12.2,15.4,17.9
c1,1.4,0.9,4.3,0.2,6.2C1158.5,328.6,1146.3,364.7,1134.1,400.8z M1150.7,362.3c7.8-23.7,15.4-46.8,23.3-70.9
c15.2,17.1,29.8,33.5,44.7,50.3C1198.5,357,1176.3,363.7,1150.7,362.3z M1233.3,354.8c-7-8.1-14-16.2-21-24.4
c-21.7-25.3-43.3-50.6-65-76c-1.3-1.5-2.4-3.2-3.3-5c-18.9-37.6-37.8-75.2-56.6-112.8c-0.5-1-0.9-2-1.4-3c0.4-0.3,0.9-0.5,1.3-0.8
c49.1,73.6,98.2,147.3,147.4,220.9C1234.3,354.1,1233.8,354.5,1233.3,354.8z M1228,335c-10.3-20.7-20.4-41-31-62.3
c23.1,1.7,45.3,3.3,68.1,5C1259,301.2,1247.2,319.9,1228,335z M1362,281.7c-24.1-1.7-48.2-3.3-72.2-5.1c-30.2-2.2-60.5-4.5-90.7-6.6
c-3.1-0.2-4.8-1.2-5.9-4c-1.4-3.7-3.4-7.2-4.8-11c-0.6-1.7-0.8-4.2,0-5.7c1.2-2.3,3.3-3.6,6.6-2.9c52.3,10.9,104.6,21.6,156.9,32.4
c3.4,0.7,6.8,1.4,10.2,2.1C1362.1,281.2,1362.1,281.5,1362,281.7z M1376.7,282c-7.9-2.6-15.8-5.1-23.6-7.9c-1.4-0.5-3-2.5-3.1-4
c-0.4-4.4-0.1-8.9-0.1-14.2c5,0,9.5-0.1,13.9,0.1c1.1,0,2.6,0.8,3.2,1.7c5,8,9.7,16.2,15.2,25.4
C1379.6,282.5,1378.1,282.4,1376.7,282z M1363.9,240.2c-4.4-0.3-8.9-0.1-13.7-0.1c0-24.1,0-47.9,0-72.1c10.5-0.6,20.6-0.1,30.4,3.1
c9.6,3.1,15.6,9.5,17,19.5c1.9,13.7-0.1,26.7-9.1,37.7C1382.2,235.9,1374.5,241,1363.9,240.2z"/>
<path class="st0" d="M1791.4,318c-0.4-3.5-0.8-7-0.8-10.4c-0.1-40.3,0-80.7,0-121c0-3,0.2-6,0.6-9c0.9-6.8,3-9,9.9-9.6
c3.6-0.3,7.2-0.1,10.7-0.1c0-5.8,0-10.7,0-15.6c-25,0-49.6,0-74.4,0c0,5.2,0,10.1,0,15.4c2.9,0,5.6-0.1,8.2,0
c9.5,0.4,12.2,2.4,12.5,11.7c0.6,17.8,0.4,35.6,0.6,53.4c0,0.2-0.4,0.5-0.6,0.7c-24.5,0-48.9,0-72.9,0c0-19.2-0.2-38.1,0.1-57.1
c0.1-5.8,3-7.9,9.1-8.6c3.7-0.4,7.5-0.4,11.2-0.5c0-5.4,0-10.3,0-15.1c-25,0-49.6,0-74.5,0c0,5,0,9.8,0,15.4c2.4,0,4.3,0,6.3,0
c11.9,0.1,13.8,1.8,14.8,13.7c0.2,2,0.3,4,0.3,6c0,39.8,0,79.7,0,119.5c0,3.5-0.2,7-0.7,10.4c-1,6.2-2.9,7.9-9.1,8.6
c-3.8,0.4-7.6,0.5-11.4,0.8c0,5.2,0,10,0,14.8c25.1,0,49.8,0,74.8,0c0-2.7,0-5,0-7.4s0-4.9,0-7.5c-3.7-0.2-6.9-0.3-10-0.6
c-8.5-0.8-10.2-2.5-11.2-11c-0.1-0.8-0.3-1.7-0.3-2.5c-0.1-20-0.2-40-0.3-60c0-0.4,0.4-0.9,0.6-1.3c24.5,0,48.9,0,73.9,0
c0,2.1,0,3.9,0,5.7c0,15.2,0,30.3,0,45.5c0,4.2-0.3,8.3-0.7,12.5c-0.9,8.6-2.6,10.3-11,11.1c-3.3,0.3-6.5,0.4-9.8,0.6
c0,5.2,0,10,0,14.9c25,0,49.7,0,74.5,0c0-5.1,0-10,0-15c-4.2-0.3-8-0.5-11.8-0.8C1795,325.6,1791.9,323.1,1791.4,318z"/>
<path class="st0" d="M151.2,128.9c-11.3-8.1-24.5-9.4-37.6-9.6c-33-0.4-66-0.2-99-0.2c-0.8,0-1.6,0.2-2.3,0.3c0,5.5,0,10.8,0,16
c5.6,0.5,10.9,0.8,16.1,1.5c4.5,0.6,7.3,3.2,7.9,7.7c0.6,4.6,1.4,9.2,1.5,13.9c0.1,47.7,0.1,95.3,0,143c0,3.6-0.3,7.3-0.7,10.9
c-1.2,9.4-4,12-13.5,12.6c-3.7,0.2-7.5,0-11.2,0c0,6.2,0,11.5,0,16.7c30.7,0,61.1,0,91.3,0c0-5.6,0-10.9,0-16.1
c-6.5-0.3-12.7-0.2-18.7-1c-7.6-1-9.6-2.7-9.8-10.2c-0.5-20.3-0.2-40.5-0.2-60.8c9.8-0.8,19.8-1.1,29.6-2.6
c35.8-5.5,70.9-29.7,68.4-79.6C172.1,153.9,165.7,139.3,151.2,128.9z M130.6,206.3c-6.4,17.8-20.4,26-38.3,28.6
c-5.9,0.9-11.8,0.9-18.1,1.4c0-34,0-67,0-100.3c13-0.5,25.7-0.5,38.2,3.5c11,3.5,17.7,11,20.3,22
C136.3,176.6,135.9,191.7,130.6,206.3z"/>
<path class="st0" d="M784,314.1c-3.8-5.5-7.3-11.1-10.9-16.7c-10.9-17-20.3-35.1-34.3-50.1c2.1-1.1,4.2-2.1,6.3-3.3
c21-11.6,31.9-29.2,31-53.4c-0.6-15-6.5-27.1-21.4-32.3c-7.6-2.7-15.8-4.8-23.8-5c-29.3-0.8-58.6-0.7-87.9-1c-0.5,0-0.9,0.3-1.4,0.5
c0,5,0,9.8,0,15.3c3.6,0,7-0.2,10.2,0c7.5,0.5,9.6,2.5,10.5,10c0.4,3.5,0.7,7,0.7,10.5c0,39.2,0.1,78.3,0,117.5
c0,3.6-0.3,7.3-0.8,10.9c-0.9,6.7-2.7,8.5-9.6,9.2c-3.7,0.4-7.5,0.5-11.3,0.8c0,5.1,0,9.8,0,15c24.9,0,49.4,0,74,0
c0-5.1,0-10,0-15.1c-1.8-0.1-3.3-0.2-4.8-0.2c-12.9-0.3-15.1-2.1-15.5-15.2c-0.4-17.7-0.3-35.3-0.3-53c0-0.8,0.3-1.5,0.6-2.5
c3.6,0,6.9,0.3,10.2-0.1c4.3-0.5,6.5,1.3,8.6,4.9c14.3,24.2,29.1,48.2,43,72.6c3.9,6.8,8,9.6,15.9,8.9c10.2-0.8,20.5-0.2,30.9-0.2
c0-5.4,0-10.2,0-15.5C793.4,328.3,788.7,321,784,314.1z M709.1,240.2c-4.6-0.4-9.3-0.1-14.4-0.1c0-24.4,0-48,0-72.2
c12.8-0.4,25.4-0.3,36.9,5.9c5.2,2.8,8.8,7.4,10,13.1c3.4,15.4,1.4,29.9-9.1,42.2C726.6,236.3,719.1,241,709.1,240.2z"/>
<path class="st0" d="M297.9,312.7c-2,7.4-6.9,12.1-14.7,11.9c-11.8-0.4-23.6-0.9-35.2-2.7c-9.3-1.4-12.2-6.1-12.2-15.4
c0-17.2,0-34.3,0-51.5c0-1.4,0.2-2.9,0.3-5.4c13.5,0.6,26.8,1.1,40,1.8c5.2,0.3,6.3,4.4,6.7,8.5c0.3,3.2,0.1,6.5,0.1,9.9
c6.3,0,11.7,0,17.2,0c0-18.4,0-36.5,0-54.7c-5.7,0-11.1,0-17.2,0c0,3.8,0.2,7.3-0.1,10.7c-0.3,3.2-1.3,6.3-5.1,7.1
c-13.8,3-27.7,1.4-41.6,1.8c0-22.1,0-43.5,0-65.9c16,0.7,31.6,1.4,47.2,2.1c5.6,0.3,8.9,3.5,10.2,8.7c1.2,4.6,2,9.3,3.1,14
c5.6,0,11,0,16.9,0c-1.5-14-3-27.6-4.5-41.2c-42.6,0-84.5,0-126.7,0c0,5.1,0,9.8,0,15.6c4.3,0,8.1-0.2,11.9,0
c5.1,0.3,8.4,2.9,8.7,8.3c0.3,4,0.9,8,0.9,11.9c0.1,39,0.1,78,0,117c0,4.1-0.6,8.3-1,12.4c-0.6,5-3.6,7.7-8.6,8.2
c-3.9,0.4-7.9,0.6-12,0.9c0,5.1,0,9.9,0,14.4c43.9,1.2,87.6,2.3,131.3,3.5c1.4-15.7,2.9-31.2,4.3-47c-6,0-11.4,0-16.7,0
C300.2,303,299.2,307.9,297.9,312.7z"/>
<path class="st0" d="M620.2,297.4c-4.2-0.4-6.1,0.9-6.3,5.3c-0.2,3.3-1.2,6.5-2.1,9.7c-2.1,7.6-7,12.4-15,12.2
c-11.3-0.3-22.6-0.7-33.8-2.4c-10.6-1.6-13.5-6.1-13.5-16.9c0-16.5,0-33,0-49.5c0-1.8,0.2-3.5,0.4-6.1c13.5,0.5,26.4,1,39.3,1.6
c4.3,0.2,6.7,2.8,7.1,6.9c0.4,3.9,0.7,7.8,1,11.5c5.8,0,11.2,0,16.4,0c0-18.5,0-36.6,0-54.5c-5.8,0-11.2,0-16.5,0
c-0.2,4.1-0.3,7.7-0.7,11.3c-0.4,3.9-2.5,6.6-6.7,6.8c-13.2,0.8-26.5,1.3-40,2c0-22.6,0-44,0-66.7c16.8,0.9,33.2,1.7,49.6,2.8
c3.9,0.2,6.3,3,7.4,6.6c1.5,5.1,2.5,10.3,3.9,15.7c5.2,0,10.6,0,16.7,0c-1.5-14.1-3-27.6-4.5-41.2c-42.5,0-84.5,0-126.5,0
c0,5.3,0,10.1,0,15.1c4.4,0.2,8.4,0.3,12.3,0.6c4.8,0.4,7.6,3.1,8.1,7.9c0.4,4.1,0.9,8.3,1,12.4c0.1,39,0.1,78,0,117
c0,3.6-0.3,7.3-0.8,10.9c-0.9,6.8-3.1,8.9-9.9,9.6c-3.6,0.4-7.2,0.5-10.8,0.7c0,5.2,0,10,0,14.4c43.8,1.2,87.3,2.3,131.3,3.5
c1.4-15.5,2.8-31.1,4.3-47.3C627.5,297.5,623.8,297.8,620.2,297.4z"/>
<path class="st0" d="M1462.4,148.9c-1.8,17.2-3.5,33.7-5.3,50.4c6.2,0,11.8,0,17.5,0c0.8-4.3,1.4-8.4,2.5-12.4
c1.8-6.4,4.5-12.4,11.5-14.6c11.8-3.7,23.9-2.8,36.2-2.6c0.1,1.5,0.2,2.5,0.2,3.5c0,45.7,0,91.3,0,137c0,2-0.2,4-0.6,5.9
c-1.4,7.5-3.1,9.1-10.8,9.9c-4.4,0.4-8.9,0.6-13.3,0.9c0,5.2,0,10.1,0,14.8c27.8,0,55.2,0,82.4,0c0-5.2,0-9.9,0-15.1
c-2.1,0-3.9,0-5.7,0c-16.5-0.1-19.1-2.8-19.1-19.2c0-44,0-88,0-132c0-1.8,0-3.6,0-6.3c10.6,0.6,20.6,1.1,30.5,1.9
c10,0.8,15.4,7,17.6,16.4c0.9,4,1.7,8,2.5,11.8c6.1,0,11.6,0,17.4,0c-1.8-16.8-3.5-33.2-5.3-50.2
C1567.4,153.6,1515,153.5,1462.4,148.9z"/>
<path class="st0" d="M406.4,152c-26.2,0-52.4-1.3-79-2.1c-1.7,15.9-3.4,32.3-5.2,49.4c6.1,0,11.7,0,17.5,0c0.8-4.2,1.4-8.3,2.5-12.3
c1.8-6.4,4.4-12.4,11.5-14.6c11.8-3.7,23.9-2.8,36.2-2.6c0.1,1.8,0.2,3.1,0.2,4.4c0,44.8,0,89.7,0,134.5c0,2.3-0.1,4.7-0.4,7
c-1.2,7.7-3.2,9.6-10.9,10.4c-4.4,0.5-8.9,0.6-13.4,0.8c0,5.1,0,10,0,14.8c27.8,0,55.2,0,82.5,0c0-5.1,0-9.9,0-15.2
c-2.4,0-4.6,0-6.7,0c-15.4-0.3-18.2-3.2-18.2-18.7c0-44.2,0-88.3,0-132.5c0-1.8,0-3.6,0-6.7c11.7,1,22.8,1.7,33.8,3
c6.3,0.7,10.6,4.8,12.6,10.8c1.5,4.6,2.3,9.3,3.7,13.9c0.3,1.2,1.6,2.9,2.5,2.9c5,0.3,10.1,0.1,15.5,0.1
c-1.8-17.3-3.6-33.8-5.3-49.6C458.9,150.7,432.7,152,406.4,152z"/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 707.4 81.7" style="enable-background:new 0 0 707.4 81.7;" xml:space="preserve">
<title>rocco_logo_vers2</title>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="179.45" y1="717.59" x2="179.45" y2="659.4" gradientTransform="matrix(1 0 0 1 -38.5 -648.89)">
<stop offset="0" style="stop-color:#BFBFBF"/>
<stop offset="1" style="stop-color:#FDFDFD"/>
</linearGradient>
<path style="fill:url(#SVGID_1_);" d="M59.1,66.5c-0.7,0-1.4-0.1-2.1-0.2c-1.1-0.2-4.3-0.8-8.5-5.2c-4.5-4.7-9.7-11.5-16.5-20
c7.7-6.2,10-11.4,10-17c0-4.1-1.9-8-5.2-10.4c-4.1-2.8-9.2-3.3-14-3.3c-2.4,0-8.1,0.2-10.7,0.2c-1.6,0-6.4-0.2-10.4-0.2
c-1.1,0-1.7,0.2-1.7,0.7s0.5,0.7,1.3,0.7c1,0,2,0.1,3,0.2c2.5,0.5,3.1,1.7,3.3,4.3c0.2,2.4,0.2,4.6,0.2,16.1v13.4c0,7,0,13-0.4,16.2
c-0.3,2.2-0.7,3.9-2.2,4.2c-0.9,0.2-1.8,0.3-2.7,0.3c-0.9,0-1.2,0.2-1.2,0.6s0.5,0.8,1.5,0.8c3,0,7.8-0.2,9.3-0.2
c1.1,0,6.8,0.2,11.2,0.2c1,0,1.5-0.2,1.5-0.8c0-0.4-0.3-0.6-0.9-0.6c-0.9,0-2.6-0.2-3.7-0.3c-2.3-0.3-2.7-2-3-4.2
c-0.4-3.2-0.4-9.2-0.4-16.2v-1.1c-0.1-0.3,0.1-0.5,0.4-0.6c0.1,0,0.2,0,0.2,0l6.6,0.2c0.5,0,1,0.1,1.4,0.5c1,1.1,4.5,6.3,7.5,10.5
c4.3,5.8,7.2,9.4,10.4,11.2c2,1.1,3.9,1.4,8.1,1.4h7.1c0.9,0,1.4-0.2,1.4-0.8C60,66.7,59.7,66.5,59.1,66.5z M28.5,39.3
c-1.4,1-2.4,1.3-5.4,1.3c-2,0.1-3.9-0.2-5.8-0.8c-0.5-0.2-0.7-0.5-0.7-1.4V15.3c-0.1-0.5,0.2-1,0.7-1.1c1.3-0.2,2.7-0.3,4-0.3
c4.5,0,11.6,3.1,11.6,13.9C33,34.2,30.8,37.7,28.5,39.3z M84.3,18.2c-20.3,0-28.1,14.3-28.1,25.3c0,11.5,7.9,25.3,27.4,25.3
c17.3,0,28.1-11.6,28.1-26.4S101.2,18.2,84.3,18.2z M86.4,65.2c-12.6,0-20.2-10.5-20.2-23.7c0-15.9,8.7-19.9,16.2-19.9
c10.8,0,19.4,8.8,19.4,23.1C101.7,63,91.1,65.2,86.4,65.2z M165,55.6c-0.5,0-0.7,0.3-0.8,1.3c-0.4,1.6-1.2,3.1-2.3,4.3
c-2.7,3-5.9,3.4-11.9,3.4c-9,0-20.8-7.3-20.8-22.6c0-6.3,1.2-12.5,6.2-16.8c3-2.6,6.8-3.6,12.6-3.6c6.2,0,10.7,1.6,12.9,3.8
c1.6,1.6,2.5,3.7,2.6,6c0,0.8,0.2,1.4,0.7,1.4s0.8-0.7,0.9-1.6c0.1-1.3,0.1-4.9,0.2-7c0.2-2.3,0.3-3,0.3-3.6c0-0.4-0.2-0.7-1-0.8
c-2-0.2-4.2-0.7-6.7-1.1c-3.2-0.5-6.5-0.7-9.7-0.7c-10,0-16.4,2.6-21.2,6.8c-5,4.5-7.8,11-7.8,17.7c0,6.2,1.8,13.5,8.4,19
c6.1,5.1,13.8,7,23,7c4.3,0,9.4-0.4,12.1-1.4c0.9-0.2,1.6-1,1.7-1.9c0.7-2.8,1.2-5.7,1.4-8.6C165.8,56.1,165.5,55.7,165,55.6z
M218.7,55.6c-0.5,0-0.7,0.3-0.8,1.3c-0.4,1.6-1.2,3.1-2.3,4.3c-2.7,3-5.9,3.4-11.9,3.4c-9,0-20.8-7.3-20.8-22.6
c0-6.3,1.2-12.5,6.2-16.8c3-2.6,6.8-3.6,12.6-3.6c6.2,0,10.7,1.6,12.9,3.8c1.6,1.6,2.5,3.7,2.6,6c0,0.8,0.2,1.4,0.7,1.4
s0.8-0.7,0.9-1.6c0.1-1.3,0.1-4.9,0.2-7c0.2-2.3,0.3-3,0.3-3.6c0-0.4-0.2-0.7-1-0.8c-2-0.2-4.2-0.7-6.7-1.1
c-3.2-0.5-6.5-0.7-9.7-0.7c-10,0-16.4,2.6-21.2,6.8c-5,4.5-7.8,11-7.8,17.7c0,6.2,1.7,13.5,8.4,19c6.1,5.1,13.8,7,23,7
c4.3,0,9.4-0.4,12.1-1.4c0.9-0.3,1.6-1,1.8-1.9c0.7-2.8,1.2-5.7,1.4-8.6C219.4,56.2,219.1,55.8,218.7,55.6z M254.5,18.2
c-20.3,0-28.1,14.3-28.1,25.3c0,11.5,7.9,25.3,27.4,25.3c17.3,0,28.1-11.6,28.1-26.4S271.4,18.2,254.5,18.2z M256.6,65.2
c-12.6,0-20.2-10.5-20.2-23.7c0-15.9,8.7-19.9,16.2-19.9c10.8,0,19.4,8.8,19.4,23.1C271.9,63,261.3,65.2,256.6,65.2z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="580.0999" y1="717.59" x2="580.0999" y2="658.11" gradientTransform="matrix(1 0 0 1 -39.5 -648.89)">
<stop offset="0" style="stop-color:#BFBFBF"/>
<stop offset="1" style="stop-color:#FDFDFD"/>
</linearGradient>
<path style="fill:url(#SVGID_2_);" d="M393.1,33l-2.1-1.6c-6.3-4.8-8.1-7.4-8.1-10.9c0-4.6,3.4-7.8,9.1-7.8c4.9,0,7.2,2.3,8.3,3.7
c1.1,1.4,1.8,3.2,2,5c0,0.9,0.2,1.4,0.8,1.4s0.8-0.6,0.8-2.3c0-5.9,0.3-8.1,0.3-9.1c-0.1-0.5-0.5-1-1.1-0.9c0,0,0,0,0,0
c-3.3-0.9-6.7-1.3-10.1-1.3c-10.6,0-17.6,6-17.6,14.3c0,6.1,2.9,11.5,11.3,18l3.5,2.7c6.3,4.9,7.5,8.4,7.5,12.1
c0,4-3.3,8.6-10.2,8.6c-4.7,0-9.2-2-10.9-7.7c-0.4-1.3-0.6-2.6-0.7-3.9c0-0.6-0.1-1.3-0.8-1.3s-0.8,0.8-0.9,2s-0.4,5.8-0.4,9.9
c0,1.7,0.2,2,1.4,2.6c3.5,1.4,7.3,2.1,11.1,2c4.2,0.1,8.4-0.9,12.1-3.1c4.5-2.8,7.3-7.8,7.2-13.2C405.6,45.2,402.3,39.9,393.1,33z
M437.5,66.3c-1,0-2.5-0.1-3.4-0.2c-2-0.3-2.4-1.3-2.7-3c-0.3-2.7-0.3-7.9-0.3-14.1V37.6c0-9.8,0-11.6,0.2-13.7
c0.2-2.3,0.7-3.2,2.5-3.5c0.7-0.2,1.3-0.2,2-0.2c0.7,0,1.1-0.2,1.1-0.8c0-0.4-0.5-0.5-1.4-0.5c-2.6,0-6.9,0.2-8.6,0.2
c-1.9,0-6.5-0.2-9-0.2c-1.1,0-1.6,0.2-1.6,0.5c0,0.6,0.4,0.8,1.1,0.8c0.8,0,1.6,0.1,2.4,0.3c1.4,0.5,2.1,1.2,2.3,3.4
c0.1,2,0.1,3.9,0.1,13.7V49c0,6.2,0,11.4-0.3,14c-0.2,1.9-0.6,2.8-2,3.1c-0.8,0.2-1.6,0.3-2.4,0.2c-0.5-0.1-1,0.2-1.1,0.7
c0,0,0,0,0,0c0,0.5,0.5,0.7,1.3,0.7c2.7,0,7.2-0.2,8.7-0.2c1.8,0,6.4,0.2,10.8,0.2c0.8,0,1.3-0.2,1.3-0.7S438.3,66.3,437.5,66.3z
M480.4,18.3c-0.4,0.1-0.8,0.2-1.1,0.4c-0.9,0.2-1.8,0.3-2.7,0.3c-1.6,0.1-16.4,0-19,0c-1.9,0-6.2-0.2-9.6-0.2
c-1.1,0-1.6,0.2-1.6,0.6s0.5,0.7,1.1,0.7c0.9,0,1.8,0.1,2.7,0.2c2.1,0.5,2.7,1.3,2.9,3.5c0.1,2,0.1,3.9,0.1,13.7v11.4
c0,6.2,0,11-0.3,13.7c-0.2,1.9-0.6,3.1-2,3.4c-0.8,0.2-1.6,0.3-2.4,0.2c-0.8,0-1,0.4-1,0.7c0,0.5,0.5,0.7,1.4,0.7
c2.5,0,6.8-0.2,8.5-0.2s6.5,0.2,10.7,0.2c1,0,1.4-0.2,1.4-0.7c-0.1-0.5-0.6-0.8-1.1-0.7c0,0,0,0,0,0c-0.9,0-2.4-0.1-3.3-0.2
c-2-0.3-2.4-1.5-2.7-3.4c-0.3-2.7-0.4-7.3-0.4-13.5v-5.3c0-0.5,0.2-0.5,0.5-0.5c1.1,0,9.1,0.1,10.7,0.2c1.5,0,2.8,1,3.2,2.4
c0.3,0.6,0.4,1.3,0.5,2c-0.1,0.4,0.2,0.8,0.6,0.9c0,0,0,0,0,0c0.7,0,0.8-0.9,0.8-1.4s0.1-3.4,0.2-4.7c0.2-2,0.5-3.8,0.5-4.2
c0.1-0.3-0.1-0.5-0.4-0.6c0,0,0,0,0,0c-0.4,0.1-0.7,0.3-0.9,0.7c-0.7,0.8-1.7,1.2-2.8,1.1c-1,0.1-2,0.1-3,0.1l-9.4,0.1
c-0.4,0-0.5-0.2-0.5-0.6V23.7c0-0.8,0.2-0.9,0.6-0.9l11.1,0.2c2.5,0.1,3.8,1.1,4.3,2c0.3,0.7,0.5,1.6,0.4,2.4
c-0.1,0.5,0.2,1,0.7,1.1c0,0,0.1,0,0.1,0c0.4,0,0.6-0.8,0.7-1.3c0.1-0.8,0.2-4.6,0.3-5.2c0.2-1.7,0.5-2.4,0.5-2.9
S480.6,18.3,480.4,18.3z M520.5,18.3c-0.4,0.1-0.8,0.2-1.1,0.4c-0.9,0.2-1.8,0.3-2.7,0.3c-1.6,0.1-16.4,0-19,0
c-1.9,0-6.2-0.2-9.6-0.2c-1.1,0-1.6,0.2-1.6,0.6s0.5,0.7,1.1,0.7c0.9,0,1.8,0.1,2.7,0.2c2.1,0.5,2.7,1.3,2.9,3.5
c0.1,2,0.1,3.9,0.1,13.7v11.4c0,6.2,0,11-0.3,13.7c-0.2,1.9-0.6,3.1-2,3.4c-0.8,0.2-1.6,0.3-2.4,0.2c-0.8,0-1,0.4-1,0.7
c0,0.5,0.5,0.7,1.4,0.7c2.5,0,6.8-0.2,8.5-0.2s6.5,0.2,10.7,0.2c1,0,1.4-0.2,1.4-0.7c-0.1-0.5-0.6-0.8-1.1-0.7c0,0,0,0,0,0
c-0.9,0-2.4-0.1-3.3-0.2c-2-0.3-2.4-1.5-2.7-3.4c-0.3-2.7-0.4-7.3-0.4-13.5v-5.3c0-0.5,0.2-0.5,0.5-0.5c1.1,0,9.1,0.1,10.7,0.2
c1.5,0,2.8,1,3.2,2.4c0.3,0.6,0.4,1.3,0.5,2c-0.1,0.4,0.2,0.8,0.6,0.9c0,0,0,0,0,0c0.7,0,0.8-0.9,0.8-1.4s0.1-3.4,0.2-4.7
c0.2-2,0.5-3.8,0.5-4.2c0.1-0.3-0.1-0.5-0.4-0.6c0,0,0,0,0,0c-0.4,0.1-0.7,0.3-0.9,0.7c-0.7,0.8-1.7,1.2-2.8,1.1c-1,0.1-2,0.1-3,0.1
l-9.4,0.1c-0.4,0-0.5-0.2-0.5-0.6V23.7c0-0.8,0.2-0.9,0.6-0.9l11.1,0.2c2.5,0.1,3.8,1.1,4.3,2c0.3,0.7,0.5,1.6,0.4,2.4
c-0.1,0.5,0.2,1,0.7,1.1c0,0,0.1,0,0.1,0c0.4,0,0.6-0.8,0.7-1.3c0.1-0.8,0.2-4.6,0.3-5.2c0.2-1.7,0.5-2.4,0.5-2.9
S520.7,18.3,520.5,18.3z M616.5,57.5c-0.5,0-0.6,0.3-0.8,1c-0.5,2.7-1.2,4-2.9,4.8s-4.6,0.8-6.3,0.8c-6.8,0-8.9-1-9.1-5.4
c-0.1-1.9,0-7.4,0-9.6v-5.2c0-0.4,0.1-0.7,0.4-0.7c1.7,0,9.3,0.2,10.5,0.3c2.5,0.2,3.3,1.2,3.7,2.5c0.2,0.8,0.2,1.6,0.2,2.4
c0,0.3,0.2,0.5,0.5,0.5c0,0,0.1,0,0.1,0c0.6,0,0.7-0.9,0.7-1.4s0.2-3,0.3-4.3c0.4-3.3,0.5-4.3,0.5-4.7c0.1-0.3-0.2-0.6-0.5-0.7
c0,0,0,0,0,0c-0.4,0.2-0.8,0.5-1.1,0.8c-0.6,0.7-1.6,0.8-3.2,1s-10.2,0.2-11.7,0.2c-0.4,0-0.5-0.3-0.5-0.7V23.2
c0-0.3,0.1-0.5,0.4-0.6c0,0,0.1,0,0.1,0c1.4,0,9.4,0.2,10.5,0.3c3.3,0.3,3.9,1.2,4.4,2.4c0.3,0.8,0.5,1.6,0.5,2.4
c0,0.5,0.1,0.8,0.5,0.8s0.7-0.8,0.8-1.1c0.2-0.8,0.3-3.6,0.4-4.2c0.2-3,0.5-3.7,0.5-4.2c0.1-0.3-0.1-0.5-0.4-0.6c0,0-0.1,0-0.1,0
c-0.4,0.1-0.7,0.2-1.1,0.3c-0.9,0.2-1.9,0.3-2.8,0.4c-1.3,0.1-16.1,0-18.3,0c-1.9,0-6.2-0.2-9.7-0.2c-1,0-1.5,0.2-1.5,0.6
c0,0.5,0.5,0.7,1.1,0.7c0.9,0,1.8,0.1,2.7,0.2c2.1,0.6,2.7,1.3,2.9,3.5c0.1,2,0.1,3.9,0.1,13.7V49c0,5.9,0,11-0.3,13.7
c-0.2,1.9-0.6,3.1-2,3.4c-0.8,0.2-1.6,0.3-2.4,0.2c-0.4,0-0.7,0.1-1,0.4c-0.1-0.2-0.4-0.4-0.7-0.4c-0.5,0-1.1,0-1.6-0.2
c-1.1-0.2-3.4-0.5-7.2-4.2c-4-4-8.7-9.9-14.7-17.1c6.5-5.2,9.3-9.5,9.3-14.3c-0.1-3.5-1.8-6.8-4.7-8.9c-3.6-2.4-8.4-2.7-12.7-2.7
c-2.1,0-8.1,0.2-10.4,0.2c-1.4,0-5.6-0.2-9.1-0.2c-1,0-1.5,0.2-1.5,0.6c0,0.5,0.5,0.7,1.1,0.7c0.9,0,1.8,0.1,2.7,0.2
c2.1,0.6,2.7,1.3,2.9,3.5c0.1,2,0.1,3.9,0.1,13.7V49c0,5.9,0,11-0.3,13.7c-0.2,1.9-0.6,3.1-2,3.4c-0.8,0.2-1.6,0.3-2.4,0.2
c-0.5-0.1-1,0.2-1.1,0.7c0,0,0,0,0,0c0,0.5,0.5,0.7,1.3,0.7c2.7,0,6.9-0.2,8.2-0.2c1,0,6.5,0.2,10.4,0.2c0.8,0,1.4-0.2,1.4-0.7
c0-0.4-0.4-0.7-0.8-0.7c-0.8,0-2.3-0.1-3.3-0.2c-2.1-0.3-2.4-1.5-2.6-3.4c-0.3-2.7-0.4-7.7-0.4-13.7v-0.9c0-0.2,0.1-0.5,0.3-0.5
c0.1,0,0.1,0,0.2,0l6,0.2c0.5,0,0.9,0.2,1.2,0.5c0.8,1,3.7,5.3,6.3,8.8c3.7,5,6.2,8,9.1,9.5c1.7,0.9,3.6,1.3,7.3,1.3h6.4
c0.8-0.4,1.7-0.4,2.4,0c1.4,0,3-0.1,4.6-0.2s3-0.1,3.8-0.1c2,0,4.5,0.1,7.8,0.2s7.3,0.2,12.3,0.2c2.5,0,3.1,0,3.6-1.7
c0.5-2.3,0.8-4.7,0.9-7.1C617.1,58.3,617.1,57.5,616.5,57.5L616.5,57.5z M555.3,43.2c-1.1,0.8-2.1,1.1-4.7,1.1
c-1.7,0-3.4-0.2-5.1-0.6c-0.4-0.2-0.7-0.6-0.6-1.1V23.4c-0.1-0.4,0.2-0.8,0.6-0.9c1.3-0.2,2.7-0.3,4-0.2c4,0,10.2,2.4,10.2,11.5
C559.6,39,557.3,41.8,555.3,43.2L555.3,43.2z M647.6,18.8c-4,0-8.8,0.2-10.9,0.2c-1.9,0-6.2-0.2-9.7-0.2c-1,0-1.5,0.2-1.5,0.6
c0,0.5,0.5,0.7,1.1,0.7c0.9,0,1.8,0.1,2.7,0.2c2.1,0.6,2.7,1.3,2.9,3.5c0.1,2,0.1,3.9,0.1,13.7v11.4c0,5.9,0,11-0.3,13.7
c-0.2,1.9-0.6,3.1-2,3.4c-0.8,0.2-1.6,0.3-2.4,0.2c-0.5-0.1-1,0.2-1.1,0.7c0,0,0,0,0,0c0,0.5,0.5,0.7,1.3,0.7c1.4,0,3-0.1,4.6-0.2
s3-0.1,3.8-0.1c1.7,0,4.1,0.2,6.8,0.4s5.6,0.4,8,0.4c12.3,0,19.4-4.6,22.4-7.6c4.8-4.8,7.4-11.3,7.3-18c0.2-6.1-2.1-12-6.3-16.4
C667.3,18.8,656,18.8,647.6,18.8L647.6,18.8z M665.6,60.4c-4,3.3-8.5,4.4-14.6,4.4c-5.2,0-7.9-1.4-8.7-2.6c-0.5-0.7-0.7-3-0.8-4.6
c-0.1-1.3-0.2-6.2-0.2-13v-8.1c0-5.1,0-10.4,0.1-12.6c-0.1-0.6,0.2-1.2,0.8-1.3c1.3-0.4,2.7-0.5,4.1-0.5c5.2,0,12.6,0.7,18.7,6.1
c3,2.6,6.2,7.9,6.2,16.1C671.3,51.1,669.9,56.9,665.6,60.4L665.6,60.4z M706.4,66.3c-1,0-2.5-0.1-3.4-0.2c-2-0.3-2.4-1.3-2.7-3
C700,60.4,700,55.2,700,49V37.6c0-9.8,0-11.6,0.2-13.7c0.2-2.3,0.7-3.2,2.5-3.5c0.7-0.2,1.3-0.2,2-0.2c0.7,0,1.1-0.2,1.1-0.8
c0-0.4-0.5-0.5-1.4-0.5c-2.6,0-6.9,0.2-8.6,0.2c-1.9,0-6.5-0.2-9-0.2c-1.1,0-1.6,0.2-1.6,0.5c0,0.6,0.4,0.8,1.1,0.8
c0.8,0,1.6,0.1,2.4,0.3c1.4,0.5,2.1,1.2,2.3,3.4c0.1,2,0.1,3.9,0.1,13.7V49c0,6.2,0,11.4-0.3,14c-0.2,1.9-0.6,2.8-2,3.1
c-0.8,0.2-1.6,0.3-2.4,0.2c-0.5-0.1-1,0.2-1.1,0.7c0,0,0,0,0,0c0,0.5,0.5,0.7,1.3,0.7c2.7,0,7.2-0.2,8.7-0.2c1.8,0,6.4,0.2,10.8,0.2
c0.8,0,1.3-0.2,1.3-0.7S707.1,66.3,706.4,66.3L706.4,66.3z"/>
<path style="fill:#FF000B;" d="M325.8,38.2c0.3,0.9,0.3,1.8,0,2.7c-0.4,2-1.8,3.7-3.6,4.6c-2.3,1.3-3.9,2-4.4,2.3
s-15.3,5.8-20.1,17.7c0,0-4.1,10.4-4.4,14.4c0,0,13.4-7.6,24.3-8.5c0,0,9.7,0.2,13,2.4c0,0-1-0.7-5.2-1.1
c-6.2-0.6-12.4,0.3-18.1,2.7c-7.8,3.1-14.7,6.7-15.8,6.2s-0.5-1,0.1-3.1c1.5-4.9,3.4-9.7,5.5-14.4c2.5-5.3,6.7-9.7,12-12.3
c6.3-3.1,10.6-4.7,13.9-7.6s3-4.3,2.3-6.3c-0.3-0.3-0.3-0.7-0.1-1c-0.5-0.1-1,0-1.4,0.2c-0.9,0.4-4.4,0.5-5.6-0.3s-1.7-0.9-2.8,0
s-5.4,3-5.8,4.9s-2.3,3-5.4,2.7c-1.2-0.2-2.5-0.2-3.7,0.2c-1,0.1-0.8-0.6-1.5-1.5s-3.1-2.7-3.9-3.7s-0.7-1.8-0.2-3
c0.4-0.8,0.8-1.6,1-2.4c0.1-1,0.7-1.9,1.6-2.4c1.2-0.9,11.4-9.1,11.9-10.4s0.5-3.1,1.4-3.6s5.8-3.6,6.5-4.5s1.4-1.1,1.2-1.6
c-0.2-0.6-0.5-1.2-1-1.7c-0.6-0.6-0.2-1.4-0.2-2.9c0-1.6,0.2-3.2,0.6-4.7c0.4-1,1.1-2.3,2-2.2s0.8,0.7,1.1,1.9s1.9,4.7,4.5,5
s5.4,0,6.6,0.4c1.9,0.4,3.5,1.5,4.8,2.9c2.2,2.3,4.2,4.2,5.6,4.4s1.9,0.4,1.9-0.8s0.5-0.9,0.9-0.4c0.4,1.1,0.4,2.2,0,3.3
c-0.4,1.1-1.6,1.3-0.8,1.4s4.1,0.3,5.5,1.4s4.7,2.6,4.8,8.1l-0.5,1.8c-0.6-0.9-1.3-1.8-2.1-2.5c-0.8-0.4-1.6-1-0.6,0.1
s3.7,3.7,4,6.2c0.2,2.4,0.1,4.9-0.4,7.3c-0.4,2.3-0.9,4.6,0.3,6.1s2.7,2.5,2.8,4.5s0,5.4-5.9,7.6c0,0,1.9-2.8,1.7-4.4
c-0.2-1.4-0.9-2.6-1.9-3.6c-0.1,1.2-0.2,2.4-0.2,3.6c-0.1,2.5-0.9,5-2.3,7.1c-1.3,1.7-2.4,3.7-1.8,4.8s2.8,3.6,5.1,0.7
c0,0,1.2-0.7,0.8-2.8s0.8-1,1.4-0.3s1.9,2.4,1.9,3.7s0.2,0.9,0.6,1.8s0.8,3.1-0.2,4.4s-3.1,4.3-8.8,2.7s-6.6-1.8-7.7-1.1
s-7,0.8-8.5,0.1c0,0,4.4,0.6,6.7-0.1s3-1.2,4.9-0.6s5.9,1.6,8.2,0.7s3.5-2.2,3.7-2.8c-1,1.1-2.6,1.5-4,1c-2.3-1.1-3.2-2.5-3.7-2.5
c1.3,0.1,2.6,0.1,3.9-0.1c1.7-0.4,3.6-1.1,3.6-2.9c0-1.4-0.5-2.8-1.4-3.9c0.3,1.6-0.4,3.3-1.8,4.2c-2.3,1.4-7,0.4-5.8-4.1
c0,0,1-2.1,2.1-4.6s2.3-4.5,1.8-7.9s-0.9-3.9-0.9-3.9s2.8,1.2,3.8,2.9c1.4,2.1,1.3,4.9-0.2,6.9c1.5-0.7,2.6-2,3.2-3.5
c0.8-2.5,0.3-3.5-1.1-5.2s-2.9-4.2-2.6-6.2s1.3-4.2,1.2-5.8s0.2-4.5-1.5-6.7s-3.9-4.4-3.9-4.4s3.7-0.2,4.7,1.3
c-0.5-1.8-1.5-3.5-2.8-4.8c-1.5-1.6-3.5-2.7-5.7-3c-2.2-0.5-3.5-0.9-3.5-0.9s3.2-0.7,3.4-2c0.1-0.6,0.1-1.1,0-1.7c0,0-0.1,1-1.7,1.1
s-3.8-1.3-4.9-2.7c-1.8-2.3-4.3-3.8-7.2-4.3c-3.8-0.5-6.6,0-7.6-1.1s-3.2-2.3-3.6-6.5c-1.2,1.6-1.9,3.5-2,5.5
c-0.1,3.2-0.4,3.6,1.3,4.5c1.1,0.6,2.2,1,3.4,1.2c0,0-3.6-0.5-4.1,0.2c-1.5,1.8-3.3,3.4-5.2,4.7c-1.1,0.4-1.9,1.6-1.8,2.8
c-0.2,1.3-0.9,2.5-2.1,3.2c-1.5,1-8.9,7.4-10.4,8.3s-2.5,0.7-2.6,2.3s-1.1,2.9-1.1,3.8s-0.3,1.2,0.6,1.6c1.3,0.6,2.5,1.4,3.5,2.3
c0.9,0.9-0.5,1.3,2.2,1.4s4.3,1.2,5.2,0.5c1-0.9,1.8-1.9,2.4-3.1c1-1.6,5.5-4.4,6.1-4.7s1.8-0.3,3.5,0.3s2.5,1,3.8,0.6
s5.6-1.8,7.1-2.1c0,0-4.2,1.9-4.1,2.7C325.6,37.6,325.7,37.9,325.8,38.2z"/>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -42,6 +42,12 @@ const networks = [
url: 'https://ddfnetwork.com',
description: 'European porn videos hub with exclusive VR, 4K and full HD XXX videos and hot sex photos of Europes finest porn star babes.',
},
{
slug: 'famedigital',
name: 'Fame Digital',
url: 'https://www.famedigital.com',
description: 'Watch and download thousands of the best porn videos at FameDigital.com, the largest porn network on the web! The hottest teens, MILFs and more pornstars are all here!',
},
{
slug: 'digitalplayground',
name: 'Digital Playground',

View File

@ -1007,6 +1007,23 @@ const sites = [
description: 'Fantasy Blowjobs & POV Cock Sucking Videos and Photos Produced in VR, 4K and full HD featuring Sexy European Pornstars',
network: 'ddfnetwork',
},
{
slug: 'fuckinhd',
name: 'Fuck in HD',
url: 'https://fuckinhd.com',
description: 'HD Hardcore Sex & XXX Fantasy Porn Videos and Photos Produced in full HD featuring a Variety of Hardcore Porn Niches.',
network: 'ddfnetwork',
parameters: { native: true },
enabled: false, // appears to be re-releases only
},
{
slug: 'bustylover',
name: 'Busty Lover',
url: 'https://bustylover.com',
network: 'ddfnetwork',
parameters: { native: true },
enabled: false, // appears to be re-releases only
},
// DIGITAL PLAYGROUND
{
slug: 'digitalplayground',
@ -1307,6 +1324,87 @@ const sites = [
description: '',
network: 'fakehub',
},
// FAME DIGITAL
{
slug: 'devilsfilm',
name: 'Devil\'s Film',
url: 'https://www.devilsfilm.com',
description: 'Welcome to the best porn network, DevilsFilm.com, featuring teens, MILFs, trans and interracial porn with all of your favorite pornstars in 4k ultra HD!',
parameters: { api: true },
network: 'famedigital',
},
{
slug: 'lowartfilms',
name: 'Low Art Films',
url: 'https://www.lowartfilms.com',
description: 'Artistic Hardcore Porn Videos',
network: 'famedigital',
parameters: {
latest: '/en/All/scenes/0/latest/',
upcoming: '/en/All/scenes/0/upcoming',
},
},
{
slug: 'daringsex',
name: 'Daring Sex',
url: 'https://www.daringsexhd.com/',
description: 'Welcome the official Daring Sex site, home of high quality erotica, sensual porn and hardcore exploration of the darker side of sexuality. Here you will find a variety of videos for lovers looking for a bit of extra, or something darker with an element of control.',
network: 'famedigital',
parameters: { api: true },
enabled: false,
},
{
slug: 'peternorth',
name: 'Peter North',
url: 'https://www.peternorth.com',
description: 'PeterNorth.com features hundreds of cumshots and deepthroat blowjob videos with the hottest teens & MILFs. Watch 25 years of Peter North inside!',
network: 'famedigital',
parameters: {
latest: '/en/videos/AllCategories/0/3/0/All-Dvds/0/latest/',
upcoming: '/en/videos/AllCategories/0/3/0/All-Dvds/0/upcoming',
},
},
{
slug: 'roccosiffredi',
name: 'Rocco Siffredi',
url: 'https://www.roccosiffredi.com',
description: 'Welcome to the official RoccoSiffredi.com, the Italian Stallion, with hardcore anal fucking and rough sex from the man himself who has coined the term hardcore.',
parameters: { api: true },
network: 'famedigital',
},
{
slug: 'silverstonedvd',
name: 'Silverstone DVD',
url: 'https://www.silverstonedvd.com',
description: 'Welcome to SilverStoneDVDs.com to enjoy unlimited streaming & downloads of teen porn, hot latina anal, young and dumb blowjob, DPs and hardcore porn.',
network: 'famedigital',
parameters: {
latest: '/en/All/scenes/0/latest/',
upcoming: '/en/All/scenes/0/upcoming',
},
},
{
slug: 'silviasaint',
name: 'Silvia Saint',
url: 'https://www.silviasaint.com',
description: 'Welcome to Silvia Saint official website. You can see Silvia Saint videos, pictures and blog!',
network: 'famedigital',
parameters: {
latest: '/en/scenes/All/0/',
upcoming: '/en/scenes/All/0/1/upcoming',
},
},
{
slug: 'whiteghetto',
name: 'White Ghetto',
url: 'https://www.whiteghetto.com',
description: 'Welcome to WhiteGhetto.com. Home of MILFs, GILFs, Midget porn, Indian babes, hairy pussies and more unusual and oddity porn!',
network: 'famedigital',
parameters: {
latest: '/en/scenes/All/0/superCat/0/latest/',
upcoming: '/en/scenes/All/0/superCat/0/upcoming',
},
},
// JAYS POV
{
slug: 'jayspov',

View File

@ -351,6 +351,11 @@ async function scrapeActors(actorNames) {
try {
return await profileScrapers.reduce(async (outcome, { scraper, scraperSlug }) => outcome.catch(async () => {
if (!scraper) {
logger.warn(`No profile profile scraper available for ${scraperSlug}`);
throw Object.assign(new Error(`No profile scraper available for ${scraperSlug}`));
}
logger.verbose(`Searching '${actorName}' on ${scraperSlug}`);
const profile = await scraper.fetchProfile(actorEntry ? actorEntry.name : actorName, scraperSlug);
@ -371,7 +376,7 @@ async function scrapeActors(actorNames) {
} catch (error) {
if (error.warn !== false) {
logger.warn(`Error in scraper ${source}: ${error.message}`);
logger.error(error.stack);
// logger.error(error.stack);
}
}
@ -380,6 +385,10 @@ async function scrapeActors(actorNames) {
const profile = await mergeProfiles(profiles, actorEntry);
if (argv.inspect) {
console.log(profile);
}
if (profile === null) {
logger.warn(`Could not find profile for actor '${actorName}'`);

View File

@ -25,7 +25,7 @@ async function init() {
const actors = await scrapeActors();
if (argv.withReleases) {
const releases = actors.map(actor => actor.releases).flat();
const releases = actors.map(actor => actor?.releases || []).flat();
await scrapeReleases(releases, null, 'scene');
}

View File

@ -80,18 +80,23 @@ const { argv } = yargs
describe: 'Don\'t fetch scenes older than',
type: 'string',
default: config.fetchAfter.join(' '),
alias: 'limit',
})
.option('pages', {
describe: 'Limit pages to scrape per site. Only used when no dates are found or --after is unset.',
.option('null-date-limit', {
describe: 'Limit amount of scenes when dates are missing.',
type: 'number',
default: 1,
default: config.nullDateLimit,
alias: 'limit',
})
.option('save', {
describe: 'Save fetched releases to database',
type: 'boolean',
default: true,
})
.option('inspect', {
describe: 'Show data in console.',
type: 'boolean',
default: false,
})
.option('level', {
describe: 'Log level',
type: 'string',

View File

@ -51,14 +51,20 @@ async function scrapeUniqueReleases(scraper, site, afterDate = getAfterDate(), a
if (
uniqueReleases.length > 0
&& (oldestReleaseOnPage || page < argv.pages)
&& moment(oldestReleaseOnPage).isAfter(afterDate)
// && (oldestReleaseOnPage || page < argv.pages)
&& (oldestReleaseOnPage
? moment(oldestReleaseOnPage).isAfter(afterDate)
: accReleases.length + uniqueReleases.length < argv.nullDateLimit)
) {
// oldest release on page is newer that specified limit, fetch next page
return scrapeUniqueReleases(scraper, site, afterDate, accReleases.concat(uniqueReleases), page + 1);
}
return accReleases.concat(uniqueReleases);
if (oldestReleaseOnPage) {
return accReleases.concat(uniqueReleases);
}
return accReleases.concat(uniqueReleases).slice(0, argv.nullDateLimit);
}
async function scrapeUpcomingReleases(scraper, site) {
@ -105,7 +111,7 @@ async function scrapeSiteReleases(scraper, site) {
]);
if (argv.upcoming) {
logger.info(`${site.name}: ${argv.latest ? `Found ${newReleases.length}` : 'Ignoring'} latest releases, ${argv.upcoming ? '' : 'ignoring '}${upcomingReleases.length || ''} upcoming releases`);
logger.info(`${site.name}: ${argv.latest ? `Found ${newReleases.length}` : 'Ignoring'} latest releases,${argv.upcoming ? ' ' : ' ignoring '}${upcomingReleases.length || '0'} upcoming releases`);
}
const baseReleases = [...newReleases, ...upcomingReleases];

View File

@ -1,101 +1,81 @@
'use strict';
const bhttp = require('bhttp');
const cheerio = require('cheerio');
const { JSDOM } = require('jsdom');
const moment = require('moment');
const { d, ex, exa, get } = require('../utils/q');
const slugify = require('../utils/slugify');
/* eslint-disable newline-per-chained-call */
function scrapeLatest(html, site) {
const $ = cheerio.load(html, { normalizeWhitespace: true });
const sceneElements = $('.card.m-1').toArray();
function scrapeAll(html, site, origin) {
return exa(html, '.card.m-1:not(.pornstar-card)').map(({ q, qa, qd }) => {
const release = {};
return sceneElements.map((element) => {
const sceneLinkElement = $(element).find('a').first();
const title = sceneLinkElement.attr('title');
const url = `${site.url}${sceneLinkElement.attr('href')}`;
const entryId = url.split('/').slice(-1)[0];
release.title = q('a', 'title');
release.url = `${site?.url || origin || 'https://ddfnetwork.com'}${q('a', 'href')}`;
[release.entryId] = release.url.split('/').slice(-1);
const date = moment.utc($(element).find('small[datetime]').attr('datetime'), 'YYYY-MM-DD HH:mm:ss').toDate();
const actors = $(element).find('.card-subtitle a').map((actorIndex, actorElement) => $(actorElement).text().trim())
.toArray()
.filter(actor => actor);
release.date = qd('small[datetime]', 'YYYY-MM-DD HH:mm:ss', null, 'datetime');
release.actors = qa('.card-subtitle a', true).filter(Boolean);
const duration = parseInt($(element).find('.card-info div:nth-child(2) .card-text').text(), 10) * 60;
const duration = parseInt(q('.card-info div:nth-child(2) .card-text', true), 10) * 60;
if (duration) release.duration = duration;
const poster = sceneLinkElement.find('img').attr('data-src');
release.poster = q('img').dataset.src;
return {
url,
entryId,
title,
actors,
date,
duration,
poster,
rating: null,
site,
};
return release;
});
}
async function scrapeScene(html, url, site) {
const $ = cheerio.load(html, { normalizeWhitespace: true });
async function scrapeScene(html, url, _site) {
const { q, qa, qd, qm, qp, qus } = ex(html);
const release = {};
const entryId = url.split('/').slice(-1)[0];
const title = $('meta[itemprop="name"]').attr('content');
const description = $('.descr-box p').text(); // meta tags don't contain full description
[release.entryId] = url.split('/').slice(-1);
const dateProp = $('meta[itemprop="uploadDate"]').attr('content');
const date = dateProp
? moment.utc($('meta[itemprop="uploadDate"]').attr('content'), 'YYYY-MM-DD').toDate()
: moment.utc($('.title-border:nth-child(2) p').text(), 'MM.DD.YYYY').toDate();
const actors = $('.pornstar-card > a').map((actorIndex, actorElement) => $(actorElement).attr('title')).toArray();
release.title = qm('itemprop=name');
release.description = q('.descr-box p', true);
release.date = qd('meta[itemprop=uploadDate]', 'YYYY-MM-DD', null, 'content')
|| qd('.title-border:nth-child(2) p', 'MM.DD.YYYY');
const likes = Number($('.info-panel.likes .likes').text());
const duration = Number($('.info-panel.duration .duration').text().slice(0, -4)) * 60;
release.actors = qa('.pornstar-card > a', 'title');
release.tags = qa('.tags-tab .tags a', true);
const tags = $('.tags-tab .tags a').map((tagIndex, tagElement) => $(tagElement).text()).toArray();
release.duration = parseInt(q('.icon-video-red + span', true), 10) * 60;
release.likes = Number(q('.icon-like-red + span', true));
const poster = $('#video').attr('poster');
const photos = $('.photo-slider-guest .card a').map((photoIndex, photoElement) => $(photoElement).attr('href')).toArray();
release.poster = qp();
release.photos = qus('.photo-slider-guest .card a');
const trailer540 = $('source[res="540"]').attr('src');
const trailer720 = $('source[res="720"]').attr('src');
release.trailer = qa('source[type="video/mp4"]').map(trailer => ({
src: trailer.src,
quality: Number(trailer.attributes.res.value),
}));
return {
url,
entryId,
title,
description,
actors,
date,
duration,
tags,
poster,
photos,
trailer: [
{
src: trailer720,
quality: 720,
},
{
src: trailer540,
quality: 540,
},
],
rating: {
likes,
},
site,
};
return release;
}
async function fetchActorReleases(urls) {
// DDF Network and DDF Network Stream list all scenes, exclude
const sources = urls.filter(url => !/ddfnetwork/.test(url));
const releases = await Promise.all(sources.map(async (url) => {
const { html } = await get(url);
return scrapeAll(html, null, new URL(url).origin);
}));
// DDF cross-releases scenes between sites, filter duplicates by entryId
return Object.values(releases
.flat()
.sort((releaseA, releaseB) => releaseB.date - releaseA.date) // sort by date so earliest scene remains
.reduce((acc, release) => ({ ...acc, [release.entryId]: release }), {}));
}
async function scrapeProfile(html, _url, actorName) {
const { document } = new JSDOM(html).window;
const { q, qa, qus } = ex(html);
const keys = Array.from(document.querySelectorAll('.about-title'), el => el.textContent.trim().replace(':', ''));
const values = Array.from(document.querySelectorAll('.about-info'), (el) => {
const keys = qa('.about-title', true).map(key => slugify(key, { delimiter: '_' }));
const values = qa('.about-info').map((el) => {
if (el.children.length > 0) {
return Array.from(el.children, child => child.textContent.trim()).join(', ');
}
@ -104,9 +84,7 @@ async function scrapeProfile(html, _url, actorName) {
});
const bio = keys.reduce((acc, key, index) => {
if (values[index] === '-') {
return acc;
}
if (values[index] === '-') return acc;
return {
...acc,
@ -114,45 +92,49 @@ async function scrapeProfile(html, _url, actorName) {
};
}, {});
const descriptionEl = document.querySelector('.description-box');
const avatarEl = document.querySelector('.pornstar-details .card-img-top');
const profile = {
name: actorName,
};
profile.birthdate = moment.utc(bio.Birthday, 'MMMM DD, YYYY').toDate();
if (bio.Nationality) profile.nationality = bio.Nationality;
profile.description = q('.description-box', true);
profile.birthdate = d(bio.birthday, 'MMMM DD, YYYY');
if (bio['Bra size']) [profile.bust] = bio['Bra size'].match(/\d+\w+/);
if (bio.Waist) profile.waist = Number(bio.Waist.match(/\d+/)[0]);
if (bio.Hips) profile.hip = Number(bio.Hips.match(/\d+/)[0]);
if (bio.nationality) profile.nationality = bio.nationality;
if (bio.Height) profile.height = Number(bio.Height.match(/\d{2,}/)[0]);
if (bio.bra_size) [profile.bust] = bio.bra_size.match(/\d+\w+/);
if (bio.waist) profile.waist = Number(bio.waist.match(/\d+/)[0]);
if (bio.hips) profile.hip = Number(bio.hips.match(/\d+/)[0]);
if (bio['Tit Style'] && bio['Tit Style'].match('Enhanced')) profile.naturalBoobs = false;
if (bio['Tit Style'] && bio['Tit Style'].match('Natural')) profile.naturalBoobs = true;
if (bio.height) profile.height = Number(bio.height.match(/\d{2,}/)[0]);
if (bio['Body Art'] && bio['Body Art'].match('Tattoo')) profile.hasTattoos = true;
if (bio['Body Art'] && bio['Body Art'].match('Piercing')) profile.hasPiercings = true;
if (bio.tit_style && /Enhanced/.test(bio.tit_style)) profile.naturalBoobs = false;
if (bio.tit_style && /Natural/.test(bio.tit_style)) profile.naturalBoobs = true;
if (bio['Hair Style']) profile.hair = bio['Hair Style'].split(',')[0].trim().toLowerCase();
if (bio['Eye Color']) profile.eyes = bio['Eye Color'].match(/\w+/)[0].toLowerCase();
if (bio.body_art && /Tattoo/.test(bio.body_art)) profile.hasTattoos = true;
if (bio.body_art && /Piercing/.test(bio.body_art)) profile.hasPiercings = true;
if (bio['Shoe size']) profile.shoes = Number(bio['Shoe size'].split('|')[1]);
if (bio.hair_style) profile.hair = bio.hair_style.split(',')[0].trim().toLowerCase();
if (bio.eye_color) profile.eyes = bio.eye_color.match(/\w+/)[0].toLowerCase();
if (descriptionEl) profile.description = descriptionEl.textContent.trim();
if (bio.shoe_size) profile.shoes = Number(bio.shoe_size.split('|')[1]);
const avatarEl = q('.pornstar-details .card-img-top');
if (avatarEl && avatarEl.dataset.src.match('^//')) profile.avatar = `https:${avatarEl.dataset.src}`;
profile.releases = await fetchActorReleases(qus('.find-me-tab li a'));
return profile;
}
async function fetchLatest(site, page = 1) {
const url = `https://ddfnetwork.com/videos/search/latest/ever/${new URL(site.url).hostname}/-/${page}`;
const url = site.parameters?.native
? `${site.url}/videos/search/latest/ever/allsite/-/${page}`
: `https://ddfnetwork.com/videos/search/latest/ever/${new URL(site.url).hostname}/-/${page}`;
console.log(url);
const res = await bhttp.get(url);
return scrapeLatest(res.body.toString(), site);
return scrapeAll(res.body.toString(), site);
}
async function fetchScene(url, site) {

View File

@ -0,0 +1,72 @@
'use strict';
const { fetchLatest, fetchApiLatest, fetchUpcoming, fetchApiUpcoming, fetchScene, fetchProfile, fetchApiProfile } = require('./gamma');
function extractLowArtActors(release) {
const actors = release.title
.replace(/solo/i, '')
.split(/,|\band\b/ig)
.map(actor => actor.trim());
return {
...release,
actors,
};
}
async function networkFetchLatest(site, page = 1) {
if (site.parameters?.api) return fetchApiLatest(site, page, false);
const releases = await fetchLatest(site, page);
if (site.slug === 'lowartfilms') {
return releases.map(release => extractLowArtActors(release));
}
return releases;
}
async function networkFetchScene(url, site) {
const release = await fetchScene(url, site);
if (site.slug === 'lowartfilms') {
return extractLowArtActors(release);
}
return release;
}
async function networkFetchUpcoming(site, page = 1) {
if (site.parameters?.api) return fetchApiUpcoming(site, page, true);
return fetchUpcoming(site, page);
}
async function networkFetchProfile(actorName) {
// not all Fame Digital sites offer Gamma actors
const [devils, rocco, peter] = await Promise.all([
fetchApiProfile(actorName, 'devilsfilm', true),
fetchApiProfile(actorName, 'roccosiffredi'),
fetchProfile(actorName, 'peternorth', true),
]);
if (devils || rocco || peter) {
const releases = [].concat(devils?.releases || [], rocco?.releases || [], peter?.releases || []);
return {
...peter,
...rocco,
...devils,
releases,
};
}
return null;
}
module.exports = {
fetchLatest: networkFetchLatest,
fetchProfile: networkFetchProfile,
fetchScene: networkFetchScene,
fetchUpcoming: networkFetchUpcoming,
};

View File

@ -111,18 +111,23 @@ function scrapeAll(html, site, useNetworkUrl) {
const scenesElements = $('li[data-itemtype=scene]').toArray();
return scenesElements.map((element) => {
const release = {};
const sceneLinkElement = $(element).find('.sceneTitle a');
const url = `${useNetworkUrl ? site.network.url : site.url}${sceneLinkElement.attr('href')}`;
const title = sceneLinkElement.attr('title');
release.url = `${useNetworkUrl ? site.network.url : site.url}${sceneLinkElement.attr('href')}`;
release.title = sceneLinkElement.attr('title');
const entryId = $(element).attr('data-itemid');
release.entryId = $(element).attr('data-itemid');
const date = moment
.utc($(element).find('.sceneDate').text(), 'MM-DD-YYYY')
.toDate();
const dateEl = $(element).find('.sceneDate').text() || null;
if (dateEl) {
release.date = moment
.utc($(element).find('.sceneDate').text(), ['MM-DD-YYYY', 'YYYY-MM-DD'])
.toDate();
}
const actors = $(element).find('.sceneActors a')
release.actors = $(element).find('.sceneActors a')
.map((actorIndex, actorElement) => $(actorElement).attr('title'))
.toArray();
@ -130,27 +135,17 @@ function scrapeAll(html, site, useNetworkUrl) {
.toArray()
.map(value => Number($(value).text()));
const poster = $(element).find('.imgLink img').attr('data-original');
const trailer = `https://videothumb.gammacdn.com/307x224/${entryId}.mp4`;
release.rating = { likes, dislikes };
return {
url,
entryId,
title,
actors,
director: 'Mason',
date,
poster,
trailer: {
src: trailer,
quality: 224,
},
rating: {
likes,
dislikes,
},
site,
const posterEl = $(element).find('.imgLink img');
if (posterEl) release.poster = posterEl.attr('data-original') || posterEl.attr('src');
release.teaser = {
src: `https://videothumb.gammacdn.com/307x224/${release.entryId}.mp4`,
quality: 224,
};
return release;
});
}
@ -161,33 +156,41 @@ async function scrapeScene(html, url, site) {
const json = $('script[type="application/ld+json"]').html();
const videoJson = $('script:contains("window.ScenePlayerOptions")').html();
const [data, data2] = JSON.parse(json);
const [data, data2] = json ? JSON.parse(json) : [];
const videoData = JSON.parse(videoJson.slice(videoJson.indexOf('{'), videoJson.indexOf('};') + 1));
[release.entryId] = new URL(url).pathname.split('/').slice(-1);
release.title = data?.name || videoData.playerOptions.sceneInfos.sceneTitle;
release.title = data.name;
release.description = data.description;
// date in data object is not the release date of the scene, but the date the entry was added
// date in data object is not the release date of the scene, but the date the entry was added; only use as fallback
const dateString = $('.updatedDate').first().text().trim();
const dateMatch = dateString.match(/\d{2,4}-\d{2}-\d{2,4}/)?.[0];
release.date = moment.utc(dateMatch, ['MM-DD-YYYY', 'YYYY-MM-DD']).toDate();
release.director = data.director?.[0].name || data2?.director?.[0].name;
release.actors = (data.actor || data2.actor).map(actor => actor.name);
const hasTrans = (data.actor || data2.actor).some(actor => actor.gender === 'shemale');
if (dateMatch) release.date = moment.utc(dateMatch, ['MM-DD-YYYY', 'YYYY-MM-DD']).toDate();
else if (data?.dateCreated) release.date = moment.utc(data.dateCreated, 'YYYY-MM-DD').toDate();
else release.date = videoData.playerOptions.sceneInfos.sceneReleaseDate;
const stars = (data.aggregateRating.ratingValue / data.aggregateRating.bestRating) * 5;
if (stars) release.rating = { stars };
if (data) {
release.description = data.description;
release.director = data.director?.[0].name || data2?.director?.[0].name;
release.duration = moment.duration(data.duration.slice(2).split(':')).asSeconds();
const actors = data?.actor || data2?.actor || [];
const hasTrans = actors.some(actor => actor.gender === 'shemale');
release.actors = actors.map(actor => actor.name);
const rawTags = data.keywords?.split(', ');
release.tags = hasTrans ? [...rawTags, 'transsexual'] : rawTags;
const stars = (data.aggregateRating.ratingValue / data.aggregateRating.bestRating) * 5;
if (stars) release.rating = { stars };
release.duration = moment.duration(data.duration.slice(2)).asSeconds();
const rawTags = data.keywords?.split(', ');
release.tags = hasTrans ? [...rawTags, 'transsexual'] : rawTags;
}
release.poster = videoData.picPreview;
release.photos = await getPhotos($('.picturesItem a').attr('href'), site);
const photoLink = $('.picturesItem a').attr('href');
if (photoLink) release.photos = await getPhotos(photoLink, site);
const trailer = `${videoData.playerOptions.host}${videoData.url}`;
release.trailer = [
@ -297,6 +300,11 @@ async function fetchApiCredentials(referer) {
const body = res.body.toString();
const apiLine = body.split('\n').find(bodyLine => bodyLine.match('apiKey'));
if (!apiLine) {
throw new Error(`Can not use Gamma API for ${referer}`);
}
const apiSerial = apiLine.slice(apiLine.indexOf('{'), apiLine.indexOf('};') + 1);
const apiData = JSON.parse(apiSerial);
@ -321,7 +329,7 @@ async function fetchApiLatest(site, page = 1, upcoming = false) {
requests: [
{
indexName: 'all_scenes',
params: `query=&hitsPerPage=36&maxValuesPerFacet=100&page=${page - 1}&facetFilters=[["lesbian:"],["bisex:"],["shemale:"],["upcoming:${upcoming ? 1 : 0}"]]`,
params: `query=&hitsPerPage=36&maxValuesPerFacet=100&page=${page - 1}&facetFilters=[["lesbian:"],["bisex:"],["shemale:"],["upcoming:${upcoming ? 1 : 0}"]]&filters=sitename:${site.slug}`,
},
],
}, {
@ -331,7 +339,11 @@ async function fetchApiLatest(site, page = 1, upcoming = false) {
encodeJSON: true,
});
return scrapeApiReleases(res.body.results[0].hits, site);
if (res.statuscode === 200 && res.body.results?.[0]?.hits) {
return scrapeApiReleases(res.body.results[0].hits, site);
}
return [];
}
async function fetchApiUpcoming(site) {
@ -339,14 +351,14 @@ async function fetchApiUpcoming(site) {
}
async function fetchLatest(site, page = 1) {
const url = `${site.url}/en/videos/AllCategories/0/${page}`;
const url = `${site.url}${site.parameters?.latest || '/en/videos/AllCategories/0/'}${page}`;
const res = await bhttp.get(url);
return scrapeAll(res.body.toString(), site);
}
async function fetchUpcoming(site) {
const res = await bhttp.get(`${site.url}/en/videos/AllCategories/0/1/upcoming`);
const res = await bhttp.get(`${site.url}${site.parameters?.upcoming || '/en/videos/AllCategories/0/1/upcoming'}`);
return scrapeAll(res.body.toString(), site);
}
@ -362,7 +374,7 @@ async function fetchActorScenes(actorName, apiUrl, siteSlug) {
requests: [
{
indexName: 'all_scenes',
params: `query=&hitsPerPage=36&maxValuesPerFacet=100&page=0&facetFilters=[["lesbian:"],["bisex:"],["shemale:"],["actors.name:${actorName}"]]`,
params: `query=&filters=sitename:${siteSlug}&hitsPerPage=36&maxValuesPerFacet=100&page=0&facetFilters=[["lesbian:"],["bisex:"],["shemale:"],["actors.name:${actorName}"]]`,
},
],
}, {
@ -408,7 +420,7 @@ async function fetchProfile(actorName, siteSlug, altSearchUrl) {
async function fetchApiProfile(actorName, siteSlug) {
const actorSlug = encodeURI(actorName);
const referer = `https://www.${siteSlug}.com/en/search?query=${actorSlug}&tab=actors`;
const referer = `https://www.${siteSlug}.com/en/search`;
const { apiUrl } = await fetchApiCredentials(referer);

View File

@ -80,7 +80,7 @@ async function scrapeScene(html, url, site) {
const actorEl = qa('.stat').find(stat => /Featuring/.test(stat.textContent));
const actorString = qtext(actorEl);
release.actors = actorString?.split(/, and |, /g) || [];
release.actors = actorString?.split(/,\band\b|,/g).map(actor => actor.trim()) || [];
}
if (release.actors.length === 0 && site.parameters?.actors) release.actors = site.parameters.actors;

View File

@ -26,6 +26,7 @@ const bangbros = require('./bangbros');
const blowpass = require('./blowpass');
const brazzers = require('./brazzers');
const ddfnetwork = require('./ddfnetwork');
const famedigital = require('./famedigital');
const evilangel = require('./evilangel');
const julesjordan = require('./julesjordan');
const kellymadison = require('./kellymadison');
@ -60,6 +61,7 @@ module.exports = {
digitalplayground,
dogfart,
dogfartnetwork: dogfart,
famedigital,
evilangel,
fakehub,
jayrock,
@ -96,6 +98,7 @@ module.exports = {
brazzers,
ddfnetwork,
digitalplayground,
famedigital,
evilangel,
fakehub,
freeones,

View File

@ -14,6 +14,7 @@ async function fetchScene(url, site) {
// const siteUrl = siteDomain && `https://www.${siteDomain}`;
release.channel = siteSlug;
release.director = 'Mason';
return release;
}

View File

@ -133,6 +133,7 @@ async function fetchSitesFromConfig() {
'networks.name as network_name', 'networks.slug as network_slug', 'networks.url as network_url', 'networks.description as network_description', 'networks.parameters as network_parameters',
)
.leftJoin('networks', 'sites.network_id', 'networks.id')
.where('sites.enabled')
.where((builder) => {
if (config.include) {
builder

View File

@ -17,8 +17,8 @@ function q(context, selector, attrArg, trim = true) {
if (attr) {
const value = selector
? context.querySelector(selector)?.[attr]
: context[attr];
? context.querySelector(selector)?.[attr] || context.querySelector(selector)?.attributes[attr]?.value
: context[attr] || context[attr]?.attributes[attr]?.value;
return trim ? value?.trim() : value;
}
@ -50,16 +50,14 @@ function qtext(context, selector, trim = true) {
}
function qmeta(context, selector, attrArg = 'content', trim = true) {
return q(context, selector, attrArg, trim);
if (/meta\[.*\]/.test(selector)) {
return q(context, selector, attrArg, trim);
}
return q(context, `meta[${selector}]`, attrArg, trim);
}
function qdate(context, selector, format, match, attr = 'textContent') {
const dateString = selector
? context.querySelector(selector)?.[attr]
: context[attr];
if (!dateString) return null;
function date(dateString, format, match) {
if (match) {
const dateStamp = dateString.trim().match(match);
@ -70,6 +68,14 @@ function qdate(context, selector, format, match, attr = 'textContent') {
return moment.utc(dateString.trim(), format).toDate();
}
function qdate(context, selector, format, match, attr = 'textContent') {
const dateString = q(context, selector, attr, true);
if (!dateString) return null;
return date(dateString, format, match);
}
function qimage(context, selector = 'img', attr = 'src', protocol = 'https') {
const image = q(context, selector, attr);
@ -107,6 +113,12 @@ function qtrailer(context, selector = 'source', attr = 'src', protocol = 'https'
return attr ? prefixProtocol(trailer, protocol) : trailer;
}
function qtrailers(context, selector = 'source', attr = 'src', protocol = 'https') {
const trailers = qall(context, selector, attr);
return attr ? trailers.map(trailer => prefixProtocol(trailer, protocol)) : trailers;
}
function qlength(context, selector, attr = 'textContent') {
const durationString = q(context, selector, attr);
@ -133,8 +145,9 @@ const funcs = {
qmeta,
qtext,
qtrailer,
qurls,
qtrailers,
qurl,
qurls,
qa: qall,
qd: qdate,
qi: qimage,
@ -143,6 +156,7 @@ const funcs = {
ql: qlength,
qm: qmeta,
qt: qtrailer,
qts: qtrailers,
qtx: qtext,
qu: qurl,
qus: qurls,
@ -161,6 +175,7 @@ function init(element, window) {
return {
element,
html: element.outerHTML || element.body.outerHTML,
...(window && {
window,
document: window.document,
@ -209,6 +224,7 @@ async function getAll(url, selector, headers) {
}
module.exports = {
date,
extract,
extractAll,
init,
@ -217,6 +233,7 @@ module.exports = {
getAll,
context: init,
contextAll: initAll,
d: date,
ex: extract,
exa: extractAll,
ctx: init,