mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-20 10:34:30 +00:00
repro: Remove app
The repro app has been disabled for a long time. Its package has been removed from Debian, and there is no sign of it returning soon. Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
c8a5f3727f
commit
21ba450484
@ -1,75 +0,0 @@
|
|||||||
#!/usr/bin/python3
|
|
||||||
#
|
|
||||||
# This file is part of FreedomBox.
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
Configuration helper for repro SIP proxy.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
|
|
||||||
from plinth import action_utils
|
|
||||||
|
|
||||||
CONFIG = '/etc/repro/repro.config'
|
|
||||||
|
|
||||||
|
|
||||||
def parse_arguments():
|
|
||||||
"""Return parsed command line arguments as dictionary."""
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
|
|
||||||
|
|
||||||
subparsers.add_parser('setup', help='Configure repro')
|
|
||||||
|
|
||||||
subparsers.required = True
|
|
||||||
return parser.parse_args()
|
|
||||||
|
|
||||||
|
|
||||||
def subcommand_setup(_):
|
|
||||||
"""Configure repro."""
|
|
||||||
with open(CONFIG, 'r') as conf:
|
|
||||||
lines = conf.readlines()
|
|
||||||
|
|
||||||
with open(CONFIG, 'w') as conf:
|
|
||||||
for line in lines:
|
|
||||||
if line.startswith('Database1Path'):
|
|
||||||
# workaround for Debian bug #803113
|
|
||||||
conf.write('Database1Path = /var/lib/repro\n')
|
|
||||||
elif line.startswith('TLSPort'):
|
|
||||||
conf.write('TLSPort = 5061\n')
|
|
||||||
elif line.startswith('DisableHttpAuth'):
|
|
||||||
# let apache handle authentication
|
|
||||||
conf.write('DisableHttpAuth = true\n')
|
|
||||||
else:
|
|
||||||
conf.write(line)
|
|
||||||
|
|
||||||
action_utils.service_restart('repro')
|
|
||||||
|
|
||||||
# We have introduced new firewalld service files and wish to use
|
|
||||||
# them.
|
|
||||||
action_utils.service_reload('firewalld')
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Parse arguments and perform all duties."""
|
|
||||||
arguments = parse_arguments()
|
|
||||||
|
|
||||||
subcommand = arguments.subcommand.replace('-', '_')
|
|
||||||
subcommand_method = globals()['subcommand_' + subcommand]
|
|
||||||
subcommand_method(arguments)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
2
debian/copyright
vendored
2
debian/copyright
vendored
@ -56,8 +56,6 @@ Files: static/themes/default/icons/diaspora.png
|
|||||||
static/themes/default/icons/privoxy.png
|
static/themes/default/icons/privoxy.png
|
||||||
static/themes/default/icons/privoxy.svg
|
static/themes/default/icons/privoxy.svg
|
||||||
static/themes/default/icons/radicale.svg
|
static/themes/default/icons/radicale.svg
|
||||||
static/themes/default/icons/repro.png
|
|
||||||
static/themes/default/icons/repro.svg
|
|
||||||
static/themes/default/img/network-*
|
static/themes/default/img/network-*
|
||||||
Copyright: None
|
Copyright: None
|
||||||
Comment: Placed into public domain by authors (or)
|
Comment: Placed into public domain by authors (or)
|
||||||
|
|||||||
1
debian/freedombox.maintscript
vendored
1
debian/freedombox.maintscript
vendored
@ -8,3 +8,4 @@ rm_conffile /etc/plinth/modules-enabled/system 0.15.1+ds-2~
|
|||||||
rm_conffile /etc/plinth/modules-enabled/disks 0.15.3+ds-1~
|
rm_conffile /etc/plinth/modules-enabled/disks 0.15.3+ds-1~
|
||||||
rm_conffile /etc/plinth/modules-enabled/udiskie 0.39.0~
|
rm_conffile /etc/plinth/modules-enabled/udiskie 0.39.0~
|
||||||
rm_conffile /etc/plinth/modules-enabled/restore 20.1~
|
rm_conffile /etc/plinth/modules-enabled/restore 20.1~
|
||||||
|
rm_conffile /etc/plinth/modules-enabled/repro 20.1~
|
||||||
|
|||||||
@ -1,43 +0,0 @@
|
|||||||
#
|
|
||||||
# This file is part of FreedomBox.
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
# XXX: Enable tests when repro module is enabled again.
|
|
||||||
@apps @sip @backups @sso @skip
|
|
||||||
Feature: Repro SIP Server
|
|
||||||
Make audio and video calls.
|
|
||||||
|
|
||||||
Background:
|
|
||||||
Given I'm a logged in user
|
|
||||||
Given the repro application is installed
|
|
||||||
|
|
||||||
Scenario: Enable repro application
|
|
||||||
Given the repro application is disabled
|
|
||||||
When I enable the repro application
|
|
||||||
Then the repro service should be running
|
|
||||||
|
|
||||||
Scenario: Backup and restore repro
|
|
||||||
Given the repro application is enabled
|
|
||||||
And repro has been configured
|
|
||||||
When I create a backup of the repro app data
|
|
||||||
And I delete the repro configuration
|
|
||||||
And I restore the repro app data backup
|
|
||||||
Then the repro configuration should be restored
|
|
||||||
|
|
||||||
Scenario: Disable repro application
|
|
||||||
Given the repro application is enabled
|
|
||||||
When I disable the repro application
|
|
||||||
Then the repro service should not be running
|
|
||||||
@ -138,21 +138,6 @@ def mldonkey_assert_number_of_ed2k_files(browser, ed2k_files_number):
|
|||||||
assert ed2k_files_number == site.mldonkey_get_number_of_ed2k_files(browser)
|
assert ed2k_files_number == site.mldonkey_get_number_of_ed2k_files(browser)
|
||||||
|
|
||||||
|
|
||||||
@given('repro has been configured')
|
|
||||||
def repro_configure(browser):
|
|
||||||
site.repro_configure(browser)
|
|
||||||
|
|
||||||
|
|
||||||
@when('I delete the repro configuration')
|
|
||||||
def repro_delete_config(browser):
|
|
||||||
site.repro_delete_config(browser)
|
|
||||||
|
|
||||||
|
|
||||||
@then('the repro configuration should be restored')
|
|
||||||
def repro_is_configured(browser):
|
|
||||||
assert site.repro_is_configured(browser)
|
|
||||||
|
|
||||||
|
|
||||||
@when('all torrents are removed from transmission')
|
@when('all torrents are removed from transmission')
|
||||||
def transmission_remove_all_torrents(browser):
|
def transmission_remove_all_torrents(browser):
|
||||||
site.transmission_remove_all_torrents(browser)
|
site.transmission_remove_all_torrents(browser)
|
||||||
|
|||||||
@ -171,32 +171,6 @@ def _mediawiki_has_main_page(browser):
|
|||||||
return 'This page has been deleted.' not in content.text
|
return 'This page has been deleted.' not in content.text
|
||||||
|
|
||||||
|
|
||||||
def repro_configure(browser):
|
|
||||||
"""Configure repro."""
|
|
||||||
browser.visit(
|
|
||||||
'{}/repro/domains.html?domainUri=freedombox.local&domainTlsPort='
|
|
||||||
'&action=Add'.format(interface.default_url))
|
|
||||||
|
|
||||||
|
|
||||||
def repro_delete_config(browser):
|
|
||||||
"""Delete the repro config."""
|
|
||||||
browser.visit('{}/repro/domains.html?domainUri=&domainTlsPort='
|
|
||||||
'&action=Remove&remove.freedombox.local=on'.format(
|
|
||||||
interface.default_url))
|
|
||||||
|
|
||||||
|
|
||||||
def repro_is_configured(browser):
|
|
||||||
"""Check whether repro is configured."""
|
|
||||||
return eventually(_repro_is_configured, [browser])
|
|
||||||
|
|
||||||
|
|
||||||
def _repro_is_configured(browser):
|
|
||||||
"""Check whether repro is configured."""
|
|
||||||
browser.visit('{}/repro/domains.html'.format(interface.default_url))
|
|
||||||
remove = browser.find_by_name('remove.freedombox.local')
|
|
||||||
return bool(remove)
|
|
||||||
|
|
||||||
|
|
||||||
def jsxc_login(browser):
|
def jsxc_login(browser):
|
||||||
"""Login to JSXC."""
|
"""Login to JSXC."""
|
||||||
access_url(browser, 'jsxc')
|
access_url(browser, 'jsxc')
|
||||||
|
|||||||
@ -1,134 +0,0 @@
|
|||||||
#
|
|
||||||
# This file is part of FreedomBox.
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
FreedomBox app for repro.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from django.urls import reverse_lazy
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
|
|
||||||
from plinth import actions
|
|
||||||
from plinth import app as app_module
|
|
||||||
from plinth import frontpage, menu
|
|
||||||
from plinth.daemon import Daemon
|
|
||||||
from plinth.modules.apache.components import Webserver
|
|
||||||
from plinth.modules.firewall.components import Firewall
|
|
||||||
from plinth.views import AppView
|
|
||||||
|
|
||||||
from .manifest import backup, clients # noqa, pylint: disable=unused-import
|
|
||||||
|
|
||||||
version = 2
|
|
||||||
|
|
||||||
managed_services = ['repro']
|
|
||||||
|
|
||||||
managed_packages = ['repro']
|
|
||||||
|
|
||||||
name = _('repro')
|
|
||||||
|
|
||||||
short_description = _('SIP Server')
|
|
||||||
|
|
||||||
description = [
|
|
||||||
_('repro provides various SIP services that a SIP softphone can utilize '
|
|
||||||
'to provide audio and video calls as well as presence and instant '
|
|
||||||
'messaging. repro provides a server and SIP user accounts that clients '
|
|
||||||
'can use to let their presence known. It also acts as a proxy to '
|
|
||||||
'federate SIP communications to other servers on the Internet similar '
|
|
||||||
'to email.'),
|
|
||||||
_('To make SIP calls, a client application is needed. Available clients '
|
|
||||||
'include <a href="https://jitsi.org/">Jitsi</a> (for computers) and '
|
|
||||||
'<a href="https://f-droid.org/repository/browse/?fdid=com.csipsimple"> '
|
|
||||||
'CSipSimple</a> (for Android phones).'),
|
|
||||||
_('<strong>Note:</strong> Before using repro, domains and users will '
|
|
||||||
'need to be configured using the <a href="/repro/domains.html" '
|
|
||||||
'data-turbolinks="false">web-based configuration panel</a>. Users in '
|
|
||||||
'the <em>admin</em> group will be able to log in to the repro '
|
|
||||||
'configuration panel. After setting the domain, it is required to '
|
|
||||||
'restart the repro service. Disable the service and re-enable it.'),
|
|
||||||
]
|
|
||||||
|
|
||||||
clients = clients
|
|
||||||
|
|
||||||
reserved_usernames = ['repro']
|
|
||||||
|
|
||||||
manual_page = 'Repro'
|
|
||||||
|
|
||||||
port_forwarding_info = [('UDP', '1024-65535')]
|
|
||||||
|
|
||||||
app = None
|
|
||||||
|
|
||||||
|
|
||||||
class ReproApp(app_module.App):
|
|
||||||
"""FreedomBox app for Repro."""
|
|
||||||
|
|
||||||
app_id = 'repro'
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
"""Create components for the app."""
|
|
||||||
super().__init__()
|
|
||||||
menu_item = menu.Menu('menu-repro', name, short_description, 'repro',
|
|
||||||
'repro:index', parent_url_name='apps')
|
|
||||||
self.add(menu_item)
|
|
||||||
|
|
||||||
shortcut = frontpage.Shortcut(
|
|
||||||
'shortcut-repro', name, short_description=short_description,
|
|
||||||
icon='repro', description=description,
|
|
||||||
configure_url=reverse_lazy('repro:index'), clients=clients,
|
|
||||||
login_required=True)
|
|
||||||
self.add(shortcut)
|
|
||||||
|
|
||||||
firewall = Firewall('firewall-repro', name,
|
|
||||||
ports=['sip', 'sips',
|
|
||||||
'rtp-plinth'], is_external=True)
|
|
||||||
self.add(firewall)
|
|
||||||
|
|
||||||
webserver = Webserver('webserver-repro', 'repro-plinth')
|
|
||||||
self.add(webserver)
|
|
||||||
|
|
||||||
daemon = Daemon(
|
|
||||||
'daemon-repro', managed_services[0], listen_ports=[(5060, 'udp4'),
|
|
||||||
(5060, 'udp6'),
|
|
||||||
(5060, 'tcp4'),
|
|
||||||
(5060, 'tcp6'),
|
|
||||||
(5061, 'tcp4'),
|
|
||||||
(5061, 'tcp6')])
|
|
||||||
self.add(daemon)
|
|
||||||
|
|
||||||
|
|
||||||
def init():
|
|
||||||
"""Initialize the repro module."""
|
|
||||||
global app
|
|
||||||
app = ReproApp()
|
|
||||||
|
|
||||||
setup_helper = globals()['setup_helper']
|
|
||||||
if setup_helper.get_state() != 'needs-setup' and app.is_enabled():
|
|
||||||
app.set_enabled(True)
|
|
||||||
|
|
||||||
|
|
||||||
class ReproAppView(AppView):
|
|
||||||
clients = clients
|
|
||||||
name = name
|
|
||||||
description = description
|
|
||||||
app_id = 'repro'
|
|
||||||
manual_page = manual_page
|
|
||||||
port_forwarding_info = port_forwarding_info
|
|
||||||
|
|
||||||
|
|
||||||
def setup(helper, old_version=None):
|
|
||||||
"""Install and configure the module."""
|
|
||||||
helper.install(managed_packages)
|
|
||||||
helper.call('post', actions.superuser_run, 'repro', ['setup'])
|
|
||||||
helper.call('post', app.enable)
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
##
|
|
||||||
## On all sites, provide repro admin interface on a path: /repro
|
|
||||||
## Only allow users of admin LDAP group.
|
|
||||||
##
|
|
||||||
<Location /repro>
|
|
||||||
ProxyPass http://localhost:5080
|
|
||||||
Include includes/freedombox-single-sign-on.conf
|
|
||||||
<IfModule mod_auth_pubtkt.c>
|
|
||||||
TKTAuthToken "admin"
|
|
||||||
</IfModule>
|
|
||||||
</Location>
|
|
||||||
@ -1 +0,0 @@
|
|||||||
#plinth.modules.repro
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<service>
|
|
||||||
<short>Real-time Transport Protocol</short>
|
|
||||||
<description>RTP is a protocol for delivering real-time data such as audio and video. Enable this if you run an internet telephony server using XMPP, SIP or H.323 and wish to enable audio and video communications.</description>
|
|
||||||
<port protocol="udp" port="1024-65535"/>
|
|
||||||
</service>
|
|
||||||
@ -1,90 +0,0 @@
|
|||||||
#
|
|
||||||
# This file is part of FreedomBox.
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
|
|
||||||
from plinth.modules.backups.api import validate as validate_backup
|
|
||||||
from plinth.clients import store_url, validate
|
|
||||||
|
|
||||||
_jitsi_package_id = 'org.jitsi.meet'
|
|
||||||
_csipsimple_package_id = 'com.csipsimple'
|
|
||||||
|
|
||||||
_jitsi_download_url = 'https://download.jitsi.org/jitsi/'
|
|
||||||
|
|
||||||
clients = validate([{
|
|
||||||
'name':
|
|
||||||
_('Jitsi Meet'),
|
|
||||||
'description':
|
|
||||||
_('Jitsi is a set of open-source projects that allows '
|
|
||||||
'you to easily build and deploy secure '
|
|
||||||
'videoconferencing solutions. At the heart of Jitsi '
|
|
||||||
'are Jitsi Videobridge and Jitsi Meet, which let you '
|
|
||||||
'have conferences on the internet, while other '
|
|
||||||
'projects in the community enable other features '
|
|
||||||
'such as audio, dial-in, recording, '
|
|
||||||
'and simulcasting.'),
|
|
||||||
'platforms': [{
|
|
||||||
'type': 'store',
|
|
||||||
'os': 'android',
|
|
||||||
'store_name': 'google-play',
|
|
||||||
'url': store_url('google-play', _jitsi_package_id)
|
|
||||||
}, {
|
|
||||||
'type': 'store',
|
|
||||||
'os': 'ios',
|
|
||||||
'store_name': 'app-store',
|
|
||||||
'url': 'https://itunes.apple.com/in/app/jitsi-meet/id1165103905'
|
|
||||||
}, {
|
|
||||||
'type': 'download',
|
|
||||||
'os': 'gnu-linux',
|
|
||||||
'url': _jitsi_download_url
|
|
||||||
}, {
|
|
||||||
'type': 'package',
|
|
||||||
'format': 'deb',
|
|
||||||
'name': 'jitsi'
|
|
||||||
}, {
|
|
||||||
'type': 'download',
|
|
||||||
'os': 'macos',
|
|
||||||
'url': _jitsi_download_url
|
|
||||||
}, {
|
|
||||||
'type': 'download',
|
|
||||||
'os': 'windows',
|
|
||||||
'url': _jitsi_download_url
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
'name':
|
|
||||||
_('CSipSimple'),
|
|
||||||
'platforms': [{
|
|
||||||
'type': 'store',
|
|
||||||
'os': 'android',
|
|
||||||
'store_name': 'google-play',
|
|
||||||
'url': store_url('google-play', _csipsimple_package_id)
|
|
||||||
}]
|
|
||||||
}])
|
|
||||||
|
|
||||||
backup = validate_backup({
|
|
||||||
'config': {
|
|
||||||
'files': ['/etc/repro/repro.config', '/etc/repro/users.txt']
|
|
||||||
},
|
|
||||||
'data': {
|
|
||||||
'directories': ['/var/lib/repro/']
|
|
||||||
},
|
|
||||||
'secrets': {
|
|
||||||
'directories': ['/etc/repro/ssl/'],
|
|
||||||
'files': ['/etc/repro/dh2048.pem']
|
|
||||||
},
|
|
||||||
'services': ['repro']
|
|
||||||
})
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
#
|
|
||||||
# This file is part of FreedomBox.
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
"""
|
|
||||||
URLs for the repro module.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from django.conf.urls import url
|
|
||||||
|
|
||||||
from plinth.modules.repro import ReproAppView
|
|
||||||
|
|
||||||
urlpatterns = [
|
|
||||||
url(r'^apps/repro/$', ReproAppView.as_view(), name='index'),
|
|
||||||
]
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.7 KiB |
@ -1,282 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
xmlns:ns6="http://ns.adobe.com/SaveForWeb/1.0/"
|
|
||||||
xmlns:ns5="http://ns.adobe.com/Variables/1.0/"
|
|
||||||
xmlns:ns4="http://ns.adobe.com/AdobeIllustrator/10.0/"
|
|
||||||
xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
ns4:viewOrigin="118.9321 582.0679"
|
|
||||||
ns4:rulerOrigin="0 0"
|
|
||||||
ns4:pageBounds="0 612 792 0"
|
|
||||||
width="512"
|
|
||||||
height="512"
|
|
||||||
viewBox="0 0 512.00001 512.00001"
|
|
||||||
overflow="visible"
|
|
||||||
enable-background="new 0 0 552.068 552.068"
|
|
||||||
xml:space="preserve"
|
|
||||||
version="1.1"
|
|
||||||
id="svg959"
|
|
||||||
sodipodi:docname="repro.svg"
|
|
||||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
|
||||||
style="overflow:visible"><defs
|
|
||||||
id="defs963" /><sodipodi:namedview
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1"
|
|
||||||
objecttolerance="10"
|
|
||||||
gridtolerance="10"
|
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="1853"
|
|
||||||
inkscape:window-height="1527"
|
|
||||||
id="namedview961"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="1.2552161"
|
|
||||||
inkscape:cx="273.58331"
|
|
||||||
inkscape:cy="216.38186"
|
|
||||||
inkscape:window-x="1391"
|
|
||||||
inkscape:window-y="256"
|
|
||||||
inkscape:window-maximized="0"
|
|
||||||
inkscape:current-layer="g955"
|
|
||||||
fit-margin-top="0"
|
|
||||||
fit-margin-left="0"
|
|
||||||
fit-margin-right="0"
|
|
||||||
fit-margin-bottom="0" />
|
|
||||||
<metadata
|
|
||||||
id="metadata834">
|
|
||||||
<ns5:variableSets>
|
|
||||||
<ns5:variableSet
|
|
||||||
varSetName="binding1"
|
|
||||||
locked="none">
|
|
||||||
<ns5:variables />
|
|
||||||
<ns5:sampleDataSets />
|
|
||||||
</ns5:variableSet>
|
|
||||||
</ns5:variableSets>
|
|
||||||
<ns6:sfw>
|
|
||||||
<ns6:slices />
|
|
||||||
<ns6:sliceSourceBounds
|
|
||||||
y="30"
|
|
||||||
x="118.932"
|
|
||||||
width="552.068"
|
|
||||||
height="552.068"
|
|
||||||
bottomLeftOrigin="true" />
|
|
||||||
</ns6:sfw>
|
|
||||||
<rdf:RDF><cc:Work
|
|
||||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
|
|
||||||
<g
|
|
||||||
id="g955"
|
|
||||||
ns4:extraneous="self"
|
|
||||||
transform="translate(-6.375,65.079994)">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<g
|
|
||||||
id="g900"
|
|
||||||
transform="matrix(0.94146202,0,0,0.94146202,0.3731808,-71.332713)">
|
|
||||||
|
|
||||||
<linearGradient
|
|
||||||
id="XMLID_6_"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="102.3462"
|
|
||||||
y1="279.3511"
|
|
||||||
x2="414.00629"
|
|
||||||
y2="279.3511"
|
|
||||||
gradientTransform="matrix(-1,0,0,1,535.6377,0)">
|
|
||||||
<stop
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#FFFFFF"
|
|
||||||
id="stop877" />
|
|
||||||
<stop
|
|
||||||
offset="0.0028"
|
|
||||||
style="stop-color:#FEFEFE"
|
|
||||||
id="stop879" />
|
|
||||||
<stop
|
|
||||||
offset="0.1595"
|
|
||||||
style="stop-color:#BCBCBC"
|
|
||||||
id="stop881" />
|
|
||||||
<stop
|
|
||||||
offset="0.3135"
|
|
||||||
style="stop-color:#828282"
|
|
||||||
id="stop883" />
|
|
||||||
<stop
|
|
||||||
offset="0.4609"
|
|
||||||
style="stop-color:#545454"
|
|
||||||
id="stop885" />
|
|
||||||
<stop
|
|
||||||
offset="0.6005"
|
|
||||||
style="stop-color:#2F2F2F"
|
|
||||||
id="stop887" />
|
|
||||||
<stop
|
|
||||||
offset="0.7302"
|
|
||||||
style="stop-color:#151515"
|
|
||||||
id="stop889" />
|
|
||||||
<stop
|
|
||||||
offset="0.8466"
|
|
||||||
style="stop-color:#060606"
|
|
||||||
id="stop891" />
|
|
||||||
<stop
|
|
||||||
offset="0.9382"
|
|
||||||
style="stop-color:#000000"
|
|
||||||
id="stop893" />
|
|
||||||
<a:midPointStop
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#FFFFFF" />
|
|
||||||
<a:midPointStop
|
|
||||||
offset="0.3434"
|
|
||||||
style="stop-color:#FFFFFF" />
|
|
||||||
<a:midPointStop
|
|
||||||
offset="0.9382"
|
|
||||||
style="stop-color:#000000" />
|
|
||||||
</linearGradient>
|
|
||||||
<path
|
|
||||||
d="m 121.631,322.3 h 311.66 v -85.899 h -311.66 z"
|
|
||||||
id="path896"
|
|
||||||
style="fill:url(#XMLID_6_)"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<path
|
|
||||||
d="M 123.35,194.059 V 362.412 L 6.375,279.689 Z"
|
|
||||||
id="path898"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g926"
|
|
||||||
transform="matrix(0.94146202,0,0,0.94146202,0.3731808,-71.332713)">
|
|
||||||
<linearGradient
|
|
||||||
id="XMLID_7_"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="123.293"
|
|
||||||
y1="363.85889"
|
|
||||||
x2="434.95361"
|
|
||||||
y2="363.85889">
|
|
||||||
<stop
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#FFFFFF"
|
|
||||||
id="stop903" />
|
|
||||||
<stop
|
|
||||||
offset="0.0028"
|
|
||||||
style="stop-color:#FEFEFE"
|
|
||||||
id="stop905" />
|
|
||||||
<stop
|
|
||||||
offset="0.1595"
|
|
||||||
style="stop-color:#BCBCBC"
|
|
||||||
id="stop907" />
|
|
||||||
<stop
|
|
||||||
offset="0.3135"
|
|
||||||
style="stop-color:#828282"
|
|
||||||
id="stop909" />
|
|
||||||
<stop
|
|
||||||
offset="0.4609"
|
|
||||||
style="stop-color:#545454"
|
|
||||||
id="stop911" />
|
|
||||||
<stop
|
|
||||||
offset="0.6005"
|
|
||||||
style="stop-color:#2F2F2F"
|
|
||||||
id="stop913" />
|
|
||||||
<stop
|
|
||||||
offset="0.7302"
|
|
||||||
style="stop-color:#151515"
|
|
||||||
id="stop915" />
|
|
||||||
<stop
|
|
||||||
offset="0.8466"
|
|
||||||
style="stop-color:#060606"
|
|
||||||
id="stop917" />
|
|
||||||
<stop
|
|
||||||
offset="0.9382"
|
|
||||||
style="stop-color:#000000"
|
|
||||||
id="stop919" />
|
|
||||||
<a:midPointStop
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#FFFFFF" />
|
|
||||||
<a:midPointStop
|
|
||||||
offset="0.3434"
|
|
||||||
style="stop-color:#FFFFFF" />
|
|
||||||
<a:midPointStop
|
|
||||||
offset="0.9382"
|
|
||||||
style="stop-color:#000000" />
|
|
||||||
</linearGradient>
|
|
||||||
<path
|
|
||||||
d="M 434.954,406.808 H 123.293 v -85.899 h 311.661 z"
|
|
||||||
id="path922"
|
|
||||||
style="fill:url(#XMLID_7_)"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<path
|
|
||||||
d="M 433.235,278.567 V 446.92 L 550.21,364.197 Z"
|
|
||||||
id="path924"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g952"
|
|
||||||
transform="matrix(0.94146202,0,0,0.94146202,0.3731808,-71.332713)">
|
|
||||||
<linearGradient
|
|
||||||
id="XMLID_8_"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="123.293"
|
|
||||||
y1="195.4897"
|
|
||||||
x2="434.95361"
|
|
||||||
y2="195.4897">
|
|
||||||
<stop
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#FFFFFF"
|
|
||||||
id="stop929" />
|
|
||||||
<stop
|
|
||||||
offset="0.0028"
|
|
||||||
style="stop-color:#FEFEFE"
|
|
||||||
id="stop931" />
|
|
||||||
<stop
|
|
||||||
offset="0.1595"
|
|
||||||
style="stop-color:#BCBCBC"
|
|
||||||
id="stop933" />
|
|
||||||
<stop
|
|
||||||
offset="0.3135"
|
|
||||||
style="stop-color:#828282"
|
|
||||||
id="stop935" />
|
|
||||||
<stop
|
|
||||||
offset="0.4609"
|
|
||||||
style="stop-color:#545454"
|
|
||||||
id="stop937" />
|
|
||||||
<stop
|
|
||||||
offset="0.6005"
|
|
||||||
style="stop-color:#2F2F2F"
|
|
||||||
id="stop939" />
|
|
||||||
<stop
|
|
||||||
offset="0.7302"
|
|
||||||
style="stop-color:#151515"
|
|
||||||
id="stop941" />
|
|
||||||
<stop
|
|
||||||
offset="0.8466"
|
|
||||||
style="stop-color:#060606"
|
|
||||||
id="stop943" />
|
|
||||||
<stop
|
|
||||||
offset="0.9382"
|
|
||||||
style="stop-color:#000000"
|
|
||||||
id="stop945" />
|
|
||||||
<a:midPointStop
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#FFFFFF" />
|
|
||||||
<a:midPointStop
|
|
||||||
offset="0.3434"
|
|
||||||
style="stop-color:#FFFFFF" />
|
|
||||||
<a:midPointStop
|
|
||||||
offset="0.9382"
|
|
||||||
style="stop-color:#000000" />
|
|
||||||
</linearGradient>
|
|
||||||
<path
|
|
||||||
d="M 434.954,238.439 H 123.293 V 152.54 h 311.661 z"
|
|
||||||
id="path948"
|
|
||||||
style="fill:url(#XMLID_8_)"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<path
|
|
||||||
d="M 433.235,110.198 V 278.55 L 550.21,195.827 Z"
|
|
||||||
id="path950"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 6.7 KiB |
Loading…
x
Reference in New Issue
Block a user